上传文件至 /

This commit is contained in:
2025-07-11 15:28:58 +08:00
parent 77a8b6273e
commit ef59ac5bf2
5 changed files with 399 additions and 0 deletions

View File

@@ -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 = ""
#<23><>ʼ<EFBFBD><CABC>
def Initialize():
this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL
this.IsCreateTempTableByPlugin = True
this.ReportProperty.IsGroupSummary = True
#<23><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
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
#<23><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
def GetBaseDataNameValue(dyobj):
name = ""
#raise Exception(str(dir(dyobj)))#<23>׳<EFBFBD><D7B3><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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
#<23><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
def GetAssitantDataNameValue(dyobj):
name = ""
#raise Exception(str(dir(dyobj)))#<23>׳<EFBFBD><D7B3><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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
#<23><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
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 [<5B><>֯],[<5B><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>] FROM T_ReportDataSourceDetail"""
data = DBUtils.ExecuteDynamicObject(this.Context, tempsql)
global FOrg
global FGroup
if data.Count>0:
FOrg = data[0]["<EFBFBD><EFBFBD>֯"].ToString()
FGroup = data[0]["<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"].ToString()
# FGroup = String.join(",",set(map(lambda x:str(x["<22><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>"].ToString()),data)))
for row in res:
ColumnName = row["ColumnName"].ToString().Replace("&","")
if ColumnName in ["<EFBFBD><EFBFBD><EFBFBD><EFBFBD>","ƾ֤<EFBFBD><EFBFBD>","ժҪ","<EFBFBD><EFBFBD>Ŀ","<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"]:
header.AddChild(row["ColumnName"],LocaleValue("<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>"+FOrg+"&"+ColumnName,this.Context.UserLocale.LCID),SqlStorageType.Sqlvarchar)
continue
if ColumnName in ["ƾ֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"]:
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
#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
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)
#<23><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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()
# #<23><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>Ϣ
# def GetSummaryColumnInfo(Filter):
# lstfield = List[SummaryField]()
# sField = SummaryField("<22><>λ<EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD>",Core.Enums.BOSEnums.Enu_SummaryType.SUM)
# lstfield.Add(sField)
# return lstfield
#<23><><EFBFBD><EFBFBD>
def OrderColumn(Filter):
OrderBy = ""
datasort = Filter.FilterParameter.SortString.ToString()
if datasort != "":
OrderBy = datasort
else:
OrderBy = " <20><>Ŀ "
return OrderBy
#<23>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
def CloseReport():
this.DropTempTable()

View File

@@ -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 = ""
#<23><>ʼ<EFBFBD><CABC>
def Initialize():
this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL
this.IsCreateTempTableByPlugin = True
this.ReportProperty.IsGroupSummary = True
#<23><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
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
#<23><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
def GetBaseDataNameValue(dyobj):
name = ""
#raise Exception(str(dir(dyobj)))#<23>׳<EFBFBD><D7B3><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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
#<23><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
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
#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
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)
#<23><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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()
# #<23><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>Ϣ
# def GetSummaryColumnInfo(Filter):
# lstfield = List[SummaryField]()
# sField = SummaryField("<22><>λ<EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD>",Core.Enums.BOSEnums.Enu_SummaryType.SUM)
# lstfield.Add(sField)
# return lstfield
#<23><><EFBFBD><EFBFBD>
def OrderColumn(Filter):
OrderBy = ""
datasort = Filter.FilterParameter.SortString.ToString()
if datasort != "":
OrderBy = datasort
else:
OrderBy = " <20><>Ŀ "
return OrderBy
#<23>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
def CloseReport():
this.DropTempTable()

38
ZHIRONG.Report.pyproj Normal file
View File

@@ -0,0 +1,38 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>d1abf5b5-e4ad-4d3c-b74d-3e2e4589b62b</ProjectGuid>
<ProjectHome>.</ProjectHome>
<StartupFile>ZHIRONG.Report.DevelopmentCostDetails.py</StartupFile>
<SearchPath>
</SearchPath>
<WorkingDirectory>D:\source\repos\ZHIRONG.Report\ZHIRONG.Report\ZHIRONG.Report.py</WorkingDirectory>
<OutputPath>.</OutputPath>
<Name>ZHIRONG.Report</Name>
<RootNamespace>ZHIRONG.Report</RootNamespace>
<IsWindowsApplication>False</IsWindowsApplication>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>true</DebugSymbols>
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
</PropertyGroup>
<ItemGroup>
<Compile Include="ZHIRONG.Report.DevelopmentCostSum.py" />
<Compile Include="ZHIRONG.Report.DevelopmentCostDetails.py" />
<Compile Include="调试.py" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" />
<!-- Uncomment the CoreCompile target to enable the Build command in
Visual Studio and specify your pre- and post-build commands in
the BeforeBuild and AfterBuild targets below. -->
<!--<Target Name="CoreCompile" />-->
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
</Project>

20
ZHIRONG.Report.sln Normal file
View File

@@ -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

43
调试.py Normal file
View File

@@ -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