递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 3607|回复: 16
打印 上一主题 下一主题

[视窗] 请教大佬,进销存的库存是怎么做的?

[复制链接]

23

主题

87

帖子

725

积分

高级会员

Rank: 4

积分
725
跳转到指定楼层
楼主
发表于 2024-1-18 12:55:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
求一个思路,没有经验,给自己写了一个小的进销存,用了三个表,一个入库表,一个出库表,一个库存表,操作的时候就是入库或者出库的时候修改库存表,但是老是有一些莫名其妙的问题,比如修改入库或出库的时候,库存数量对不上了,但是又不是每次都会出错,只是很少的时候会出错,没有错误提示,查不出来问题,所以放弃这种方法了。
现在用另一种方法,建两个表,一个入库表,一个出库表,显示库存就用入库数减出库数,暂时没问题,但是但心今后数据多了以后,cha询整个入库或出库会用时比较久。



我知道有个期初数期未数的叫法,但是不知道怎么用到程序里。

请教你们一般是怎么处理这个问题的?

谢谢!




回复

使用道具 举报

4

主题

53

帖子

277

积分

中级会员

Rank: 3Rank: 3

积分
277
17#
发表于 2024-1-20 01:47:44 | 只看该作者
有没有想过用一张表?可能会更好实现哦~~~~~
回复

使用道具 举报

23

主题

87

帖子

725

积分

高级会员

Rank: 4

积分
725
16#
 楼主| 发表于 2024-1-19 16:20:21 | 只看该作者
4899 发表于 2024-1-19 15:48
用事务,生效入库单/出库单的时候,对应修改库存表,修改成功 入库单/出库单 标记已生效,修改库存失败,事 ...

嗯,我开始就是这样做,下面放了一段代码。
我找不出原因,算了不找了,用另外的方法,不用库存表保存库存了,用入库减出库计算库存。

我就想知道别人一般是怎么做的,如果时间长了,数据量肯定会很大,不知道到时候会不会计算很慢。
回复

使用道具 举报

23

主题

87

帖子

725

积分

高级会员

Rank: 4

积分
725
15#
 楼主| 发表于 2024-1-19 16:16:38 | 只看该作者
wangvoldp 发表于 2024-1-19 13:09
你理解错事务了, 事务相当于锁, 事务开始时其他线程或进程无法操作这个表, 直到事务解除占用,
你上面代码 ...

<火山程序 类型 = "通常" 版本 = 1 />

开始事务 ()
计次循环 (表格1.行数 - 1)
{
   
    变量 库存数 <类型 = 小数>
   
    i = 取循环索引 () + 1
   
    库存数 = 文本到小数 (表格1.取文本数据 (i, 8)) - 文本到小数 (表格1.取文本数据 (i, 4))
   
    SQL = "update 产品信息表 set 库存 ='" + 到文本 (库存数) + "' where 条码 = " + 条码
    如果 (全局操作类.成员_Sqlite数据库.执行SQL语句 (SQL, ) != SQLite执行结果.成功)
    {
        信息框 ("修改库存数失败! ")
        回滚事务 ()

    }






    SQL = "insert into 送货单表 (日期,单号,条码,产品名称,数量箱,客户名称,库存数) values ('" + 日期 + "','" + 单号 + "','" + 条码 + "','" + 产品名称 + "','" + 数量箱 + "','" + 客户名称 + "','" + 到文本 (库存数) + "')"
    如果 (全局操作类.成员_Sqlite数据库.执行SQL语句 (SQL, ) != SQLite执行结果.成功)
    {
        信息框 ("保存失败! ", 信息框按钮.错误图标)
        回滚事务 ()


    }

}
信息框 ("保存成功!", 信息框按钮.信息图标)

保存事务 ()


//我上面只截取了一小段,这个完整一点,应该是没有用错的吧。
我出现的那个错误呢,概率比较低,不是每次都会出错,有时候一个月也不会错,所以不好找问题。

谢谢回复。
回复

使用道具 举报

16

主题

262

帖子

1484

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1484
14#
发表于 2024-1-19 15:48:08 | 只看该作者
用事务,生效入库单/出库单的时候,对应修改库存表,修改成功 入库单/出库单 标记已生效,修改库存失败,事务回滚,提示错误,同时 入库单/出库单 不标记已生效。
回复

使用道具 举报

23

主题

316

帖子

1465

积分

金牌会员

Rank: 6Rank: 6

积分
1465
13#
发表于 2024-1-19 13:09:30 | 只看该作者
liuyong886 发表于 2024-1-19 12:56
库存数 = 文本到小数 (表格1.取文本数据 (i, 8)) - 文本到小数 (表格1.取文本数据 (i, 4))

SQL = "upda ...

你理解错事务了, 事务相当于锁, 事务开始时其他线程或进程无法操作这个表, 直到事务解除占用,
你上面代码中存在 库存 = 库存数, 你应该这样 库存 = 库存 - 1, 因为单条sql语句被执行时,也相当于事务再运行
如果用事务步骤如下
事务开始
  库存数 = 取出库存数
  库存数 = 库存数 - 1
  更新库存数 = 库存数
事务提交

上面这些语句都需要再事务中运行, 如果你在事务外面取出了库存数, 表是解锁状态,此时其他用户也操作了库存数, 那你刚取出的库存数还是老的,你再写入不就对不上了,
事务相当于锁, 进入事务后他会锁住, 其他用户再来操作都得排队等待, 直到我的事务完成了,你们再来操作
回复

使用道具 举报

23

主题

87

帖子

725

积分

高级会员

Rank: 4

积分
725
12#
 楼主| 发表于 2024-1-19 13:06:31 | 只看该作者
wangvoldp 发表于 2024-1-19 12:19
1.用事务, 在事务中同时操作 出库表 和 库存表, 失败就回滚, 事务会锁表
2.直接用sql的加减, 不要自己 ...

一开始是有用到事务,一份表10条记录,有可能有一条没有修改成功,但是也没有提示。
回复

使用道具 举报

23

主题

87

帖子

725

积分

高级会员

Rank: 4

积分
725
11#
 楼主| 发表于 2024-1-19 13:04:46 | 只看该作者
kingsoft 发表于 2024-1-18 21:59
cha询的时候就要重新计算一次!

我样的话时间久了,数据量大了,速度就会慢了吧。
回复

使用道具 举报

23

主题

87

帖子

725

积分

高级会员

Rank: 4

积分
725
10#
 楼主| 发表于 2024-1-19 13:03:04 | 只看该作者
chenfeng0614 发表于 2024-1-19 10:55
用视图,具体用法百度搜索。

嗯嗯。谢谢。
回复

使用道具 举报

23

主题

87

帖子

725

积分

高级会员

Rank: 4

积分
725
9#
 楼主| 发表于 2024-1-19 13:01:45 | 只看该作者
阿杰 发表于 2024-1-19 09:00
库存表不用创建,建个商品表就行
用SQL语句,以商品表进行计算库存,库存=进货数量-销售数量
这是个思路

成员_Sqlite记录集2 = 全局操作类.成员_Sqlite数据库.取记录集 ("select (select sum(a.数量箱)from 入库明细表 a where a.条码='" + 成员_Sqlite记录集.读文本数据 (0) + "')-(select sum(b.数量箱)from 送货单表 b where b.条码='" + 成员_Sqlite记录集.读文本数据 (0) + "') as 库存数", )


我现在就是这样做的,这样暂时没有问题,但是,如果时间久了或者数据多了怎么办?如果几年后呢,显示库存的时候也要把几年前的一起统计了。

我知道有个期末的说法,但是不知道怎么用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-15 01:35 , Processed in 0.090689 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表