金蝶云星空条件执行顺序

以销售出库单反写销售订单条件为例

 ( FOUTLMTUNIT == 'STK' And (round(abs(float(FSTOCKBASESTOCKOUTQTY))- abs(float(FSTOCKBASEREBACKQTY)),10)) >= (abs(round(float(FBaseDeliveryMinQty),10)) if FDeliveryControl ==true else abs(round(float(FStockBaseQty),10))) ) Or (FOUTLMTUNIT == 'SAL' And (round(abs(float(FBaseStockOutQty))-abs(float(FBaseReBackQty)),10)) >=(abs(round(float(FBaseDeliveryMinQty),10))  if FDeliveryControl ==true else abs(round(float(FBaseUnitQty),10))) )

Python
 
(分支1:STK条件) OR (分支2:SAL条件)
条件表达式由 OR 连接两个分支,系统按从左到右顺序执行,但遵循短路逻辑(若左分支为真,则跳过右分支)
( FOUTLMTUNIT == 'STK' And (round(abs(float(FSTOCKBASESTOCKOUTQTY))- abs(float(FSTOCKBASEREBACKQTY)),10)) >= (abs(round(float(FBaseDeliveryMinQty),10)) if FDeliveryControl ==true else abs(round(float(FStockBaseQty),10))) ) 解读

1. 条件表达式结构

 

 

2. 执行步骤分解

按照运算优先级和括号嵌套顺序执行如下:

  1. 判断单位类型:

    Python
     
    FOUTLMTUNIT == 'STK'
    • 优先级最高,首先检查当前单位是否为库存单位(STK)。
    • 若为 False,整个条件短路返回 False不再执行后续计算。
    • 若为 True,继续执行后续逻辑。
  2. 计算左侧表达式(净出库量):

    Python
     
    round(abs(float(FSTOCKBASESTOCKOUTQTY)) - abs(float(FSTOCKBASEREBACKQTY)), 10)
    • 执行顺序(从内到外):
      a. float(FSTOCKBASESTOCKOUTQTY):将库存出库量转换为浮点数。
      b. abs(...):取绝对值,得到非负数。
      c. float(FSTOCKBASEREBACKQTY):将库存退库量转换为浮点数。
      d. abs(...):取绝对值。
      e. 计算 出库量 - 退库量
      f. round(..., 10):将结果四舍五入到10位小数。
  3. 计算右侧基准值(动态选择):

    Python
     
    abs(round(float(FBaseDeliveryMinQty), 10)) if FDeliveryControl == True else abs(round(float(FStockBaseQty), 10))
    • 执行顺序(分支判断):
      a. 判断 FDeliveryControl 是否为 True
      • 若为 True,计算 abs(round(float(FBaseDeliveryMinQty), 10))
        • float(FBaseDeliveryMinQty) → 转浮点数。
        • round(..., 10) → 四舍五入到10位小数。
        • abs(...) → 取绝对值。
      • 若为 False,计算 abs(round(float(FStockBaseQty), 10))
        • float(FStockBaseQty) → 转浮点数。
        • round(..., 10) → 四舍五入到10位小数。
        • abs(...) → 取绝对值。
  4. 比较操作:

    Python
     
    左侧净出库量 >= 右侧基准值
    • 将步骤2和步骤3的结果进行 >= 比较。
    • 若成立,返回 True;否则返回 False
  5. 逻辑与(And)操作:

    Python
     
    FOUTLMTUNIT == 'STK' And (比较结果)
    • 若步骤1为 True 且步骤4为 True,最终结果为 True
    • 否则结果为 False

 

3. 执行流程图

 

意事项
  1. 短路逻辑:

    • 若 FOUTLMTUNIT != 'STK',直接跳过后续所有计算,返回 False,节省性能。
  2. 浮点数精度控制:

    • 所有数值计算均使用 round(..., 10),避免因浮点数精度误差(如 0.1 + 0.2 ≠ 0.3)导致条件误判。
  3. 变量类型安全:

    • 强制将字段值转为 float,确保数学运算正确性(尤其针对文本型数字或空值)。
  4. 动态基准值选择:

    • 通过 if-else 实现灵活的业务规则切换,例如:
      • 启用交货控制时(FDeliveryControl=True),按最小交货量校验;
      • 否则按库存基础数量校验。

5. 示例场景

  • 场景1:某采购订单使用库存单位(STK),启用交货控制(FDeliveryControl=True)。

    • 数据:
      • FSTOCKBASESTOCKOUTQTY = 150.0
      • FSTOCKBASEREBACKQTY = 30.0
      • FBaseDeliveryMinQty = 100.0
    • 计算:
      • 净出库量:round(abs(150.0) - abs(30.0), 10) = 120.0
      • 基准值:abs(round(100.0, 10)) = 100.0
      • 比较:120.0 >= 100.0 → True
    • 结果:条件成立,允许后续操作(如发货)。
  • 场景2:某订单使用库存单位但未启用交货控制(FDeliveryControl=False)。

    • 数据:
      • FSTOCKBASESTOCKOUTQTY = 80.0
      • FSTOCKBASEREBACKQTY = 20.0
      • FStockBaseQty = 70.0
    • 计算:
      • 净出库量:round(80.0 - 20.0, 10) = 60.0
      • 基准值:abs(round(70.0, 10)) = 70.0
      • 比较:60.0 >= 70.0 → False
    • 结果:条件不成立,拦截操作并提示错误。

总结

该条件通过严格的单位类型判断、净出库量计算和动态基准值选择,实现了对库存操作的精细化控制。其执行顺序遵循编程语言的标准优先级规则,结合短路逻辑优化性能,适用于需要高精度库存管理的企业场景。

posted on   这一生,谢谢自己  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示