#-*- 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()