金蝶云星空获取分页账表中的数据并关联生成简单账表

#这里已库存账龄分析表和呆滞料分析表关联

import clr
clr.AddReference("System")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference("Kingdee.BOS.Contracts")
clr.AddReference("Kingdee.BOS.ServiceHelper")
clr.AddReference('Newtonsoft.Json')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS.Model')

clr.AddReference("Kingdee.BOS.App.Core")
clr.AddReference('Kingdee.K3.FIN.ServiceHelper')
clr.AddReference('Kingdee.K3.FIN.HS.ServiceHelper')

from Kingdee.BOS import*
from Kingdee.BOS.Contracts import*
from Kingdee.BOS.Contracts.Report import*
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Metadata import *
from Kingdee.BOS.Core.Report import*
from Kingdee.BOS.Core.SqlBuilder import*
from Kingdee.BOS.Core.Enums import *
from Kingdee.BOS.App.Data import*
from Kingdee.BOS.Orm.DataEntity import*
from System import*
from System.ComponentModel import*
from System.Collections.Generic import*
from System.Text import*
from System.Threading.Tasks import*
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.DependencyRules import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.Core.Metadata 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 Kingdee.BOS.Model.Report import *
from Kingdee.BOS.Core.Report.PlugIn import *
from Kingdee.BOS.Core.Report import *
from Newtonsoft.Json import JsonConvert
from Newtonsoft.Json.Linq import *
from Kingdee.BOS.JSON import *
from Kingdee.BOS.Core.Report import *;
#from  Kingdee.BOS.Core.ReportFilter import *;
from  Kingdee.BOS.Model.CommonFilter import *;
from  Kingdee.BOS.Model.ReportFilter import *;
from Kingdee.BOS.Serialization import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.Util import *
from Kingdee.BOS.Core.List import*
from Kingdee.BOS.Core.List.PlugIn import *
from Kingdee.BOS.Core.SqlBuilder import *
from Kingdee.BOS.Model.ReportFilter import *
from Kingdee.BOS.App.Core import *


#初始化
def Initialize():
    #是否由插件创建临时表 true 即调用BuilderReportSqlAndTempTable构建临时表 把账表取数结果放到创建的临时表中
    # 否则调用以下3个接口,完成账表取数逻辑的sql指令即:BuilderSelectFieldSQL、BuilderTempTableOrderBySQL、BuilderFormWhereSQL
    this.IsCreateTempTableByPlugin = True;
    #是否分组汇总 在GetSummaryColumnInfo方法中添加汇总字段
    this.ReportProperty.IsGroupSummary = True;
    #是否由ui设置  = False表示报表的列通过插件控制 在GetReportHeaders中构建列头
    this.ReportProperty.IsUIDesignerColumns = False;
    # 设置账表的类型
    this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;
    #设置精度?
    listControlField = List[DecimalControlField]();
    #显示的字段名 用于控制精度的字段名,要精度控制起作用,head中的 SqlStorageType.SqlDecimal参数必须要有
    #listControlField.Add(DecimalControlField("FPrice", "jindu"));
    this.ReportProperty.DecimalControlFieldList = listControlField;
#设置汇总行  最下面的合计值 报表合计列(可选)
def GetSummaryColumnInfo(filter):
    summaryList = List[SummaryField]();
    # summaryList.Add(SummaryField("FALLAMOUNTFOR", BOSEnums.Enu_SummaryType.SUM));
    # summaryList.Add(SummaryField("FREALRECAMOUNT", BOSEnums.Enu_SummaryType.SUM));
    # summaryList.Add(SummaryField("arrears", BOSEnums.Enu_SummaryType.SUM));
    return summaryList;
#设置报表头 账表表头字段信息,通常在GetReportTitles对表头字段进行传值 主要是把过滤框设置的字段值,显示到报表表头
def GetReportTitles(filter):
    reportTitles = ReportTitles();
    custFilter=filter.FilterParameter.CustomFilter;#获取过滤框的数据包
    # beginDate=str(custFilter["F_TXBE_BeginDate"]);#获取开始日期
    # EndDate=str(custFilter["F_TXBE_End_Date"]);#获取结束日期
    # #orgFname=str(custFilter["F_BPW_OrgId"]["name"]);#获取组织名称
    # #FcustName=str(custFilter["F_TXBE_Base_kehu"]["name"]);
    # #orgFname=("{0}").format(orgObj["name"]);#组织名称
    # reportTitles.AddTitle("F_TXBE_BeginDate", beginDate);
    # reportTitles.AddTitle("F_TXBE_End_Date", EndDate);
    #reportTitles.AddTitle("F_BPW_OrgId", orgFname);
    #reportTitles.AddTitle("F_TXBE_Base_kehu", FcustName);
    return reportTitles;
#动态构造列  表格列名
def GetReportHeaders(filter):
    headers = ReportHeader();
    localEid = this.Context.UserLocale.LCID;
    headers.AddChild("FSTOCKORGID",LocaleValue("组织id",localEid));
    headers.AddChild("FStockOrgNumber",LocaleValue("组织编码",localEid));
    headers.AddChild("FStockOrgName",LocaleValue("组织名称",localEid));
    headers.AddChild("FMATERIALID",LocaleValue("物料id",localEid));
    headers.AddChild("FMaterialNumber",LocaleValue("物料编码",localEid));
    headers.AddChild("FMATERIALNAME",LocaleValue("物料名称",localEid));
    headers.AddChild("FBASEUNITID",LocaleValue("基本单位id",localEid));
    headers.AddChild("FBaseUnitName",LocaleValue("基本单位名称",localEid));
    headers.AddChild("FUnitID",LocaleValue("单位id",localEid));
    headers.AddChild("FUnitName",LocaleValue("单位名称",localEid));
    headers.AddChild("FSECUNITID",LocaleValue("辅助单位id",localEid));
    headers.AddChild("FSecUnitName",LocaleValue("辅助单位名称",localEid));
    headers.AddChild("fbaseqty",LocaleValue("数量(基本)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fqty",LocaleValue("数量(库存)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fsecqty",LocaleValue("数量(辅助)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("FPRECISION",LocaleValue("FPRECISION",localEid));
    headers.AddChild("FBASEPRECISION",LocaleValue("FBASEPRECISION",localEid));
    headers.AddChild("FSECPRECISION",LocaleValue("FSECPRECISION",localEid));
    headers.AddChild("fbaseprice",LocaleValue("参考价(基本)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fprice",LocaleValue("参考价(库存)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fsecprice",LocaleValue("参考价(辅助)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("famount",LocaleValue("参考金额",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("FPriceDecimal",LocaleValue("FPriceDecimal",localEid));
    headers.AddChild("FAmountDecimal",LocaleValue("FAmountDecimal",localEid));
    headers.AddChild("FMATERIALTYPEID",LocaleValue("存货类别id",localEid));
    headers.AddChild("chlbFNUMBER",LocaleValue("存货类别编码",localEid));
    headers.AddChild("FMaterialTypeName",LocaleValue("存货类别名称",localEid));
    headers.AddChild("FMATERIALMODEL",LocaleValue("规格型号",localEid));
    headers.AddChild("FStockName",LocaleValue("仓库名称",localEid));
    headers.AddChild("FStockLocId",LocaleValue("仓位id",localEid));
    headers.AddChild("FSTOCKLOC",LocaleValue("FSTOCKLOC",localEid));
   
    headers.AddChild("FDEPTID",LocaleValue("部门id",localEid));
    headers.AddChild("bmfnumber",LocaleValue("部门编码",localEid));
    headers.AddChild("bmfname",LocaleValue("部门名称",localEid));
    headers.AddChild("qijian",LocaleValue("所属旗舰",localEid));

    headers.AddChild("fbaseqty_0",LocaleValue("基本数量(3个月内)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fstockqty_0",LocaleValue("库存数量(3个月内)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fsecqty_0",LocaleValue("辅助数量(3个月内)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("famount_0",LocaleValue("参考金额(3个月内)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fbaseqty_90",LocaleValue("基本数量(4-5个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fstockqty_90",LocaleValue("库存数量(4-5个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fsecqty_90",LocaleValue("辅助数量(4-5个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("famount_90",LocaleValue("查看看金额(4-5个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fbaseqty_150",LocaleValue("基本数量(6-9个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fstockqty_150",LocaleValue("库存数量(6-9个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fsecqty_150",LocaleValue("辅助数量(6-9个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("famount_150",LocaleValue("参考金额(6-9个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fbaseqty_270",LocaleValue("基本数量(10-15个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fstockqty_270f",LocaleValue("库存数量(10-15个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fsecqty_270",LocaleValue("辅助数量(10-15个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("famount_270",LocaleValue("参考金额(10-15个月)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fbaseqty_450",LocaleValue("基本数量(15个月以上)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fstockqty_450f",LocaleValue("库存数量(15个月以上)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("fsecqty_450",LocaleValue("辅助数量(15个月以上)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("famount_450",LocaleValue("参考金额(15个月以上)",localEid),SqlStorageType.SqlDecimal);
    headers.AddChild("dullFAmount",LocaleValue("呆滞费用",localEid),SqlStorageType.SqlDecimal);
   
    #headers.AddChild("fidentityid",LocaleValue("fidentityid",localEid));
    return headers;
#构造取数Sql,取数据填充到临时表:tableName  临时表构造
def BuilderReportSqlAndTempTable(rptfilter, tableName):
    custFilter = rptfilter.FilterParameter.CustomFilter; #快捷框过滤条件
    F_TXBE_Query_Date=custFilter["F_TXBE_Query_Date"]
    # rpt = GetReportData(this.Context, "STK_InvAgeAnalyzeRpt", "STK_InvAgeAnalyzeFilter", "66a1bbf0a515fc",1,F_TXBE_Query_Date);  #Kingdee.BOS.Core.Report.MoveReport
    # dt = rpt.DataSource;   #TMP2657C6BC47FA11EF8166A74D603 临时表存储信息
    # rpttable=rpt.DataSource.TableName;#库存账龄分析表对应的临时表
    F_TXBE_Zu_Fnumber=str(custFilter["F_TXBE_Zu_Fnumber"]);
    rpt = GetReportData(this.Context, "STK_InvAgeAnalyzeRpt", "STK_InvAgeAnalyzeFilter", "66a1bbf0a515fc",0,F_TXBE_Query_Date);  #Kingdee.BOS.Core.Report.MoveReport
    rptdata=rpt
    rpttable=rpt.TableName
    #name="BPW_t_GJXLHGXJH"
    dtL=DataTable();
    #dtL.TableName=name
    # dtL.Columns.Add("FSTOCKORGID",Int64().GetType());
    # dtL.Columns.Add("FStockOrgNumber","".ToString().GetType());
    # dtL.BeginLoadData();

    flds=List[str]();
    for fld in rptdata.Columns:
        fldName=fld.ColumnName;
        dataType=fld.DataType.Name.ToUpperInvariant();
        sqlDataType="VARCHAR(MAX)";
        if("INT" in dataType):
            sqlDataType="int";
        elif("DECIMAL" in dataType):
            sqlDataType="decimal(23, 10)";
        elif("DATETIME" in dataType):
            sqlDataType="datetime";
        fldInfo=("{0} {1} ").format(fldName,sqlDataType);
        flds.Add(fldInfo);
    #raise Exception(str(flds))  #构建建表语句

    dbService=DBService();
    tempTabs=dbService.CreateTemporaryTableName(this.Context, 1);
    rptdata.TableName=tempTabs[0];
    createTempTabSql=("/*dialect*/create table {0} ( {1} ) ").format(tempTabs[0],str.Join(",",flds));
    #raise Exception(str(createTempTabSql))
    DBUtils.Execute(this.Context,createTempTabSql);
    DBUtils.BulkInserts(this.Context,  rptdata);


    #获取呆滞料分析相关信息
    rptdull = GetReportData(this.Context, "STK_DullMaterialAnalysisRpt", "STK_DullMaterialAnalysisFilter", "6699dd80b29d75",0,F_TXBE_Query_Date);  #Kingdee.BOS.Core.Report.MoveReport
    rptdulldata=rptdull
    rptdulltable=rptdull.TableName
    #name="BPW_t_GJXLHGXJH"
    dtLdull=DataTable();
    #dtL.TableName=name
    # dtL.Columns.Add("FSTOCKORGID",Int64().GetType());
    # dtL.Columns.Add("FStockOrgNumber","".ToString().GetType());
    # dtL.BeginLoadData();

    dullflds=List[str]();
    for fld in rptdulldata.Columns:
        fldName=fld.ColumnName;
        dataType=fld.DataType.Name.ToUpperInvariant();
        sqlDataType="VARCHAR(MAX)";
        if("INT" in dataType):
            sqlDataType="int";
        elif("DECIMAL" in dataType):
            sqlDataType="decimal(23, 10)";
        elif("DATETIME" in dataType):
            sqlDataType="datetime";
        fldInfo=("{0} {1} ").format(fldName,sqlDataType);
        dullflds.Add(fldInfo);
    #raise Exception(str(flds))  #构建建表语句
    dulldbService=DBService();
    dulltempTabs=dulldbService.CreateTemporaryTableName(this.Context, 1);
    rptdulldata.TableName=dulltempTabs[0];
    dullcreateTempTabSql=("/*dialect*/create table {0} ( {1} ) ").format(dulltempTabs[0],str.Join(",",dullflds));
    #raise Exception(str(createTempTabSql))
    DBUtils.Execute(this.Context,dullcreateTempTabSql);
    DBUtils.BulkInserts(this.Context,  rptdulldata);

    sql="""select rt.*,ck.FDEPTID as FDEPTID,bm.fnumber as bmfnumber,bml.fname as bmfname
        ,chlb.FNUMBER as chlbFNUMBER
        ,CASE bm.F_TXBE_COMBO_H1G
            WHEN 788 THEN '爱莓庄'
            WHEN 723 THEN '蓝百旺'
            WHEN 503 THEN '乡丰蓝莓'
            WHEN 359 THEN '旺悦莓'
            WHEN 358 THEN '梦遇莓'
            WHEN 343 THEN '十里莓园'
            WHEN 357 THEN '曼悦莓'
            WHEN 724 THEN '远蓝蓝莓'
        END AS qijian
        ,zzjg.fnumber as zzfnumber,dull.FAmount as dullFAmount
        into {0} from {1} as rt
        left join T_ORG_Organizations zzjg
        on rt.FSTOCKORGID=zzjg.FOrgID
        left join t_BD_Stock ck on rt.FSTOCKID=ck.FStockId
        left join T_BD_DEPARTMENT as bm
        on ck.FDEPTID=bm.FDEPTID
        left join T_BD_DEPARTMENT_L  as bml
        on bm.FDEPTID=bml.FDEPTID and bml.FLOCALEID=2052
        left join T_BD_MATERIALCATEGORY chlb
        on rt.FMATERIALTYPEID=chlb.FCATEGORYID
        left join {2} as dull
        on rt.FSTOCKORGID=dull.FSTOCKORGID and rt.FMATERIALID=dull.FMATERIALID and rt.FSTOCKID=dull.FSTOCKID
        where 1=1 and  (rt.FStockName like '%农药%' or rt.FStockName like '%材料%' or rt.FStockName like '%肥料%') and rt.FStockName not like '%加工%'  
        and zzjg.fnumber='{3}'""".format(tableName,tempTabs[0],dulltempTabs[0],F_TXBE_Zu_Fnumber)  
       
    DBUtils.Execute(this.Context,sql);
    #raise Exception(sql)

   
   

#报表关闭触发,通常在此处清理报表过程产生的临时表
def CloseReport():
    this.DropTempTable();


def GetReportData(ctx,rptFormId,rptFilterFormId,schemeId,currentPosition,F_TXBE_Query_Date):
    filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx);#加载字段比较条件元数据。 Kingdee.BOS.Core.CommonFilter.FilterMetaData
   
    reportMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, rptFormId);#加载物料收发明细表  Kingdee.BOS.Core.Metadata.FormMetadata
   
    reportFilterMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, rptFilterFormId);#加载物料收发明细表表过滤条件元数据。  Kingdee.BOS.Core.Metadata.FormMetadata
    #获取表单服务供应商
    reportFilterServiceProvider = reportFilterMetadata.BusinessInfo.GetForm().GetFormServiceProvider();  #Kingdee.BOS.Core.DynamicForm.FormServiceProvider
    model=SysReportFilterModel();   #Kingdee.BOS.Model.ReportFilter.SysReportFilterModel
    model.SetContext(ctx, reportFilterMetadata.BusinessInfo, reportFilterServiceProvider);#  reportFilterMetadata.BusinessInfo: Kingdee.BOS.Core.Metadata.BusinessInfo
    #reportFilterMetadata.BusinessInfo 获取过滤窗体元数据  reportFilterMetadata.BusinessInfo.GetForm()获取过滤窗体整体信息
    model.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;       #GL_RPT_SubLedger 分页账表id,库存账龄分析表
    model.FilterObject.FilterMetaData = filterMetadata;   #Kingdee.BOS.Core.CommonFilter.FilterMetaData  过滤条件元数据
    model.InitFieldList(reportMetadata, reportFilterMetadata); #初始化模型的字段列表
    model.GetSchemeList();#获取过滤方案列表  对象Kingdee.BOS.Core.CommonFilter.FilterScheme
   
    entity = model.Load(schemeId);   #过滤方案的主键值,可通过该SQL语句查询得到:SELECT * FROM T_BAS_FILTERSCHEME,根据方案标识符加载报表过滤实体
    dyn = DeserializeCustomFilter(reportFilterMetadata.BusinessInfo, entity.CustomFilterSetting);  #获取过滤窗体的自定义参数 Kingdee.BOS.Orm.DataEntity.DynamicObject
    model.DataObject = dyn;  #将反序列化后的过滤器设置赋值给模型的 DataObject
   
    filter = model.GetFilterParameter();  #Kingdee.BOS.Core.CommonFilter.FilterParameter  快捷过滤数据,返回过滤方案配置以及据此配置产生的sql语句
   
    rptParam = RptParams();   #创建一个报表参数对象 rptParams。IRptParams为报表数据源参数接口 Kingdee.BOS.Core.Report.RptParams  
    rptParam.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;  #过滤框id  STK_InvAgeAnalyzeFilter
    rptParam.CurrentPosition = currentPosition;#分页账表当前位置,除分页账表外,该值始终是0
    rptParam.StartRow = 1;
    rptParam.EndRow = int.MaxValue;#StartRow和EndRow是报表数据分页的起始行数和截至行数,一般取所有数据,所以EndRow取int最大值。
    rptParam.FilterParameter = filter;  #设置过滤条件Kingdee.BOS.Core.CommonFilter.FilterParameter  快捷过滤数据
    rptParam.FilterFieldInfo = model.FilterFieldInfo;  #Kingdee.BOS.Core.Report.FilterFieldInfo

    #today = DateTime.Today;
    #DateTime date = DateTime.Parse(today);
    result=""
    if F_TXBE_Query_Date!=None and rptFormId=="STK_InvAgeAnalyzeRpt":
        #result = today.ToString("yyyy-MM-dd");
        result=str(F_TXBE_Query_Date)
        rptParam.FilterParameter.CustomFilter["QueryGroup"]="History"   #设置单选按钮组的值
        QueryGroup=rptParam.FilterParameter.CustomFilter["QueryGroup"]  
        filter.CustomFilter["QueryDate"]=result
    else:
        QueryGroup=rptParam.FilterParameter.CustomFilter["QueryGroup"]
    #QueryDate=rptParam.FilterParameter.CustomFilter["QueryDate"]   #获取快捷过滤中的日期
    #rptParam.FilterParameter.CustomFilter["QueryDate"] = result;#快捷过滤数据包
   
    #raise Exception(str(rptParam.FilterParameter.CustomFilter["QueryDate"]))
    dic={}
    for item_prop in dyn.DynamicObjectType.Properties:
        dic[item_prop.Name] = dyn[item_prop.Name]

    dic["QueryDate"] = result
    dic["QueryGroup"]=QueryGroup
   
    filter.CustomFilter["QueryGroup"]=QueryGroup
    # rptParam.CustomParams["QueryDate"]=result
    # rptParam.CustomParams["QueryGroup"]=QueryGroup
    #raise Exception(str(dic))
    #rptParam.CustomParams["OpenParameter"] = dic
    rptParam.CustomParams.Add("OpenParameter", dic);  # 这行代码表示向这个自定义参数集合中添加一个键值对,键为 "OpenParameter" ,值为 dic
    ss=rptParam.CustomParams["OpenParameter"]
    #raise Exception(str(ss))
#raise Exception(str(dic)){'StockFrom': None, 'LotFrom_Text': None, 'StockTo': None, 'FRadio': None, 'Id': 0L, 'QueryGroup': 'Now', 'MaterialTo': None, 'QueryRange': 0L, 'LotTo_Id': 0L, 'StockFrom_Id': 0L, 'TrackPeriods': 3L, 'InvAgeEntity': <Kingdee.BOS.Orm.DataEntity.DynamicObjectCollection object at 0x0000000000000034 [Kingdee.BOS.Orm.DataEntity.DynamicObjectCollection]>, 'MaterialTo_Id': 0L, 'StockOrgId': '105904', 'RadioGroup': 'A', 'LotFrom': None, 'BillSource': 'STK_INSTOCK,PUR_RECEIVEBILL,SAL_RETURNSTOCK,PRD_INSTOCK,SP_INSTOCK,SP_RETURNMTRL,STK_MISCELLANEOUS,STK_MISDELIVERY,STK_TRANSFEROUT,STK_TRANSFERIN,STK_ASSEMBLEDAPP,STK_STATUSCONVERT,STK_STOCKCONVERT,STK_LOTADJUST,STK_OEMINSTOCK,STK_INVINIT,STK_TransferDirect,STK_STOCKCOUNTGAIN,PRD_RETURNMTRL,REM_INSTOCK,REM_ReturnMtrl,REM_TransferDirect,SUB_RETURNMTRL', 'StockTo_Id': 0L, 'ZeroBegPriceType': '1', 'MaterialFrom': None, 'FilteAgeDays': False, 'LotFrom_Id': 0L, 'MaterialFrom_Id': 0L, 'CurDateIsOne': False, 'LotTo': None, 'SplitPageByOwner': True, 'AgeDaysFrom': 0L, 'LotTo_Text': None, 'RangeUnit': 'Y', 'chkscheme': False, 'FRadio1': None, 'FIsHsStockField': '', 'QueryDate': <System.DateTime object at 0x0000000000000035 [2024-07-18 00:00:00]>, 'ShowForbidMaterial': False, 'AgeDaysTo': 0L, 'PriceSource': '3'}
    param = MoveReportServiceParameter(ctx, reportMetadata.BusinessInfo, str(Guid.NewGuid()), rptParam)   #Kingdee.BOS.Core.Report.MoveReportServiceParameter

    rpt=SysReportServiceHelper.GetListAndReportData(param)
    dt = DataTable();
    dt = rpt.DataSource;
    listcount = rpt.ListCount;
   
    if listcount > 0:
        for i in range(1, listcount):
           
            param.RptFilterParams.CurrentPosition = i;
            rptTmp = SysReportServiceHelper.GetListAndReportData(param);

            if rptTmp.DataSource != None and rptTmp.DataSource.Rows.Count > 0:
                for  row in rptTmp.DataSource.Rows:
                    dt.ImportRow(row);
    return dt;

    #return SysReportServiceHelper.GetListAndReportData(param)   #Kingdee.BOS.Core.Report.MoveReport




# /// <summary>
# /// 获取自定义参数
# /// </summary>
# /// <param name="businessInfo">过滤方案元数据</param>
# /// <param name="xml"></param>
# /// <returns></returns>

def DeserializeCustomFilter(businessInfo,xml):
    binder = DynamicObjectDcxmlBinder(businessInfo);   #Kingdee.BOS.Core.DynamicForm.DynamicObjectDcxmlBinder
   
    binder.OnlyDbProperty = False;
    target = DcxmlSerializer(binder);    #Kingdee.BOS.Serialization.DcxmlSerializer
   
    #切换到中性语言,获取主差量
    #CultureInfo inv = new CultureInfo(2052); //中性语言
    #binder.Culture = CultureInfo.InvariantCulture;// inv;
    #binder.Culture = CultureInfo.InvariantCulture;
    #集合忽略主键冲突
    target.ColloctionIgnorePKValue = True;
    obj = target.DeserializeFromString(xml, None);   #Kingdee.BOS.Orm.DataEntity.DynamicObject
   
    return obj;




 

posted on 2024-07-25 17:36  这一生,谢谢自己  阅读(3)  评论(0编辑  收藏  举报