📄 pd.pas
字号:
unit Pd;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, sncCurrency, sncDBCurrency, Grids, DBGridEh, DB, ADODB, ImgList,
StdCtrls, ExtCtrls, SUIForm, SUIEdit, ComCtrls, SUIButton, Buttons,
ToolWin , ExtFunc, TFlatSpeedButtonUnit, TFlatButtonUnit, FR_DSet,
FR_DBSet, FR_Class, printers;
type
TFrmPD = class(TForm)
suiFrmPD: TsuiForm;
g: TDBGridEh;
sncDBCurrencyInplaceEdit: TsncDBCurrencyEdit;
Panel1: TPanel;
Label1: TLabel;
sncCurrencyLabel3: TsncCurrencyLabel;
sncCurrencyLabel4: TsncCurrencyLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
DataSource1: TDataSource;
editPZBH: TsuiEdit;
Panel7: TPanel;
Label2: TLabel;
Panel8: TPanel;
Panel9: TPanel;
Label6: TLabel;
Label7: TLabel;
editFJ: TsuiEdit;
Label8: TLabel;
Label9: TLabel;
datePD: TDateTimePicker;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Panel10: TPanel;
Panel11: TPanel;
Panel12: TPanel;
editZD: TsuiEdit;
editSH: TsuiEdit;
editDZ: TsuiEdit;
Panel13: TPanel;
editCWZG: TsuiEdit;
Label13: TLabel;
tq: TADOQuery;
t: TADOTable;
tbPrint: TFlatButton;
tbPrePrint: TFlatButton;
tbSave: TFlatButton;
tbDel: TFlatButton;
tbPrevious: TFlatButton;
tbNext: TFlatButton;
tbCalc: TFlatButton;
tbAddRow: TFlatButton;
tbInsertRow: TFlatButton;
tbDeleteRow: TFlatButton;
tbSwap: TFlatButton;
tbBalance: TFlatButton;
qPDAll: TADOQuery;
fr: TfrReport;
frDS: TfrDBDataSet;
procedure sncDBCurrencyInplaceEditEnter(Sender: TObject);
procedure sncDBCurrencyInplaceEditExit(Sender: TObject);
procedure sncDBCurrencyInplaceEditMoveOut(Sender: TObject;
var Key: Word; Shift: TShiftState);
procedure gColEnter(Sender: TObject);
procedure gColExit(Sender: TObject);
procedure gDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
procedure gKeyPress(Sender: TObject; var Key: Char);
procedure editFJExit(Sender: TObject);
procedure gColumns0EditButtonClick(Sender: TObject;
var Handled: Boolean);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure gColumns1EditButtonClick(Sender: TObject;
var Handled: Boolean);
procedure Label1MouseEnter(Sender: TObject);
procedure Label1MouseLeave(Sender: TObject);
procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Label1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Label1Click(Sender: TObject);
procedure gCellClick(Column: TColumnEh);
procedure tbAddRowClick(Sender: TObject);
procedure tbInsertRowClick(Sender: TObject);
procedure tbDeleteRowClick(Sender: TObject);
procedure tbSwapClick(Sender: TObject);
procedure tbBalanceClick(Sender: TObject);
procedure tbSaveClick(Sender: TObject);
procedure editFJKeyPress(Sender: TObject; var Key: Char);
procedure tbDelClick(Sender: TObject);
procedure tbPreviousClick(Sender: TObject);
procedure tbNextClick(Sender: TObject);
procedure tbCalcClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tbPrePrintClick(Sender: TObject);
procedure tbPrintClick(Sender: TObject);
procedure sncDBCurrencyInplaceEditKeyPress(Sender: TObject;
var Key: Char);
private
{ Private declarations }
public
CurrentYear,CurrentMonth:integer;
MaxNum:integer;
CanEdit,CanEditSubject:Boolean;
Deleted,Edited,Added,EditSubjected:Boolean;
DefaultYear,DefaultMonth,DefaultNum:integer;
procedure SetHighLightColor;
procedure SetNormalColor;
function CheckCurrencyField(FieldName: String): Boolean;
function CheckPDFull:Boolean;
function CheckRowFull:Boolean;
procedure EditChange;
procedure GoPD(Num:integer);
procedure NewPD;
procedure SetPDDateRange;
procedure SetPDDateRangeCancel;
procedure PrintPD(PrintType:integer);
procedure ChangeGridCol(Col:integer);
end;
const
CurrencyFieldSet: array[0..1] of string=('J_Money' , 'D_Money');
var
FrmPD: TFrmPD;
implementation
uses PublicFunc, EditSubject, DataModule;
{$R *.dfm}
procedure TFrmPD.EditChange;
begin
t.Edit;
t.Post;
tbSave.Enabled:=CheckPDFull;
tbSwap.Enabled:=((t.FieldByName('J_Money').AsCurrency<>0) or (t.FieldByName('D_Money').AsCurrency<>0));
tbBalance.Enabled:=(t.RecordCount>1);
tbDeleteRow.Enabled:=(t.RecordCount>1);
tbAddRow.Enabled:=(CheckRowFull) or (t.RecordCount<1);
tbInsertRow.Enabled:=CheckRowFull;
end;
function TFrmPD.CheckPDFull:Boolean;
var
J,D:Currency;
begin
result:=false;
if t.RecordCount<2 then Exit;
tq.Close;
tq.SQL.Clear;
tq.SQL.Add('select top 1 * from #TempPD order by RecNo');
tq.Open;
if Trim(tq.FieldByName('Summary').AsString)='' then
begin
tq.Close;
Exit;
end;
tq.Close;
tq.SQL.Clear;
tq.SQL.Add('select * from #TempPD where Name is null or (J_Money=0 and D_Money=0)');
tq.Open;
if tq.RecordCount>0 then
begin
tq.Close;
Exit;
end;
tq.Close;
tq.SQL.Clear;
tq.SQL.Add('select sum(J_Money) as SUM_J,sum(D_Money) as SUM_D from #TempPD');
tq.Open;
J:=tq.FieldByName('SUM_J').AsCurrency;
D:=tq.FieldByName('SUM_D').AsCurrency;
tq.Close;
result:=(J=D);
end;
function TFrmPD.CheckRowFull:Boolean;
begin
if t.RecNo=1 then
result:=((Trim(t.FieldByName('Summary').AsString)<>'') and (Trim(t.FieldByName('Name').AsString)<>'') and ((t.FieldByName('J_Money').asCurrency<>0) or (t.FieldByName('D_Money').asCurrency<>0)))
else
result:=((Trim(t.FieldByName('Name').AsString)<>'') and ((t.FieldByName('J_Money').asCurrency<>0) or (t.FieldByName('D_Money').asCurrency<>0)));
end;
procedure TFrmPD.GoPD(Num:integer);
begin
qPDAll.RecNo:=Num;
CurrentYear:=qPDAll.FieldByName('Year').AsInteger;
CurrentMonth:=qPDAll.FieldByName('Month').AsInteger;
editPZBH.Text:=Trim(qPDAll.FieldByName('Number').AsString);
tq.Close;
tq.SQL.Clear;
tq.SQL.Add('delete from #TempPD');
tq.ExecSQL;
tq.Close;
tq.SQL.Clear;
tq.SQL.Add('insert into #TempPD select * from V_Credence where [Year]='+IntToStr(CurrentYear)+' and [Month]='+IntToStr(CurrentMonth)+' and Number='+editPZBH.Text);
tq.ExecSQL;
tq.Close;
t.Requery;
g.SumList.RecalcAll;
t.First;
while not t.Eof do
begin
t.Edit;
t.FieldByName('Name').AsString:=Trim(t.FieldByName('CodeLongSubjectName').AsString);
t.Post;
t.Next;
end;
t.First;
editCWZG.Text:=DM.FinanceManager;
editZD.Text:=Trim(t.FieldByName('MakeOperator').AsString);
editSH.Text:=Trim(t.FieldByName('AuditingOperator').AsString);
SetPDDateRangeCancel;
DatePD.Date:=t.FieldByName('DateTime').AsDateTime;
SetPDDateRange;
editFJ.Text:=Trim(t.FieldByName('AccessoryNum').AsString);
CanEdit:=(editSH.Text='');
tbPrint.Enabled:=true;
tbPrePrint.Enabled:=true;
tbSave.Enabled:=true;
tbDel.Enabled:=(qPDAll.RecNo=qPDAll.RecordCount);
tbPrevious.Enabled:=(qPDAll.RecNo>1);
tbNext.Enabled:=true;
g.Readonly:=false;
datePD.Enabled:=true;
editFJ.Enabled:=true;
sncDBCurrencyInplaceEdit.ReadOnly:=false;
if (DefaultNum<>-1) then
begin
tbNext.Enabled:=false;
tbPrevious.Enabled:=false;
CanEdit:=false;
end;
if (not CanEdit) then
begin
tbSave.Enabled:=false;
tbDel.Enabled:=false;
tbAddRow.Enabled:=false;
tbInsertRow.Enabled:=false;
tbDeleteRow.Enabled:=false;
tbSwap.Enabled:=false;
tbBalance.Enabled:=false;
g.Readonly:=true;
datePD.Enabled:=false;
editFJ.Enabled:=false;
sncDBCurrencyInplaceEdit.ReadOnly:=true;
end;
end;
procedure TFrmPD.NewPD;
begin
CanEdit:=true;
tbPrint.Enabled:=false;
tbPrePrint.Enabled:=false;
tbSave.Enabled:=false;
tbDel.Enabled:=false;
tbPrevious.Enabled:=false;
tbNext.Enabled:=false;
tbAddRow.Enabled:=false;
tbInsertRow.Enabled:=false;
tbDeleteRow.Enabled:=false;
tbSwap.Enabled:=false;
tbBalance.Enabled:=false;
CurrentYear:=DM.AccountYear;
CurrentMonth:=DM.AccountMonth;
SetPDDateRangeCancel;
if DM.AccountMonth=12 then datePD.Date:=StrToDate(IntToStr(DM.AccountYear+1)+'-1-1')-1 else datePD.Date:=StrToDate(IntToStr(DM.AccountYear)+'-'+IntToStr(DM.AccountMonth+1)+'-1')-1;
SetPDDateRange;
editCWZG.Text:=DM.FinanceManager;
editZD.Text:=DM.UserName;
editSH.Text:='';
CanEdit:=true;
g.Readonly:=false;
datePD.Enabled:=true;
editFJ.Enabled:=true;
sncDBCurrencyInplaceEdit.ReadOnly:=false;
tq.Close;
tq.SQL.Clear;
tq.SQL.Add('delete from #TempPD');
tq.ExecSQL;
t.Requery;
g.SumList.RecalcAll;
if qPDAll.RecordCount<1 then
MaxNum:=1
else
begin
tbPrevious.Enabled:=true;
qPDAll.Last;
if (qPDAll.FieldByName('Year').AsInteger=DM.AccountYear) and (qPDAll.FieldByName('Month').AsInteger=DM.AccountMonth) then
MaxNum:=qPDAll.FieldByName('Number').AsInteger+1
else
MaxNum:=1;
end;
editPZBH.Text:=IntToStr(MaxNum);
editFJ.Text:='0';
t.Append;
t.FieldByName('RecNo').AsInteger:=1;
t.Post;
end;
function TFrmPD.CheckCurrencyField(FieldName: String): Boolean;
var
I: Integer;
begin
Result := False;
for I:=0 to Length(CurrencyFieldSet)-1 do
begin
if (FieldName=CurrencyFieldSet[I]) then
begin
Result := True;
Break;
end;
end;
end;
procedure TFrmPD.SetHighLightColor;
begin
sncDBCurrencyInplaceEdit.Color := clMoneyGreen;
sncDBCurrencyInplaceEdit.Font.Color := clWhite;
end;
procedure TFrmPD.SetNormalColor;
begin
sncDBCurrencyInplaceEdit.Color := g.Color;
sncDBCurrencyInplaceEdit.Font.Color := g.Font.Color;
end;
procedure TFrmPD.sncDBCurrencyInplaceEditEnter(Sender: TObject);
begin
SetNormalColor;
if CanEdit then
begin
if ((g.SelectedField.FieldName='J_Money') and (t.FieldByName('D_Money').AsCurrency<>0)) or
((g.SelectedField.FieldName='D_Money') and (t.FieldByName('J_Money').AsCurrency<>0)) then
begin
sncDBCurrencyInplaceEdit.ReadOnly:=true;
tbCalc.Enabled:=false;
end
else
begin
tbCalc.Enabled:=true;
EditChange;
sncDBCurrencyInplaceEdit.ReadOnly:=false;
end;
end;
end;
procedure TFrmPD.sncDBCurrencyInplaceEditExit(Sender: TObject);
begin
SetHighLightColor;
if CanEdit then EditChange;
end;
procedure TFrmPD.sncDBCurrencyInplaceEditMoveOut(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
case Key of
VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT:
begin
g.SetFocus;
SendMessage(g.Handle, WM_KEYDOWN, WORD(Key), 0);
end;
end;
end;
procedure TFrmPD.gColEnter(Sender: TObject);
begin
if CheckCurrencyField(g.SelectedField.FieldName) then
begin
sncDBCurrencyInplaceEdit.DataField := g.SelectedField.FieldName;
sncDBCurrencyInplaceEdit.Tag := 1;
end;
end;
procedure TFrmPD.gColExit(Sender: TObject);
begin
if CheckCurrencyField(g.SelectedField.FieldName) then
begin
sncDBCurrencyInplaceEdit.Visible := false;
sncDBCurrencyInplaceEdit.Tag := 0;
end;
end;
procedure TFrmPD.gDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
var
OldColor, OldFontColor: TColor;
begin
if CheckCurrencyField(Column.FieldName) then
begin
if (gdFocused in State) then
begin
sncDBCurrencyInplaceEdit.Left := Rect.Left + g.Left+2;
sncDBCurrencyInplaceEdit.Top := Rect.Top + g.top+2;
sncDBCurrencyInplaceEdit.Width := Rect.Right-Rect.Left;
sncDBCurrencyInplaceEdit.Height := Rect.Bottom- Rect.Top;
SetHighLightColor;
if (sncDBCurrencyInplaceEdit.Tag=1) and not sncDBCurrencyInplaceEdit.Visible then
sncDBCurrencyInplaceEdit.Visible := True;
end
else
begin
OldColor := sncDBCurrencyInplaceEdit.Color;
OldFontColor := sncDBCurrencyInplaceEdit.Font.Color;
SetNormalColor;
DrawCurrencyFrame(g.Canvas, Rect, sncDBCurrencyInplaceEdit, Column.Field.AsFloat);
sncDBCurrencyInplaceEdit.Color := OldColor;
sncDBCurrencyInplaceEdit.Font.Color := OldFontColor;
end;
end;
end;
procedure TFrmPD.gKeyPress(Sender: TObject; var Key: Char);
var
id:integer;
d:pChar;
begin
if (Key=#13) and (g.SelectedField.FieldName='Summary') then
begin
EditChange;
ChangeGridCol(1);
Exit;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -