首页 > 其他分享 >金蝶云星空插件实现多单据体下推

金蝶云星空插件实现多单据体下推

时间:2024-11-05 14:48:11浏览次数:1  
标签:entrys 插件 金蝶 下推 t1 ToString Context newEntry ds

例子为物流运输单下推物流结算单 

clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Kingdee.K3.SCM.App')
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.ServiceHelper import *
from Kingdee.K3.SCM.App.Utils import *
from System import *
#最后触发:单据转换后事件
def AfterConvert(e):
    billDatas = e.Result.FindByEntityKey("FBillHead");
    if billDatas is None or billDatas.Length < 1:
        return;
    for billData in billDatas:
        bill = billData.DataEntity;
        srcEntrys = bill["FSrcEntity"];
        if srcEntrys is None or srcEntrys.Count < 1:
            continue;
        if len(set(map(lambda x: x["SrcBillId"].ToString(), srcEntrys))) > 1:
            raise Exception("要求必须来源于同一张物流运输单");
        #查询运输单出库明细
        srcBillId = srcEntrys[0]["SrcBillId"].ToString();
        ds = DBServiceHelper.ExecuteDataSet(this.Context, "/*dialect*/select t1.FSrcCustId FStkCustId,t1.FSrcSaleDeptId FStkSaleDeptId,t1.FSrcOrgId FStkOrgId,t1.FSrcDeptId FStkDeptId,isnull(t2.F_TXBE_IsSettleByStkOrg,'') FIsSettleByStkOrg,sum(t1.FSrcTransQty) FStkQty,row_number()over(order by t1.FSrcCustId,t1.FSrcSaleDeptId,t1.FSrcOrgId,t1.FSrcDeptId) FRow from t_ora_TransBillSrcEntry t1 left join T_BD_Customer t2 on t1.FSrcCustId=t2.FCustId where t1.FID=" + srcBillId + " group by t1.FSrcCustId,t1.FSrcSaleDeptId,t1.FSrcOrgId,t1.FSrcDeptId,t2.F_TXBE_IsSettleByStkOrg");
        if ds is None or ds.Tables[0].Rows.Count < 1:
            raise Exception("查询运输单出库明细失败");
        totalQty = sum(map(lambda x: Convert.ToDecimal(x["FStkQty"]), ds.Tables[0].Rows));
        if totalQty <= 0:
            raise Exception("源单出库明细运输数量统计必须大于零");
        #按费用项目+税率归集金额
        dict1 = {};
        for srcEntry in srcEntrys:
            feeItemId = srcEntry["FeeItemId_Id"].ToString();
            taxRate = srcEntry["TaxRate"].ToString();
            curTransAmount = Convert.ToDecimal(srcEntry["CurTransAmount"]);
            key = feeItemId + ";" + taxRate;
            if key not in dict1:
                dict1[key] = curTransAmount;
            else:
                dict1[key] += curTransAmount;
        #循环费用项目循环添加结算明细
        entrys = bill["FEntity"];
        entrys.Clear();
        entity = e.TargetBusinessInfo.GetEntity("FEntity");
        FStkItemId = e.TargetBusinessInfo.GetField("FStkItemId");
        FStkCustId = e.TargetBusinessInfo.GetField("FStkCustId");
        FStkSaleDeptId = e.TargetBusinessInfo.GetField("FStkSaleDeptId");
        #获取对应的字段名称:发货组织
        FStkOrgId = e.TargetBusinessInfo.GetField("FStkOrgId");
        FStkDeptId = e.TargetBusinessInfo.GetField("FStkDeptId");
        FSettleOrgId = e.TargetBusinessInfo.GetField("FSettleOrgId");
        FSettleDeptId = e.TargetBusinessInfo.GetField("FSettleDeptId");
        for key in dict1:
            arr1 = key.Split(';');
            feeItemId = arr1[0];
            taxRate = Convert.ToDecimal(arr1[1]);
            totalAmount = dict1[key];
            for nRow in range(ds.Tables[0].Rows.Count):
                stkCustId = ds.Tables[0].Rows[nRow]["FStkCustId"].ToString();
                stkSaleDeptId = ds.Tables[0].Rows[nRow]["FStkSaleDeptId"].ToString();
                stkOrgId = ds.Tables[0].Rows[nRow]["FStkOrgId"].ToString();   #获取发货组织id
                stkDeptId = ds.Tables[0].Rows[nRow]["FStkDeptId"].ToString();
                isSettleByStkOrg = True if ds.Tables[0].Rows[nRow]["FIsSettleByStkOrg"].ToString() == "1" else False;
                stkQty = Convert.ToDecimal(ds.Tables[0].Rows[nRow]["FStkQty"]);
                rate = round(stkQty / totalQty * 100, 4);
                amount = round(totalAmount * rate / 100, 2);
                newEntry = DynamicObject(entity.DynamicObjectType);
                newEntry["Seq"] = entrys.Count + 1;
                FieldUtils.SetBaseDataFieldValue(this.Context, FStkItemId, newEntry, feeItemId);
                FieldUtils.SetBaseDataFieldValue(this.Context, FStkCustId, newEntry, stkCustId);
                FieldUtils.SetBaseDataFieldValue(this.Context, FStkSaleDeptId, newEntry, stkSaleDeptId);
                FieldUtils.SetBaseDataFieldValue(this.Context, FStkOrgId, newEntry, stkOrgId);
                FieldUtils.SetBaseDataFieldValue(this.Context, FStkDeptId, newEntry, stkDeptId);
                FieldUtils.SetBaseDataFieldValue(this.Context, FSettleOrgId, newEntry, stkOrgId);
                newEntry["StkQty"] = stkQty;
                newEntry["StdRate"] = rate;
                newEntry["StdAmount"] = amount;
                newEntry["IsShare"] = True;
                if isSettleByStkOrg:
                    #FieldUtils.SetBaseDataFieldValue(this.Context, FSettleOrgId, newEntry, stkOrgId);
                    FieldUtils.SetBaseDataFieldValue(this.Context, FSettleDeptId, newEntry, stkDeptId);
                else:
                    #FieldUtils.SetBaseDataFieldValue(this.Context, FSettleOrgId, newEntry, bill["SaleOrgId_Id"]);
                    FieldUtils.SetBaseDataFieldValue(this.Context, FSettleDeptId, newEntry, stkSaleDeptId);
                newEntry["SettleDate"] = DateTime.Now;
                newEntry["SettleAmount"] = amount;
                newEntry["SettleTaxRate"] = taxRate;
                newEntry["SettleAmountNoTax"] = round(amount / (1 + taxRate / 100), 2);
                newEntry["SettleRemark"] = "";
                newEntry["RelatedAPAmount"] = 0;
                entrys.Add(newEntry);
            #尾差处理
            sumAmount = sum(map(lambda y: Convert.ToDecimal(y["StdAmount"]), filter(lambda x: x["StkItemId_Id"].ToString() == feeItemId and Convert.ToDecimal(x["SettleTaxRate"]) == taxRate, entrys)));
            if sumAmount != totalAmount:
                amount = Convert.ToDecimal(entrys[entrys.Count - 1]["StdAmount"]) - (sumAmount - totalAmount);
                entrys[entrys.Count - 1]["StdAmount"] = amount;
                entrys[entrys.Count - 1]["SettleAmount"] = amount;
                entrys[entrys.Count - 1]["SettleAmountNoTax"] = round(amount / (1 + taxRate / 100), 2);
        #累计单头结算金额
        bill["TotalSettleAmount"] = sum(map(lambda y: Convert.ToDecimal(y["SettleAmount"]), filter(lambda x: Convert.ToBoolean(x["IsShare"]), entrys)));

标签:entrys,插件,金蝶,下推,t1,ToString,Context,newEntry,ds
From: https://www.cnblogs.com/woshinige/p/18527940

相关文章

  • 【Altium】Plane Resonance Analyzer 插件试用
    1、文档目标PlaneResonanceAnalyzer插件已安装,但是无法使用。如何能用起来该功能?图12、问题场景PlaneResonanceAnalyzer插件安装后,提示需要单独授权进行使用。 图23、软硬件环境1)、软件版本:AltiumDesigner22.1.2或更高版本2)、电脑环境:Windows10、Wi......
  • apisix~prometheus插件的使用
    通过prometheus的插件收集apisix的指标与监控,并上传到服务端,通过grafana对数据进行分析,也是非常必要的。配置values.yaml文件,开启prometheus和metrics,我的apisix是通过helm部署到kubernetes的,我可以通过values.override.{env}.yaml来按着环境进行配置,例如test测试环境valu......
  • UE中基于FluidFlux插件实现洪水数据接入的一种思路
    这是FluidFlux插件文档链接:http://imaginaryblend.com/2021/09/26/fluid-flux/FluidFlux插件原本可以在编辑器模式下,通过右键SimulationDomain保存模拟状态,这个模拟状态保存后是一个资产文件以及三张纹理图Ground,Height,Velocity。SimulationDomain中有一个俯视的场景捕获相......
  • 手把手教你编写自定义Categraf插件
    本文分享自天翼云开发者社区《手把手教你编写自定义Categraf插件》,作者:任****佳Categraf是一个监控采集Agent,类似Telegraf、Grafana-Agent、Datadog-Agent,希望对所有常见监控对象提供监控数据采集能力,采用All-in-one的设计,不但支持指标采集,也希望支持日志和调用链路的数据采......
  • 通过API实现旺店通和金蝶云无缝数据集
    旺店通其他入库对接金蝶其他入库-P_容错:技术案例分享在企业信息化管理中,数据的高效集成和处理是确保业务顺畅运行的关键环节。本文将聚焦于一个具体的系统对接集成案例——如何将旺店通·企业奇门的数据无缝集成到金蝶云星空平台。本次方案命名为“旺店通其他入库对接金蝶其他入......
  • 企业高效数据对接:金蝶到泛微的供应商资料集成
    SD004-新增供应商资料申请新增金蝶=>泛微(逐单查询)在企业信息化系统中,数据的高效流动和准确对接是业务运作的关键。本文将分享一个具体的系统对接集成案例:如何通过轻易云数据集成平台,将金蝶云星空的数据无缝集成到泛微OA-Http系统中,实现新增供应商资料申请的逐单查询。集成背景......
  • 金蝶云星空——创建简单账表
    参考:https://vip.kingdee.com/article/226013527986004992?productLineId=1&lang=zh-CN参考:https://vip.kingdee.com/article/37120?productLineId=1&lang=zh-CN参考:https://vip.kingdee.com/article/377783954302429184?productLineId=1&lang=zh-CN参考:https://vi......
  • GPT-Academic 其它插件相关使用教程
    一.虚空终端“GPT插件虚空终端”似乎是一个结合了GPT技术和某种终端(可能是命令行或控制台)的插件或工具。以下是一些可能的解释和应用:GPT插件:这可能是一个利用GPT(生成式预训练变换器)技术的插件,用于提供自然语言处理功能,比如文本生成、对话系统等。虚空终端:这个名称可能指的......
  • GPT-Academic 编程类插件区使用教程
    GPT-Academic官网:GPT-Academic官方用户中心一.虚空终端在网络编程中,网络终端可以指一个通过网络连接到远程服务器或服务的终端,用户可以通过它来执行远程命令。二.解析整个python项目GPT(GenerativePre-trainedTransformer)是一种强大的语言模型,能够理解和生成自然语言文本......
  • Chrome 插件怎么安装与下载?超详细
    原文链接: https://www.chajianxw.com/tutorial/how-to-install-chrome-plugin.html前言国内因为无法访问Chrome应用商店的缘故,导致很多优秀的扩展程序无法正常下载与安装。本文将手把手教你如何通过离线安装Chrome插件,全文图文讲解,超级详细哟~跟着下面的教程来就行,分分......