以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  跨表编号  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=109742)

--  作者:SZCD111
--  发布时间:2017/11/18 12:23:00
--  跨表编号
请教!有“销售明细表”和“销售退换货表”,比如“销售明细表” 中编号为“X20170023”的销售明细退货,复制该明细至“销售退换货表”中,同时“销售明细表”删除该记录。那么,“销售明细表”中新增一条明细时,我希望新增明细的编号是“X20170024”,而非“X20170023”。怎么实现呢???
--  作者:有点蓝
--  发布时间:2017/11/18 14:11:00
--  
同时查“销售明细表”和“销售退换货表”2个表获取编号的最大值,再比较取最大的编号+1


--  作者:SZCD111
--  发布时间:2017/11/18 14:46:00
--  
.NET Framework 版本:2.0.50727.3655
Foxtable 版本:2017.8.19.1
错误所在事件:表,销售明细表,DataColChanged
详细错误信息:
调用的目标发生了异常。
startIndex 不能大于字符串长度。
参数名: startIndex


这是什么意思?

--  作者:有点蓝
--  发布时间:2017/11/18 15:57:00
--  
错误所在事件:表,销售明细表,DataColChanged

应该是substring的参数长度计算错误

--  作者:SZCD111
--  发布时间:2017/11/19 8:32:00
--  
If e.DataCol.name="销售日期" Then
    If e.DataRow.Isnull("销售日期") Then
        e.DataRow("销售流水号")=Nothing 
    Else
        Dim d As Date=e.DataRow("销售日期")
        Dim y As Integer=d.year
        Dim fd As Date=new Date(y,1,1)
        Dim ld As Date=new Date(y,12,31)
        Dim yh As String=Format(d,"yyyy")
        If e.DataRow("销售流水号").startswith("X" & yh)=False Then   
            Dim idx As Integer
            Dim max1 As String 
            Dim max2 As String
            max1=e.DataTable.compute("max(销售流水号)","销售日期>=#" & fd & "# and 销售日期<=#" & ld & "# and [_identify]<>" & e.DataRow("_identify"))
            max2=DataTables("销售作废退换货明细表").compute("max(销售流水号)")
            If max1>"" And max2>"" Then
                Dim max As String=IIF(max1> max2,"max1","max2")
                idx=Cint(max.Substring(5,6))+1
            ElseIf max1>"" And max2="" Then
                Dim max As String=max1
                idx=cint(max.Substring(5,6))+1
            Else
                idx=1
            End If
            e.DataRow("销售流水号")="X" & yh & Format(idx,"000000")
        End If
    End If 
End If


请老师帮我看看代码哪里有问题?或者不严谨?谢谢

--  作者:有点甜
--  发布时间:2017/11/19 15:57:00
--  

处理断号,参考

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=85293&skin=0

 


--  作者:SZCD111
--  发布时间:2017/11/21 11:44:00
--  
If e.DataCol.name="销售日期" Then
    If e.DataRow.Isnull("销售日期") Then
        e.DataRow("销售流水号")=Nothing 
    Else
        Dim d As Date=e.DataRow("销售日期")
        Dim y As Integer=d.year
        Dim fd As Date=new Date(y,1,1)
        Dim ld As Date=new Date(y,12,31)
        Dim yh As String=Format(d,"yyyy")
        Dim qz As String="X" & yh
        Dim idx As Integer
        Dim max1 As String 
        Dim max2 As String
        max1=e.DataTable.compute("max(销售流水号)","销售流水号 like\'" & qz & "%\' and 销售日期>=#" & fd & "# and 销售日期<=#" & ld & "# and [_identify]<>" & e.DataRow("_identify"))
        max2=DataTables("销售作废退换货明细表").compute("max(销售流水号)","销售流水号 like\'" & qz & "%\'")
        If max1>"" And max2>"" Then
            Dim max As String=IIF(max1> max2,"max1","max2")
            idx=Cint(max.Substring(qz.length))+1
        ElseIf max1>"" And max2="" Then
            Dim max As String=max1
            idx=cint(max.Substring(qz.length))+1
        Else
            idx=1
        End If
        e.DataRow("销售流水号")=qz & Format(idx,"000000")
    End If 
End If



怎么写都写不对!!!startIndex 不能大于字符串长度!!!请老师看看哪里有问题?

--  作者:有点甜
--  发布时间:2017/11/21 12:22:00
--  

改成

 

            Dim max As String=IIF(max1> max2,max1,max2)