关于采购订单付款条件选择按物料明细付款时在付款计划中获取明细信息字段的办法

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

关于采购订单付款条件选择按物料明细付款时在付款计划中获取明细信息字段的办法

@[TOC](目录) ### 1、用DataChanged值更新事件同步修改值 在DataChanged事件中通过一个`if`语句判断是否是【付款条件】和指定的"【自定义】"字段发生变化 ### 2、数据操作 1. 获取付款条件字段的数据包 2. 再判断数据包中的“FPAYMENTMETHOD”属性是否为“3”,为“3”表示是按物料明细付款 3. 分别获取明细信息和付款计划的数据包 4. 判断它们是否为非空。非空则遍历明细信息数据包 5. 用一个变量来存储明细信息数据包中的“Seq”属性值 6. 再嵌套一个循环遍历付款计划数据包 7. 判断明细信息的Seq与付款计划的“FMATERALSEQ”是否相等,相等则将明细信息中的“【自定义_明细信息】”字段赋值给付款计划“【自定义_付款计划】” 8. 最后调用this.View.UpdateView ### 3、Python案例及代码 - 步骤一:新增明细字段 - 步骤二:明细字段勾选【即时触发值更新事件】 ![image.webp](/download/0100e28d9c674f6f4249a0bc7f76b39c6c61.webp) - 步骤三:新增付款计划字段 ![image.webp](/download/0100a530c86b5c5841629600861699cc39ed.webp) - 步骤四:注册表单插件(下附参考代码片段) ![image.webp](/download/010012e66d9834184a68b0a834fb628617ba.webp) ```python import clr clr.AddReference('mscorlib') from System import * def DataChanged(e): #监控是不是指定字段发生改变 if e.Field.Key == "FPayConditionId" or e.Field.Key == "FPrice_Test" or e.Field.Key == "FDecimal_Test": UpdatePriceAndDecimal() def UpdatePriceAndDecimal(): payCondition = this.View.Model.GetValue("FPayConditionId")#表头付款条件 if not payCondition is None: if payCondition["FPAYMENTMETHOD"] == "3":#付款条件按物料明细付款 poOrderEntry = this.View.Model.DataObject["POOrderEntry"]#明细信息页签 fIinstallmentEntry = this.View.Model.DataObject["FIinstallment"]#付款计划页签 if not poOrderEntry is None and poOrderEntry.Count > 0 and not fIinstallmentEntry is None and fIinstallmentEntry.Count > 0: for itemPOEntry in poOrderEntry: seqPO = itemPOEntry["Seq"] for itemFI in fIinstallmentEntry: seqFI = itemFI["FMATERIALSEQ"] if seqPO == seqFI:#当付款计划的物料行号跟明细的行号一致时 itemFI["Price_Demo"] = itemPOEntry["Price_Test"]#更新付款计划中的字段为明细信息中的值 itemFI["Decimal_Demo"] = itemPOEntry["Decimal_Test"] this.View.UpdateView("FIinstallment")#更新视图 ``` ==将代码中的FPrice_Test,FDecimal_Test替换为自己的自定义字段标识。将itemFI[""] = itemPOEntry[""]替换成实际的自定义付款计划属性名和明细信息自定义字段属性名即可== ### 4、补充 **如果想携带的字段类型是【基础资料】等结构型的字段,则不能简单使用数据包给属性值赋值,在表单插件中可以用this.View.SetValue**。 将`itemFI["付款计划属性名称"] = itemPOEntry["明细信息属性名称"]`改为下面这两行: ```python #当字段为基础资料等结构型字段时 p = this.View.BillBusinessInfo.GetField("付款计划字段的标识") this.View.Model.SetValue(p,itemFI,itemPOEntry["明细信息属性名称"]) ``` **其他更多文章入口:**[https://wenku.my7c.com/link/s/lbRPP](https://wenku.my7c.com/link/s/lbRPP)

字段配置说明image.webp


如果存在行删除的操作,可以直接使用这个脚本

import clr clr.AddReference('mscorlib') from System import * def BeforeSave(e):    UpdatePriceAndDecimal() def UpdatePriceAndDecimal():    payCondition = this.View.Model.GetValue("FPayConditionId")#表头付款条件    if not payCondition is None:        if  payCondition["FPAYMENTMETHOD"] == "3":#付款条件按物料明细付款            poOrderEntry = this.View.Model.DataObject["POOrderEntry"]#明细信息页签            fIinstallmentEntry = this.View.Model.DataObject["FIinstallment"]#付款计划页签            if not poOrderEntry is None and poOrderEntry.Count > 0 and  not fIinstallmentEntry is None and fIinstallmentEntry.Count > 0:                for itemPOEntry in poOrderEntry:                    seqPO = itemPOEntry["Seq"]                    for itemFI in fIinstallmentEntry:                        seqFI = itemFI["FMATERIALSEQ"]                        if seqPO == seqFI:#当付款计划的物料行号跟明细的行号一致时                            itemFI["Price_Demo"] = itemPOEntry["Price_Test"]#更新付款计划中的字段为明细信息中的值                            itemFI["Decimal_Demo"] = itemPOEntry["Decimal_Test"]                this.View.UpdateView("FIinstallment")#更新视图


参考案例:采购订单付款计划应付日期按交货日期偏移携带处理


import clr

clr.AddReference('mscorlib')

from System import *


def DataChanged(e):

    #监控是不是指定字段发生改变

    if e.Field.Key == "FPayConditionId"  or e.Field.Key == "FDeliveryDate":

        UpdatePriceAndDecimal()


def UpdatePriceAndDecimal():

    payCondition = this.View.Model.GetValue("FPayConditionId")#表头付款条件

    if not payCondition is None:

        if  payCondition["FPAYMENTMETHOD"] == "3":#付款条件按物料明细付款

            poOrderEntry = this.View.Model.DataObject["POOrderEntry"]#明细信息页签

            fIinstallmentEntry = this.View.Model.DataObject["FIinstallment"]#付款计划页签

            if not poOrderEntry is None and poOrderEntry.Count > 0 and  not fIinstallmentEntry is None and fIinstallmentEntry.Count > 0:

                for itemPOEntry in poOrderEntry:

                    seqPO = itemPOEntry["Seq"]

                    for itemFI in fIinstallmentEntry:

                        seqFI = itemFI["FMATERIALSEQ"]

                        if seqPO == seqFI:#当付款计划的物料行号跟明细的行号一致时

                            itemFI["YFDATE"] = itemPOEntry["DeliveryDate"].AddDays(-5) #更新付款计划中的字段为明细信息中的值,日期偏移提前5天

                this.View.UpdateView("FIinstallment")#更新视图



itemFI["Price_Demo"] = itemPOEntry["Price_Test"]#更新付款计划中的字段为明细信息中的值

                            itemFI["Decimal_Demo"] = itemPOEntry["Decimal_Test"]

这里为什么有四个值,没看明白,不知道具体怎么改


来评论下,文本的可以了

但是基础资料的怎么设置,不知道这个p=放在什么位置


如果是基础资料字段的话则不能简单使用数据包的形式对属性进行赋值,需要改为:

p = this.View.BillBusinessInfo.GetField("FPrice_Demo")#根据字段标识获取字段

this.View.Model.SetValue(p,itemFI,itemPOEntry["Price_Demo"])#更新付款计划中的字段为明细信息中的值


import clr

 

clr.AddReference('Kingdee.BOS')

clr.AddReference('Kingdee.BOS.Core')

clr.AddReference('Kingdee.BOS.App')

 

from Kingdee.BOS import *

from Kingdee.BOS.Core.DynamicForm.PlugIn import *

from Kingdee.BOS.Core.Base import *

 

def DataChanged(e):

        #监控是不是指定字段发生改变

        if e.Field.Key == "FPayConditionId" or e.Field.Key == "F_TNKJ_Assistantxmh":

               UpdatePriceAndDecimal()

       

def UpdatePriceAndDecimal():

        payCondition = this.View.Model.GetValue("FPayConditionId")#表头付款条件

        if not payCondition is None:

               if  payCondition["FPAYMENTMETHOD"] == "3":#付款条件按物料明细付款

                       poOrderEntry = this.View.Model.DataObject["POOrderEntry"]#明细信息页签

                       fIinstallmentEntry = this.View.Model.DataObject["FIinstallment"]#付款计划页签

                       if not poOrderEntry is None and poOrderEntry.Count > 0 and  not fIinstallmentEntry is None and fIinstallmentEntry.Count > 0:

                               for itemPOEntry in poOrderEntry:

                                       seqPO = itemPOEntry["Seq"]

                                       for itemFI in fIinstallmentEntry:

                                              seqFI = itemFI["FMATERIALSEQ"]

                                              if seqPO == seqFI:#当付款计划的物料行号跟明细的行号一致时

                                                      itemFI["F_TNKJ_AssistantXMH_SRC"] = itemPOEntry["F_TNKJ_Assistantxmh"]#更新付款计划中的字段为明细信息中的值

                                                    

   this.View.UpdateView("FIinstallment")#更新视图

 按照上面修改放在应付单表单插件,不生效,辛苦老师帮忙 看下什么原因呢


关于采购订单付款条件选择按物料明细付款时在付款计划中获取明细信息字段的办法

@[TOC](目录)### 1、用DataChanged值更新事件同步修改值在DataChanged事件中通过一个`if`语句判断是否是【付款条件】和指定的"【自定义】"...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息