133 lines
4.4 KiB
Python
133 lines
4.4 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 = ""
|
|
|
|
#初始化
|
|
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() |