📄 ap_pay_d.pas
字号:
//功能:付款表单明细控制.最后更新时间:5月21日
unit Ap_Pay_D;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Detail, Db, AdODB, ExtCtrls, StdCtrls, ExtEdit, Mask, ActnList,
linkedit;
Type
TFrm_Ap_Pay_D = Class(TFrm_Base_Detail)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
edt_VendorCode1: TExtEdit;
Label4: TLabel;
Lbl_VendorName1: TLabel;
Label6: TLabel;
Label7: TLabel;
edt_PayBillno: TExtEdit;
edt_PayAmount: TExtEdit;
edt_Paydate: TMaskEdit;
edt_PayModeCode: TComboBox;
Label5: TLabel;
Label8: TLabel;
edt_CurrencyCode: TExtEdit;
edt_EmployeeCode: TExtEdit;
Label9: TLabel;
Lbl_EmployeeName: TLabel;
Label11: TLabel;
Lbl_CURRENCYName: TLabel;
Label10: TLabel;
edt_PayRemArk: TExtEdit;
Label12: TLabel;
Edt_input: TMaskEdit;
Label13: TLabel;
edt_RemArkNo: TExtEdit;
Lbl_VendorName: TEdit;
edt_VendorCode: TLinkEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure edt_PayAmountExit(Sender: TObject);
procedure btn_CancelClick(Sender: TObject);
procedure edt_VendorCode1Exit(Sender: TObject);
procedure btn_okClick(Sender: TObject);
procedure Edt_inputExit(Sender: TObject);
procedure edt_VendorCodeExit(Sender: TObject);
procedure edt_VendorCodeButtonClick(Sender: TObject);
private
{ Private declarations }
lc_PayId,lc_Old_Vendor:string;
Lc_Match:boolean;
lc_Old_Amount:real;
function ApCheckout(Month: String): Boolean; //检查录入月份是否允许变更
function GetApInvoiced(VendorCode:string):real; //获得已开发应付款的值
procedure Pay_Backup(Action_flag:string); //插入日志文件PayJournalLog
procedure Delete_Old_MatchPay(VendorCodeS:string;CurrPay:real); //删除一张付款记录时发票匹配过程函数
procedure MatchPay(VendorCodeS:string;CurrPay:real); //增加一张付款记录时发票匹配过程函数
procedure MatchPay_negative(VendorCodeS:string;CurrPay:real); //增加一张红冲付款记录时发票匹配过程函数
procedure MArk_File(ApId,InvoiceId:integer;PayedAmout:real;PayedDate:string);//插入日志文件PayJournalLineLog
procedure Add_CurrentAp(VendorCodeS:string;CurrPay:real); //增加一张付款票据时,在当前应付款CurrentAp表中减去相应数据
procedure Delete_CurrentAp(VendorCodeS:string;CurrPay:real); //删除一张付款票据时,在当前应付款CurrentAp表中修改相应数据
public
{ Public declarations }
protected
procedure InitControls; Override;
procedure SaveData; Override;
end;
var
Frm_Ap_Pay_D: TFrm_Ap_Pay_D;
implementation
uses Sys_Global,Ap_Pay;
{$R *.DFM}
procedure TFrm_Ap_Pay_D.Pay_Backup(Action_flag:string);
//Action_flag为'A'代表增加,'M'代表修改,'D'代表删除.
var
Sql_Txt:string;
Temp_Qry_log:TAdoQuery;
Temp_Date:string;
begin
Temp_Qry_log:=TAdoQuery.Create(nil);
Temp_Qry_log.Connection:=AdoQry_Maintain.Connection;
if Action_flag='M' then
Sql_Txt:='insert into PayJournalLog(LogDate,'+
'LogOperatorCode,'+
'LogAction,'+
'PayJournalId,'+
'VendorCode,'+
'CurrencyCode,'+
'EmployeeCode,'+
'PayModeCode,'+
'PayDate,'+
'PayInputDate,'+
'PayAmount,'+
'PayBillNo,'+
'PayRemArk) '+
'Values(getdate(),'+
' '''+edt_EmployeeCode.Text+''','+
format('''%s''',[action_flag])+','+
' '+AdoQry_Maintain.fieldbyname('PayJournalId').asstring+','+
' '''+edt_VendorCode.Text+''','+
' '''+edt_CurrencyCode.text+''','+
' '''+AdoQry_Maintain.fieldbyname('EmployeeCode').asstring+''','+
' '''+GetCode(edt_PayModeCode.Text)+''','+
' '''+edt_Paydate.Text+''','+
' '''+Edt_input.Text+''','+
' '+edt_PayAmount.Text+','+
' '''+edt_PayBillno.Text+''','+
' '''+edt_PayremArk.Text+''')'
else
Sql_Txt:='insert into PayJournalLog(LogDate,'+
'LogOperatorCode,'+
'LogAction,'+
'PayJournalId,'+
'VendorCode,'+
'CurrencyCode,'+
'EmployeeCode,'+
'PayModeCode,'+
'PayDate,'+
'PayInputDate,'+
'PayAmount,'+
'PayBillNo,'+
'PayRemArk) '+
'Values('''+formatdatetime('yyyy.mm.dd',date())+''','+
' '''+edt_EmployeeCode.Text+''','+
format('''%s''',[action_flag])+','+
' '''+AdoQry_Maintain.fieldbyname('PayJournalId').asstring+''','+
' '''+edt_VendorCode.Text+''','+
' '''+edt_CurrencyCode.text+''','+
' '''+edt_EmployeeCode.Text+''','+
' '''+GetCode(edt_PayModeCode.Text)+''','+
' '''+edt_Paydate.Text+''','+
' '''+Edt_input.Text+''','+
' '+edt_PayAmount.Text+','+
' '''+edt_PayBillno.Text+''','+
' '''+edt_PayremArk.Text+''')';
with Temp_Qry_log do
begin
sql.clear;
sql.Add(sql_txt);
Prepared;
execSQL;
end;
end;
procedure TFrm_Ap_Pay_D.FormCreate(Sender: TObject);
begin
inherited;
setfocus_Control:=edt_Paydate
end;
procedure TFrm_Ap_Pay_D.InitControls;
begin
inherited;
with AdoQry_Maintain do
begin
edt_VendorCode.Text:=fieldbyname('VendorCode').asstring;
edt_Paydate.Text:=fieldbyname('Paydate').asstring;
edt_PayBillno.Text:=fieldbyname('PayBillno').asstring;
edt_PayModeCode.Text:=fieldbyname('PayModeCode').asstring;
edt_PayAmount.Text:=fieldbyname('PayAmount').asstring;
edt_PayremArk.Text:=fieldbyname('PayremArk').asstring;
Lbl_VendorName.text:=fieldbyname('VendorName').asstring;
Lbl_CURRENCYName.Caption:=fieldbyname('currencyName').asstring;
if Pnl_Add.Caption='修改' then
begin
lc_Old_Vendor:=edt_VendorCode.Text;
lc_Old_Amount:=strtofloat(edt_PayAmount.Text);
edt_RemArkNo.text:=fieldbyname('RemArkNo').asstring;
edt_EmployeeCode.Text:=fieldbyname('EmployeeCode').asstring;
Edt_input.Text:=fieldbyname('PayInputDate').asstring;
edt_Paydate.SetFocus;
end
else
begin
edt_RemArkNo.text:='';
edt_input.text:=formatdatetime('yyyy.mm.dd',now());
edt_EmployeeCode.Text:=UserCode;
end;
edt_EmployeeCode.OnExit(edt_EmployeeCode);
edt_EmployeeCode.Enabled:=False;
edt_EmployeeCode.Color:=clmenu;
edt_CurrencyCode.Text:=fieldbyname('currencyCode').asstring;
edt_CurrencyCode.Enabled:=False;
edt_CurrencyCode.Color:=clmenu;
end;
end;
procedure TFrm_Ap_Pay_D.SaveData;
var
S:string;
begin
if ApCheckout(Edt_input.Text) then
begin
DispInfo('不允许增加已结帐月份记录!',1);
Edt_input.SetFocus;
abort;
end;
if edt_PayModeCode.Text='' then
begin
DispInfo('付款方式不可为空!',1);
edt_PayModeCode.SetFocus;
Abort;
end;
inherited;
if (Add) then
begin
S:=formatdatetime('yyyymm',date); //付款匹配号流水增加
edt_PayBillno.Text:=GetNo(AdoQry_Tmp.Connection,S,'ApPay');
end;
DbConnect.beginTrans;
try
with AdoQry_Tmp do
begin
Close;
SQL.clear;
if(Add)then
begin
SQL.Add('insert into PayJournal '+
' (PayBillNo,'+
' RemArkNo,'+
' PayDate,'+
' VendorCode,'+
' CurrencyCode,'+
' EmployeeCode,'+
' PayInputDate,'+
' PayModeCode,'+
' PayAmount,'+
' PayremArk) '+
'Values '+
' ('''+edt_PayBillno.Text+''','+
' '''+edt_RemArkNo.Text+''','+
' '''+edt_Paydate.Text+''','+
' '''+edt_VendorCode.Text+''','+
' '''+edt_CurrencyCode.text+''','+
' '''+edt_EmployeeCode.Text+''','+
' '''+edt_input.Text+''','+
' '''+GetCode(edt_PayModeCode.Text)+''','+
' '+edt_PayAmount.Text+','+
' '''+edt_PayremArk.Text+''')');
execSQL;
Pay_Backup('A');
end
else
begin
SQL.Add('update PayJournal '+
'set PayBillNo='''+edt_PayBillNo.Text+''','+
' RemArkNo='''+edt_RemArkNo.Text+''','+
' Paydate='''+edt_Paydate.Text+''','+
' VendorCode='''+edt_VendorCode.Text+''','+
' CurrencyCode='''+edt_CurrencyCode.Text+''','+
' PayInputDate='''+edt_input.Text+''','+
' EmployeeCode='''+edt_EmployeeCode.Text+''','+
' PayModeCode='''+GetCode(edt_PayModeCode.Text)+''','+
' PayAmount='+edt_PayAmount.Text+','+
' PayRemArk='''+edt_PayremArk.text+''' '+
'where PayBillno='''+AdoQry_Maintain.fieldbyname('PayBillno').asstring+''' ' );
execSQL;
Pay_Backup('M');
Delete_Old_MatchPay(lc_Old_Vendor,lc_Old_Amount);
delete_CurrentAp(lc_Old_Vendor,lc_Old_Amount);
end;
end;
with AdoQry_Maintain do
begin
fieldbyname('RemArkNo').Value:=edt_RemArkNo.Text;
fieldbyname('VendorCode').Value:=edt_VendorCode.Text;
fieldbyname('Paydate').Value:=strtodate(edt_Paydate.Text);
fieldbyname('PayBillno').Value:=edt_PayBillno.Text;
fieldbyname('PayModeCode').Value:=GetCode(edt_PayModeCode.Text);
fieldbyname('PayAmount').Value:=edt_PayAmount.Text;
fieldbyname('currencyCode').AsString:=edt_CurrencyCode.Text;
fieldbyname('currencyName').AsString:=Lbl_CurrencyName.Caption;
fieldbyname('EmployeeCode').asstring:=edt_EmployeeCode.Text;
fieldbyname('PayremArk').asstring:=edt_PayremArk.Text;
fieldbyname('PayInputDate').asstring:=edt_Input.Text;
post;
end;
if StrToFloat(edt_PayAmount.Text)>=0 then
MatchPay(edt_VendorCode.text,strtofloat(edt_PayAmount.Text))
else
MatchPay_negative(edt_VendorCode.text,strtofloat(edt_PayAmount.Text));
Add_CurrentAp(edt_VendorCode.text,strtofloat(edt_PayAmount.Text));
DbConnect.CommitTrans;
DispInfo('发票已按余额承前法匹配完毕!',3);
except
DbConnect.RollBackTrans;
DispInfo('无法匹配发票数据库!',1);
Abort;
end;
end;
procedure TFrm_Ap_Pay_D.FormDestroy(Sender: TObject);
begin
inherited;
Frm_Ap_Pay_D:=nil;
end;
procedure TFrm_Ap_Pay_D.FormActivate(Sender: TObject);
begin
inherited;
InitCmBx(AdoQry_Tmp.Connection,Edt_PayModeCode,'PayMode','PayModeCode','PayModeName',False);
InitCmBxText(Edt_PayModeCode,GetCode(AdoQry_Maintain.fieldbyname('PayModeCode').asstring));
if (Add) then
begin
Lbl_VendorName.text:='';
edt_PayBillno.Text:='';
edt_Paydate.Text:=DateToStr(Now());
edt_RemArkNo.Text:='';
edt_VendorCode.Text:='';
edt_PayModeCode.Text:='';
edt_PayAmount.Text:='';
edt_PayremArk.Text:='';
edt_CurrencyCode.Text:='';
Lbl_CURRENCYName.Caption:='';
end;
end;
procedure TFrm_Ap_Pay_D.MatchPay(VendorCodeS:string;CurrPay: real);
var
Bill_Tmp_Qry:TAdoQuery;
SQL_Txt:string;
Temp_var:real;
begin
Temp_var:=0.0;
Bill_tmp_Qry:=TAdoQuery.Create(nil);
Bill_tmp_Qry.Connection:=AdoQry_Maintain.Connection;
SQL_Txt:='select ApInvoiceId,'+
'ApInvoiceInputDate,'+
'ApInvoiceAmount,'+
'ApPayedAmount,'+
'ApPayFlag '+
'from ApInvoice '+
'where ApPayFlag<>0 and '+
'VendorCode='+
format('''%s''',[VendorCodeS]);
with Bill_Tmp_Qry do
begin
sql.clear;
sql.Add(sql_txt);
Prepared;
open;
Sort:='ApInvoiceInputDate';
First;
while not eof do
begin
Temp_var:=fieldbyname('ApPayedAmount').asfloat;
case fieldbyname('ApPayflag').asinteger of
1:Temp_var:=fieldbyname('ApInvoiceAmount').asfloat-Temp_var;
2:Temp_var:=fieldbyname('ApInvoiceAmount').asfloat;
end;
AdoQry_Tmp.Close;
AdoQry_Tmp.sql.clear;
sql_txt:='select PayJournalId,PayBillNO '+
' from PayJournal'+
' where PayBillNo='+
format('''%s''',[edt_PayBillno.Text]);
AdoQry_Tmp.sql.Add(sql_txt);
AdoQry_Tmp.Prepared;
AdoQry_Tmp.open;
lc_PayId:=AdoQry_Tmp.fieldbyname('PayJournalId').asstring;
if CurrPay>Temp_var then
begin
edit;
fieldbyname('ApPayflag').asInteger:=0;
fieldbyname('ApPayedAmount').asfloat:=fieldbyname('ApInvoiceAmount').asfloat;
CurrPay:=CurrPay-Temp_var;
post;
MArk_File(strtoint(lc_PayId),
fieldbyname('ApInvoiceId').asinteger,Temp_var,
edt_Paydate.Text);
next;
end
else
if CurrPay=Temp_var then
begin
edit;
fieldbyname('ApPayflag').asInteger:=0;
fieldbyname('ApPayedAmount').asfloat:=fieldbyname('ApInvoiceAmount').asfloat;
CurrPay:=CurrPay-Temp_var;
post;
MArk_File(strtoint(lc_PayId),
fieldbyname('ApInvoiceId').asinteger,Temp_var,
edt_Paydate.Text);
exit;
end
else
begin
edit;
fieldbyname('ApPayedAmount').asfloat:=fieldbyname('ApPayedAmount').asfloat+CurrPay;
fieldbyname('ApPayflag').asinteger:=1;
post;
MArk_File(strtoint(lc_PayId),
fieldbyname('ApInvoiceId').asinteger,CurrPay,
edt_Paydate.Text);
CurrPay:=0.0;
Update;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -