ERP系统中订单业务变更处理极为关键,需遵循严格流程,并支持多种变更需求。金蝶云星空提供三种销售订单变更模式:启用订单变更单(传统)、直接订单变更(快捷但无审批)、启用订单新变更单(主推,支持自定义和审批)。主推模式通过新单据实现变更,支持个性化字段及审批流程,确保数据可追溯与灵活变更。
订单业务(销售订单、采购订单)是ERP供应链模块常用的核心业务应用,而订单变更业务又是日常业务处理中不可缺少的功能模块,订单变更是很重要和很严谨的业务处理,变更操作的要求也比较高,比如:
1.要有变更审批流程处理
2.要有变更的历史记录追溯和查询
3.要支持个性化业务字段(二开自定义内容)的变更
4.某些经常性变更业务要支持快速方便的变更(无需审批、无需变更单)
5.变更数据的可变更范围可控制(比如变更数量的大小,单价高低控制等等)
针对这种变更业务的不同需求,以金蝶云星空 销售订单 变更为例,目前系统中提供了三种变更模式:
参数设置:供应链-销售管理-销售管理系统参数
1.启用订单变更单
2.直接订单变更(不支持审批流)
3.启用订单新变更单(支持自定义字段变更和审批流)
目前主推建议使用第三种方式 :启用订单新变更单(支持自定义字段变更和审批流)
三种变更方式逐一介绍如下:
第一种方式
启用订单变更单
业务背景:早期第一版订单变更单,单纯为了简单变更过程处理
操作方式:销售订单菜单 下推 销售订单变更单 进行操作
实现原理:
是采用单据转换规则实现的,
可以查看 BOS设计器-文件-单据转换 ,
可以找到销售订单-销售订单变更单 的单据转换规则,
可以通过单据转换规则实现字段映射携带过程,
可以通过单据转换插件和表单服务配置做一些业务处理(意义不大,核心是携带数据到变更单)
变更生效处理原理:模拟订单View,加载原始订单的数据包,把变更的字段值逐一赋值触发订单的对应字段(服务、公式等联动触发),最后调用订单保存操作,达到变更生效的目的
弊端:无法支持自定义字段的变更生效,变更内容有限
第二种方式
直接订单变更(不支持审批流)
业务背景:针对对变更管控不严格,重点侧重变更的快速和方便而生
操作方式: 销售订单菜单-业务操作-订单变更
实现原理:
就是订单审核后,可以通过订单变更菜单 对允许变更的字段(后台表预制设置)可以自动放开审核后可修改,从而可以一键修改审核后的订单字段值,点击保存即时生效。 根据业务需要使用。
后台可变更字段的表:select * from T_SCM_BILLCHANGEFIELDS 表结构字段说明:
FFORMID:单据唯一标识(支持销售订单、销售合同、采购订单)
FFIELDKEY:字段标识(可变更的字段)
FONLYNEWEDIT:仅变更新增时可编辑 (如变更新增行的物料字段)
遗留小坑:就是这个表里面的字段的锁定性控制处理,由于直接变更要达到审核后可修改,必须动态的根据菜单操作对允许变更的字段进行解锁、锁定控制,锁定操作是一票否决的,且BOS设计器配置的锁定 通过插件代码无法解锁,因此为了直接变更功能的正常运行,首先在设计器里面单据状态字段-状态列表里面放开了已审核状态的字段锁定性控制。
从而在插件代码里面控制了这些允许变更的字段 的 普通审核状态下 和 变更状态+已审核状态下 的锁定性控制处理。
带来的坏处就是:客户想要审核状态下,可以修改销售订单的部分字段值(如:单据头备注),却发现明明状态列表里面看到已经设置了已审核状态 下 备注字段未勾选锁定,却还是审核后锁定不能修改。
处理办法:删除后台表T_SCM_BILLCHANGEFIELDS 里面销售订单的允许变更字段:备注 字段:
Delete T_SCM_BILLCHANGEFIELDS where FFORMID='SAL_SaleOrder' and FFIELDKEY='FNote'
变更生效处理原理:销售订单自身的保存操作
弊端:不支持变更审批流
第三种方式(主推)
启用订单新变更单(支持自定义字段变更和审批流)
业务背景:订单新变更单重点在于支持二开自定义字段的灵活变更。且支持版本追溯和查询
操作方式: 销售订单菜单-业务操作-订单变更
实现原理:订单新变更单是一张新单据,继承自销售订单单据(继承的好处就是:销售订单二开新增了字段或页签单据体等,新变更单可以自动继承下来,无需再次同样在新变更单新增第二遍,同时销售订单的正常逻辑处理都可以自动继承到新变更单)。
示例1:销售订单自定义二开字段自动继承至销售订单新变更单上。(继承的字段新变更单可修改变更)
扩展知识1:
如需在销售订单新变更单体现显示订单字段旧值进行变更前后比较,则需要在新变更单上添加一个字段旧值字段,命名规则为:
【字段标识命名为:原字段标识+X 】
【字段名名为:原字段名+X 】
【绑定实体属性名为:原属性名+X】
遵循此命名规则后,在生成新变更单时候会自动把原字段旧值携带过来比对显示,参考:原单价,原数量字段。
示例2:销售订单自定义新的整个单据体时,自动继承至新变更单上。涉及(单据体表名、原始主键PKIDX知识)
扩展知识2:
新变更单自动继承了销售订单的自定义新增单据体过来,但是表名未变,没有原始关联主键内码,生效反写回去原订单数据会错乱重复等。
处理规则:
1.【新变更单继承的自定义单据体需调整表名:一般为原始表名+X区分,可自定义表名只要与原始表名不同即可,可参考通版命名,如:T_SAL_ORDERENTRY->T_SAL_XORDERENTRY】
2.【需要新增一个关联原始分录主键的字段,命名规则为:标识:FPKIDX_单据体,新变更单整单唯一不重复即可,字段名:FPKIDX(不能改变) 绑定实体属性:PKIDX(不能改变,字段名去掉了F首字母)】
扩展知识3:
一些不需要新变更单回写原销售订单的字段值(如关联数量字段值,状态字段值等等 变更过程中可能受其他业务影响改变的值,不能直接使用变更操作时携带至新变更单上的的值回写),可以通过销售订单新变更单的特殊操作配置实现。
配置位置:BOS-销售订单新变更单-单据属性-操作列表-生效操作无需更新的字段列表(以此操作后刷新字段列表为准)
变更生效处理原理:通过销售订单新变更单上的字段值与原始销售订单同名字段值进行比较找出变动差异值回写至原始销售订单的数据包中,然后调用销售订单的保存操作保存回写后至原始订单数据包。
变更查询功能:
菜单路径
销售订单(编辑/列表界面)--业务查询--变更查询
销售订单新变更单(编辑/列表界面)--变更查询
前提条件:销售管理系统参数--启用版本管理
推荐阅读