以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 低手求助 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=42798) |
||||
-- 作者:石四 -- 发布时间:2013/11/22 11:39:00 -- 低手求助 参考学习如下帖子:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=22963 代码很多看不懂,不过估摸着套用也通过了. 现希望月报表增加月份列,每月结算时上月的数据保留. 低手现在做不出,希望高手相助.
Dim st As Date = Date.Now \'用于计算时间
Dim s As String = e.Form.Controls("月份").Value If s <> "" Then Tables("月报表").StopRedraw() \'停止重绘 DataTables("月报表").DataRows.Clear Dim dt_in As List(Of DataRow) dt_in = DataTables("装箱入库").Select("零件图号 is not null", "零件图号,零件名称,月份") \'排序取出 入仓 全部数据
Dim r As Row
Dim sum_curr_count, sum_prev_count As Integer
r = Tables("月报表").AddNew r("零件图号") = dt_in(0)("零件图号") r("零件名称") = dt_in(0)("零件名称") If dt_in(0)("月份") < s Then \'之前月 sum_prev_count = sum_prev_count + dt_in(0)("入库数量") Else If dt_in(0)("月份") = s Then \'本月份 sum_curr_count = sum_curr_count + dt_in(0)("入库数量") End If
For i As Integer = 1 To dt_in.Count - 1 \'写入型号和规格,同时统计入仓数量和金额 If dt_in(i)("零件图号") <> dt_in(i-1)("零件图号") OrElse dt_in(i)("零件名称") <> dt_in(i-1)("零件名称") Then \'不同产品 r("本月入库") = sum_curr_count r("上月结存") = sum_prev_count \'暂存
r = Tables("月报表").AddNew \'插入新数据 r("零件图号") = dt_in(i)("零件图号") r("零件名称") = dt_in(i)("零件名称")
sum_curr_count = 0 sum_prev_count = 0
End If
If dt_in(i)("月份") < s Then \'之前月 sum_prev_count = sum_prev_count + dt_in(i)("入库数量")
Else If dt_in(i)("月份") = s Then \'本月份
sum_curr_count = sum_curr_count + dt_in(i)("入库数量") End If Next
r("本月入库") = sum_curr_count r("上月结存") = sum_prev_count \'暂存
MessageBox.Show("复制型号和规格耗时: " & (Date.Now - st).TotalSeconds & "秒") st = Date.Now \'用于计算时间
For Each dr As DataRow In DataTables("月报表").DataRows \'填充统计数据 sum_curr_count = 0 \'累计本月出仓数量 sum_prev_count = 0 \'累计之前出仓数量 Dim drs_out As List(Of DataRow) Dim filter As String = "零件图号 = \'" & dr("零件图号") & "\' And 零件名称 = \'" & dr("零件名称") & "\'" drs_out = DataTables("销售出库").Select(filter, "月份") \'排序取出 出仓 全部数据 For Each dr_out As DataRow In drs_out If dr_out("月份") < s Then sum_prev_count = sum_prev_count + dr_out("出库数量") Else If dr_out("月份") = s Then sum_curr_count = sum_curr_count + dr_out("出库数量") Else Exit For End If Next
Dim sum_in_prev_count As Integer = dr("上月结存") \'从表中取出暂存数据
dr("本月出库") = sum_curr_count dr("上月结存") = sum_in_prev_count - sum_prev_count
dr("本月结存") = dr("上月结存") + dr("本月入库") - dr("本月出库")
Next Tables("月报表").ResumeRedraw() End If
MessageBox.Show("统计和写入耗时: " & (Date.Now - st).TotalSeconds & "秒") |
||||
-- 作者:Bin -- 发布时间:2013/11/22 11:46:00 -- 没有例子,纸上谈兵看得头晕呀. |
||||
-- 作者:石四 -- 发布时间:2013/11/22 13:08:00 -- 刚才怎么附件没传上?
|
||||
-- 作者:Bin -- 发布时间:2013/11/22 14:24:00 -- 你不是有上月结存这个列吗? |
||||
-- 作者:石四 -- 发布时间:2013/11/23 11:07:00 -- 以下是引用Bin在2013-11-22 14:24:00的发言:
你不是有上月结存这个列吗? 是有结存这个列,但是每次结转,上月的数据就被清空,如果原来结转8月的数据,下月再结转9月的,8月的报表就被清空了,只有9月的, 我希望8月的报表能保留,9月的是新增行,接上去。 |
||||
-- 作者:Bin -- 发布时间:2013/11/23 11:17:00 -- 你把清除行代码去除就可以了. 不过这样会带来另外一个问题,不停点击生成会不停追加重复行哦. |
||||
-- 作者:石四 -- 发布时间:2013/11/23 11:55:00 -- 以下是引用Bin在2013-11-23 11:17:00的发言:
你把清除行代码去除就可以了. 不过这样会带来另外一个问题,不停点击生成会不停追加重复行哦.
-----------------------------
去掉那段代码是可以保存各月份的结存数据,但是结果不正确(如果单独结转是对的,如只结8月份,或只结9月份,结果都正确,但结了8月,再接着结9月,结果就不对,上月结存数会变化)。
代码应该加一句保存结果,但是我不会写。 另外我在月报表增加了“月份”,如何写入结转的那个月份?
dr("月份") =?
[此贴子已经被作者于2013-11-23 11:55:08编辑过]
|
||||
-- 作者:Bin -- 发布时间:2013/11/23 11:59:00 -- .
|
||||
-- 作者:石四 -- 发布时间:2013/12/14 11:56:00 -- 前面的方法没能解决问题,月结时如不清除之前的数据,结果不正确(结果有叠加). 现在换个思路,增加一个看板表,每个月末做一次结转,然后将月报表的本月结存复制到看板表. 现在搞不定:选定的结转月份(比如8月)写入月报表的月份列,然后看板表的月份列等于()8+1)月.
Dim st As Date = Date.Now \'用于计算时间 Dim s As String = e.Form.Controls("月份").Value \'MessageBox.Show("统计和写入耗时: " & (Date.Now - st).TotalSeconds & "秒") Dim a As Table = Tables("月报表")
|
||||
-- 作者:Bin -- 发布时间:2013/12/14 14:20:00 -- 你转到看板还不是一样重复了? 实在不想重复,只能在添加这一行之前. 利用 FIND查找一次看看是否有相同的行 Dim s As String Dim r As Row = Tables("看板").Current For Each c As Col In Tables("看板").Cols If c.IsNumeric OrElse c.IsBoolean Then s = s & c.Name & "=" & r(c.Name) & " and " Else s= s & c.Name & "=\'" & r(c.Name) & "\' and " End If Next dim dr as datarow = datatables("看板").find(s.Substring(0,s.length-4)) if dr isnot nothing then 没重复,添加 else 有重复,不添加 end if
|