筛选数据,将结果保存在自定义单据里原创
金蝶云社区-RSi
RSi
11人赞赏了该文章 83次浏览 未经作者许可,禁止转载编辑于2024年06月04日 13:35:35

需求:

  从某个单据中按指定条件筛选,并将结果放在自定义单据明细体内,且保存在数据库中。


分享下思路: 

① 绘制带分录的单据,表头, 表体。

② 表头中添加过滤条件

③ 表体绘制需要的明细信息

④ 以下是python 说明 

     1. 对条件进行判断,是否有值。 转换成sql 需要的数据类型。

     2. 编写查询sql, 

     3. 判断sql执行的结果对象,是否为空及有数据条数

     4. 从结果对象中取值

     5. 清空表体,迭代将数据插入表体对应字段中。每次都新建一行

      6. 插入完成后, 刷新表体。 一开始没有刷新,前台页面只有一条记录,而且死活没值 。然后点新增,序号又是一个很大的值,说明插入成功了。

      

image.png

import clr

clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
#clr.AddReference("Kingdee.BOS.Log")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Kingdee.BOS.Contracts")
clr.AddReference('Kingdee.BOS.ServiceHelper')

from Kingdee.BOS import *
from Kingdee.BOS.JSON import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Const import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.List import *
#from Kingdee.BOS.Log import *
from System import *
from System.Collections.Generic import *
from System.Linq import *



from Kingdee.BOS.ServiceHelper import *

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


def ButtonClick(e):
    if(e.Key=="F_XXX_BUTTON"):  # 生成按钮
       
        fdate =this.View.Model.GetValue("F_XXX_Date")  # 日期
        if fdate is not None:
            fdate =str(this.View.Model.GetValue("F_XXX_Date"))[0:10]
       
        fstockorgid =this.View.Model.GetValue("F_XXX_OrgId") # 组织
        fmaterialid =this.View.Model.GetValue("F_XXX_Material")  #物料
        fproduceLine = this.View.Model.GetValue('F_XXX_SCX')
         
        if fdate is None   or fstockorgid is None or fstockorgid==0 or fmaterialid is None or fmaterialid==0 or fproduceLine is None or fproduceLine ==0 :
            this.View.ShowMessage("请输入日期、组织、物料、生产线")
            return
       
        #简单生生产领料单
        sqltext ='''select   FDATE,  FSTOCKORGID ,  F_XXX_SCX , FMATERIALID ,FAUXPROPID,FACTUALQTY
from T_SP_PICKMTRL a inner join T_SP_PICKMTRLDATA b on a.fid=b.fid where a.FDOCUMENTSTATUS='C' and F_XXX_SCCP>0 and F_XXX_LLLX ='1' and F_XXX_SCX > 0 
and FSTOCKORGID ={0} and FDATE=to_date('{1}','yyyy-mm-dd') and F_XXX_SCCP={2} and F_XXX_SCX={3} '''.format(fstockorgid['Id'],fdate,fmaterialid['Id'],fproduceLine['Id'])
       
        dyObjes = DBServiceHelper.ExecuteDynamicObject(this.Context, sqltext)
           
        if dyObjes is not None and dyObjes.Count>0:

            this.View.Model.DeleteEntryData("FEntity")  # 删除单据体
 
            rowid=0
            for item in dyObjes:
                this.View.Model.CreateNewEntryRow("FEntity")  
                this.View.Model.SetItemValueByID('F_XXX_RawMaterial',item["FMATERIALID"],rowid)
                this.View.Model.SetItemValueByID('F_XXX_Flex',item["FAUXPROPID"],rowid)
                this.View.Model.SetValue('F_XXX_Quantity',item["FACTUALQTY"],rowid)
                rowid=rowid+1  

            this.View.UpdateView("FEntity")
        else:
            this.View.ShowMessage("没有查询到数据")
            return



赞 11