单据转换插件之Python,单据体一对多原创
金蝶云社区-htv
htv
64人赞赏了该文章 494次浏览 未经作者许可,禁止转载编辑于2024年05月18日 15:22:57
封面
#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
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.Contracts')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.ServiceHelper')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.App 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.Text import *
from System.Collections import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *

def AfterConvert(e):
    #单据转换完成后触发的事件,在表单服务策略之后,获取推出来的下游单据数据包,对其做二次处理
    headEntity = e.Result.FindByEntityKey("FBillHead");#获取生成的所有下游单据
    for entity in headEntity:#循环每一个下游单据,这里是下游单据的完整数据包
        setBase_WFYHZH(entity.DataEntity);#自定义处理下游单据的方法

def setBase_WFYHZH(billObj):
    #自定义处理下游单据的方法
    #billHead = billObj["RECEIVEBILL"];
    entityRows = billObj["RECEIVEBILLENTRY"];#获取到明细实体数据包,Orm实体标识
    SRCentityRows = billObj["RECEIVEBILLSRCENTRY"];#获取到源单明细实体数据包,Orm实体标识

    i=0;
    sumAmtyf=0;
    sumAmtsf=0;
    sumAmtfk=0;
    entityRows.Clear();#构建明细单据体时,先清空原来的数据,系统默认有1行空白行,问题Q1不加这个

    for srcRow in SRCentityRows:
        #构建明细行
        #问题Q1将这2行改成,newRow=entityRows[i];请考虑源单明细和明细行数不一致的问题,自行添加处理逻辑

        newRow=DynamicObject(entityRows.DynamicCollectionItemPropertyType);
        entityRows.Add(newRow);#添加到明细行数据包中
        #下面将源单明细字段赋值给明细字段,使用的是实体属性标识,问题Q1只需要构建自定义携带的字段
        entityRows[i]["Seq"] = i+1;#行序号赋值

        entityRows[i]["FPOSTDATE"] = billObj["DATE"]
        entityRows[i]["F_XVKJ_fksqdh"] = srcRow["SRCBILLNO"];#付款申请单号<-源单编号
        entityRows[i]["F_XVKJ_fksqddh"] = srcRow["F_XVKJ_fksqddhy"];#付款申请订单号
        entityRows[i]["F_XVKJ_fksqyd"] = srcRow["F_XVKJ_fksqydy"];#付款申请源单号
        entityRows[i]["F_XVKJ_fksqje"] = srcRow["F_XVKJ_fksqjey"];#付款单申请金额
        #entityRows[i]["PAYTOTALAMOUNTFOR"] = srcRow["REALPAYAMOUNT"];
        #entityRows[i]["REALPAYAMOUNTFOR"] = srcRow["REALPAYAMOUNT"];
        #entityRows[i]["PAYAMOUNTFOR_E"] = srcRow["REALPAYAMOUNT"];
        #普通字段,直接赋值即可,特别说明:基础资料/赋值资料字段,需要按照如下2行进行赋值(字段数据包+ID)
        #字段的"实体属性标识_Id",即字段的内码

        entityRows[i]["PURPOSEID_Id"] = srcRow["FSRCPURPOSEID_Id"];
        entityRows[i]["PURPOSEID"] = srcRow["FSRCPURPOSEID"];#收款用途
        entityRows[i]["SETTLETYPEID_Id"] = srcRow["SRCSETTLETYPEID_Id"];#结算方式
        entityRows[i]["SETTLETYPEID"] = srcRow["SRCSETTLETYPEID"];

        entityRows[i]["RECTOTALAMOUNTFOR"] = srcRow["AFTTAXTOTALAMOUNT"];#应收金额
        entityRows[i]["RECAMOUNTFOR_E"] = srcRow["REALRECAMOUNT"];#本次收款金额
        entityRows[i]["RECTOTALAMOUNTFOR"] = srcRow["REALRECAMOUNT"];#表体-应收金额
        entityRows[i]["REALRECAMOUNTFOR"] = srcRow["AFTTAXTOTALAMOUNT"];#表体-实收金额
        entityRows[i]["SETTLERECAMOUNTFOR"] = srcRow["AFTTAXTOTALAMOUNT"];#表体-实收金额
        entityRows[i]["SETTLERECAMOUNT"] = srcRow["AFTTAXTOTALAMOUNT"];#折后金额本位币
        entityRows[i]["RECAMOUNT_E"] = srcRow["AFTTAXTOTALAMOUNT"];#收款金额本位币
        entityRows[i]["FMATERIALID_Id"] = srcRow["FSRCMATERIALID_Id"];
        entityRows[i]["FMATERIALID"] = srcRow["FSRCMATERIALID"];
        entityRows[i]["FPRICEUNITID"] = srcRow["FSRCPRICEUNITID"];
        entityRows[i]["FPrice"] = srcRow["FSRCPRICE"];
        entityRows[i]["FQTY"] = srcRow["FSRCQTY"];
        entityRows[i]["F_XVKJ_sokh"] = srcRow["F_XVKJ_sokhY"];#客户
        entityRows[i]["FSALEORDERNO"] = srcRow["ORDERBILLNO"];#销售订单号
        entityRows[i]["FMATERIALSEQ"] = srcRow["FSRCMATERIALSEQ"];#订单行号
        entityRows[i]["FORDERENTRYID"] = srcRow["FSRCORDERENTRYID"];#销售订单明细内码
        entityRows[i]["FLINKROWID"] = srcRow["FSRCLINKROWID"];#关联行ID

        sumAmtyf=sumAmtyf+Double(entityRows[i]["RECTOTALAMOUNTFOR"]);
        i=i+1;
        #下面给单据头的总金额字段赋值
    billObj["REALRECAMOUNTFOR"]=sumAmtyf;#表头-实收金额
    billObj["RECEIVEAMOUNTFOR"]=sumAmtyf;#表头-应收金额
    billObj["RECAMOUNTFOR"]=sumAmtyf;#表头-收款金额
    billObj["RECAMOUNT"]=sumAmtyf;#表头-收款金额本位币

本文参考周大师的收款单代码修改而成。

https://vip.kingdee.com/article/271310474510186752?productLineId=1&lang=zh-CN

及反写教程:

反写规则配置与逻辑介绍 (kingdee.com)

赞 64