标题:求助:利用VB代码,按照记录先后顺序统计数据
只看楼主
xyxcc177
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:26
帖 子:197
专家分:1249
注 册:2017-7-8
得分:5 
   '建议增加一个字段:出库数量’
        Dim adoCon As ADODB.Connection
        Dim rs As ADODB.Recordset
       set adoCon = New ADODB.Connection
       set rs = New ADODB.Recordset
        adoCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db_sjk.mdb;Persist Security Info=False"
        adoCon.Open()
        Dim strSql As String = "SELECT  商品名称,sum(出库数量),sum(入库单价*出库数量) from tb_in group by 商品名称 order by 商品名称"
        rs.Open(strSql, adoCon, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)
        Dim i As Integer
        i = 1
        Do While Not rs.EOF
            mf1.TextMatrix(i, 2) = rs(0).Value
            mf1.TextMatrix(i, 3) = rs(2).Value
            mf1.TextMatrix(i, 4) = rs(3).Value
            rs.MoveNext()
            i = i + 1
        Loop
        rs.Close()
        adoCon.Close()
好长时间动vb了,这是在.net下调试的,试试吧
2017-07-24 07:24
xyxcc177
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:26
帖 子:197
专家分:1249
注 册:2017-7-8
得分:0 
Do While Not rs.EOF
            mf1.TextMatrix(i, 2) = rs(0).Value
            mf1.TextMatrix(i, 3) = rs(1).Value
            mf1.TextMatrix(i, 4) = rs(2).Value
            rs.MoveNext()
            i = i + 1
        Loop
2017-07-24 07:27
时间旅行者
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
xyxcc177
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:26
帖 子:197
专家分:1249
注 册:2017-7-8
得分:0 
Sub outsp()
Dim strsp As String
Dim quantity As Integer
Dim cNum  As String

strsp = "a"  '商品名称
quantity = 3  '数量
cNum="a303"   '出库编号
Call writer_out(strsp, quantity, cNum)

End Sub

Sub writer_out(ByVal mc As String, ByVal sl As Integer, ByVal strNum As String)
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim strCon As String
Dim dj As Double
Dim nCount As Integer
Dim out_quantity As Integer
strCon = "provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db_sjk.ACCDB;Persist Security Info=False"
cn.Open strCon
Dim strSql As String
 
strSql = "select * from tb_in where 名称='" & mc & "' and 库存量>0 order by id"
rs.Open strSql, cn, adOpenKeyset, adLockOptimistic

Do While Not rs.EOF
  nCount = nCount + rs("库存量").Value
  rs.MoveNext
Loop
  rs.MoveFirst
  If sl > nCount Then
  MsgBox "你出库的数量太大!"
  rs.Clone
  cn.Close
  Exit Sub
  End If
  
Do While True
   If sl <= rs("库存量").Value Then
      dj = rs("单价").Value
      strSql = "insert into tb_out(名称,单价,出库数量,出库编号) values('" & mc & "'," & dj & "," & sl & ",'" & outNum & "')"
       cn.Execute strSql
       rs("出库数量").Value = rs("出库数量").Value + sl
       rs("库存量").Value = rs("入库数量").Value - sl
       rs("出库总额").Value = rs("出库数量").Value * rs("单价").Value
       rs("库存余额").Value = rs("库存量").Value * dj
       rs.Update
       Exit Do
       Else
          dj = rs("单价").Value
          out_quantity = rs("库存量").Value
         strSql = "insert into tb_out(名称,单价,出库数量,出库编号) values('" & mc & "'," & dj & "," & out_quantity & ",'" & strNum & "')"
         cn.Execute strSql
        rs("出库数量").Value = rs("出库数量").Value + out_quantity
         sl = sl - rs("库存量").Value
         rs("库存量").Value = 0
          rs("出库总额").Value = rs("出库数量").Value * rs("单价").Value
          rs("库存余额").Value = rs("库存量").Value * dj
      rs.MoveNext
   End If
Loop
  rs.Update
  rs.Clone
  cn.Close
End Sub
db_sjk.rar (11.45 KB)
2017-07-29 20:09
时间旅行者
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-7-1
得分:0 
回复 15楼 xyxcc177
谢谢老师,我看你的思路是将每次出库数量又插入了入库数据表,如果数据量大,就会造成入库数据表过于庞大。

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

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

同时可以更方便其他数据的计算,谢谢!!
2017-07-30 16:02
qq11qq
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-7-30
得分:0 
谢谢
2017-07-30 17:03
xyxcc177
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:26
帖 子:197
专家分:1249
注 册:2017-7-8
得分:0 
这本不是难题,两个例子结合起来能解决吧。
2017-07-31 05:53
时间旅行者
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.379899 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved