本文介绍了在特定情况下,如销售订单中赠品需改为付费或价格需调整,但销售出库单已生成的处理流程。包括使用SQL语句和Python脚本进行操作:首先创建销售出库状态记录表,取消赠品状态并记录相关信息;然后清除单据审核状态,通过BOS平台或SQL步骤修改单价并恢复状态信息。还提供了Python脚本示例,用于在BOS平台通过插件触发获取单价并处理单据状态,同时需手动维护实发数量以重新计算金额。最后,提醒恢复实体服务规则,并忽略被下游单据关联的发货通知单明细内容。
场景
有时候有的销售订单可能因为某些因素,导致原来赠送的物品后面需要更改为付费或者原来的价格最终需要进行调整,但是销售订单已经发生销售出库的单据,即使变更也只能变更销售订单的单价。
这个时候可以尝试这样操作:
SQL步骤1
/*
(Fid int,FDOCUMENTSTATUS nvarchar(10),FAPPROVERID int,FAPPROVEDATE nvarchar(60),FModifierId int,FModifyDate nvarchar(60))
-------------------------------------------------------------------------------------------------------------------
--取消赠品,FISFREE = 1 即赠品
update T_SAL_OUTSTOCKENTRY_F Set FISFREE = 0 From T_SAL_OUTSTOCKENTRY_F Where FID in (Select top 1 FID From T_SAL_OUTSTOCK Where FBILLNO='XSCKD0000001')
Where FBILLNO='XSCKD000001'
首先创建一张记录表,用于恢复单据状态,然后查询写入记录,再来清除单据的审核状态
BOS平台1
销售出库的实体服务规则需要先反选几个锁定单价的服务
销售出库的单价、含税单价可能默认是不显示状态,需要允许前台展示
单据操作
打开我们需要处理的单据,这个时候它是暂存状态,直接手动输入含税单价,前台会自动运算全部相关的数据,点击保存即可,不需要点击审核,如果赠品勾上了,就Sql取消它赠品状态。
SQL步骤2
Python Script
如果想方便也可以使用python插件获取单价,添加按钮在前台可以触发获取单价,但是实发数量需要手动维护才能得到金额重算!
import clr
clr.AddReference("mscorlib")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("System.Data")
from Kingdee.BOS import *
from Kingdee.BOS.Util import *
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from System import *
from System.Data import *
from System.Collections.Generic import *
def BarItemClick(e):
if e.BarItemKey == "按钮标识":
Status=this.Model.GetValue("FDocumentStatus");
FBillNo=this.Model.GetValue("FBillNo");
State = SqlExecYS(FBillNo);
if Status == "Z" and State == 0:
Rows = this.Model.GetEntryRowCount("FEntity");
for i in range(Rows):
FMustQty = this.Model.GetValue("FMustQty",i);
SOEntryId = this.Model.GetValue("FSOEntryId",i);
IsFree,TaxPrice = SqlExecute(SOEntryId);
this.Model.SetValue("FIsFree",IsFree,i);
this.Model.SetValue("FTAXPRICE",TaxPrice,i);
this.Model.SetValue("FRealQty",0,i);#清除实发数量
#this.Model.SetValue("FRealQty",FMustQty,i);
this.View.ShowMessage("单据编号: " + str(FBillNo) +" 请重新填写实发数量,单据可以让金额获得重算!")
elif State > 0:
this.View.ShowErrMessage("单据编号: " + str(FBillNo) + " 已发生应收关联,请先删除关联的应收单!")
else:
this.View.ShowErrMessage("单据编号: " + str(FBillNo) +" 当前单据非暂存状态,请联系管理员使用Sql后台处理单据状态!")
def SqlExecute(d):
FIsFree = "/*dialect*/ Select FISFREE from T_SAL_ORDERENTRY_F Where FENTRYID in ('%s') "%(str(d));
FTaxPrice = "/*dialect*/ Select FTaxPrice from T_SAL_ORDERENTRY_F Where FENTRYID in ('%s') "%(str(d));
IsFree = DBUtils.ExecuteScalar(this.Context,FIsFree,None);
TaxPrice = DBUtils.ExecuteScalar(this.Context,FTaxPrice,None);
return IsFree,TaxPrice;
def SqlExecYS(R):
SqlScript = "Select count(FSourceBillNo)as FCount from t_AR_receivableEntry where FSourceBillNo in ('%s') "%(str(R));
State = DBUtils.ExecuteScalar(this.Context,SqlScript,None);
return State;
BOS平台2
处理完毕,将原来的实体服务规则恢复!
注意:中间单据《发货通知单》,由于被下游单据关联,明细内容会是锁定状态,只能忽略!
Python销售出库获取销售订单单价.zip(1.12KB)
销售出库修改状态.zip(0.69KB)
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *