123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946 |
- unit ReportManager;
- interface
- uses
- rmGclBillsBGDm, rmGclBillsCompareDm, rmGridHeaderDm, rmFxBillsCompareDm,
- rmBGLExecutionDm, rmGclBillsAddDm, rmFxBillsAddDm, rmBillsGatherDm,
- rmGclBillsAuditCompareDm, rmDealInfosDm, rmXmjBGLDetailDm,
- rmOtherReport1Dm, rmGcl_XmjBillsDm, rmGclBillsPlaneDm,
- rmMentalCustomized1Dm, rmCustomized2Dm, rmHaBaiCustomizedDm,
- rmWeiWuZjjlGatherDm, rmZhongKaiDm, rmWuJiuZqzfGatherDm,
- rmTestFrm,
- ReportInteractInfo,
- Classes, ScFileArchiver, IniFiles, Graphics, DB, ProjectData,
- sdDB, ADODB;
- type
- TTemplateNode = class
- private
- FFileName: string;
- FPropertyStr: String;
- FTemplateName: string;
- FClassNum: string;
- FClassName: string;
- FSubClassNum: string;
- FSubClassName: string;
- FHasPriceChange: Boolean;
- FIsMulti: Boolean;
- FIsExtra: Boolean;
- FInteractFlag: Integer;
- FInteractSubFlag: Integer;
- FInteractInfo: TInteractInfo;
- FDataPrepareFlag: Integer;
- FDataBaseFlag: Integer;
- FSelfFormat: Integer;
- procedure ReadPropertyStr;
- procedure AnalyzePropertyStr;
- procedure LoadReportInteract;
- procedure LoadTemplateProperties;
- function GetMultiFileNames(APhaseIndex: Integer): string;
- public
- constructor Create(AFileName: string);
- destructor Destroy; override;
- procedure RefreshTemplateProperties;
- property FileName: string read FFileName write FFileName;
- property TemplateName: string read FTemplateName;
- property ClassNum: string read FClassNum;
- property ClassName: string read FClassName;
- property SubClassNum: string read FSubClassNum;
- property SubClassName: string read FSubClassName;
- property HasPriceChange: Boolean read FHasPriceChange;
- // 多表筛选
- property IsMulti: Boolean read FIsMulti;
- property MultiFileNames[APhaseIndex: Integer]: string read GetMultiFileNames;
- // 含附加
- property IsExtra: Boolean read FIsExtra;
- // 交互表 -- 部分数据需要用户选择后存入指定的数据表中
- property InteractFlag: Integer read FInteractFlag;
- property InteractSubFlag: Integer read FInteractSubFlag;
- // 数据准备类型
- property DataPrepareFlag: Integer read FDataPrepareFlag;
- // 链接数据库
- property DataBaseFlag: Integer read FDataBaseFlag;
- // 自主格式
- property SelfFormat: Integer read FSelfFormat;
- property InteractInfo: TInteractInfo read FInteractInfo;
- end;
- PTemplateNode = ^TTemplateNode;
- TTemplateManager = class
- private
- FTemplateList: TList;
- FTemplateNode: TTemplateNode;
- procedure Clear;
- function GetCount: Integer;
- function GetTemplate(AIndex: Integer): TTemplateNode;
- public
- constructor Create;
- destructor Destroy; override;
- procedure RefreshTemplates;
- procedure LoadReportTemplates(const sTemplateDir: String);
- function AddReportTemplate(const AFileName: string): TTemplateNode;
- procedure DeleteReportTemplate(ANode: TTemplateNode);
- function FindTemplate(const AFileName: string): TTemplateNode;
- property Count: Integer read GetCount;
- property Template[AIndex: Integer]: TTemplateNode read GetTemplate;
- property Current: TTemplateNode read FTemplateNode write FTemplateNode;
- end;
- TReportConfig = class
- private
- FIniFile: TIniFile;
- FLeftEdge: Integer;
- FRightEdge: Integer;
- FDownEdge: Integer;
- FUpEdge: Integer;
- FContentIsNarrow: Boolean;
- FRepCellVerLine: Boolean;
- FRepCellHorLine: Boolean;
- FRepBorderUnderLine: Boolean;
- FAutoRetLine: Boolean;
- FRepBorderVerLine: Boolean;
- FBorderLine: Integer;
- FReportCellLine: Double;
- FPageSize: string;
- FGridHeaderFont: TFont;
- FHeaderFont: TFont;
- FTitleFont: TFont;
- FColumnFont: TFont;
- FGatherFont: TFont;
- FContentFont: TFont;
- FGatherLevel: Integer;
- FGclCompare: Integer;
- FXmjCompare: Integer;
- procedure LoadPaperSettings;
- procedure LoadPageSettings;
- procedure LoadGatherSettings;
- procedure SavePaperSettings;
- procedure SavePageSettings;
- procedure SaveGatherSettings;
- function GetBorderUnderLineWidth: Integer;
- function GetBorderVerLineWidth: Integer;
- function GetCellHorLineWidth: Double;
- function GetCellVerLineWidth: Double;
- public
- constructor Create;
- destructor Destroy; override;
- procedure Load;
- procedure Save;
- //------------- 纸张 -------------
- // Size
- property PageSize: string read FPageSize write FPageSize;
- // 上边距
- property UpEdge: Integer read FUpEdge write FUpEdge;
- // 下边距
- property DownEdge: Integer read FDownEdge write FDownEdge;
- // 左边距
- property LeftEdge: Integer read FLeftEdge write FLeftEdge;
- // 右边距
- property RightEdge: Integer read FRightEdge write FRightEdge;
- //------------- 页面 -------------
- {字体}
- // 表标题
- property TitleFont: TFont read FTitleFont write FTitleFont;
- // 列标题
- property ColumnFont: TFont read FColumnFont write FColumnFont;
- // 表正文
- property ContentFont: TFont read FContentFont write FContentFont;
- // 表合计
- property GatherFont: TFont read FGatherFont write FGatherFont;
- // 表眉/表脚
- property GridHeaderFont: TFont read FGridHeaderFont write FGridHeaderFont;
- // 页眉/页脚
- property HeaderFont: TFont read FHeaderFont write FHeaderFont;
- {其他}
- // 表格线粗
- property ReportCellLine: Double read FReportCellLine write FReportCellLine;
- // 边框线粗
- property BorderLine: Integer read FBorderLine write FBorderLine;
- // 表格边框横线
- property RepBorderUnderLine: Boolean read FRepBorderUnderLine write FRepBorderUnderLine;
- property BorderUnderLineWidth: Integer read GetBorderUnderLineWidth;
- // 表格边框竖线
- property RepBorderVerLine: Boolean read FRepBorderVerLine write FRepBorderVerLine;
- property BorderVerLineWidth: Integer read GetBorderVerLineWidth;
- // 报表表格横线
- property RepCellHorLine: Boolean read FRepCellHorLine write FRepCellHorLine;
- property CellHorLineWidth: Double read GetCellHorLineWidth;
- // 报表表格竖线
- property RepCellVerLine: Boolean read FRepCellVerLine write FRepCellVerLine;
- property CellVerLineWidth: Double read GetCellVerLineWidth;
- // 自动换行打印
- property AutoRetLine: Boolean read FAutoRetLine write FAutoRetLine;
- // 报表内容窄体
- property ContentIsNarrow: Boolean read FContentIsNarrow write FContentIsNarrow;
- //------------- 汇总 -------------
- property GatherLevel: Integer read FGatherLevel write FGatherLevel;
- property XmjCompare: Integer read FXmjCompare write FXmjCompare;
- property GclCompare: Integer read FGclCompare write FGclCompare;
- end;
- TMemoryReportManager = class
- private
- FrmGridHeaderData: TrmGridHeaderData;
- FrmGclBillsBGData: TrmGclBillsBGData;
- FrmGclBillsCompareData: TrmGclBillsCompareData;
- FrmFxBillsCompareData: TrmFxBillsCompareData;
- FrmBGLExecutionData: TrmBGLExecutionData;
- FrmGclBillsAddData: TrmGclBillsAddData;
- FrmFxBillsAddData: TrmFxBillsAddData;
- FrmBillsGatherData: TrmBillsGatherData;
- FrmGclBillsAuditCompareData: TrmGclBillsAuditCompareData;
- FrmDealInfosData: TrmDealInfosData;
- FrmXmjBGLDetailData: TrmXmjBGLDetailData;
- FrmOtherReport1Data: TrmOtherReport1Data;
- FrmGcl_XmjBillsData: TrmGcl_XmjBillsData;
- FrmGclBillsPlaneData: TrmGclBillsPlaneData;
- FrmMentalCustomized1Data: TrmMentalCustomized1Data;
- FrmCustomized2Data: TrmCustomized2Data;
- FrmHaBaiCustomizedData: TrmHaBaiCustomizedData;
- FrmWeiWuZjjlGatherData: TrmWeiWuZjjlGatherData;
- FrmZhongKaiData: TrmZhongKaiData;
- FrmWuJiuZqzfGatherData: TrmWuJiuZqzfGatherData;
- FMemoryQuery: TADOQuery;
- FProjectID: Integer;
- FTenders: TList; // 仅储存选择汇总标段后,剔除项目分类节点的数据,为方便汇总做一次中转
- FProjects: TList; // 普通汇总
- FE_PCDProjects: TList; // 须选择初步设计,施工图设计
- FE_AProjects: TList; // 须选择批准概算
- FDealProjects: TList; // 可选择多合同项目
- function OpenProject(ARec: TsdDataRecord): TProjectData;
- procedure FreeProject(AProjectData: TProjectData);
- function SelectProjectID: Integer;
- function SelectProjectIDs(AProjects: TList; ADataSetID: Integer): Boolean;
- procedure GenerateTenders(AProjects: TList);
- function SelectSourceAndAssignData(ADataSetID: Integer;
- AProjectData: TProjectData): TDataSet;
- function SelectProjectsAndAssignData(ADataSetID: Integer): TDataSet;
- public
- constructor Create;
- destructor Destroy; override;
- function GetMemoryDataSet(ADataSetID: Integer;
- AProjectData: TProjectData): TDataSet;
- function GetSqlResultDataSet(const ASql: string; AProjectData: TProjectData): TDataSet;
- end;
- implementation
- uses
- SysUtils, ZhAPI, UtilMethods, Globals, ProjectManagerDm,
- rmSelectProjectFrm, Controls, ConditionalDefines;
- { TTemplateNode }
- procedure TTemplateNode.AnalyzePropertyStr;
- var
- sgs: TStrings;
- I: Integer;
- begin
- if FPropertyStr <> '' then
- begin
- sgs := TStringList.Create;
- try
- sgs.Text := FPropertyStr;
- for I := 0 to sgs.Count - 1 do
- begin
- if SameText(sgs.Names[I], '名称') then
- FTemplateName := sgs.Values[sgs.Names[I]]
- else if SameText(sgs.Names[I], '分类') then
- FClassNum := sgs.Values[sgs.Names[I]]
- else if SameText(sgs.Names[I], '分类名称') then
- FClassName := sgs.Values[sgs.Names[I]]
- else if SameText(sgs.Names[I], '子分类') then
- FSubClassNum := sgs.Values[sgs.Names[I]]
- else if SameText(sgs.Names[I], '子分类名称') then
- FSubClassName := sgs.Values[sgs.Names[I]]
- else if SameText(sgs.Names[I], '含单价变更') then
- FHasPriceChange := SameText(sgs.Values[sgs.Names[I]], '是')
- else if SameText(sgs.Names[I], '多表筛选') then
- FIsMulti := SameText(sgs.Values[sgs.Names[I]], '是')
- else if SameText(sgs.Names[I], '含附加') then
- FIsExtra := SameText(sgs.Values[sgs.Names[I]], '是')
- else if SameText(sgs.Names[I], '交互类型') then
- FInteractFlag := StrToIntDef(sgs.Values[sgs.Names[I]], 0)
- else if SameText(sgs.Names[I], '交互子类型') then
- FInteractSubFlag := StrToIntDef(sgs.Values[sgs.Names[I]], 0)
- else if SameText(sgs.Names[I], '数据准备') then
- FDataPrepareFlag := StrToIntDef(sgs.Values[sgs.Names[I]], 0)
- else if SameText(sgs.Names[I], '数据库') then
- FDataBaseFlag := StrToIntDef(sgs.Values[sgs.Names[I]], 0)
- else if SameText(sgs.Names[I], '自主格式') then
- FSelfFormat := StrToIntDef(sgs.Values[sgs.Names[I]], 0);
- end;
- finally
- sgs.Free;
- end;
- end;
- end;
- constructor TTemplateNode.Create(AFileName: string);
- begin
- FFileName := AFileName;
- FInteractFlag := 0;
- FInteractSubFlag := 0;
- FDataPrepareFlag := 0;
- FDataBaseFlag := 0;
- FSelfFormat := 0;
- LoadTemplateProperties;
- end;
- destructor TTemplateNode.Destroy;
- begin
- if Assigned(FInteractInfo) then
- FInteractInfo.Free;
- inherited;
- end;
- function TTemplateNode.GetMultiFileNames(APhaseIndex: Integer): string;
- var
- sName, sPath: string;
- begin
- sPath := ExtractFilePath(FFileName);
- sName := ExtractSimpleFileName(FFileName);
- Result := Format('%s%s\%s_%d.srt', [sPath, sName, sName, APhaseIndex]);
- end;
- procedure TTemplateNode.LoadReportInteract;
- begin
- if Assigned(FInteractInfo) then
- FInteractInfo.LoadXmlFromStream
- else
- FInteractInfo := TInteractInfo.Create(FileName);
- end;
- procedure TTemplateNode.LoadTemplateProperties;
- begin
- try
- ReadPropertyStr;
- AnalyzePropertyStr;
- if FIsExtra then
- LoadReportInteract;
- except
- on E: Exception do
- begin
- TipMessage(Format('报表文件[%s]无法打开,错误信息:'#13#10'%s.'#13#10 +
- '请与纵横软件客服中心联系:(0756)3850888。', [FFileName, E.Message]));
- end;
- end;
- end;
- procedure TTemplateNode.ReadPropertyStr;
- var
- vStream: TFileStream;
- FileHead: TScFileHead;
- begin
- vStream := TFileStream.Create(FFileName, fmOpenRead);
- try
- vStream.Seek($00, soFromBeginning);
- vStream.Read(FileHead, Sizeof(TScFileHead));
- if FileHead.ReportProperties[0] <> #0 then
- SetString(FPropertyStr, FileHead.ReportProperties, 256);
- finally
- vStream.Free;
- end;
- end;
- procedure TTemplateNode.RefreshTemplateProperties;
- begin
- FInteractFlag := 0;
- FInteractSubFlag := 0;
- FDataPrepareFlag := 0;
- FDataBaseFlag := 0;
- FSelfFormat := 0;
- LoadTemplateProperties;
- end;
- { TTemplateManager }
- function TTemplateManager.AddReportTemplate(const AFileName: string): TTemplateNode;
- begin
- Result := TTemplateNode.Create(AFileName);
- FTemplateList.Add(Result);
- end;
- procedure TTemplateManager.Clear;
- begin
- ClearObjects(FTemplateList);
- end;
- constructor TTemplateManager.Create;
- begin
- FTemplateList := TList.Create;
- LoadReportTemplates(GetAppFilePath + 'ReportTemplates');
- end;
- procedure TTemplateManager.DeleteReportTemplate(ANode: TTemplateNode);
- begin
- FTemplateList.Remove(ANode);
- ANode.Free;
- end;
- destructor TTemplateManager.Destroy;
- begin
- Clear;
- FTemplateList.Free;
- inherited;
- end;
- function TTemplateManager.FindTemplate(
- const AFileName: string): TTemplateNode;
- var
- iTemplate: Integer;
- vTemplate: TTemplateNode;
- begin
- Result := nil;
- for iTemplate := 0 to FTemplateList.Count - 1 do
- begin
- vTemplate := Template[iTemplate];
- if vTemplate.FileName = AFileName then
- begin
- Result := vTemplate;
- Break;
- end;
- end;
- end;
- function TTemplateManager.GetCount: Integer;
- begin
- Result := FTemplateList.Count;
- end;
- function TTemplateManager.GetTemplate(AIndex: Integer): TTemplateNode;
- begin
- Result := TTemplateNode(FTemplateList.Items[AIndex]);
- end;
- procedure TTemplateManager.LoadReportTemplates(const sTemplateDir: String);
- var
- sFiles: TStringList;
- I: Integer;
- begin
- Clear;
- sFiles := TStringList.Create;
- try
- FilterFiles(sTemplateDir, '.srt', sFiles);
- for I := 0 to sFiles.Count - 1 do
- AddReportTemplate(sTemplateDir + '\' + sFiles[I]);
- finally
- sFiles.Free;
- end;
- end;
- procedure TTemplateManager.RefreshTemplates;
- begin
- LoadReportTemplates(GetAppFilePath + 'ReportTemplates');
- end;
- { TReportConfig }
- constructor TReportConfig.Create;
- begin
- inherited Create;
- FTitleFont := TFont.Create;
- FColumnFont := TFont.Create;
- FContentFont := TFont.Create;
- FGatherFont := TFont.Create;
- FGridHeaderFont := TFont.Create;
- FHeaderFont := TFont.Create;
- Load;
- end;
- destructor TReportConfig.Destroy;
- begin
- Save;
- FHeaderFont.Free;
- FGridHeaderFont.Free;
- FGatherFont.Free;
- FContentFont.Free;
- FColumnFont.Free;
- FTitleFont.Free;
- inherited;
- end;
- function TReportConfig.GetBorderUnderLineWidth: Integer;
- begin
- Result := 0;
- if RepBorderUnderLine then
- Result := BorderLine;
- end;
- function TReportConfig.GetBorderVerLineWidth: Integer;
- begin
- Result := 0;
- if RepBorderVerLine then
- Result := BorderLine;
- end;
- function TReportConfig.GetCellHorLineWidth: Double;
- begin
- Result := 0;
- if RepCellHorLine then
- Result := ReportCellLine;
- end;
- function TReportConfig.GetCellVerLineWidth: Double;
- begin
- Result := 0;
- if RepCellVerLine then
- Result := ReportCellLine;
- end;
- procedure TReportConfig.Load;
- begin
- try
- FIniFile := TIniFile.Create(GetAppFilePath + 'Report.ini');
- LoadPaperSettings;
- LoadPageSettings;
- LoadGatherSettings;
- finally
- FIniFile.Free;
- end;
- end;
- procedure TReportConfig.LoadGatherSettings;
- begin
- FGatherLevel := FIniFile.ReadInteger('汇总', '层次', 5);
- FXmjCompare := FIniFile.ReadInteger('汇总', '项目节规则', 0);
- FGclCompare := FIniFile.ReadInteger('汇总', '清单规则', 0);
- end;
- procedure TReportConfig.LoadPageSettings;
- procedure LoadFont(const AFontName: string; AFont: TFont);
- begin
- AFont.Name := FIniFile.ReadString('页面', AFontName + '_字体', 'SmartSumSun');
- AFont.Size := FIniFile.ReadInteger('页面', AFontName + '_字体大小', 9);
- if FIniFile.ReadBool('页面', AFontName + '_字体粗', False) then
- AFont.Style := AFont.Style + [fsBold]
- else
- AFont.Style := AFont.Style - [fsBold];
- if FIniFile.ReadBool('页面', AFontName + '_字体斜', False) then
- AFont.Style := AFont.Style + [fsItalic]
- else
- AFont.Style := AFont.Style - [fsItalic];
- if FIniFile.ReadBool('页面', AFontName + '_字体下划线', False) then
- AFont.Style := AFont.Style + [fsUnderline]
- else
- AFont.Style := AFont.Style - [fsUnderline];
- //AFont.Height := FIniFile.ReadInteger('页面', AFontName + '_行高', 9);
- end;
- begin
- LoadFont('表标题', TitleFont);
- LoadFont('列标题', ColumnFont);
- LoadFont('表正文', ContentFont);
- LoadFont('表合计', GatherFont);
- LoadFont('表眉/表脚', GridHeaderFont);
- LoadFont('页眉/页脚', HeaderFont);
- FReportCellLine := FIniFile.ReadFloat('页面', '表格线粗', 0.75);
- FBorderLine := FIniFile.ReadInteger('页面', '边框线粗', 2);
- FRepBorderUnderLine := FIniFile.ReadBool('页面', '报表边框横线', True);
- FRepBorderVerLine := FIniFile.ReadBool('页面', '报表边框竖线', False);
- FRepCellHorLine := FIniFile.ReadBool('页面', '报表表格横线', True);
- FRepCellVerLine := FIniFile.ReadBool('页面', '报表表格竖线', True);
- FAutoRetLine := FIniFile.ReadBool('页面', '自动换行打印', False);
- FContentIsNarrow := FIniFile.ReadBool('页面', '内容窄体输出', False);
- end;
- procedure TReportConfig.LoadPaperSettings;
- begin
- FPageSize := FIniFile.ReadString('纸张', '幅面', 'A4');
- FUpEdge := FIniFile.ReadInteger('纸张', '上边距', 12);
- FDownEdge := FIniFile.ReadInteger('纸张', '下边距', 12);
- FLeftEdge := FIniFile.ReadInteger('纸张', '左边距', 12);
- FRightEdge := FIniFile.ReadInteger('纸张', '右边距', 12);
- end;
- procedure TReportConfig.Save;
- begin
- try
- FIniFile := TIniFile.Create(GetAppFilePath + 'Report.ini');
- SavePaperSettings;
- SavePageSettings;
- finally
- FIniFile.Free;
- end;
- end;
- procedure TReportConfig.SaveGatherSettings;
- begin
- FIniFile.WriteInteger('汇总', '层次', FGatherLevel);
- FIniFile.WriteInteger('汇总', '项目节规则', FXmjCompare);
- FIniFile.WriteInteger('汇总', '清单规则', FGclCompare);
- end;
- procedure TReportConfig.SavePageSettings;
- procedure SaveFont(const AFontName: string; AFont: TFont);
- begin
- FIniFile.WriteString('页面', AFontName + '_字体', AFont.Name);
- FIniFile.WriteInteger('页面', AFontName + '_字体大小', AFont.Size);
- FIniFile.WriteBool('页面', AFontName + '_字体粗', fsBold in AFont.Style);
- FIniFile.WriteBool('页面', AFontName + '_字体斜', fsItalic in AFont.Style);
- FIniFile.WriteBool('页面', AFontName + '_字体下划线', fsUnderline in AFont.Style);
- FIniFile.WriteInteger('页面', AFontName + '_行高', AFont.Height);
- end;
- begin
- SaveFont('表标题', TitleFont);
- SaveFont('列标题', ColumnFont);
- SaveFont('表正文', ContentFont);
- SaveFont('表合计', GatherFont);
- SaveFont('表眉/表脚', GridHeaderFont);
- SaveFont('页眉/页脚', HeaderFont);
- FIniFile.WriteFloat('页面', '表格线粗', FReportCellLine);
- FIniFile.WriteInteger('页面', '边框线粗', FBorderLine);
- FIniFile.WriteBool('页面', '报表边框横线', FRepBorderUnderLine);
- FIniFile.WriteBool('页面', '报表边框竖线', FRepBorderVerLine);
- FIniFile.WriteBool('页面', '报表表格横线', FRepCellHorLine);
- FIniFile.WriteBool('页面', '报表表格竖线', FRepCellVerLine);
- FIniFile.WriteBool('页面', '自动换行打印', FAutoRetLine);
- FIniFile.WriteBool('页面', '内容窄体输出', FContentIsNarrow);
- end;
- procedure TReportConfig.SavePaperSettings;
- begin
- FIniFile.WriteString('纸张', '幅面', FPageSize);
- FIniFile.WriteInteger('纸张', '上边距', FUpEdge);
- FIniFile.WriteInteger('纸张', '下边距', FDownEdge);
- FIniFile.WriteInteger('纸张', '左边距', FLeftEdge);
- FIniFile.WriteInteger('纸张', '右边距', FRightEdge);
- end;
- { TMemoryReportManager }
- constructor TMemoryReportManager.Create;
- begin
- FrmGridHeaderData := TrmGridHeaderData.Create(nil);
- FrmGclBillsBGData := TrmGclBillsBGData.Create;
- FrmGclBillsCompareData := TrmGclBillsCompareData.Create;
- FrmFxBillsCompareData := TrmFxBillsCompareData.Create(nil);
- FrmBGLExecutionData := TrmBGLExecutionData.Create(nil);
- FrmGclBillsAddData := TrmGclBillsAddData.Create(nil);
- FrmFxBillsAddData := TrmFxBillsAddData.Create(nil);
- FrmBillsGatherData := TrmBillsGatherData.Create(nil);
- FrmGclBillsAuditCompareData := TrmGclBillsAuditCompareData.Create;
- FrmDealInfosData := TrmDealInfosData.Create(nil);
- FrmXmjBGLDetailData := TrmXmjBGLDetailData.Create(nil);
- FrmOtherReport1Data := TrmOtherReport1Data.Create(nil);
- FrmGcl_XmjBillsData := TrmGcl_XmjBillsData.Create(nil);
- FrmGclBillsPlaneData := TrmGclBillsPlaneData.Create(nil);
- FrmMentalCustomized1Data := TrmMentalCustomized1Data.Create(nil);
- FrmCustomized2Data := TrmCustomized2Data.Create(nil);
- FrmHaBaiCustomizedData := TrmHaBaiCustomizedData.Create(nil);
- FrmWeiWuZjjlGatherData := TrmWeiWuZjjlGatherData.Create(nil);
- FrmZhongKaiData := TrmZhongKaiData.Create(nil);
- FrmWuJiuZqzfGatherData := TrmWuJiuZqzfGatherData.Create(nil);
- FMemoryQuery := TADOQuery.Create(nil);
- FProjectID := -1;
- FTenders := TList.Create;
- FProjects := TList.Create;
- FE_PCDProjects := TList.Create;
- FE_AProjects := TList.Create;
- FDealProjects := TList.Create;
- end;
- destructor TMemoryReportManager.Destroy;
- begin
- FTenders.Free;
- ClearObjects(FProjects);
- FProjects.Free;
- ClearObjects(FE_PCDProjects);
- FE_PCDProjects.Free;
- ClearObjects(FE_AProjects);
- FE_AProjects.Free;
- ClearObjects(FDealProjects);
- FDealProjects.Free;
- FMemoryQuery.Free;
- FrmWuJiuZqzfGatherData.Free;
- FrmZhongKaiData.Free;
- FrmWeiWuZjjlGatherData.Free;
- FrmHaBaiCustomizedData.Free;
- FrmCustomized2Data.Free;
- FrmMentalCustomized1Data.Free;
- FrmGclBillsPlaneData.Free;
- FrmGcl_XmjBillsData.Free;
- FrmOtherReport1Data.Free;
- FrmXmjBGLDetailData.Free;
- FrmDealInfosData.Free;
- FrmGclBillsAuditCompareData.Free;
- FrmBillsGatherData.Free;
- FrmFxBillsAddData.Free;
- FrmGclBillsAddData.Free;
- FrmBGLExecutionData.Free;
- FrmFxBillsCompareData.Free;
- FrmGclBillsCompareData.Free;
- FrmGclBillsBGData.Free;
- FrmGridHeaderData.Free;
- inherited;
- end;
- procedure TMemoryReportManager.FreeProject(AProjectData: TProjectData);
- begin
- if not Assigned(OpenProjectManager.FindProjectData(AProjectData.ProjectID)) then
- AProjectData.Free;
- end;
- procedure TMemoryReportManager.GenerateTenders(AProjects: TList);
- var
- i: Integer;
- SelectProject: TSelectProject;
- begin
- FTenders.Clear;
- for i := 0 to AProjects.Count - 1 do
- begin
- SelectProject := TSelectProject(AProjects.Items[i]);
- if SelectProject.IsTender then
- FTenders.Add(SelectProject);
- end;
- end;
- function TMemoryReportManager.GetMemoryDataSet(
- ADataSetID: Integer; AProjectData: TProjectData): TDataSet;
- begin
- //ADataSetID := 59;
- case ADataSetID of
- 1: Result := FrmGridHeaderData.AssginData(AProjectData); // 各表表头
- 2: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtPhaseGather, rmgtGather); // 工程量清单[本期完成]
- 3, 4, 41:
- // 审表01、02, 粤台 账07
- Result := SelectSourceAndAssignData(ADataSetID, AProjectData);
- 5: Result := FrmBGLExecutionData.AssignData(AProjectData); // 支表09
- 6: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtEndGather, rmgtGather); // 工程量清单[截止本期完成]
- 7: Result := FrmGclBillsAddData.AssignData(AProjectData); // 多审表02
- 8: Result := FrmFxBillsAddData.AssignData(AProjectData); // 多审表02-1
- 9, 10, 11, 12, 13,
- // 决算04, 05, 05-2, 04-1, 02,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- // 02/03部颁, 07部颁, 08部颁, 09部颁, 11部颁, 12部颁, 16部颁, 17部颁, 18部颁, 19部颁,
- 32, 33, 35, 36, 39, 40, 44,
- // 粤竣9, 粤竣06-1, 粤竣04, 粤竣01, 工程量清单进度[甘肃高管局定制], [广东肇庆定制]计量汇总表
- 45, 46, 47, 48, 49, 50,
- // 内蒙古哈白定制表(支表2, 支表3, 支表14, 支表3-1, 支表4-1, 会签)
- 52, 53, 54, 55,
- // 内蒙古306国道定制(支表2, 支表3, 支表3-1, 支表4-1)
- 57, 58:
- // 中开高速定制表(支表2, 支表3)
- Result := SelectProjectsAndAssignData(ADataSetID);
- 14: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtPhaseDeal, rmgtGather); // 工程量清单[本期合同]
- 15: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtPhaseQc, rmgtGather); // 工程量清单[本期数量变更]
- 16: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtPhasePc, rmgtGather); // 工程量清单[本期单价变更]
- 17: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtEndDeal, rmgtGather); // 工程量清单[截止本期合同]
- 18: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtEndQc, rmgtGather); // 工程量清单[截止本期数量变更]
- 19: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtEndPc, rmgtGather); // 工程量清单[截止本期单价变更]
- 30: Result := FrmGclBillsBGData.AssignData(AProjectData, rmtPhaseQc, rmgtFlow);
- 31: Result := FrmGclBillsAuditCompareData.AssignData(AProjectData, rmftPhaseGather); // 工程量清单[原报&批复,完成]
- 34: Result := FrmXmjBGLDetailData.AssignData(AProjectData); // 变更台账
- 37: Result := FrmGcl_XmjBillsData.AssignData(AProjectData, gxtTopGcl); // 工程量清单审核
- 38: Result := FrmGclBillsPlaneData.AssignData(AProjectData); // 工程量清单平面表[福建0号台账]
- 42: Result := FrmGcl_XmjBillsData.AssignData(AProjectData, gxtFlowGcl); // 云南标准表,台账明细表
- 43: Result := FrmGcl_XmjBillsData.AssignData(AProjectData, gxtWithoutXmj); // 云南标准表,单标段清单汇总表
- 51: Result := FrmHaBaiCustomizedData.AssignAssistantData(hbgt_CS); //内蒙古哈白、国道306定制表--会签辅助表
- 56: Result := FrmWeiWuZjjlGatherData.AssignData(AProjectData); // 甘肃渭武 -- 单标段、计量支付汇总表
- 59: Result := FrmWuJiuZqzfGatherData.AssignData(AProjectData);
- end;
- // For Inner Test
- if _IsDebugView then
- ShowTestForm(Result);
- end;
- function TMemoryReportManager.GetSqlResultDataSet(const ASql: string;
- AProjectData: TProjectData): TDataSet;
- begin
- if ASql <> '' then
- begin
- FMemoryQuery.Close;
- FMemoryQuery.Connection := AProjectData.ADOConnection;
- FMemoryQuery.SQL.Clear;
- FMemoryQuery.SQL.Add(ASql);
- FMemoryQuery.Open;
- end;
- Result := FMemoryQuery;
- //ShowTestForm(Result);
- end;
- function TMemoryReportManager.OpenProject(
- ARec: TsdDataRecord): TProjectData;
- begin
- Result := OpenProjectManager.FindProjectData(ARec.ValueByName('ID').AsInteger);
- if not Assigned(Result) then
- begin
- Result := TProjectData.Create;
- Result.OpenForReport(GetMyProjectsFilePath + ARec.ValueByName('FileName').AsString);
- end;
- end;
- function TMemoryReportManager.SelectProjectID: Integer;
- var
- SelectFrm: TProjectSelectForm;
- begin
- Result := -1;
- SelectFrm := TProjectSelectForm.Create(False, FProjectID, FProjects);
- //SelectFrm.LoadHistorySelect(FProjectID);
- try
- if SelectFrm.ShowModal = mrOk then
- begin
- SelectFrm.SelectResult(FProjectID);
- Result := FProjectID;
- end;
- finally
- SelectFrm.Free;
- end;
- end;
- function TMemoryReportManager.SelectProjectIDs(AProjects: TList;
- ADataSetID: Integer): Boolean;
- var
- SelectFrm: TProjectSelectForm;
- begin
- Result := False;
- SelectFrm := TProjectSelectForm.Create(True, FProjectID, AProjects);
- case ADataSetID of
- 13, 33: SelectFrm.MultiSelectType := mstE_PCD;
- 20, 36: SelectFrm.MultiSelectType := mstE_A;
- 32: SelectFrm.MultiSelectType := mstDeal;
- 40: SelectFrm.MultiSelectType := mstMental1;
- else SelectFrm.MultiSelectType := mstCommon;
- end;
- try
- if SelectFrm.ShowModal = mrOk then
- begin
- SelectFrm.SelectResult(AProjects);
- Result := True;
- end;
- finally
- SelectFrm.Free;
- end;
- end;
- function TMemoryReportManager.SelectProjectsAndAssignData(
- ADataSetID: Integer): TDataSet;
- var
- Projects: TList;
- begin
- Result := nil;
- case ADataSetID of
- 13, 33: Projects := FE_PCDProjects;
- 20, 36: Projects := FE_AProjects;
- 32: Projects := FDealProjects;
- else Projects := FProjects;
- end;
- if SelectProjectIDs(Projects, ADataSetID) then
- begin
- case ADataSetID of
- 9: FrmBillsGatherData.GatherType := bgtFx;
- 10: FrmBillsGatherData.GatherType := bgtXmj;
- 11: FrmBillsGatherData.GatherType := bgtGcl;
- 12: FrmBillsGatherData.GatherType := bgtMultiXmj;
- 13: FrmBillsGatherData.GatherType := bgtEstimate; // 决算02
- 20: FrmBillsGatherData.GatherType := bgtEstimate1; // 决算02/03部颁
- 21: FrmBillsGatherData.GatherType := bgtFinal07; // 决算07
- 22: FrmBillsGatherData.GatherType := bgtFinal08;
- 23: FrmBillsGatherData.GatherType := bgtFinal09;
- 24: FrmBillsGatherData.GatherType := bgtFinal11;
- 25: FrmBillsGatherData.GatherType := bgtFinal12;
- 26: FrmBillsGatherData.GatherType := bgtFinal16;
- 27: FrmBillsGatherData.GatherType := bgtFinal17;
- 28: FrmBillsGatherData.GatherType := bgtFinal18;
- 29: FrmBillsGatherData.GatherType := bgtFinal19;
- 33: FrmBillsGatherData.GatherType := bgtG_Final06_1;
- 35: FrmBillsGatherData.GatherType := bgtG_Final04;
- 39: FrmMentalCustomized1Data.MentalType := 0;
- 40: FrmMentalCustomized1Data.MentalType := 1;
- end;
- GenerateTenders(Projects);
- case ADataSetID of
- 32: Result := FrmDealInfosData.AssignData(FTenders);
- 36: Result := FrmOtherReport1Data.AssignData(FTenders);
- 39, 40: Result := FrmMentalCustomized1Data.AssignData(FTenders);
- 44: Result := FrmCustomized2Data.AssignData(FTenders);
- 45: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt2, True);
- 46: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt3, True);
- 47: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt14, True);
- 48: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt3_1, True);
- 49: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt4_1, True);
- 50: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt_CS, True);
- 52: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt2, False);
- 53: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt3, False);
- 54: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt3_1, False);
- 55: Result := FrmHaBaiCustomizedData.AssignData(FTenders, hbgt4_1, False);
- 57: Result := FrmZhongKaiData.AssignData(FTenders, zkgt2);
- 58: Result := FrmZhongKaiData.AssignData(FTenders, zkgt3);
- else Result := FrmBillsGatherData.AssignData(FTenders);
- end;
- end;
- end;
- function TMemoryReportManager.SelectSourceAndAssignData(
- ADataSetID: Integer; AProjectData: TProjectData): TDataSet;
- var
- sRec, cRec: TsdDataRecord;
- sProject, cProject: TProjectData;
- begin
- sRec := ProjectManager.sddProjectsInfo.FindKey('idxID', SelectProjectID);
- cRec := ProjectManager.sddProjectsInfo.FindKey('idxID', AProjectData.ProjectID);
- if Assigned(sRec) and Assigned(cRec) then
- begin
- sProject := OpenProject(sRec);
- cProject := OpenProject(cRec);
- try
- case ADataSetID of
- 4: FrmFxBillsCompareData.CompareType := fctCommon;
- 41: FrmFxBillsCompareData.CompareType := fctG07;
- end;
-
- case ADataSetID of
- 3: Result := FrmGclBillsCompareData.AssignData(sProject, cProject);
- 4: Result := FrmFxBillsCompareData.AssignData(sProject, cProject);
- 41: Result := FrmFxBillsCompareData.AssignData(sProject, cProject);
- end;
- finally
- FreeProject(sProject);
- FreeProject(cProject);
- end;
- end;
- end;
- end.
|