From ef59ac5bf2e268198367513d36329c2abc93cc1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=90=BC=E6=B5=B7?= <1160945909@qq.com> Date: Fri, 11 Jul 2025 15:28:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZHIRONG.Report.DevelopmentCostDetails.py | 165 +++++++++++++++++++++++ ZHIRONG.Report.DevelopmentCostSum.py | 133 ++++++++++++++++++ ZHIRONG.Report.pyproj | 38 ++++++ ZHIRONG.Report.sln | 20 +++ 调试.py | 43 ++++++ 5 files changed, 399 insertions(+) create mode 100644 ZHIRONG.Report.DevelopmentCostDetails.py create mode 100644 ZHIRONG.Report.DevelopmentCostSum.py create mode 100644 ZHIRONG.Report.pyproj create mode 100644 ZHIRONG.Report.sln create mode 100644 调试.py diff --git a/ZHIRONG.Report.DevelopmentCostDetails.py b/ZHIRONG.Report.DevelopmentCostDetails.py new file mode 100644 index 0000000..a778015 --- /dev/null +++ b/ZHIRONG.Report.DevelopmentCostDetails.py @@ -0,0 +1,165 @@ +#-*- 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() \ No newline at end of file diff --git a/ZHIRONG.Report.DevelopmentCostSum.py b/ZHIRONG.Report.DevelopmentCostSum.py new file mode 100644 index 0000000..5ee3926 --- /dev/null +++ b/ZHIRONG.Report.DevelopmentCostSum.py @@ -0,0 +1,133 @@ +#-*- 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 = "" + +#³õʼ»¯ +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"] + FUnit = customFiler["FUnit"] + FOrg = GetBaseDataNameValue(customFiler["FOrg"]) + reportTitles.AddTitle("FStartDate",str(FStartDate)) + reportTitles.AddTitle("FEndDate",str(FEndDate)) + reportTitles.AddTitle("FUnit",FUnit) + reportTitles.AddTitle("FOrg",FOrg) + 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 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) + for row in res: + ColumnName = row["ColumnName"].ToString() + if(ColumnName.IndexOf("qazxsw/")!=-1 and ColumnName!="qazxsw/"): + headerch = header.AddChild(ColumnName,LocaleValue(ColumnName.Substring(0,ColumnName.IndexOf("qazxsw/")),this.Context.UserLocale.LCID),SqlStorageType.Sqlvarchar) + headerch.AddChild(ColumnName,LocaleValue(ColumnName.Substring(ColumnName.IndexOf("qazxsw/")+7),this.Context.UserLocale.LCID),SqlStorageType.Sqlvarchar) + continue + header.AddChild(row["ColumnName"].ToString(),LocaleValue(row["ColumnName"].ToString().Replace("qazxsw/",""),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 + DBUtils.Execute(this.Context, "EXEC P_ReportDataSource '{0}','{2}',{1},{3}".format(str(customFiler["FStartDate"].ToString("yyyy-MM-dd")),str(customFiler["FOrg"]["Id"]),str(customFiler["FEndDate"].ToString("yyyy-MM-dd")),customFiler["FUnit"])) + global _sql + _sql = """SELECT * FROM T_ReportDataSource""" + 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() \ No newline at end of file diff --git a/ZHIRONG.Report.pyproj b/ZHIRONG.Report.pyproj new file mode 100644 index 0000000..228f92b --- /dev/null +++ b/ZHIRONG.Report.pyproj @@ -0,0 +1,38 @@ + + + Debug + 2.0 + d1abf5b5-e4ad-4d3c-b74d-3e2e4589b62b + . + ZHIRONG.Report.DevelopmentCostDetails.py + + + D:\source\repos\ZHIRONG.Report\ZHIRONG.Report\ZHIRONG.Report.py + . + ZHIRONG.Report + ZHIRONG.Report + False + + + true + false + + + true + false + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ZHIRONG.Report.sln b/ZHIRONG.Report.sln new file mode 100644 index 0000000..0f67869 --- /dev/null +++ b/ZHIRONG.Report.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.12.35506.116 d17.12 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "ZHIRONG.Report", "ZHIRONG.Report\ZHIRONG.Report.pyproj", "{D1ABF5B5-E4AD-4D3C-B74D-3E2E4589B62B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D1ABF5B5-E4AD-4D3C-B74D-3E2E4589B62B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1ABF5B5-E4AD-4D3C-B74D-3E2E4589B62B}.Release|Any CPU.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/调试.py b/调试.py new file mode 100644 index 0000000..8ec61d5 --- /dev/null +++ b/调试.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +import sys +sys.setdefaultencoding('utf-8') +clr.AddReference('IronPython') +from IronPython.Hosting import Python + +def wrap_d(f): + func_name = f.__name__ + del f + def wrapper(e): + engine = Python.CreateEngine({'Debug': True}) + scope = engine.CreateScope() + scope.SetVariable('this', this) + engine.CreateScriptSourceFromFile(r'D:\source\repos\ZHIRONG.Report\ZHIRONG.Report\ZHIRONG.Report.DevelopmentCostDetails.py').Execute(scope) + return getattr(scope, func_name)(e) + return wrapper + +def wrap_a(f): + func_name = f.__name__ + del f + def wrapper(e,a): + engine = Python.CreateEngine({'Debug': True}) + scope = engine.CreateScope() + scope.SetVariable('this', this) + engine.CreateScriptSourceFromFile(r'D:\source\repos\ZHIRONG.Report\ZHIRONG.Report\ZHIRONG.Report.DevelopmentCostDetails.py').Execute(scope) + return getattr(scope, func_name)(e,a) + return wrapper + + +@wrap_a +def BuilderReportSqlAndTempTable(e,a): + pass + +@wrap_d +def GetReportHeaders(e): + pass + +@wrap_d +def GetReportTitles(e): + pass + + +