以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  版主,您好,请教函数,谢谢!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=189152)

--  作者:divil
--  发布时间:2023/11/14 12:32:00
--  版主,您好,请教函数,谢谢!
版主,您好!
目的:选取《衰减器和滤波器订单明细表》后粘贴原始订单信息,《小客户衰减器数据上传表》实现“客户物料编号”、”物料“等信息自动输入。需要对《衰减器和滤波器订单明细表》中“客户物料编号”列做判断,“客户物料编号”列有信息则按照情况二程序实施,否则按照情况一实施。需要版主指导将情况一盒情况二合并成一个函数。谢谢!
情况一:选取《小客户衰减器数据上传表》先判断“客户物料编号”是否是空值,如果是的话,“客户物料编号”值就等于“物料”值,《小客户衰减器数据上传表》表事件(DataColChanged)程序如下:
程序一:
If e.DataCol.Name = "采购订单凭证一行项目" Then
    Dim nms() As String = {"客户采购订单编号", "生产批次", "凭证日期", "物料", "销售订单", "行项目1"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("衰减器和滤波器订单明细表").Find("[采购订单凭证一行项目] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing Then
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
        End If
    End If
End If
程序二:
If e.DataCol.Name = "物料" Then
    If e.DataRow.IsNull("物料") Then
        e.DataRow("客户物料编号") = Nothing
    Else
        e.DataRow("客户物料编号") = e.DataRow("物料")
    End If
End If

情况二:选取《小客户衰减器数据上传表》先判断“客户物料编号”是否是空值,如果不是的话,“客户物料编号”值取《衰减器和滤波器订单明细表》表中“客户物料编号”的值,《小客户衰减器数据上传表》表事件(DataColChanged)程序如下:
程序一:
If e.DataCol.Name = "采购订单凭证一行项目" Then
    Dim nms() As String = {"客户物料编号","客户采购订单编号", "生产批次", "凭证日期", "物料", "销售订单", "行项目1"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("衰减器和滤波器订单明细表").Find("[采购订单凭证一行项目] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing Then
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
        End If
    End If
End If


《衰减器和滤波器订单明细表》信息如下:
图片点击可在新窗口打开查看

《小客户衰减器数据上传表》信息如下:
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2023/11/14 13:40:00
--  
If e.DataCol.Name = "采购订单凭证一行项目" Then
    Dim nms() As String = {"客户采购订单编号", "生产批次", "凭证日期", "物料", "销售订单", "行项目1"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("衰减器和滤波器订单明细表").Find("[采购订单凭证一行项目] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing Then
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
if dr.isnull("客户物料编号")=false then
e.DataRow("客户物料编号") = dr("客户物料编号")
end if
        End If
    End If
End If

--  作者:divil
--  发布时间:2023/11/14 14:32:00
--  
版主,刚才试了程序运行结果不对。
版主,您好!
目的:选取《衰减器和滤波器订单明细表》粘贴原始订单信息(《衰减器和滤波器订单明细表》表“客户物料编号”列有数据就参照情况二流程计算,如果《衰减器和滤波器订单明细表》表“客户物料编号”列无数据参照情况一流程计算,再选择《小客户衰减器数据上传表》实现“客户物料编号”、”物料“等信息自动输入。需要对《衰减器和滤波器订单明细表》中“客户物料编号”列做判断,需要版主指导将情况一和情况二合并成一个函数。谢谢!
情况一:选取《小客户衰减器数据上传表》先判断“客户物料编号”是否是空值,如果是的话,“客户物料编号”值就等于“物料”值,《小客户衰减器数据上传表》表事件(DataColChanged)程序如下:
程序一:
If e.DataCol.Name = "采购订单凭证一行项目" Then
    Dim nms() As String = {"客户采购订单编号", "生产批次", "凭证日期", "物料", "销售订单", "行项目1"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("衰减器和滤波器订单明细表").Find("[采购订单凭证一行项目] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing Then
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
        End If
    End If
End If
程序二:
If e.DataCol.Name = "物料" Then
    If e.DataRow.IsNull("物料") Then
        e.DataRow("客户物料编号") = Nothing
    Else
        e.DataRow("客户物料编号") = e.DataRow("物料")
    End If
End If

情况二:选取《小客户衰减器数据上传表》先判断“客户物料编号”是否是空值,如果不是的话,“客户物料编号”值取《衰减器和滤波器订单明细表》表中“客户物料编号”的值,《小客户衰减器数据上传表》表事件(DataColChanged)程序如下:
程序一:
If e.DataCol.Name = "采购订单凭证一行项目" Then
    Dim nms() As String = {"客户物料编号","客户采购订单编号", "生产批次", "凭证日期", "物料", "销售订单", "行项目1"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("衰减器和滤波器订单明细表").Find("[采购订单凭证一行项目] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing Then
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
        End If
    End If
End If

--  作者:有点蓝
--  发布时间:2023/11/14 14:41:00
--  
什么地方测试不对?

另外在【《衰减器和滤波器订单明细表》粘贴原始订单信息】后更新到其它表,那就应该在【《衰减器和滤波器订单明细表》】表事件写代码呀
--  作者:divil
--  发布时间:2023/11/15 13:31:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:图片三.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:图片二.png
图片点击可在新窗口打开查看
版主,您好,我是把《衰减器和滤波器订单明细表》和《小客户衰减器数据上传表》案例发到网站上,我操作步骤讲解:1、从共享文件中将订单信息复制后粘贴到《衰减器和滤波器订单明细表》,订单信息如下:4100239250-10这个订单“物料”列30078075、“客户物料编号”列内容为空。我选取《小客户衰减器数据上传表》表,在“采购订单凭证一行项目”列中输入4100239250-10内容后,


《小客户衰减器数据上传表》表“物料”列和“客户物料编号”列自动录入30078075信息。
4100239250-10 列名称”客户物料编号“(标题:客户物料号ITEM):30078075,列名称”物料“(标题:SAP物料号)30078075



情况二:订单4100239252-10和4100240511-40这两个订单"物料“和”客户物料编号“列信息齐全,
我选取《小客户衰减器数据上传表》表,在“采购订单凭证一行项目”列中输入4100239252-10和4100240511-40内容后,
《小客户衰减器数据上传表》表“物料”列和“客户物料编号”列自动录入
4100239252-10 列名称”客户物料编号“(标题:客户物料号ITEM):45030025,列名称”物料“(标题:SAP物料号)1032000026
4100240511-40列名称”客户物料编号“(标题:客户物料号ITEM):45030024,列名称”物料“(标题:SAP物料号)1032000051
正确数据填写显示图片如下,现在是我将程序拷贝至《小客户衰减器数据上传表》的表事件的DATACOLchanged栏,无法实现下面的目的。


图片点击可在新窗口打开查看此主题相关图片如下:图片一.png
图片点击可在新窗口打开查看


--  作者:divil
--  发布时间:2023/11/15 13:32:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:衰减器和滤波器订单明细表.xls

表格附上,版主。谢谢
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小客户衰减器数据上传表.xls


--  作者:有点蓝
--  发布时间:2023/11/15 13:39:00
--  
请上传实例测试
--  作者:divil
--  发布时间:2023/11/15 14:25:00
--  
版主,您好!请查收,谢谢!
--  作者:divil
--  发布时间:2023/11/15 14:37:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:衰减器和滤波器订单管理系统20231031.rar


--  作者:有点蓝
--  发布时间:2023/11/15 14:40:00
--  
没有数据库,打不开表格。请转换为内部表,或者把测试数据库发上来