以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求代码优化思路,谢谢!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=195022)

--  作者:chen_sheng
--  发布时间:2025/2/17 18:03:00
--  求代码优化思路,谢谢!
代码如下  感觉非常累赘 请优化思路谢谢
If r IsNot Nothing Then
    Forms("SL_销售退货选择").show
    If PublicJson IsNot Nothing Then
        Dim ja As JArray = PublicJson
        If ja.Count > 0 Then
            Dim t As Table = Tables(eForm.Name & "_Table1")
            For Each jt As JToken In ja
                \'只添加不重复行
                If t.FindRow("Guid_销售订单=\'" & CStr(jt("Guid_销售订单")) & "\'") = -1 Then
                    Dim nr As Row = t.AddNew()
                    \'不一样的赋值
                    \'nr(eForm.Name & "单号") = r("单号") \'必须填写关联的主表ID
                    nr("编号") = r("编号") \'必须填写关联的主表ID
                    nr("销售退货单明细ID")= Guid.NewGuid.ToString
                    \'以下完全一样求优化思路协助
                    nr("产品编号")=CStr(jt("产品编号"))
                    nr("产品名称")=CStr(jt("产品名称"))
                    nr("产品类别")=CStr(jt("产品类别"))
                    nr("规格")=CStr(jt("规格"))
                    nr("数量")=CStr(jt("实际出库数量"))
                    nr("单价")=CStr(jt("单价"))
                    \'nr("金额")=CStr(jt("金额"))
                    nr("单位")=CStr(jt("单位"))
                    nr("产品条码")=CStr(jt("产品条码"))
                    nr("备注")=CStr(jt("备注"))
                    nr("性质")=CStr(jt("性质"))
                    nr("颜色")=CStr(jt("颜色"))
                    nr("颜色型号")=CStr(jt("颜色型号"))
                    nr("分类")=CStr(jt("分类"))
                    nr("型号")=CStr(jt("型号"))
                    nr("材质")=CStr(jt("材质"))
                    nr("上级名称")=CStr(jt("上级名称"))
                    nr("钢板")=CStr(jt("钢板"))
                    nr("属性")=CStr(jt("属性"))
                    nr("结")=CStr(jt("结"))
                    nr("存")=CStr(jt("存"))
                    nr("状态")=CStr(jt("状态"))
                    nr("ID")=CStr(jt("ID"))
                    nr("拼音码")=CStr(jt("拼音码"))
                    nr("底材色")=CStr(jt("底材色"))
                    nr("来源")=CStr(jt("来源"))
                    nr("去向")=CStr(jt("去向"))
                    nr("安全库存_最低")=CStr(jt("安全库存_最低"))
                    nr("安全库存_合理")=CStr(jt("安全库存_合理"))
                    nr("安全库存_最高")=CStr(jt("安全库存_最高"))
                    nr("账面差数")=CStr(jt("账面差数"))
                    nr("安全库存")=CStr(jt("安全库存"))
                    nr("销售退货单ID")= CStr(jt("销售退货单ID"))
                    nr("销售出库单明细ID")= CStr(jt("销售出库单明细ID"))
                    nr("出库单结案")=CStr(jt("出库单结案"))
                    nr("销售订单结案")=CStr(jt("销售订单结案"))
                    nr("Guid_销售订单")=CStr(jt("Guid_销售订单"))
                    nr("Guid_销售生产单")=CStr(jt("Guid_销售生产单"))
                    nr("Guid_主计划")=CStr(jt("Guid_主计划"))
                    nr("Guid_机台计划")=CStr(jt("Guid_机台计划"))        
                End If
            Next
        End If
        Tables(eform.name & "_Table1").Save
        Tables(eform.name & "_Table1").AutoSizeCols()
    End If
End If

--  作者:y2287958
--  发布时间:2025/2/17 20:00:00
--  
用一个数组或集合遍历一下
--  作者:有点蓝
--  发布时间:2025/2/17 20:29:00
--  
类似这里第二个例子:http://www.foxtable.com/webhelp/topics/1533.htm

Dim Cols1() As String = {"产品编号","来源列二","来源列三"}
Dim 
Cols2() As String = {"
产品编号","接收列二","接收列三"}
for i as integer = 0 to Cols1.length - 1
nr(Cols2(i))=CStr(jt(Cols1(i)))
next

--  作者:listfor
--  发布时间:2025/2/17 20:31:00
--  
If r IsNot Nothing Then
    Forms("SL_销售退货选择").Show()
    
    If PublicJson IsNot Nothing Then
        Try
            \' 提前获取表格引用减少重复访问
            Dim tableName As String = eForm.Name & "_Table1"
            Dim targetTable As Table = Tables(tableName)
            
            Dim jsonArray As JArray = CType(PublicJson, JArray)
            If jsonArray.Count = 0 Then Exit Try

            \' 预定义字段映射关系(可根据实际情况扩展)
            Dim fieldMappings As New Dictionary(Of String, String) From {
                {"产品编号", "产品编号"},
                {"产品名称", "产品名称"},
                {\'...其他字段...\', "..."} \' 实际使用时需补全
            }

            \' 批量操作前准备
            targetTable.BeginUpdate()
            
            For Each item As JToken In jsonArray
                Dim salesOrderGuid As String = CStr(item("Guid_销售订单"))
                
                \' 检查重复行
                If targetTable.FindRow($"Guid_销售订单=\'{salesOrderGuid}\'") <> -1 Then Continue For
                
                \' 添加新行
                Dim newRow As Row = targetTable.AddNew()
                
                \' 关键字段赋值
                newRow("编号") = r("编号")
                newRow("销售退货单明细ID") = Guid.NewGuid().ToString()
                
                \' 使用循环处理相同逻辑的字段赋值
                For Each mapping In fieldMappings
                    newRow(mapping.Key) = CStr(item(mapping.Value))
                Next
                
                \' 特殊处理字段
                newRow("数量") = CStr(item("实际出库数量"))
                \'...其他特殊字段处理...
            Next

            \' 提交修改
            targetTable.EndUpdate()
            targetTable.Save()
            targetTable.AutoSizeCols()

        Catch ex As Exception
            \' 添加异常处理
            MessageBox.Show($"数据加载失败:{ex.Message}")
            \' 记录日志
            \' LogError(ex)
        End Try
    End If
End If

--  作者:chen_sheng
--  发布时间:2025/2/18 9:26:00
--  
感谢各位大佬支持
[此贴子已经被作者于2025/2/18 9:33:20编辑过]