需求
- 销售订单选择客户时显示当前客户的
应收余额
应收余额=销售(含未出库)应收款-退货金额-回款金额 - 销售订单选择客户时显示当前客户的可用
特价款
可用特价款=特价收款余额-已使用特价款
开发
界面设计
增加应收余额、特价款
字段
字段属性:
应收余额: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)