金蝶云星空条件执行顺序
以销售出库单反写销售订单条件为例
( 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. 执行步骤分解
按照运算优先级和括号嵌套顺序执行如下:
- 
判断单位类型:
PythonFOUTLMTUNIT == 'STK'- 优先级最高,首先检查当前单位是否为库存单位(
STK)。 - 若为 
False,整个条件短路返回False,不再执行后续计算。 - 若为 
True,继续执行后续逻辑。 
 - 优先级最高,首先检查当前单位是否为库存单位(
 - 
计算左侧表达式(净出库量):
Pythonround(abs(float(FSTOCKBASESTOCKOUTQTY)) - abs(float(FSTOCKBASEREBACKQTY)), 10)- 执行顺序(从内到外):
a.float(FSTOCKBASESTOCKOUTQTY):将库存出库量转换为浮点数。
b.abs(...):取绝对值,得到非负数。
c.float(FSTOCKBASEREBACKQTY):将库存退库量转换为浮点数。
d.abs(...):取绝对值。
e. 计算出库量 - 退库量。
f.round(..., 10):将结果四舍五入到10位小数。 
 - 执行顺序(从内到外):
 - 
计算右侧基准值(动态选择):
Pythonabs(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(...)→ 取绝对值。
 
 - 若为 
 
 - 执行顺序(分支判断):
 - 
比较操作:
Python左侧净出库量 >= 右侧基准值- 将步骤2和步骤3的结果进行 
>=比较。 - 若成立,返回 
True;否则返回False。 
 - 将步骤2和步骤3的结果进行 
 - 
逻辑与(And)操作:
PythonFOUTLMTUNIT == 'STK' And (比较结果)- 若步骤1为 
True且步骤4为True,最终结果为True; - 否则结果为 
False。 
 - 若步骤1为 
 
3. 执行流程图

意事项
- 
短路逻辑:
- 若 
FOUTLMTUNIT != 'STK',直接跳过后续所有计算,返回False,节省性能。 
 - 若 
 - 
浮点数精度控制:
- 所有数值计算均使用 
round(..., 10),避免因浮点数精度误差(如0.1 + 0.2 ≠ 0.3)导致条件误判。 
 - 所有数值计算均使用 
 - 
变量类型安全:
- 强制将字段值转为 
float,确保数学运算正确性(尤其针对文本型数字或空值)。 
 - 强制将字段值转为 
 - 
动态基准值选择:
- 通过 
if-else实现灵活的业务规则切换,例如:- 启用交货控制时(
FDeliveryControl=True),按最小交货量校验; - 否则按库存基础数量校验。
 
 - 启用交货控制时(
 
 - 通过 
 
5. 示例场景
- 
场景1:某采购订单使用库存单位(
STK),启用交货控制(FDeliveryControl=True)。- 数据:
FSTOCKBASESTOCKOUTQTY = 150.0FSTOCKBASEREBACKQTY = 30.0FBaseDeliveryMinQty = 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.0FSTOCKBASEREBACKQTY = 20.0FStockBaseQty = 70.0
 - 计算:
- 净出库量:
round(80.0 - 20.0, 10) = 60.0 - 基准值:
abs(round(70.0, 10)) = 70.0 - 比较:
60.0 >= 70.0 → False 
 - 净出库量:
 - 结果:条件不成立,拦截操作并提示错误。
 
 - 数据:
 
总结
该条件通过严格的单位类型判断、净出库量计算和动态基准值选择,实现了对库存操作的精细化控制。其执行顺序遵循编程语言的标准优先级规则,结合短路逻辑优化性能,适用于需要高精度库存管理的企业场景。
                    
                
                
            
        
浙公网安备 33010602011771号