以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多条件自动编号--菜鸟求助  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=28715)

--  作者:youngling
--  发布时间:2013/2/15 21:50:00
--  多条件自动编号--菜鸟求助

菜鸟一枚,研究了帮助文件和论坛相关的帖子,只是还是没有搞定多条件自动编号. 特发帖求助:

 

希望达成目的:

1. 在出库明细表中能够自动生成出库用的送货单号码

2. 送货单号码为送货日期+3位流水号,即YYYYMMDD-XXX,如20130215-001 ,20130215-002 ,20130216-001 ,

3. 同一天同一客户不同产品用同一个送货单号码,

4. 同一天不同客户送货单按每次流水号加1的顺序递增送货单号码,

5. 每天流水号都从001开始一个新的流水号

 

希望达到如下效果

 

客户 产品号            实际送货日期   送货单号码 解释
aa aa11

2月3日

20130203-001 同一客户同一天流水号相同
aa bb11

2月3日

20130203-001 同一客户同一天流水号相同
aa cc11

2月3日

20130203-001 同一客户同一天流水号相同
bb s22

2月3日

20130203-002 不同客户同一天流水号递增
bb d22

2月3日

20130203-002 同一客户同一天流水号相同
cc e11

2月3日

20130203-003 不同客户同一天流水号递增
aa aa11

2月5日

20130205-001 每天流水号从001开始
aa cc11

2月5日

20130205-001  
bb s22

2月5日

20130205-002  
cc e11

2月5日

20130205-003  
aa aa11

2月8日

201302083-001  

 

请各位老师帮忙,忙乎了好几天还是没有搞定,谢谢。

附件是参考论坛弄出来的半成品没有达到想要的效果,请哪位老师好心指点下,谢谢。

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目3.table


--  作者:程兴刚
--  发布时间:2013/2/16 1:32:00
--  
这个客户一天500个产品号也为1吗?是不是有一定的限制啊?比如每个送货单不超过五个记录?
--  作者:lin_hailun
--  发布时间:2013/2/16 9:07:00
--  
 呃,应该是这样吧。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目3.table


--  作者:youngling
--  发布时间:2013/2/16 9:52:00
--  

谢谢程版主和林老师的及时回复. 

 

程版主考虑得很全面,我一开始没有想到这个问题,有时候送货一 张送货单上会有很多产品号,但是为了方便出库统计和财务统计,我觉得还是放在一张出库单上吧,但在打印出库单的时候再考虑分页打印吧::我还没做到那一步,目前只做到记录录入部分.

 

也感谢林老师的程序,但我在测试时发现有一个小小的bug,如果是新增的话,没有问题,可是如果对已经存在的记录更改送货日期的话,就会发现编号顺序就不对了. 能麻烦林老师再看看吗.谢谢.

 

附上测试的例子,最后一行新增成功,编号也正确,但我修改了送货日期后就发现编号不对了. 麻烦各位老师帮忙看看,小女子在此谢谢各位了.

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目13.table

[此贴子已经被作者于2013-2-16 9:55:33编辑过]

--  作者:lin_hailun
--  发布时间:2013/2/16 10:09:00
--  
 代码改一下,换成这样就行了。

Select  e.DataCol.Name
    Case = "实际交货日期","客户"
        If e.DataRow.IsNull("实际交货日期") OrElse e.DataRow.IsNull("客户") Then
            e.DataRow("送货单号码") = Nothing
        Else
            Dim d As Date = e.DataRow("实际交货日期")
            \'Dim y As Integer = d.Year
           \' Dim m As Integer = d.Month
            \'Dim Days As Integer = Date.DaysInMonth(y,m)
           \' Dim fd As Date = New Date(y,m,1) \'获得该月的第一天
           \' Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天
            Dim bh As String =  Format(d,"yyyyMMdd") & "-"  \'生成该月编号的前缀
           
            Dim idx As String
            idx = e.DataTable.Compute("Max(送货单号码)","送货单号码 like \'" & bh & "*\'")
            If idx > "" Then
                Dim fdr As DataRow = e.DataTable.Find("客户 = \'" & e.DataRow("客户") & "\' And [_identify] <> " & e.DataRow("_identify") & " And 实际交货日期 = #" & e.DataRow("实际交货日期") & "#")
                If fdr Is Nothing Then
                    e.DataRow("送货单号码") = bh  & Format(CInt(idx.SubString(9)) + 1, "000")
                Else
                    e.DataRow("送货单号码") = fdr("送货单号码")
                End If
               
            Else
                e.DataRow("送货单号码") = bh  & "001"
            End If         
        End If
End Select

--  作者:youngling
--  发布时间:2013/2/16 10:17:00
--  

太感谢林老师了,谢谢.

 

这个问题困扰我好几天了,多谢.


--  作者:lsy
--  发布时间:2013/2/16 11:50:00
--  

已经弄好,下午发上来,吃饭去了。

 

用用看,大家交流。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:每日编号.table

[此贴子已经被作者于2013-2-16 17:03:02编辑过]