当仓库隔离时候在其他表单中获取仓库对应的库存


#引入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.DataEntity')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Newtonsoft.Json')
# clr.AddReference('Kingdee.K3.SCM')

#clr.AddReference('Kingdee.BOS.Orm')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.DataEntity import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *
from System.Data import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Newtonsoft.Json import JsonConvert
from Newtonsoft.Json.Linq import *
from Kingdee.BOS.Orm import *
from Kingdee.BOS.DataEntity import *
# from  Kingdee.K3.SCM.App.Core import *


def OnPreparePropertys(e):
    e.FieldKeys.Add("FBillTypeId");  #单据单据类型,标识  667e76c006c8a9

#def EndOperationTransaction(e):
def BeginOperationTransaction(e):#AfterExecuteOperationTransaction(e):
    #这里获取单据数据包方式和前面一样
   
    SrcBillNolist=[];
    PkIds=List[object]();#执行空操作的单据内码集合
    for billObj in e.DataEntitys:    #获取单据整体数据(可能是多个单据)
        billId=billObj["Id"];#单据ID  113907
        billNo=billObj["BillNo"];#单据编号 WLYS2406290004  
        BillTypeId=billObj["BillTypeId"]   #获取单据类型
        #typeID=BillTypeId["ID"]    #获取单据类型ID
        typeNumber=""
        stockid=0
        matstockid=""
        matfmid=""
   
        if BillTypeId!=None:
            typeNumber=BillTypeId["Number"]  #获取单据类型编码
        #raise Exception(str(typeNumber))  #QTCKD01_SYS
        Dept=billObj["DeptId"]  #获取领料部门信息

        if Dept!=None:
            stocknc=Dept["F_TXBE_Base_qtr_83g"]  #获取商贸农场仓库信息

            if stocknc!=None:
                stockid=stocknc["Id"]
                matstockid="and stock.FStockId='{0}'".format(stockid)
            #stockjc=Dept["F_TXBE_Base_qtr"]  #获取商贸集采仓库信息
        F_TXBE_Stock=billObj["F_TXBE_Stock"]  #获取库存是否充足
        F_TXBE_feiliao=billObj["F_TXBE_feiliao"] #是否农药或肥料
        StockOrg=billObj["StockOrgId"]  #获取库存组织
        stockTrue=False
        if StockOrg!=None:
            StockOrgId=StockOrg["Number"]   #获取库存组织ID
            if StockOrgId in('1082','1087','4101','4102','4103','4104','4105','4107','4109','4110','4111','4112','4115','4117','9999'):
                stockTrue=True

        if typeNumber=="QTCKD01_SYS" and F_TXBE_Stock>=1 and F_TXBE_feiliao>0 and stockTrue==True:
            entity=billObj["BillEntry"]#进一步解析单据体,明细信息
            fmid=""
            for rObj in entity:#在单据体中开始取值,判断,赋值
                FMATERIALID=rObj["MaterialId"]   #获取物料信息
                if FMATERIALID!=None:
                    fmid=FMATERIALID["Number"]
                    matfmid="and m.fnumber='{0}'".format(fmid)
                # service = StockLockService.GetInstance();
                #raise Exception(str(FMATERIALID))
                # #根据库存维度等信息查找即时库存
                # invStock = service.getInvStockID(this.Context, stockId, stockLocID, lotID, ownerTypeID, ownerID,materialID).FirstOrDefault();


            sql="""
                select
                a.FBASEQTY-0 as FBASEQTY
                from T_STK_INVENTORY a
                left join T_BD_LOTMASTER lotStock on lotStock.FLOTID=a.FLOT and lotStock.FMATERIALID=a.FMATERIALID and a.FSTOCKORGID=lotStock.FUSEORGID
                left JOIN (SELECT TLKE.FSUPPLYINTERID AS FINVENTRYID, SUM(TLKE.FBASEQTY) AS FBASELOCKQTY,
                                            SUM(TLKE.FSECQTY) AS FSECLOCKQTY
                                        FROM T_PLN_RESERVELINKENTRY TLKE INNER JOIN T_PLN_RESERVELINK TLKH ON TLKE.FID = TLKH.FID
                        WHERE TLKE.FSUPPLYFORMID = 'STK_Inventory'  AND TLKE.FLINKTYPE = '4'
                                        GROUP BY TLKE.FSUPPLYINTERID) TSUB ON a.FID = TSUB.FINVENTRYID
                inner join T_BD_MATERIAL m on m.FMATERIALID=a.FMATERIALID
                inner join T_BD_MATERIAL_L mL on ml.FMATERIALID=m.FMATERIALID and ml.FLOCALEID=2052
                inner join t_BD_StockStatus kczt on kczt.FSTOCKSTATUSID=a.FSTOCKSTATUSID
                inner join T_BD_STOCKSTATUS_L kcztL on kcztL.FSTOCKSTATUSID=kczt.FSTOCKSTATUSID and kcztL.FLOCALEID=2052
                inner join T_BD_UNIT_L baseUnit on baseUnit.FUNITID=a.FBASEUNITID and baseUnit.FLOCALEID=2052
                inner join T_BD_Stock_L stockL on stockL.FSTOCKID=a.FSTOCKID and stockL.FLOCALEID=2052
                inner join T_BD_Stock stock on stockL.FSTOCKID=stock.FSTOCKID
                where a.FBASEQTY>0   and FSTOCKORGID=1137712 {0} {1}
                """.format(matstockid,matfmid)
           
            # try:
            ds = DBUtils.ExecuteDataSet(this.Context,sql);

            tab = ds.Tables[0];
            FBASEQTY=0
            tabcount=tab.Rows.Count

            if tabcount==0:
                rObj["F_TXBE_Ten_Qty"]=0
            else:
                 for dr in tab.Rows:
                     FBASEQTY=dr["FBASEQTY"];
                     rObj["F_TXBE_Ten_Qty"]=FBASEQTY
           
       
       

           

posted on   这一生,谢谢自己  阅读(14)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示