标题:求助:利用VB代码,按照记录先后顺序统计数据
取消只看楼主
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
结帖率:40%
已结贴  问题点数:20 回复次数:8 
求助:利用VB代码,按照记录先后顺序统计数据
mf1   为显示控件MSFlexGrid名称
db_sjk.mdb  为access数据库
tb_in  为数据表,“商品名称”、“入库数量”、“入库单价”为字段名

数据库链接:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db_sjk.mdb;Persist Security Info=False

求助问题:

利用VB代码,根据出库单mf1.TextMatrix(i, 2)的“商品名称”,mf1.TextMatrix(i, 3)的“数量”,从“tb_in 数据表”中,按照商品入库登记先后顺序,统计同名商品的出库总额,在mf1.TextMatrix(i, 4)显示

出库总额的计算,是按照商品入库登记先后顺序的“入库数量”*“入库单价”(如图例)

搜索更多相关主题的帖子: VB 代码 顺序 统计 商品 
2017-07-19 19:41
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
得分:0 
回复 2楼 ZHRXJR
谢谢老师,我是刚接触学习vb,很多都是在仿照一些示例边学边做,期待能得到您的指教
2017-07-20 12:03
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
得分:0 
回复 6楼 xzlxzlxzl
在使用excel中用vba代码,单纯的以递进的方式查找和计算,可以很轻松的达到效果,由于对vb的语句还不熟悉,所以找不到方法,
2017-07-21 20:42
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
得分:0 
分享一下vba的查询和统计代码,不知是否能作参考

Sub lqxs()

 Dim arr, j&, i&, brr, aa, sl, je, zje, ca
  Dim d, k, t, tt
  Set d = CreateObject("scripting.dictionary")
  Sheet1.Activate
  [d4:d20].ClearContents
 arr = Sheet4.[a1].CurrentRegion
    For i = 3 To UBound(arr)
    d(arr(i, 2)) = d(arr(i, 2)) & i & ","
    Next
    k = d.keys: t = d.items
    brr = [a1].CurrentRegion
    For i = 4 To UBound(brr)
    If brr(i, 2) <> "" Then
    sl = brr(i, 3)
    zje = 0
    If d.exists(brr(i, 2)) Then
    tt = d(brr(i, 2))
    tt = Left(tt, Len(tt) - 1)
  
    aa = Split(tt, ",")
    For j = 0 To UBound(aa)
    ca = sl - arr(aa(j), 3)
    If ca < 0 Then
    zje = zje + sl * arr(aa(j), 4)
    Exit For
    Else
    zje = zje + arr(aa(j), 3) * arr(aa(j), 4)
    sl = ca
    End If
    Next
    Else
   
    End If
    Cells(i, 4) = zje
    Else
    Exit For
    End If
    Next
    End Sub
2017-07-21 20:43
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
得分:0 
回复 10楼 ZHRXJR
感谢老师的帮助,可能我的求助没表达清楚,

比如A商品
入库数据
第一批次入库数量10,金额210
第二批次入库数量12,金额220
第三批次入库数量15,金额200
   .
   .
   .
不断的录入入库数据库

出库金额计算
第一次出库数量8,出库金额就是8*210=1680
第二次出库数量11,出库金额就是2*210(第一批次剩余数量*单价)+9*220(第二批次数量*单价)=2400
第三次出库数量10,出库金额就是3*220(第二批次剩余数量*单价)+7*200(第三批次数量*单价)=2060
   .
   .
   .
不断的录入出库数据库

这样,在做出库记录的时候,就可以同时计算出A商品的实时剩余库存总额(入库总额-出库金额合计)

关键问题是,要根据每次出库数量,在入库数据库中查找到对应的价格,计算出出库金额,以达到先进先出的目的。

(补充,每次出库数量,可能不会等于每个批次的入库数量)

谢谢


[此贴子已经被作者于2017-7-29 17:27编辑过]

2017-07-29 16:30
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
得分:0 
回复 11楼 xyxcc177
感谢老师的帮助,可能我的求助没表达清楚,

比如A商品
入库数据
第一批次入库数量10,金额210
第二批次入库数量12,金额220
第三批次入库数量15,金额200
   .
   .
   .
不断的录入入库数据库

出库金额计算
第一次出库数量8,出库金额就是8*210=1680
第二次出库数量11,出库金额就是2*210(第一批次剩余数量*单价)+9*220(第二批次数量*单价)=2400
第三次出库数量10,出库金额就是3*220(第二批次剩余数量*单价)+7*200(第三批次数量*单价)=2060
   .
   .
   .
不断的录入出库数据库

这样,在做出库记录的时候,就可以同时计算出A商品的实时剩余库存总额(入库总额-出库金额合计)

关键问题是,要根据每次出库数量,在入库数据库中查找到对应的价格,计算出出库金额,以达到先进先出的目的。

(补充,每次出库数量,可能不会等于每个批次的入库数量)

谢谢
2017-07-29 17:29
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
得分:0 
回复 15楼 xyxcc177
谢谢老师,我看你的思路是将每次出库数量又插入了入库数据表,如果数据量大,就会造成入库数据表过于庞大。

我的思路是,仅根据当次的出库数量,从入库表中查找数量在批次中的单价,或跨批次的单价,结合数量计算得到出库金额即可,

这样,在增加记录时候,只要调出出库数据表中数量的合计加上当次出库数量,再从入库表中查找数量达到的批次或跨批次的单价,计算得到出库金额

同时可以更方便其他数据的计算,谢谢!!
2017-07-30 16:02
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
得分:0 
奇怪,本帖怎么会自动结贴呢,谁能解释一下
2017-08-01 14:26
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
得分:0 
回复 18楼 xyxcc177
谢谢,你给的第二个例子能注释一下吗,把rs.Clone修改成rs.Close,
下面两句也不理解到底是什么意思
strSql = "insert into tb_out(名称,单价,出库数量,出库编号) values('" & mc & "'," & dj & "," & sl & ",'" & outNum & "')"
strSql = "insert into tb_out(名称,单价,出库数量,出库编号) values('" & mc & "'," & dj & "," & out_quantity & ",'" & strNum & "')"

[此贴子已经被作者于2017-8-1 18:36编辑过]

2017-08-01 18:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479491-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083912 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved