Sql 销售订单变更后对销售出库单单价处理的小技巧原创
金蝶云社区-╄秋メ凋零
╄秋メ凋零
3人赞赏了该文章 50次浏览 未经作者许可,禁止转载编辑于2024年10月11日 14:00:35
summary-icon摘要由AI智能服务提供

本文介绍了在特定情况下,如销售订单中赠品需改为付费或价格需调整,但销售出库单已生成的处理流程。包括使用SQL语句和Python脚本进行操作:首先创建销售出库状态记录表,取消赠品状态并记录相关信息;然后清除单据审核状态,通过BOS平台或SQL步骤修改单价并恢复状态信息。还提供了Python脚本示例,用于在BOS平台通过插件触发获取单价并处理单据状态,同时需手动维护实发数量以重新计算金额。最后,提醒恢复实体服务规则,并忽略被下游单据关联的发货通知单明细内容。

场景

有时候有的销售订单可能因为某些因素,导致原来赠送的物品后面需要更改为付费或者原来的价格最终需要进行调整,但是销售订单已经发生销售出库的单据,即使变更也只能变更销售订单的单价。

这个时候可以尝试这样操作:

SQL步骤1

/*


--创建销售出库状态记录表
Create table T_XSCK_StatusRecord

(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')


*/



--记录信息,用于恢复状态
insert into T_XSCK_StatusRecord
Select  
FID, --单据FID
FDOCUMENTSTATUS,--单据状态
FAPPROVERID,--审核人ID
FAPPROVEDATE,--审核日期
FModifierId,--修改人ID
FModifyDate--修改日期
From  T_SAL_OUTSTOCK
Where FBILLNO='XSCKD000001' 

--清除审核状态
update T_SAL_OUTSTOCK set FDOCUMENTSTATUS = 'Z',FAPPROVERID = 0,FAPPROVEDATE = Null
From T_SAL_OUTSTOCK

Where FBILLNO='XSCKD000001' 


首先创建一张记录表,用于恢复单据状态,然后查询写入记录,再来清除单据的审核状态

BOS平台1

销售出库的实体服务规则需要先反选几个锁定单价的服务


image.png


销售出库的单价、含税单价可能默认是不显示状态,需要允许前台展示


image.png

单据操作

打开我们需要处理的单据,这个时候它是暂存状态,直接手动输入含税单价,前台会自动运算全部相关的数据,点击保存即可,不需要点击审核,如果赠品勾上了,就Sql取消它赠品状态。


image.png


SQL步骤2


--补单价后保存单据,Update恢复状态信息
update T1 set T1.FDOCUMENTSTATUS = T2.FDOCUMENTSTATUS,
T1.FAPPROVERID = T2.FAPPROVERID,T1.FAPPROVEDATE = T2.FAPPROVEDATE,
T1.FModifierId = T2.FModifierId,T1.FModifyDate = T2.FModifyDate
From T_SAL_OUTSTOCK T1
INNER JOIN T_XSCK_StatusRecord T2 on T1.FID = T2.FID
Where T1.FDOCUMENTSTATUS='Z'


Python Script

如果想方便也可以使用python插件获取单价,添加按钮在前台可以触发获取单价,但是实发数量需要手动维护才能得到金额重算!

image.png

image.png



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

处理完毕,将原来的实体服务规则恢复!


image.png



注意:中间单据《发货通知单》,由于被下游单据关联,明细内容会是锁定状态,只能忽略!

图标赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0