Foxtable(狐表)用户栏目专家坐堂 → 求代码优化思路,谢谢!


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

主题:求代码优化思路,谢谢!

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


加好友 发短信
等级:三尾狐 帖子:702 积分:6293 威望:0 精华:0 注册:2018/5/10 9:05:00
求代码优化思路,谢谢!  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4840 积分:35094 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2025/2/17 20:00:00 [只看该作者]

用一个数组或集合遍历一下

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


加好友 发短信
等级:超级版主 帖子:112355 积分:572031 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:182 积分:1658 威望:0 精华:0 注册:2017/11/6 17:23:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:702 积分:6293 威望:0 精华:0 注册:2018/5/10 9:05:00
  发帖心情 Post By:2025/2/18 9:26:00 [只看该作者]

感谢各位大佬支持
[此贴子已经被作者于2025/2/18 9:33:20编辑过]

 回到顶部