首页 > 其他分享 >金蝶云星空获取简单账表数据写入临时表中

金蝶云星空获取简单账表数据写入临时表中

时间:2024-10-31 10:43:48浏览次数:1  
标签:en 金蝶 format BOS Kingdee tempTabs 表中 账表 import

#引入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.App.Core')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Kingdee.K3.FIN.ServiceHelper')
clr.AddReference('Kingdee.K3.FIN.HS.ServiceHelper')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.Model')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.JSON import *
from Kingdee.BOS.Util import *
from Kingdee.BOS.Core 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.List import*
from Kingdee.BOS.Core.List.PlugIn import *
from Kingdee.BOS.Core.SqlBuilder 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.K3.FIN.HS.ServiceHelper import *
from Kingdee.K3.FIN.ServiceHelper import *
#下面是获取简单账表数据需要的引用
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.Core.Report import *
from Kingdee.BOS.Model.ReportFilter import *
from Kingdee.BOS.App.Core import *
from Kingdee.BOS.Core.SqlBuilder import *

tempTabs=None;
def getRptData(ctx,RptFormId,filterFormID,SchemeId,startDate,endDate,billIdList):
sysReporSservice=SysReportService();
#permissionService=ServiceFactory.GetPermissionService(ctx);
filterMetadata=FormMetaDataCache.GetCachedFilterMetaData(ctx);#加载字段比较条件元数据。
reportMetadata=FormMetaDataCache.GetCachedFormMetaData(ctx, RptFormId);#加载账表元数据。
reportFilterMetadata=FormMetaDataCache.GetCachedFormMetaData(ctx, filterFormID);#加载账表过滤条件元数据。
reportFilterServiceProvider=reportFilterMetadata.BusinessInfo.GetForm().GetFormServiceProvider();
filterModel=SysReportFilterModel();
filterModel.SetContext(ctx, reportFilterMetadata.BusinessInfo, reportFilterServiceProvider);
filterModel.FormId=reportFilterMetadata.BusinessInfo.GetForm().Id;
filterModel.FilterObject.FilterMetaData=filterMetadata;
filterModel.InitFieldList(reportMetadata,reportFilterMetadata);
SchemeList=list(s for s in filterModel.GetSchemeList() if(s.Id == SchemeId) );
if(len(SchemeList)<= 0):
error=("过滤方案[{0}]不存在,或者不存在该过滤方案的权限!").format(SchemeId);
raise Exception(error);
return None;
#过滤方案ID,可通过该SQL语句查询得到:SELECT * FROM T_BAS_FILTERSCHEME
entity=filterModel.Load(SchemeId);
filterPara=filterModel.GetFilterParameter();
p=RptParams();
p.FormId=reportFilterMetadata.BusinessInfo.GetForm().Id;
p.StartRow=1;
p.EndRow=Int32.MaxValue;#StartRow和EndRow是报表数据分页的起始行数和截至行数,一般取所有数据,所以EndRow取int最大值。
p.FilterParameter=filterPara;
p.FilterFieldInfo=filterModel.FilterFieldInfo;
filterStr=p.FilterParameter.FilterString;
p.FilterParameter.CustomFilter["StartDate"]=startDate;
p.FilterParameter.CustomFilter["EndDate"]=endDate;
p.FilterParameter.FilterString=(" FBillId in ({0}) ").format(str.Join(",",billIdList));
#error=("[{0}]{1}").format(p.FilterParameter.FilterString,filterStr);
#raise Exception(error);
#p.BaseDataTempTable.AddRange(permissionService.GetBaseDataTempTable(ctx, reportMetadata.BusinessInfo.GetForm().Id));
#修改过滤方案中的参数值
#acctStartFld=reportFilterMetadata.BusinessInfo.GetField("FSTARTBALANCE");
#acctId=LoadPKValue(acctStartFld.LookUpObject.FormId,"1602");
#acctObj=BusinessDataServiceHelper.LoadSingle(ctx, acctId, acctStartFld.RefFormDynamicObjectType);#基础资料字段数据包
#p.FilterParameter.CustomFilter["STARTBALANCE_Id"]=acctId;
#p.FilterParameter.CustomFilter["STARTBALANCE"]=acctObj;
#acctStartFld.DynamicProperty.SetValue(p.FilterParameter.CustomFilter,acctObj);
#acctStartFld.RefIDDynamicProperty.SetValue(p.FilterParameter.CustomFilter,acctId);
#raise Exception(JsonUtil.Serialize(p.FilterParameter.CustomFilter));
tab=sysReporSservice.GetData(ctx, reportMetadata.BusinessInfo, p);
ServiceFactory.CloseService(sysReporSservice);
#ServiceFactory.CloseService(permissionService);
return tab;
#列表菜单点击事件,列表菜单点击开始时触发
#此事件也是很常用的,可以在此事件中取消菜单的点击事件
#使用时一定要判断菜单标识!!!
def BarItemClick(e):
global tempTabs;
key=e.BarItemKey.ToUpperInvariant();
if(key=="TWKH_tbBGetExpenseAmt".ToUpperInvariant()):
#e.Cancel=True;#取消菜单的点击,可以阻止后续功能的触发,可完成一些简单校验
selectedRowsInfo=this.ListView.SelectedRowsInfo;#列表勾选的数据集
if(selectedRowsInfo.Count<=0):
this.View.ShowWarnningMessage("未选择任何行!");
return;
entityKey=selectedRowsInfo[0].EntryEntityKey;
billIDs=selectedRowsInfo.GetPrimaryKeyValues();
entryIDs=selectedRowsInfo.GetEntryPrimaryKeyValues();
msg=("[{0}]").format(entityKey);
whereBill=(" AND en.FID in ({0}) ").format(str.Join(",",billIDs));
if(entityKey=="FEntityDetail"):
whereBill=(" AND en.FENTRYID in ({0}) ").format(str.Join(",",entryIDs));
sql=("""/*dialect*/select *
from
(
select distinct h.FID,h.FBILLNO,h.FDATE
from t_AR_receivableEntry en
inner join t_AR_receivableEntry_LK lk on lk.FENTRYID=en.FENTRYID
inner join T_SAL_OUTSTOCK h on h.FID=lk.FSBILLID
where en.FSOURCETYPE='SAL_OUTSTOCK' and h.FDOCUMENTSTATUS='C' {0}
union all
select distinct h.FID,h.FBILLNO,h.FDATE
from t_AR_receivableEntry en
inner join t_AR_receivableEntry_LK lk on lk.FENTRYID=en.FENTRYID
inner join T_SAL_RETURNSTOCK h on h.FID=lk.FSBILLID
where en.FSOURCETYPE='SAL_RETURNSTOCK'and h.FDOCUMENTSTATUS='C' {0}
) ysd
order by ysd.FDATE """).format(whereBill);
ds=DBServiceHelper.ExecuteDataSet(this.Context,sql);
AllRows=ds.Tables[0].Rows;
if(AllRows.Count<=0):
this.View.ShowWarnningMessage("勾选的应收单上游单据不是[销售出库]或者[销售退货],无法获取费用项目明细!");
return;
billIds=List[str]();
for dr in AllRows:
billID=str(dr["FID"]);
billIds.Add(billID);
beginDate=AllRows[0]["FDATE"];
endDate=AllRows[AllRows.Count-1]["FDATE"];
SchemeId="64b2c0e2a55200";
sysTab=getRptData(this.Context,"HS_SALESLIST","HS_SALESLISTFILTER",SchemeId,beginDate,endDate,billIds);
if(sysTab.Rows.Count<=0):
this.View.ShowWarnningMessage("勾选的应收单暂未获取到任何费用项目明细数据,可能还未进行该期间的存货核算!");
return;
flds=List[str]();
for fld in sysTab.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);
#tempTabName=sysTab.TableName;
dbService=DBService();
tempTabs=dbService.CreateTemporaryTableName(this.Context, 1);
sysTab.TableName=tempTabs[0];
createTempTabSql=("/*dialect*/create table {0} ( {1} ) ").format(tempTabs[0],str.Join(",",flds));
DBUtils.Execute(this.Context,createTempTabSql);
try:
DBUtils.BulkInserts(this.Context, sysTab);
#msg=("[{0}]---{1}").format(tempTabs[0],JsonUtil.Serialize(sysTab));
#this.View.ShowMessage(msg);
subEnSql=("""/*dialect*/select
FSeq=cast(row_Number() Over(partition by en.FENTRYID Order by tab.FIDENTITYID) AS int),
FEntryID=Cast(en.FEntryID as int),
FDetailID=Cast(0 as int),
F_TWKH_EXPID=Cast(expen.FEXPID as int),
F_TWKH_EXPAMT=cast(tab.FAmount AS decimal(13,10))
from t_AR_receivableEntry en
inner join t_AR_receivableEntry_LK lk on lk.FENTRYID=en.FENTRYID
inner join {1} tab
inner join T_BD_EXPENSE expen on expen.FNumber=tab.FEXPENSEID
on tab.FBillFormId=en.FSOURCETYPE and tab.FBillId=lk.FSBILLID and tab.FBillEntryId=lk.FSID
where en.FSOURCETYPE in ('SAL_RETURNSTOCK','SAL_OUTSTOCK') {0} """).format(whereBill,tempTabs[0]);
ds=DBServiceHelper.ExecuteDataSet(this.Context,subEnSql);
subTab=ds.Tables[0];
dataCount=subTab.Rows.Count;
if(dataCount<=0):
this.View.ShowWarnningMessage("勾选的应收单暂未匹配到任何费用项目明细数据,可能还未进行该期间的存货核算!");
clearTempTable();
return;
subTab.TableName="TWKH_t_YSD_ExpenseSubEntry";
newFIDs = DBServiceHelper.GetSequenceInt64(this.Context, subTab.TableName,dataCount);
i=0;
for dr in subTab.Rows:
FDetailId=newFIDs[i];
dr["FDetailID"]=FDetailId;
i=i+1;
deleteOldDataSql=("""/*dialect*/delete from {0}
where FEntryID in
(
select distinct en.FEntryID
from t_AR_receivableEntry en
where en.FSOURCETYPE in ('SAL_RETURNSTOCK','SAL_OUTSTOCK') {1}
) """).format(subTab.TableName,whereBill);
DBUtils.Execute(this.Context,deleteOldDataSql);
DBUtils.BulkInserts(this.Context, subTab);
clearTempTable();
msg=("获取数据成功,共选中[{0}]条应收单数据,获取到费用项目明细数据共[{1}]条![{2}]").format(selectedRowsInfo.Count,dataCount,tempTabs[0]);
this.View.ShowMessage(msg);
except Exception as e:
error=("发生异常了[{1}]:{0}").format(e,tempTabs[0]);
this.View.ShowWarnningMessage(error);
finally:
clearTempTable();
def clearTempTable():
global tempTabs;
if(tempTabs is not None and tempTabs.Length>0):
#dbService=DBService();
#该删除服务实际不会立即删除临时表,只是将可以删除的临时表打上标记,然后依赖一个清理临时表的执行计划,定期删除过期的临时表。
#dbService.DeleteTemporaryTableName(this.Context, tempTabs);
for temp in tempTabs:
deleteTempSql=("""/*dialect*/IF EXISTS(SELECT * FROM sys.objects WHERE object_id=OBJECT_ID(N'{0}') AND type IN (N'U'))
drop table {0} """).format(temp);#立即删除临时表
DBUtils.Execute(this.Context,deleteTempSql);

标签:en,金蝶,format,BOS,Kingdee,tempTabs,表中,账表,import
From: https://www.cnblogs.com/woshinige/p/18517221

相关文章

  • 金蝶云星空与吉客云的采购入库数据无缝对接方案
    在企业信息化建设中,数据的高效集成和处理是确保业务顺畅运行的关键环节。本文将聚焦于一个实际的系统对接集成案例——金蝶云星空的数据如何无缝对接到吉客云,实现采购入库数据的高效传输与处理。本次集成方案名为“金蝶采购入库对接吉客云采购入库”,主要涉及两个核心平台:金蝶云星......
  • 利用API接口实现旺店通和金蝶系统的无缝数据对接
    旺店通销售出库对接金蝶销售订单(线下)的技术实现在企业日常运营中,数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体案例:如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据无缝对接到金蝶云星空系统。我们将详细探讨这一过程中涉及的技术要点和解决方......
  • 数据集成案例:金蝶云采购入库单到旺店通委外仓
    标准-金蝶-采购入库单——>旺店通-委外仓入(入库业务)集成案例分享在企业信息化系统中,数据的高效流动和准确对接是确保业务顺畅运行的关键。本文将分享一个实际运行的集成方案:如何将金蝶云星空中的采购入库单数据无缝集成到旺店通·旗舰版的委外仓入库业务中。为了实现这一目标......
  • 易仓与金蝶云星空的数据无缝对接方案解析
    易仓数据集成到金蝶云星空:R入库单(组装)-其他入库单20230620在企业信息化管理中,数据的高效流转和准确对接至关重要。本文将分享一个具体的系统对接集成案例,即如何将易仓的数据集成到金蝶云星空平台,方案名称为“R入库单(组装)-其他入库单20230620”。本次集成任务主要涉及两个关键API......
  • 如何通过轻易云实现旺店通与金蝶云数据集成
    旺店通其他入库委外同步--114:从旺店通·企业奇门到金蝶云星空的数据集成案例在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,实现旺店通·企业奇门数据与金蝶云星空的无缝对接。具体方案为“旺店通其他入库委外同步--114”,旨在确保数据高效、准确地从旺店通·企业奇门......
  • 轻易云平台成功实现金蝶云星空与马帮的数据同步
    新增供应商同步金蝶=》马帮(测试通过)在企业信息化系统中,数据的高效集成与同步是确保业务流程顺畅运行的关键环节。本文将分享一个实际案例,展示如何通过轻易云数据集成平台实现金蝶云星空与马帮之间的数据对接。具体方案为“新增供应商同步金蝶=》马帮(测试通过)”。在这个案例中,我......
  • 高效集成:金蝶云星空与聚水潭的数据对接方案
    高效集成:金蝶云星空与聚水潭的数据对接方案金蝶云星空与聚水潭的高效数据集成方案在企业日常运营中,销售订单的数据处理和管理是至关重要的一环。为了实现金蝶云星空与聚水潭之间的无缝对接,我们设计并实施了“金蝶--线下快递销售订单=>聚水潭--销售订单上传”的集成方案。本案例......
  • 使用轻易云高效集成旺店通与金蝶云星空
    旺店通销售出库集成到金蝶云星空的技术实现在企业信息化管理中,数据的高效流动和准确对接是提升业务效率的关键。本文将详细介绍如何通过轻易云数据集成平台,将旺店通·企业奇门中的销售出库数据无缝集成到金蝶云星空系统中,实现销售出库单的自动化处理。集成背景与需求本次集成任务旨......
  • 企业数据高效集成:聚水潭与金蝶系统对接实战
    聚水潭盘亏-金蝶其他出库:高效数据集成方案在企业管理系统中,如何实现不同平台间的数据无缝对接一直是一个关键挑战。本文将分享一个具体的技术案例:如何通过轻易云数据集成平台,将聚水潭的盘亏数据高效集成到金蝶云星空的其他出库模块。背景与需求分析在本次集成项目中,我们需要从......
  • 金蝶云星空与聚水潭数据无缝对接技巧
    金蝶云星空与聚水潭的数据集成案例分享在企业信息化管理中,数据的高效流动和准确对接至关重要。本文将深入探讨如何通过轻易云数据集成平台,实现金蝶云星空物料数据到聚水潭商品数据的无缝对接。本次集成方案命名为“金蝶-物料——>聚水潭-商品”,旨在解决跨平台数据同步中的诸多技......