我的做法: 1.单据保存后即时更新材料分仓库存数据,用户可随时查到实数; 2.库存月结过程我放在代码中进行,没有使用临时表,而且不是用SQL语句执行计价逻辑, 我发觉有关逻辑性的问题,用SQL语句不好写,除错难.用代码写则刚好相反; 材料结账过程:清理开始日期以后账行>承接上期数据初始本期初账行>处理本期单据到新账行>执行计价>写账到数据库; a.清理账行(SQL) b.初始期初(SQL) c.处理单据(读取本期单据类,按单据写库存类别写本期增加或本期减少账行,写账) d.计价(读取本期库存账本类,进行一次循环计价(本期数据按材料ID已排序好,所以一次循环就可以计价完毕) e.写账(SQL)C和D过程是需要逻辑的,尤期是D过程,用纯SQL过程难写,我觉得用本地类来维护比较清淅,但是慢点; 这两个过程会随着材料账行总量增加而运算时间增加,原因是循环数增大了!C过程执行了一个从客户机到服务器一程写账,损耗时间,本来这个过程可以省掉,直到E过程才写账, 但这是为了D过程能进行一次单循环准备的,我要借助数据库对材料按材料ID排好序,省掉C过程则D过程计价将如下: for each oProduct in Products'循环材料 for each oAccount in oAccounts'循环本期账行 if oAccount.ProductId=oProduct.ProductId then tAccounts.add oAccount'获取计价对象 oAccounts.Remove oAccount.key'清除已得到的计价对象账行,以减少下一材料对象的循环数 end if next call CalculatePrice(tAccounts)'计价 next如果有C过程则D过程计价将如下: for each oAccount in oAccounts if iProductId=0 then set tAccounts=new Collection '重置计价对象 tAccounts.add oAccount '获取计价对象 else if iProductId=oAccount.ProductId then tAccounts.add oAccount '获取计价对象 else Call CalculatePrice(tAccounts) '计价 set tAccounts=new collection '重置计价对象 tAccounts.add oAccount '获取计价对象 end if end if iProductId=oAccount.ProductId '记录当前材料对象 nextCall CalculatePrice(tAccounts) '执行最后一组退出循环计价需然前者过程比后者代码简单,但后者却是一次循环比前者多次循环快好几倍.如果大家的SQL语句写得好,请贴上来讨论一下!
我最近学习VS2008,里面的LINQ可以对任何集合类排序,不知性能象不象SQL SERVER 对数据行排序一样快速呢,大家有无研究? 如何这个执行快的话,我相信库存月结可以执行的更快些.
帮同学找个人做毕设。
有没有人接做毕业设计的,VB + ACESS/SQL 都可以,工钱 面义 有意思的 发小信息给我!!!
1.库存每月结账;
2.采用全月加权平均计价方式;
3.当出现库存负金额时,采取期末自动损益调整;
4.我做的电子厂,原材料很多,有一万种,做库存月结用时为20~40秒(P4 3.0HZ/521M);请问几个问题,大家讨论一下:
1.你们查询材料可用库存量是否要等到月结后才可获知;2.我个人觉得全月加权平均成本计价法特别适用电脑管理产品材料计价,
因为用户平时可先开领料后补采购入货或先开销售发货再开生产完工入库,
这就使工作变得灵活.还有程式代码设计逻辑相对简单,运算速度快.
请你们说说自已的方法优点;3.为什么会出现负库存金额,一个直接原因是用户开了出库单而没有在当期补入库单,
他们依赖等到盘点时发现问题再补盘盈亏;还有就是除数本身除不尽的问题,有微小偏差;
你们认为应是否允许负库存,说说见解?4.你们设计月结程式使用临时表吗,何种类型,过程在代码中还是在服务器存储过程中?
A:需要。2.材料收发你们是用那种计价方式?
A:移动加权平均或简单加权平均方法。3.当库存帐结余出现负金额时,你们是如何处理的?
A:一般情况下系统是不允许出现这样情况的。即使出现负金额的情况,可以通过系统自动调平,具体方法因厂而异。4.十万种材料月结帐,你们如果用平均计价法,那结财过程要用多长时间?
A:这要看你SQL语句的效率。我的经验是10万种材料结帐最多几秒钟(硬件配置只要是最近5年内买的都行。)=================================================
请问几个问题,大家讨论一下:
1.你们查询材料可用库存量是否要等到月结后才可获知;
A:不用,那样滞后太慢了,肯定是任何一天都可以查实时库存。2.我个人觉得全月加权平均成本计价法特别适用电脑管理产品材料计价,
因为用户平时可先开领料后补采购入货或先开销售发货再开生产完工入库,
这就使工作变得灵活.还有程式代码设计逻辑相对简单,运算速度快.
请你们说说自已的方法优点;
A:这种方法不可取,先出库再入库会导致系统容易出错,库存为负就更加是经常的事情了。
最好的办法还是严格按照先入库再出库,这样管理才可能到位。3.为什么会出现负库存金额,一个直接原因是用户开了出库单而没有在当期补入库单,
他们依赖等到盘点时发现问题再补盘盈亏;还有就是除数本身除不尽的问题,有微小偏差;
你们认为应是否允许负库存,说说见解?
A:肯定是不允许的,为了确保每天都能看到准确库存,肯定是先入库再出库,这个是原则。
请注意,用管理系统是不光是为了提高工作效率,还要能提高管理水平,养成先入后出的习惯并不会带来工作效率低下。4.你们设计月结程式使用临时表吗,何种类型,过程在代码中还是在服务器存储过程中?
A:不用临时表,用存储过程就可以实现。
1.单据保存后即时更新材料分仓库存数据,用户可随时查到实数;
2.库存月结过程我放在代码中进行,没有使用临时表,而且不是用SQL语句执行计价逻辑,
我发觉有关逻辑性的问题,用SQL语句不好写,除错难.用代码写则刚好相反;
材料结账过程:清理开始日期以后账行>承接上期数据初始本期初账行>处理本期单据到新账行>执行计价>写账到数据库;
a.清理账行(SQL)
b.初始期初(SQL)
c.处理单据(读取本期单据类,按单据写库存类别写本期增加或本期减少账行,写账)
d.计价(读取本期库存账本类,进行一次循环计价(本期数据按材料ID已排序好,所以一次循环就可以计价完毕)
e.写账(SQL)C和D过程是需要逻辑的,尤期是D过程,用纯SQL过程难写,我觉得用本地类来维护比较清淅,但是慢点;
这两个过程会随着材料账行总量增加而运算时间增加,原因是循环数增大了!C过程执行了一个从客户机到服务器一程写账,损耗时间,本来这个过程可以省掉,直到E过程才写账,
但这是为了D过程能进行一次单循环准备的,我要借助数据库对材料按材料ID排好序,省掉C过程则D过程计价将如下:
for each oProduct in Products'循环材料
for each oAccount in oAccounts'循环本期账行
if oAccount.ProductId=oProduct.ProductId then
tAccounts.add oAccount'获取计价对象
oAccounts.Remove oAccount.key'清除已得到的计价对象账行,以减少下一材料对象的循环数
end if
next
call CalculatePrice(tAccounts)'计价
next如果有C过程则D过程计价将如下:
for each oAccount in oAccounts
if iProductId=0 then
set tAccounts=new Collection '重置计价对象
tAccounts.add oAccount '获取计价对象
else
if iProductId=oAccount.ProductId then
tAccounts.add oAccount '获取计价对象
else
Call CalculatePrice(tAccounts) '计价
set tAccounts=new collection '重置计价对象
tAccounts.add oAccount '获取计价对象
end if
end if
iProductId=oAccount.ProductId '记录当前材料对象
nextCall CalculatePrice(tAccounts) '执行最后一组退出循环计价需然前者过程比后者代码简单,但后者却是一次循环比前者多次循环快好几倍.如果大家的SQL语句写得好,请贴上来讨论一下!
如何这个执行快的话,我相信库存月结可以执行的更快些.
1.如果不允许负库存,是否作出库单时要采用悲观锁定相应材料行?这对多用户状态下影响几何?
2.如果生产部工作繁重需要预制作材料A出库单,而材料还在途(10天后到货),那我们是要效能还是要一直等到材料验收入库后才能制作出库单?
同理销售部接获通知未来几天停电或系统停机检修,那可否按订单出货计划预制销售发货单呢,还是要等生产部产品完工QC入库后?
如何写SQL过程几秒种完成10万行材料计价,我用类写2万行都要40秒,已经优化的极限了,只从数据库读一次写一次;
如果用储存过程一定可以加快,就是节省了网络数据包打包传送过程,实现在服务器本机通信;
其它步骤都可以直接insert和update,就是计价过程加帐额自动调整因为涉及逻辑分解,
根本没办法单用SQL组合语句完成,也是必须使用服务器SQL临时表循环材料行计价!
我估计用我的方式10万行结帐要8分钟(p4 3.0HZ/1G),主要是新计好价的帐行更新用时就用了9成时间;
主要是写帐过程耗时最大,我已经没用临时表,而直接用SQL UPDATE语句;
我真是很想知道储存过程的威力是不是可以3~5秒内完成;
你能给我段SQL写法例子吗?