Files
ZHIRONG.Report/ZHIRONG.Report.DevelopmentCostDetails.py
2025-07-11 15:28:58 +08:00

165 lines
5.6 KiB
Python

#-*- encoding:utf-8 -*-
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")
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.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 *
_sql = ""
FOrg = ""
FGroup = ""
#初始化
def Initialize():
this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL
this.IsCreateTempTableByPlugin = True
this.ReportProperty.IsGroupSummary = True
#设置标题
def GetReportTitles(Filter):
reportTitles = ReportTitles()
customFiler = Filter.FilterParameter.CustomFilter
if customFiler:
FStartDate = customFiler["FStartDate"]
FEndDate = customFiler["FEndDate"]
global FGroup
reportTitles.AddTitle("FStartDate",str(FStartDate))
reportTitles.AddTitle("FEndDate",str(FEndDate))
reportTitles.AddTitle("FGroup",FGroup)
return reportTitles
#获取基础资料
def GetBaseDataNameValue(dyobj):
name = ""
#raise Exception(str(dir(dyobj)))#抛出异常检查调试
if dyobj is None:
return name
elif dyobj and dyobj.DynamicObjectType.Properties.Contains("Name"):
name = dyobj["Name"].ToString()
else:
for dynbj in dyobj:
if dynbj and dynbj.DynamicObjectType.Properties.Contains("Name") == False:
dynbj2 = dynbj[2]
name = name + ",'" + dynbj2["Name"] + "'"
if name.Length > 0:
name = name.Substring(1,name.Length - 1)
return name
#获取辅助资料
def GetAssitantDataNameValue(dyobj):
name = ""
#raise Exception(str(dir(dyobj)))#抛出异常检查调试
if dyobj is None:
return name
elif dyobj and dyobj.DynamicObjectType.Properties.Contains("DataValue"):
name = dyobj["DataValue"].ToString()
else:
for dynbj in dyobj:
if dynbj and dynbj.DynamicObjectType.Properties.Contains("DataValue") == False:
dynbj2 = dynbj[2]
name = name + ",'" + dynbj2["DataValue"] + "'"
if name.Length > 0:
name = name.Substring(1,name.Length - 1)
return name
#设置单据列
def GetReportHeaders(Filter):
header = ReportHeader()
# headerch = ReportHeader()
global _sql
sql = """/*dialect*/SELECT name AS ColumnName FROM sys.dm_exec_describe_first_result_set(N'{0}', NULL, NULL)""".format(_sql)
res = DBUtils.ExecuteDynamicObject(this.Context, sql)
tempsql = """/*dialect*/SELECT TOP 1 [组织],[科目分类] FROM T_ReportDataSourceDetail"""
data = DBUtils.ExecuteDynamicObject(this.Context, tempsql)
global FOrg
global FGroup
if data.Count>0:
FOrg = data[0]["组织"].ToString()
FGroup = data[0]["科目分类"].ToString()
# FGroup = String.join(",",set(map(lambda x:str(x["科目分类"].ToString()),data)))
for row in res:
ColumnName = row["ColumnName"].ToString().Replace("&","")
if ColumnName in ["日期","凭证号","摘要","科目","科目分类"]:
header.AddChild(row["ColumnName"],LocaleValue("单位名称:"+FOrg+"&"+ColumnName,this.Context.UserLocale.LCID),SqlStorageType.Sqlvarchar)
continue
if ColumnName in ["凭证金额"]:
header.AddChild(row["ColumnName"],LocaleValue(row["ColumnName"],this.Context.UserLocale.LCID),SqlStorageType.Sqlvarchar)
continue
if(ColumnName.IndexOf("qazxsw/")!=-1 and ColumnName!="qazxsw/"):
headerch = header.AddChild(row["ColumnName"],LocaleValue(ColumnName.Substring(0,ColumnName.IndexOf("qazxsw/")),this.Context.UserLocale.LCID),SqlStorageType.Sqlvarchar)
headerch.AddChild(row["ColumnName"],LocaleValue(ColumnName.Substring(ColumnName.IndexOf("qazxsw/")+7),this.Context.UserLocale.LCID),SqlStorageType.Sqlvarchar)
return header
#创建临时报表
def BuilderReportSqlAndTempTable(Filter,tableName):
# strFilter = GetFilterWhere(Filter)
strFilter = ""
seqFld = String.format(this.KSQL_SEQ,OrderColumn(Filter))
customFiler = Filter.FilterParameter.CustomFilter
FGroupID = "" if customFiler["FGroup"] == None else str(customFiler["FGroup"]["Id"])
DBUtils.Execute(this.Context, "EXEC P_ReportDataSourceDetail '{0}','{2}',{1},'{3}'".format(str(customFiler["FStartDate"].ToString("yyyy-MM-dd")),str(customFiler["FOrg"]["Id"]),str(customFiler["FEndDate"].ToString("yyyy-MM-dd")),FGroupID))
global _sql
_sql = """SELECT * FROM T_ReportDataSourceDetail"""
sql = String.format("""/*dialect*/
SELECT t1.*,{0}
INTO {1}
FROM (
{3}
{2}
) t1
""",seqFld,tableName,strFilter,_sql)
DBUtils.ExecuteDynamicObject(this.Context, sql)
#获取过滤条件
def GetFilterWhere(Filter):
customFiler = Filter.FilterParameter.CustomFilter
strwhere = StringBuilder()
strwhere.AppendLine("WHERE 1 = 1 ")
FYEAR = customFiler["FYear"]
strFilterFYEAR = String.format(" AND T2.FYEAR = '{0}' ",FYEAR) if not String.IsNullOrWhiteSpace(FYEAR) else " "
strwhere.AppendLine(strFilterFYEAR)
return strwhere.ToString()
# #设置汇总信息
# def GetSummaryColumnInfo(Filter):
# lstfield = List[SummaryField]()
# sField = SummaryField("本位币金额",Core.Enums.BOSEnums.Enu_SummaryType.SUM)
# lstfield.Add(sField)
# return lstfield
#排序
def OrderColumn(Filter):
OrderBy = ""
datasort = Filter.FilterParameter.SortString.ToString()
if datasort != "":
OrderBy = datasort
else:
OrderBy = " 科目 "
return OrderBy
#关闭清空临时表
def CloseReport():
this.DropTempTable()