📄 ap_enter_purchasepayment.pas
字号:
unit Ap_Enter_PurchasePayment;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Entry_Body, ExtPrintReport, Db, ActnList, AdODB, Grids, DBGridEh,
StdCtrls, ExtCtrls, ComCtrls, ToolWin, jpeg, linkedit;
Type
TFrm_Ap_Enter_PurchasePayment = Class(TFrm_Base_Entry_Body)
Label1: TLabel;
Edt_PayBillNo: TEdit;
LEdt_VendorCode: TLinkEdit;
Label2: TLabel;
Label3: TLabel;
Edt_RemArkNo: TEdit;
Label4: TLabel;
Edt_PayDate: TEdit;
Label5: TLabel;
Edt_PayInputdate: TEdit;
Label6: TLabel;
Edt_PayModeName: TEdit;
Label7: TLabel;
Edt_CurrencyName: TEdit;
LEdt_CurrencyCode: TLinkEdit;
Label8: TLabel;
Edt_ExchRate: TEdit;
Label9: TLabel;
Edt_PayAmount: TEdit;
Label10: TLabel;
Edt_PayRemArk: TEdit;
Edt_VendorName: TEdit;
LEdt_PayModeCode: TLinkEdit;
Label11: TLabel;
Edt_Total: TEdit;
Label12: TLabel;
Edt_NoPayedAmount: TEdit;
procedure LEdt_VendorCodeButtonClick(Sender: TObject);
procedure LEdt_VendorCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure LEdt_VendorCodeExit(Sender: TObject);
procedure LEdt_CurrencyCodeButtonClick(Sender: TObject);
procedure LEdt_CurrencyCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure LEdt_CurrencyCodeExit(Sender: TObject);
procedure Edt_PayDateExit(Sender: TObject);
procedure Edt_PayInputdateExit(Sender: TObject);
procedure Edt_PayAmountExit(Sender: TObject);
procedure LEdt_PayModeCodeButtonClick(Sender: TObject);
procedure LEdt_PayModeCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure LEdt_PayModeCodeExit(Sender: TObject);
procedure Edt_ExchRateKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure AdoQry_BodyApPayFlagChange(Sender: TField);
procedure FormDestroy(Sender: TObject);
procedure DBGridEhColExit(Sender: TObject);
procedure DBGridEhExit(Sender: TObject);
procedure AdoQry_BodyBeforeInsert(DataSet: TDataSet);
procedure DBGridEhEnter(Sender: TObject);
procedure Edt_PayAmountChange(Sender: TObject);
procedure AdoQry_BodyAfterEdit(DataSet: TDataSet);
procedure AdoQry_Bodyflag1Change(Sender: TField);
procedure AdoQry_BodyBeforeEdit(DataSet: TDataSet);
procedure Act_PreviewExecute(Sender: TObject);
procedure Act_PrintExecute(Sender: TObject);
procedure Act_ExcelExecute(Sender: TObject);
procedure DBGridEhMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DBGridEhColEnter(Sender: TObject);
procedure DBGridEhCellClick(Column: TColumnEh);
private
{ Private declarations }
brect,Arect:Trect;
tmpvar:integer;
dataChange:boolean; //True run procedure: previewPay;
flag:integer;
curdate:string;
userName:string;
PayMode:integer; //<>2:余额承前核销法; =2逐票核销法
prePay:double; //预付款金额;
PayBillid:string;
procedure GetExchRate;
Function IsMasterCurrency(Currency:string):boolean; //是否本位币 1:为本位币 0:为非本位币;
procedure SaveCheck; //存盘前检查;
procedure previewPay; //模拟付款:测试付款金额是否等于选定核销发票额;
Function TotalPay:double; //Dbgrideh中已选定的发票金额:
Function GetApPayAmount(PayJournalId:string):double; //获取付款匹配总金额
procedure SaveBodydataForPayMode2; //用逐票核销法
procedure SaveBodydataForPayMode1; //用余额承前核销法;
procedure MatchPay ; //增加一张付款记录时发票匹配过程函数
procedure MatchPay_negative; //增加一张红冲付款记录时发票匹配过程函数
procedure BackupLog(Action_flag:string); //插入日志文件;
public
{ Public declarations }
procedure InitControls;Override;
procedure SaveHeadData;Override;
procedure SaveData; Override;//把表头控件写入缓存,不要Post
end;
var
Frm_Ap_Enter_PurchasePayment: TFrm_Ap_Enter_PurchasePayment;
implementation
uses Sys_Global;
{$R *.DFM}
procedure TFrm_Ap_Enter_PurchasePayment.InitControls;
var
sqltext:string;
begin
flag:=0;
inherited;
SetFocus_Control:=Edt_PayBillNo;
//取服务器的日期;
Executesql(AdoQry_tmp,'select convert (varchAr(10),getdate(),102) as a ',0);
curdate:=AdoQry_tmp.fieldbyname('a').asstring;
Executesql(AdoQry_tmp,'select EmployeeName from Employee where EmployeeCode='''+userCode+'''',0);
userName:=AdoQry_tmp.fieldbyname('EmployeeName').asstring;
Act_InsertLine.Enabled :=False;
Act_InsertLine.Visible :=False;
Act_Modify.Enabled :=False;
Act_Modify.Visible :=False;
Act_DeleteLine.Enabled:=False;
Act_DeleteLine.Visible:=False;
if status='Add' then
begin
{LEdt_CurrencyCodeExit(Sender: TObject);
Edt_PayDateExit(Sender: TObject);
edt_PayInputdateExit(Sender: TObject);
Edt_PayAmountExit(Sender: TObject);}
LEdt_VendorCode.text:='';
Edt_VendorName.text:='';
Edt_PayBillNo.text:='';
LEdt_CurrencyCode.text:='';
edt_CurrencyName.text:='';
Edt_ExchRate.text:='';
Edt_PayAmount.text:='';
lEdt_PayModeCode.text:='';
Edt_PayModeName.text:='';
Edt_RemArkNo.text:='';
Edt_PayRemArk.text:='';
Edt_PayDate.text:=curdate;
Edt_PayInputdate.text:=curdate;
Edt_Total.text:='';
Edt_NoPayedAmount.text:='0';
AdoQry_Body.Close;
Edt_PayBillNo.SetFocus ;
dataChange:=False;
end
else
begin
with AdoQry_Head do
begin
LEdt_VendorCode.text:=fieldbyname('VendorCode').asstring;
Edt_VendorName.text:=fieldbyname('VendorName').asstring;
Edt_PayBillNo.text:=fieldbyname('PayBillNo').asstring;
LEdt_CurrencyCode.text:=fieldbyname('CurrencyCode').asstring;
edt_CurrencyName.text:=fieldbyname('CurrencyName').asstring;
Edt_ExchRate.text:=fieldbyname('ExchRate').asstring;
Edt_PayAmount.text:=fieldbyname('PayAmount').asstring;
Edt_Total.text:=fieldbyname('PayAmount').asstring;
Edt_Total.enabled:=False;
lEdt_PayModeCode.text:=fieldbyname('PayModeCode').asstring;
Edt_PayModeName.text:=fieldbyname('PayModeName').asstring;
Edt_RemArkNo.text:=fieldbyname('RemArkNo').asstring;
Edt_PayDate.text:=fieldbyname('PayDate').asstring;
Edt_PayInputdate.text:=fieldbyname('PayInputdate').asstring;
Edt_PayRemArk.text:=fieldbyname('PayRemArk').asstring;
Executesql(AdoQry_tmp,'select PayJournalId from PayJournal where PayBillno='''+AdoQry_Head.fieldbyname('PayBillno').asstring+'''',0);
PayBillid:=AdoQry_tmp.fieldbyname('PayJournalId').asstring;
Edt_NoPayedAmount.text:=floattostr(fieldbyname('PayAmount').asfloat-GetApPayAmount(PayBillid));
end;
if status='ReadOnly' then
begin
Sqltext:=' select ApInvoice.ApInvoiceId,ApInvoiceNo,ApInvoiceDate,ApInvoiceAmount , '+
' ApInvoiceTax,ApInvoiceAmount-ApInvoiceTax as ApInvoiceNoTaxAmount,'+
' ApInvoiceAmount-ApPayedAmount as NoApPayAmount,'+
' PayJournalline.PayedAmount as ThisApPayAmount,1 as flag1 '+
' from ApInvoice left join PayJournalline '+
' on ApInvoice.ApInvoiceId=PayJournalline.ApInvoiceId '+
' where PayJournalline.PayJournalId='+PayBillid +
' Order by ApInvoiceDate ';
dbgrideh.Columns[6].ReadOnly :=True;
end;
if Status='AllEdit' then
begin
sqltext:=' create table #ApInvoice (ApInvoiceId integer not null, '+
'ApInvoiceNo varchAr(20),'+
'ApInvoiceDate datetime null,'+
'ApInvoiceAmount decimal (12, 2) NOT NULL ,'+
'ApInvoiceTax decimal (10, 2) NOT NULL ,'+
'ApInvoiceNoTaxAmount decimal (12, 2) NOT NULL ,'+
'NoApPayAmount decimal (12, 2) NOT NULL ,'+
'ThisApPayAmount decimal (12, 2) default 0.00 ,'+
'flag1 int default 0 ) '+
' insert into #ApInvoice '+
' select ApInvoiceId,ApInvoiceNo,ApInvoiceDate,ApInvoiceAmount,'+
' ApInvoiceTax,ApInvoiceAmount-ApInvoiceTax as ApInvoiceNoTaxAmount,'+
' ApInvoiceAmount-ApPayedAmount as NoApPayAmount,0 as ThisApPayAmount,'+
' 1 as flag1 '+
//' 0.00 as ThisApPayAmount '+
//' into #ApInvoice '+
' from ApInvoice '+
' where VendorCode='''+Trim(LEdt_VendorCode.text)+''''+
' and ApInvoiceAmount-ApPayedAmount<>0 '+
//' and ApPayFlag<>0 '+
' Order by ApInvoiceDate '+
' select * from #ApInvoice' ;
SetFocus_Control:=DBGridEh;
Act_Save.Enabled :=True;
end;
if Status='AllEdit' then
begin
try
Executesql(AdoQry_tmp,'drop table #ApInvoice',1)
except
end;
dbgrideh.ReadOnly :=False;
dbgrideh.Columns[6].ReadOnly :=False;
end;
Executesql(AdoQry_Body,sqltext,0 );
end;
Edt_PayModeName.Enabled :=False;
Edt_VendorName.Enabled :=False;
Edt_CurrencyName.Enabled :=False;
flag:=1;
if Status='AllEdit' then
Act_Save.Enabled :=True;
Edt_NoPayedAmount.enabled:=False;
if status='ReadOnly' then
dbgrideh.Columns[7].Visible :=False;
end;
procedure TFrm_Ap_Enter_PurchasePayment.SaveData;
var
Amount:double; //获取付款匹配总金额
begin
dataChange:=False;
inherited;
//if status='Add' then
SaveCheck; //存盘前检查;
dataChange:=True;
if AdoQry_Body.state<>dsBrowse then
AdoQry_Body.post;
//previewPay; //模拟付款:测试付款金额是否等于选定核销发票额;
Amount:=0.0;
dbconnect.beginTrans ;
try
if status='Add' then
begin
with AdoQry_tmp do
begin
Close;
sql.clear;
SQL.Add('insert into PayJournal '+
' (PayBillNo,'+
' RemArkNo,'+
' PayDate,'+
' VendorCode,'+
' CurrencyCode,'+
' EmployeeCode,'+
' PayInputDate,'+
' PayModeCode,'+
' ExchRate,' +
' PayAmountC,'+
' PayAmount,'+
' CreateDate,'+
' PayremArk) '+
'Values '+
' ('''+edt_PayBillno.Text+''','+
' '''+edt_RemArkNo.Text+''','+
' '''+edt_Paydate.Text+''','+
' '''+LEdt_VendorCode.Text+''','+
' '''+LEdt_CurrencyCode.text+''','+
' '''+userCode+''','+
' '''+Edt_PayInputdate.Text+''','+
' '''+(ledt_PayModeCode.Text)+''','+
' '+edt_ExchRate.text+','+
' '+floattostr(strtofloat(Edt_ExchRate.text)* strtofloat(edt_PayAmount.Text))+','+
' '+edt_PayAmount.Text+','+
' '''+curdate+''','+
' '''+edt_PayremArk.Text+''')');
execSQL;
// Pay_Backup('A');
end ;
Executesql(AdoQry_tmp,'select @@IDENTITY as id ',0);
PayBillid:=AdoQry_tmp.fieldbyname('id').asstring;
BackupLog('A'); //插入日志文件;
AdoQry_Body.DisableControls ;
try
if PayMode=2 then
SaveBodydataForPayMode2 //用逐票核销法
else
SaveBodydataForPayMode1; //用余额承前核销法;
finally
AdoQry_Body.EnableControls ;
end;
//Amount:= TotalPay;
Edt_NoPayedAmount.text:=formatfloat('0.##',strtofloat(Edt_PayAmount.text)-TotalPay);
end;
if Status='AllEdit' then
begin
BackupLog('M'); //插入日志文件;
AdoQry_Body.DisableControls ;
try
if PayMode=2 then
SaveBodydataForPayMode2 //用逐票核销法
else
SaveBodydataForPayMode1; //用余额承前核销法;
finally
AdoQry_Body.EnableControls ;
end;
Edt_NoPayedAmount.text:=formatfloat('0.##',strtofloat(Edt_NoPayedAmount.text)-TotalPay);
end;
{ with AdoQry_Head do
begin
edit;
fieldbyname('PayJournalID').asstring:=PayBillid;
post;
end;}
dbconnect.CommitTrans ;
except
dbconnect.RollBackTrans ;
abort;
end;
end;
procedure TFrm_Ap_Enter_PurchasePayment.SaveHeadData;
begin
inherited;
with AdoQry_Head do
begin
fieldbyname('VendorCode').asstring:=LEdt_VendorCode.text;
fieldbyname('VendorName').asstring:=Edt_VendorName.text;
fieldbyname('PayBillNo').asstring:=Edt_PayBillNo.text;
fieldbyname('CurrencyCode').asstring:=LEdt_CurrencyCode.text;
fieldbyname('CurrencyName').asstring:=edt_CurrencyName.text;
fieldbyname('ExchRate').asstring:=Edt_ExchRate.text;
fieldbyname('PayAmount').asstring:=Edt_PayAmount.text;
fieldbyname('PayModeCode').asstring:=lEdt_PayModeCode.text;
fieldbyname('PayModeName').asstring:=Edt_PayModeName.text;
fieldbyname('RemArkNo').asstring:=Edt_RemArkNo.text;
fieldbyname('PayDate').asstring:=Edt_PayDate.text;
fieldbyname('PayInputdate').asstring:=Edt_PayInputdate.text;
fieldbyname('PayRemArk').asstring:=Edt_PayRemArk.text;
fieldbyname('CreateDate').asstring:= CurDate;
fieldbyname('EmployeeCode').asstring:=userCode;
fieldbyname('EmployeeName').asstring:=userName;
end;
end;
procedure TFrm_Ap_Enter_PurchasePayment.LEdt_VendorCodeButtonClick(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -