求助:利用VB代码,按照记录先后顺序统计数据

liu0958 2017-07-19 07:38:34
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)显示

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



...全文
471 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu0958 2017-08-01
  • 打赏
  • 举报
回复
是本人vb知识水平太低?还是本问题难度大?期待得到一个满意的答案
liu0958 2017-07-29
  • 打赏
  • 举报
回复
引用 6 楼 chewinggum 的回复:
那就是入库批次按时间排序,出库的时候 逐一出库记录拉出来。 dim 累加出库金额 for i= 1 to 出库数量小于入库记录条数 if 入库记录 i的(入库数量-出库数量) 小于等于出库数量 出库数量=出库数量-入库记录i的入库数量 入库记录i标记出库数量=入库数量 累加出库金额 = 累加出库金额额 + 入库金额 else 入库记录i标记出库数量= 入库记录i标记出库数量 + 出库数量 出库数量=0 累加出库金额 = 累加出库金额 + 出库数量* 入库记录i的单价 退出循环 end if next 输出累加出库金额
你好老师,由于对vb代码编写还研究的不透,您的这个方式,用代码如何编写呢,谢谢
liu0958 2017-07-23
  • 打赏
  • 举报
回复
引用 4 楼 chewinggum 的回复:
没理解,为啥一定要按顺序,直接某一时间段的流水拉出来,累加轧差一下就完事了,不需要管顺序吧
因为每个入库批次的价格可能不同,目的是做到先进先出,然后统计出库存额
脆皮大雪糕 2017-07-23
  • 打赏
  • 举报
回复
那就是入库批次按时间排序,出库的时候 逐一出库记录拉出来。 dim 累加出库金额 for i= 1 to 出库数量小于入库记录条数 if 入库记录 i的(入库数量-出库数量) 小于等于出库数量 出库数量=出库数量-入库记录i的入库数量 入库记录i标记出库数量=入库数量 累加出库金额 = 累加出库金额额 + 入库金额 else 入库记录i标记出库数量= 入库记录i标记出库数量 + 出库数量 出库数量=0 累加出库金额 = 累加出库金额 + 出库数量* 入库记录i的单价 退出循环 end if next 输出累加出库金额
脆皮大雪糕 2017-07-22
  • 打赏
  • 举报
回复
没理解,为啥一定要按顺序,直接某一时间段的流水拉出来,累加轧差一下就完事了,不需要管顺序吧
liu0958 2017-07-21
  • 打赏
  • 举报
回复
在使用excel中用vba代码,单纯的以递进的方式查找和计算,可以很轻松的达到效果,分享一下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
liu0958 2017-07-20
  • 打赏
  • 举报
回复
引用 1 楼 of123 的回复:
呵呵,居然是非线性的数据库表。
刚接触vb,很多东西都是仿照一些示例边做边学,期待得到老司机们的指教
of123 2017-07-20
  • 打赏
  • 举报
回复
呵呵,居然是非线性的数据库表。

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧