| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 | {----------------------------------------------------------------交互报表 -- 审核人选择窗口交互报表中,所有须选择审核人的报表,均可使用该界面,其他情况禁止使用即 InteractFlag[交互类型]为1时 可用。将交互报表中的角色名填入第一列,用户在第二列下拉选择审核人[项目数据库Proj, 当前期数据库Phase, 交互表内容保存至RD数据表]其中Proj和Phase中均存有1份RD整个流程可大致分解为4步:1. 用户切换至报表界面时,将[Phase]RD -拷贝-> [Proj]RD2. 用户点击该报表时,加载[Proj]RD数据至该窗口3. 用户可在该窗口更改选择的审核人,用户确认后,将数据保存至[Proj]RD中4. 用户关闭报表界面时,将[Proj]RD -拷贝-> [Phase]RD-----------------------------------------------------------------}unit AuditSelectFrm;interfaceuses  ProjectData, ReportManager, ADODB, Checker,  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ExtCtrls, ZJGrid, ZJEdits, ZJCells;const  AuditSelectSql = 'Select SerialNo, Select1, Result1, Result2' +                   '  From P_ReportData' +                   '  Where (Flag = %d) and (SubFlag = %d)' +                   '  Order By SerialNo';  AuditDeleteSql = 'Delete From %s' +                   '  Where (Flag = %d) and (SubFlag = %d)';  AuditInsertSql = 'Insert Into %s' +                   '  (Flag, SubFlag, SerialNo, Select1, Result1, Result2)' +                   '  Values (%d, %d, %d, ''%s'', ''%s'', ''%s'')';type  TAuditSelctForm = class(TForm)    zgAuditSelect: TZJGrid;    pnlBottom: TPanel;    btnOk: TButton;    btnCancel: TButton;    pnlSelectAudit: TPanel;    cbbAuditors: TZjComboBox;    procedure zgAuditSelectGetCellEditor(Sender: TObject; ACoord: TPoint;      var AControl: TWinControl);    procedure zgAuditSelectEditorLoadCell(Sender: TObject; ACoord: TPoint;      AControl: TWinControl);    procedure zgAuditSelectEditorSaveCell(Sender: TObject; ACoord: TPoint;      AControl: TWinControl);    procedure zgAuditSelectGetCellText(Sender: TObject;      const ACoord: TPoint; var Value: String; DisplayText: Boolean);  private    FProjectData: TProjectData;    FReportTemplate: TTemplateNode;    FProjQuery: TADOQuery;    FPhaseQuery: TADOQuery;    procedure LoadReportAudits;    procedure LoadHistorySelectAudits;    procedure LoadPhaseAuditors;    procedure InitAuditSelectGrid;  public    constructor Create(AProjectData: TProjectData; ATemplateNode: TTemplateNode);    destructor Destroy; override;    procedure SaveAuditData;  end;implementationuses ReportInteractInfo, PhaseData;{$R *.dfm}{ TAuditSelctForm }constructor TAuditSelctForm.Create(AProjectData: TProjectData;  ATemplateNode: TTemplateNode);begin  inherited Create(nil);  FProjectData := AProjectData;  FReportTemplate := ATemplateNode;  FProjQuery := TADOQuery.Create(nil);  FProjQuery.Connection := FProjectData.ADOConnection;  FPhaseQuery := TADOQuery.Create(nil);  FPhaseQuery.Connection := FProjectData.PhaseData.ADOConnection;  InitAuditSelectGrid;  LoadReportAudits;  LoadPhaseAuditors;  LoadHistorySelectAudits;end;destructor TAuditSelctForm.Destroy;begin  inherited;end;procedure TAuditSelctForm.InitAuditSelectGrid;begin  zgAuditSelect.RowCount := 1;  zgAuditSelect.Cells[1, 0].Text := '需选择信息';  zgAuditSelect.ColWidths[1] := 150;  zgAuditSelect.Cells[2, 0].Text := '审核人';  zgAuditSelect.ColWidths[2] := 200;  zgAuditSelect.CellClass.Cols[2] := TZjComboCell;end;procedure TAuditSelctForm.LoadHistorySelectAudits;var  i, iRow: Integer;begin  FProjQuery.Close;  FProjQuery.SQL.Clear;  FProjQuery.SQL.Add(Format(AuditSelectSql, [FReportTemplate.InteractFlag, FReportTemplate.InteractSubFlag]));  FProjQuery.Open;  FProjQuery.First;  while not FProjQuery.Eof do  begin    iRow := FProjQuery.FieldByName('SerialNo').AsInteger;    zgAuditSelect.Cells[2, iRow].Data := Pointer(StrToIntDef(FProjQuery.FieldByName('Select1').AsString, -1));    FProjQuery.Next;  end;end;procedure TAuditSelctForm.LoadPhaseAuditors;var  i: Integer;  Auditor: TChecker;begin  cbbAuditors.Clear;  for i := 0 to FProjectData.Checkers.Count - 1 do  begin    Auditor := FProjectData.Checkers.Item[i];    if Auditor.Role = '' then      cbbAuditors.Items.Add(Auditor.Name)    else      cbbAuditors.Items.Add(Format('%-10s[%s]', [Auditor.Name, Auditor.Role]));  end;end;procedure TAuditSelctForm.LoadReportAudits;var  i: Integer;begin  if Assigned(FReportTemplate.InteractInfo) then  begin    with FReportTemplate.InteractInfo do    begin      zgAuditSelect.RowCount := Audits.Count + 1;      for i := 0 to Audits.Count - 1 do      begin        zgAuditSelect.Cells[1, i+1].Text := Audits.Strings[i];        zgAuditSelect.Cells[1, i+1].Align := gaCenterLeft;        zgAuditSelect.Cells[2, i+1].Data := Pointer(-1);        zgAuditSelect.Cells[2, i+1].Align := gaCenterLeft;      end;    end;  end;end;procedure TAuditSelctForm.SaveAuditData;  procedure UpdateDataBase(const ATableName: string; AQuery: TADOQuery);    procedure ExecuteSql(const ASql: string);    begin      AQuery.Close;      AQuery.SQL.Clear;      AQuery.SQL.Add(ASql);      AQuery.ExecSQL;    end;    procedure DeleteOldData;    var      sSql: string;    begin      sSql := Format(AuditDeleteSql, [ATableName, FReportTemplate.InteractFlag, FReportTemplate.InteractSubFlag]);      ExecuteSql(sSql);    end;    procedure InsertNewData;    var      sSql: string;      iRow, iAuditor: Integer;      Auditor: TChecker;    begin      for iRow := 1 to zgAuditSelect.RowCount - 1 do      begin        iAuditor := Integer(zgAuditSelect.Cells[2, iRow].Data);        if iAuditor <> -1 then        begin          Auditor := FProjectData.Checkers.Item[iAuditor];          sSql := Format(AuditInsertSql, [ATableName, FReportTemplate.InteractFlag,            FReportTemplate.InteractSubFlag, iRow, IntToStr(Auditor.No), Auditor.Memo, Auditor.Name])        end        else          sSql := Format(AuditInsertSql, [ATableName, FReportTemplate.InteractFlag,            FReportTemplate.InteractSubFlag, iRow, '-1', '', '']);        ExecuteSql(sSql);      end;    end;  begin    DeleteOldData;    InsertNewData;  end;begin  UpdateDataBase('P_ReportData', FProjQuery);  UpdateDataBase('ReportData', FPhaseQuery);end;procedure TAuditSelctForm.zgAuditSelectGetCellEditor(Sender: TObject;  ACoord: TPoint; var AControl: TWinControl);begin  if (ACoord.X = 2) and (ACoord.Y > 0) then    AControl := cbbAuditors;end;procedure TAuditSelctForm.zgAuditSelectEditorLoadCell(Sender: TObject;  ACoord: TPoint; AControl: TWinControl);var  iAuditorIndex: Integer;begin if AControl = cbbAuditors then begin   iAuditorIndex := Integer(zgAuditSelect.Cells[ACoord.X, ACoord.Y].Data);   if iAuditorIndex < cbbAuditors.Items.Count then     cbbAuditors.ItemIndex := iAuditorIndex   else     cbbAuditors.ItemIndex := -1; end;end;procedure TAuditSelctForm.zgAuditSelectEditorSaveCell(Sender: TObject;  ACoord: TPoint; AControl: TWinControl);begin  if AControl = cbbAuditors then    zgAuditSelect.Cells[ACoord.X, ACoord.Y].Data := Pointer(cbbAuditors.ItemIndex);end;procedure TAuditSelctForm.zgAuditSelectGetCellText(Sender: TObject;  const ACoord: TPoint; var Value: String; DisplayText: Boolean);var  iAuditorIndex: Integer;begin  if (ACoord.X = 2) and (ACoord.Y > 0) then  begin   iAuditorIndex := Integer(zgAuditSelect.Cells[ACoord.X, ACoord.Y].Data);   if iAuditorIndex < cbbAuditors.Items.Count then     Value := cbbAuditors.Items.Strings[iAuditorIndex]   else     Value := '';  end;end;end.
 |