Foxtable(狐表)用户栏目专家坐堂 → 低手求助


  共有4708人关注过本帖树形打印复制链接

主题:低手求助

帅哥哟,离线,有人找我吗?
石四
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
低手求助  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/22 11:46:00 [只看该作者]

没有例子,纸上谈兵看得头晕呀.

 回到顶部
帅哥哟,离线,有人找我吗?
石四
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2013/11/22 13:08:00 [只看该作者]

刚才怎么附件没传上?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:仓库结转例子.table


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/22 14:24:00 [只看该作者]

你不是有上月结存这个列吗?

 回到顶部
帅哥哟,离线,有人找我吗?
石四
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2013/11/23 11:07:00 [只看该作者]

以下是引用Bin在2013-11-22 14:24:00的发言:
你不是有上月结存这个列吗?

是有结存这个列,但是每次结转,上月的数据就被清空,如果原来结转8月的数据,下月再结转9月的,8月的报表就被清空了,只有9月的,

我希望8月的报表能保留,9月的是新增行,接上去。


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/23 11:17:00 [只看该作者]

你把清除行代码去除就可以了.

不过这样会带来另外一个问题,不停点击生成会不停追加重复行哦.

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:仓库结转例子.table



 回到顶部
帅哥哟,离线,有人找我吗?
石四
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2013/11/23 11:55:00 [只看该作者]

以下是引用Bin在2013-11-23 11:17:00的发言:
你把清除行代码去除就可以了.

不过这样会带来另外一个问题,不停点击生成会不停追加重复行哦.
-----------------------------
去掉那段代码是可以保存各月份的结存数据,但是结果不正确(如果单独结转是对的,如只结8月份,或只结9月份,结果都正确,但结了8月,再接着结9月,结果就不对,上月结存数会变化)。
代码应该加一句保存结果,但是我不会写。
另外我在月报表增加了“月份”,如何写入结转的那个月份?
dr("月份") =?

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:仓库结转例子.table

[此贴子已经被作者于2013-11-23 11:55:08编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/23 11:59:00 [只看该作者]

.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:仓库结转例子 (1).table


 回到顶部
帅哥哟,离线,有人找我吗?
石四
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:972 积分:7048 威望:0 精华:0 注册:2013/3/31 10:33:00
  发帖心情 Post By:2013/12/14 11:56:00 [只看该作者]

     前面的方法没能解决问题,月结时如不清除之前的数据,结果不正确(结果有叠加).

     现在换个思路,增加一个看板表,每个月末做一次结转,然后将月报表的本月结存复制到看板表.

     现在搞不定:选定的结转月份(比如8月)写入月报表的月份列,然后看板表的月份列等于()8+1)月.

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:仓库结转例子.table

 

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 & "秒")

Dim a As Table = Tables("月报表")
Dim b As Table = Tables("看板")
For r As Integer = 0 To a.Rows.Count - 1
    b.AddNew
    b.Current("上月结存") = a.Rows(r)("本月结存")
    b.Current("月份") = a.Rows(r)("月份")
    b.Current("零件编码") = a.Rows(r)("零件编码")
    b.Current("零件图号") = a.Rows(r)("零件图号")
    b.Current("零件名称") = a.Rows(r)("零件名称")
   
Next
For r As Integer = a.rows.Count - 1 To 0 Step -1
    ' a.rows(r).Delete
Next


 


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By: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

 回到顶部
总数 12 1 2 下一页