286 lines
7.5 KiB
ObjectPascal
286 lines
7.5 KiB
ObjectPascal
unit unYearOpen;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, ADODB, DB, StdCtrls, ExtCtrls, Grids, DBGrids, wdbreg, DBClient,
|
|
Provider;
|
|
|
|
type
|
|
TForm1 = class(TForm)
|
|
Conn: TADOConnection;
|
|
QBPAA: TADODataSet;
|
|
DSBPAA: TDataSource;
|
|
InsertBPAA: TADOCommand;
|
|
WDBGRID1: WDBGRID;
|
|
Panel1: TPanel;
|
|
Label1: TLabel;
|
|
eYY: TEdit;
|
|
btnYYOk: TButton;
|
|
Panel2: TPanel;
|
|
btnOpenYear: TButton;
|
|
InsertBPAB: TADOCommand;
|
|
InsertBPJA: TADOCommand;
|
|
InsertBPJB: TADOCommand;
|
|
InsertRASN: TADOCommand;
|
|
EndOldRASN: TADOCommand;
|
|
DSPBPAA: TDataSetProvider;
|
|
CDSBPAA: TClientDataSet;
|
|
Memo1: TMemo;
|
|
QBPAACHECKED: TStringField;
|
|
QBPAABPPNM: TWideStringField;
|
|
QBPAABPYER: TIntegerField;
|
|
QBPAABPPYN: TWideStringField;
|
|
QBPAABPPYM: TWideStringField;
|
|
QBPAABPPME: TWideStringField;
|
|
QBPAANEW_BPPNM: TStringField;
|
|
spl1: TSplitter;
|
|
Label2: TLabel;
|
|
eNewYY: TEdit;
|
|
cbInsertBPAA: TCheckBox;
|
|
cbInsertBPJA: TCheckBox;
|
|
cbInsertBPJB: TCheckBox;
|
|
cbInsertRASN: TCheckBox;
|
|
cbInsertBPAB: TCheckBox;
|
|
cbClearFirst: TCheckBox;
|
|
DeleteBPAA: TADOCommand;
|
|
DeleteBPAB: TADOCommand;
|
|
DeleteBPJA: TADOCommand;
|
|
DeleteBPJB: TADOCommand;
|
|
DeleteRASN: TADOCommand;
|
|
procedure btnYYOkClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure btnOpenYearClick(Sender: TObject);
|
|
procedure FormActivate(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
oldYY, newYY: integer;
|
|
procedure DoOpenYear;
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
uses WGUARD1;
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TForm1.btnYYOkClick(Sender: TObject);
|
|
begin
|
|
oldYY := StrToIntDef(eYY.Text, -1);
|
|
if (oldYY < 0) then
|
|
begin
|
|
Application.MessageBox('年度不合理,請重新輸入', '錯誤', MB_ICONERROR);
|
|
eYY.SetFocus;
|
|
exit;
|
|
end;
|
|
|
|
CDSBPAA.Close;
|
|
CDSBPAA.Params.ParamValues['BPYER'] := oldYY;
|
|
CDSBPAA.Open;
|
|
CDSBPAA.FieldByName('CHECKED').ReadOnly := False;
|
|
CDSBPAA.FieldByName('NEW_BPPNM').ReadOnly := False;
|
|
end;
|
|
|
|
procedure TForm1.DoOpenYear;
|
|
var newBPPYN, oldBPPYN, newBPPYM: string;
|
|
begin
|
|
CDSBPAA.First;
|
|
CDSBPAA.DisableControls;
|
|
while not CDSBPAA.Eof do
|
|
begin
|
|
if CDSBPAA.FieldByName('CHECKED').Value = 'N' then
|
|
begin
|
|
CDSBPAA.MoveBy(1);
|
|
continue;
|
|
end;
|
|
|
|
newBPPYN := FormatFloat('000', newYY) + CDSBPAA.FieldByName('NEW_BPPNM').AsString;
|
|
oldBPPYN := CDSBPAA.FieldByName('BPPYN').AsString;
|
|
newBPPYM := WNTSA(newYY, '', '2') + '年' + CDSBPAA.FieldByName('BPPME').AsString;
|
|
|
|
Conn.BeginTrans;
|
|
try
|
|
if cbInsertBPAA.Checked then
|
|
begin
|
|
if cbClearFirst.Checked then
|
|
begin
|
|
DeleteBPAA.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
DeleteBPAA.Execute;
|
|
end;
|
|
|
|
InsertBPAA.Parameters.ParamValues['BPPNM'] := CDSBPAA.FieldByName('NEW_BPPNM').AsString;
|
|
InsertBPAA.Parameters.ParamValues['BPYER'] := newYY;
|
|
InsertBPAA.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
InsertBPAA.Parameters.ParamValues['BPPYM'] := newBPPYM;
|
|
InsertBPAA.Parameters.ParamValues['TRDAT'] := Date;
|
|
InsertBPAA.Parameters.ParamValues['OLD_BPPYN'] := oldBPPYN;
|
|
InsertBPAA.Execute;
|
|
end;
|
|
|
|
if cbInsertBPAB.Checked then
|
|
begin
|
|
if cbClearFirst.Checked then
|
|
begin
|
|
DeleteBPAB.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
DeleteBPAB.Execute;
|
|
end;
|
|
|
|
InsertBPAB.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
InsertBPAB.Parameters.ParamValues['TRDAT'] := Date;
|
|
InsertBPAB.Parameters.ParamValues['OLD_BPPYN'] := oldBPPYN;
|
|
InsertBPAB.Execute;
|
|
end;
|
|
|
|
if cbInsertBPJA.Checked then
|
|
begin
|
|
if cbClearFirst.Checked then
|
|
begin
|
|
DeleteBPJA.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
DeleteBPJA.Execute;
|
|
end;
|
|
|
|
InsertBPJA.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
InsertBPJA.Parameters.ParamValues['TRDAT'] := Date;
|
|
InsertBPJA.Parameters.ParamValues['OLD_BPPYN'] := oldBPPYN;
|
|
InsertBPJA.Execute;
|
|
end;
|
|
|
|
if cbInsertBPJB.Checked then
|
|
begin
|
|
if cbClearFirst.Checked then
|
|
begin
|
|
DeleteBPJB.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
DeleteBPJB.Execute;
|
|
end;
|
|
|
|
InsertBPJB.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
InsertBPJB.Parameters.ParamValues['TRDAT'] := Date;
|
|
InsertBPJB.Parameters.ParamValues['OLD_BPPYN'] := oldBPPYN;
|
|
InsertBPJB.Execute;
|
|
end;
|
|
|
|
if cbInsertRASN.Checked then
|
|
begin
|
|
if cbClearFirst.Checked then
|
|
begin
|
|
DeleteRASN.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
DeleteRASN.Execute;
|
|
end;
|
|
|
|
InsertRASN.Parameters.ParamValues['BPPYN'] := newBPPYN;
|
|
InsertRASN.Parameters.ParamValues['RASDT'] := EncodeDate(newYY + 1911, 1, 1);
|
|
InsertRASN.Parameters.ParamValues['TRDAT'] := Date;
|
|
InsertRASN.Parameters.ParamValues['OLD_BPPYN'] := oldBPPYN;
|
|
InsertRASN.Execute;
|
|
|
|
EndOldRASN.Parameters.ParamValues['RAEDT'] := EncodeDate(oldYY + 1911, 12, 31);
|
|
EndOldRASN.Parameters.ParamValues['OLD_RAPYN'] := oldBPPYN;
|
|
EndOldRASN.Execute;
|
|
end;
|
|
|
|
Conn.CommitTrans;
|
|
Memo1.Lines.Add(newBPPYN + '年度開帳成功');
|
|
except
|
|
on E: Exception do
|
|
begin
|
|
Conn.RollbackTrans;
|
|
Memo1.Lines.Add(newBPPYN + '年度開帳失敗!原因為:'#10 + E.Message);
|
|
end;
|
|
end;
|
|
|
|
CDSBPAA.MoveBy(1);
|
|
end;
|
|
CDSBPAA.EnableControls;
|
|
end;
|
|
|
|
procedure TForm1.btnOpenYearClick(Sender: TObject);
|
|
var valid: Boolean;
|
|
selected: Boolean;
|
|
begin
|
|
if CDSBPAA.IsEmpty then
|
|
begin
|
|
Application.MessageBox('請先查詢要複製的年度專案資料後再處理', '錯誤', MB_ICONERROR);
|
|
eNewYY.SetFocus;
|
|
exit;
|
|
end;
|
|
|
|
valid := True;
|
|
selected := False;
|
|
|
|
CDSBPAA.First;
|
|
CDSBPAA.DisableControls;
|
|
while not CDSBPAA.Eof do
|
|
begin
|
|
if CDSBPAA.FieldByName('CHECKED').Value = 'Y' then
|
|
begin
|
|
selected := True;
|
|
valid := valid and (CDSBPAA.FieldByName('NEW_BPPNM').AsString <> '');
|
|
end;
|
|
CDSBPAA.MoveBy(1);
|
|
end;
|
|
CDSBPAA.First;
|
|
CDSBPAA.EnableControls;
|
|
|
|
if not selected then
|
|
begin
|
|
Application.MessageBox('請選擇要開帳的計畫', '錯誤', MB_ICONERROR);
|
|
exit;
|
|
end;
|
|
|
|
if not valid then
|
|
begin
|
|
Application.MessageBox('新計畫代號未輸入,請重新輸入', '錯誤', MB_ICONERROR);
|
|
exit;
|
|
end;
|
|
|
|
newYY := StrToIntDef(eNewYY.Text, -1);
|
|
if (newYY < 0) then
|
|
begin
|
|
Application.MessageBox('新年度不合理,請重新輸入', '錯誤', MB_ICONERROR);
|
|
eNewYY.SetFocus;
|
|
exit;
|
|
end;
|
|
|
|
if (newYY < oldYY) then
|
|
begin
|
|
Application.MessageBox('新年度不可小於原年度,請重新輸入', '錯誤', MB_ICONERROR);
|
|
eNewYY.SetFocus;
|
|
exit;
|
|
end;
|
|
|
|
DoOpenYear;
|
|
end;
|
|
|
|
procedure TForm1.FormActivate(Sender: TObject);
|
|
begin
|
|
eYY.SetFocus;
|
|
end;
|
|
|
|
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
begin
|
|
CDSBPAA.Close;
|
|
Conn.Connected := False;
|
|
end;
|
|
|
|
procedure TForm1.FormCreate(Sender: TObject);
|
|
begin
|
|
Conn.Connected := False;
|
|
Conn.ConnectionString := Format('FILE NAME=%sYearOpen.udl;', [ExtractFilepath(Application.ExeName)]);
|
|
Conn.Connected := True;
|
|
|
|
CDSBPAA.CommandText :=
|
|
' SELECT ''N'' AS CHECKED, A.BPPNM, A.BPYER, A.BPPYN, A.BPPYM, B.BPPME, A.BPPNM AS NEW_BPPNM '
|
|
+ ' FROM BPAA A INNER JOIN BPRJ B ON A.BPPNM=B.BPPNM '
|
|
+ ' WHERE A.BPYER=:BPYER AND A.BPPNM<>''000001'' ';
|
|
CDSBPAA.Params.ParamByName('BPYER').DataType := ftInteger;
|
|
end;
|
|
|
|
end.
|