谢田波
谢田波
Published on 2025-05-13 / 12 Visits
0
0

鑫妍-开发需求【应收余额、可用特价款获取】

需求

  1. 销售订单选择客户时显示当前客户的应收余额
    应收余额=销售(含未出库)应收款-退货金额-回款金额
  2. 销售订单选择客户时显示当前客户的可用特价款
    可用特价款=特价收款余额-已使用特价款

开发

界面设计

增加应收余额、特价款字段
image.png

字段属性:

应收余额:F_YS_AMOUNT
特价款:F_SK_AMOUNT

数据源设计

-- 销售订单(客户所有已审核的销售订单的价税合计)
select sum(b.FBillAllAmount) as xs_amt from T_SAL_ORDER a, T_SAL_ORDERFIN b where a.FID=B.FID and a.FDocumentStatus = 'C' and a.FCUSTID='105001' ;

-- 销售退货单(客户所有已审核的销售退货单的价税合计)
select sum(b.FBILLALLAMOUNT) as th_amt from T_SAL_RETURNSTOCK a, T_SAL_RETURNSTOCKFIN b where  a.FID=b.FID and a.FDocumentStatus = 'C' and  a.FRETCUSTID='105702' ;

--收款单:
select sum(FREALRECAMOUNTFOR) as sk_bal_sum from T_AR_RECEIVEBILL where FBUSINESSTYPE = '1' and FCONTACTUNITTYPE = 'BD_Customer' and FCONTACTUNIT = '105001'

--获取特价款:
select sum(b.FSETTLERECAMOUNTFOR) from T_AR_RECEIVEBILL a, T_AR_RECEIVEBILLENTRY b where a.FID=b.FID and a.FDocumentStatus = 'C' and a.FCONTACTUNITTYPE = 'BD_Customer' and b.F_RBAK_Combo_83g='特价款' and FCONTACTUNIT = '105001'

--获取已使用的特价款
select sum(F_SK_AMOUNT) as xs_amt from T_SAL_ORDER where a.FDocumentStatus = 'C' and a.FCUSTID='105001' ;

程序设计

import clr  
  
clr.AddReference('System')  
clr.AddReference('System.Data')  
clr.AddReference('Kingdee.BOS')  
clr.AddReference('Kingdee.BOS.Core')  
clr.AddReference('Kingdee.BOS.App')  
clr.AddReference('Kingdee.BOS.ServiceHelper')  
clr.AddReference('Newtonsoft.Json')  
  
from Kingdee.BOS import *  
from Kingdee.BOS.Core import *  
from Kingdee.BOS.Core.Bill import *  
from Kingdee.BOS.Core.DynamicForm.PlugIn import *  
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *  
from System import *  
from System.Data import *  
from System.Net import *  
from System.Text import *  
from System.IO import *  
from Kingdee.BOS.Core.Bill.PlugIn import *  
from Kingdee.BOS.App.Data import *  
from System.Collections.Generic import List  
from Kingdee.BOS.ServiceHelper import *  
  
  
# 自定义按钮触发-值更新  
def DataChanged(e):  
    if e.Field.Key == "FCustId":  
        newValue = e.NewValue  # 更新后的字段值  
        # 客户应收  
        xs_amt = 0  
        try:  
            sqlYs = (  
                """/*dialect*/select COALESCE(sum(b.FBillAllAmount),0) as xs_amt from T_SAL_ORDER a, T_SAL_ORDERFIN b where a.FID=B.FID and a.FDocumentStatus = 'C' and a.FCUSTID={0}""").format(  
                newValue)  
            ds1 = DBUtils.ExecuteDataSet(this.Context, sqlYs)  
            tab1 = ds1.Tables[0]  
            for dr in tab1.Rows:  
                xs_amt = dr["xs_amt"]  
        except:  
            xs_amt = 0.00  
  
        # 销售退货  
        th_amt = 0  
        try:  
            sqlYs = (  
                """/*dialect*/select COALESCE(sum(b.FBILLALLAMOUNT),0) as th_amt from T_SAL_RETURNSTOCK a, T_SAL_RETURNSTOCKFIN b where  a.FID=b.FID and a.FDocumentStatus = 'C' and  a.FRETCUSTID={0}""").format(  
                newValue)  
            ds2 = DBUtils.ExecuteDataSet(this.Context, sqlYs)  
            tab2 = ds2.Tables[0]  
            for dr in tab2.Rows:  
                th_amt = dr["th_amt"]  
        except:  
            th_amt = 0.00  
  
        # 客户收款汇总  
        sk_amt = 0  
        try:  
            sqlSk = (  
                """/*dialect*/select COALESCE(sum(FREALRECAMOUNTFOR),0) as sk_bal_sum from T_AR_RECEIVEBILL where FBUSINESSTYPE = '1' and FCONTACTUNITTYPE = 'BD_Customer' and FCONTACTUNIT={0}""").format(  
                newValue)  
            ds3 = DBUtils.ExecuteDataSet(this.Context, sqlSk)  
            tab3 = ds3.Tables[0]  
            for dr in tab3.Rows:  
                sk_amt = dr["sk_bal_sum"]  
        except:  
            sk_amt = 0.00  
  
        # 客户收款汇总-特价款  
        tj_amt1 = 0  
        try:  
            sqlSk = (  
                """/*dialect*/select COALESCE(sum(b.FSETTLERECAMOUNTFOR),0) as tj_bal from T_AR_RECEIVEBILL a, T_AR_RECEIVEBILLENTRY b where a.FID=b.FID and a.FDocumentStatus = 'C' and a.FCONTACTUNITTYPE = 'BD_Customer' and b.F_RBAK_Combo_83g='特价款' and FCONTACTUNIT ={0}""").format(  
                newValue)  
            ds4 = DBUtils.ExecuteDataSet(this.Context, sqlSk)  
            tab4 = ds4.Tables[0]  
            for dr in tab4.Rows:  
                tj_amt1 = dr["tj_bal"]  
        except:  
            tj_amt1 = 0.00  
  
        # 特价使用汇总  
        tj_amt2 = 0  
        try:  
            # 客户收款汇总-特价款  
            sqlSk = (  
                """/*dialect*/select COALESCE(sum(F_SK_AMOUNT),0) as tj_bal from T_SAL_ORDER where a.FDocumentStatus = 'C' and a.FCUSTID={0}""").format(  
                newValue)  
            ds5 = DBUtils.ExecuteDataSet(this.Context, sqlSk)  
            tab5 = ds5.Tables[0]  
            for dr in tab5.Rows:  
                tj_amt2 = dr["tj_bal"]  
        except:  
            tj_amt2 = 0.00  
  
        # 可用特价余额: 特价收款余额-订单使用特价金额  
        tj_bal = tj_amt1 - tj_amt2  
  
        # 应收余额:销售订单金额(已审核)-退货订单金额-收款金额  
        ys_bal = xs_amt - th_amt - sk_amt  
        msg = (  
            "应收余额信息:销售金额:{0},退货金额:{1}, 收款金额:{2}  应收余额:{3}\n特价余额信息:特价收款金额{4}, 已使用特价{5},可用特价:{6}").format(  
            xs_amt, th_amt, sk_amt, ys_bal, tj_amt1, tj_amt2, tj_bal)  
        this.View.ShowMessage(msg)  
  
        # 打印日志  
        msg = (  
            "应收余额信息:销售金额:{0},退货金额:{1}, 收款金额:{2}  应收余额:{3}\n特价余额信息:特价收款金额{4}, 已使用特价{5},可用特价:{6}").format(  
            xs_amt, th_amt, sk_amt, ys_bal, tj_amt1, tj_amt2, tj_bal)  
        this.View.ShowMessage(msg)  
  
        # 更新特价可用余额  
        this.View.Model.SetValue("F_SK_AMOUNT", sk_amt)  
        # 更新应收余额  
        this.View.Model.SetValue("F_YS_AMOUNT", ys_bal)

测试

image.png


Comment