123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- {----------------------------------------------------------------
- 交互报表 -- 审核人选择窗口
- 交互报表中,所有须选择审核人的报表,均可使用该界面,其他情况禁止使用
- 即 InteractFlag[交互类型]为1时 可用。
- 将交互报表中的角色名填入第一列,用户在第二列下拉选择审核人
- [项目数据库Proj, 当前期数据库Phase, 交互表内容保存至RD数据表]
- 其中Proj和Phase中均存有1份RD
- 整个流程可大致分解为4步:
- 1. 用户切换至报表界面时,将[Phase]RD -拷贝-> [Proj]RD
- 2. 用户点击该报表时,加载[Proj]RD数据至该窗口
- 3. 用户可在该窗口更改选择的审核人,用户确认后,将数据保存至[Proj]RD中
- 4. 用户关闭报表界面时,将[Proj]RD -拷贝-> [Phase]RD
- -----------------------------------------------------------------}
- unit AuditSelectFrm;
- interface
- uses
- 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;
- implementation
- uses 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.
|