| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927 | unit ReportManager;interfaceuses  rmGclBillsBGDm, rmGclBillsCompareDm, rmGridHeaderDm, rmFxBillsCompareDm,  rmBGLExecutionDm, rmGclBillsAddDm, rmFxBillsAddDm, rmBillsGatherDm,  rmGclBillsAuditCompareDm, rmDealInfosDm, rmXmjBGLDetailDm,  rmOtherReport1Dm, rmGcl_XmjBillsDm, rmGclBillsPlaneDm,  rmMentalCustomized1Dm, rmCustomized2Dm, rmHaBaiCustomizedDm,  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 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;    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;implementationuses  SysUtils, ZhAPI, UtilMethods, Globals, ProjectManagerDm,  rmSelectProjectFrm, Controls;{ 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;{ 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);  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;  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  {if FrmHaBaiCustomizedData.hbGatherType = hbgt_CS then    ADataSetID := 51  else    ADataSetID := 50;}  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)        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定制表--会签辅助表  end;  // For Inner Test  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);      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.
 |