⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ap_pay_d.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 2 页
字号:
//功能:付款表单明细控制.最后更新时间: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 + -