Procedura-CheckPaymentsAfterEUROConv

Popis:
Procedura pro ServiceTool kontroluje stav zaplacenosti na hlavičce dokladu vs skutečné platby v payments po Euro konverzi a hledá centové rozdíly.

Návratové hodnoty:

NázevPopisDatový typ
idChar(10)
documenttypeVarChar(2)
differenceNumeric(13, 2)
ldifferenceNumeric(13, 2)
ordnumInteger
docqueueVarChar(4)
periodVarChar(4)
currency_idChar(10)
firm_idChar(10)

Závislosti:

NázevPopisTřída
PaymentsForDocumentVrací souhrn platících dokladů pro placený dokument (včetně zaplacených částek)Procedures
PaymentsForVATCreditNoteProcedures
PaymentsForVATRCreditNoteProcedures
PaymentAmountsForICreditNoteVrátí pro danou fakturu zaplacenou částku z dobropisů vydanýchProcedures
PaymentsForVATRCreditNoteProcedures
PaymentAmountsForRCreditNoteVrátí pro danou fakturu zaplacenou částku z dobropisů přijatýchProcedures

Tělo:

begin
    /* Procedure Text */
    EndDate = 99999;
    /*kontrola probniha postupne tak jak jsou na sobe doklady zavisle
    prvne jednoduche doklady jejich platba je bud pokladnou nebo bankou,
    pak doklady ktere mohou byt placeny temi jednoduchymi cimz se vyhnem dvojimu ohlaseni chyb v pripade ze chyba je v jednoduchem dokladu a potazmo se projevuje i v nasladujicich
    nakonec nejslozitejsi doklady kterem maji ruzne platby a navic i dobropisy atd.
    */
    /*Prvne se zkotroluji jednoduche doklady*/
    /*Zalohove listy vydane*/
    mFounded = 0;
    mDocumentType = '10';
    for
      SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
        (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
        (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate))
        FROM IssuedDInvoices A
        left join Periods P on P.ID = A.Period_ID
        left join DocQueues DQ on DQ.ID = A.DocQueue_ID
      INTO MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount
      do begin
        if (((mLocalAmount = mLocalPaidAmount) and (mLocalPaidAmount <> mPLocalAmount)) or ((mAmount = mPaidAmount) and (mPaidAmount <> mPAmount))) then begin
          ID = mID;
          LDifference = mLocalPaidAmount - mPLocalAmount;
          Difference = mPaidAmount - mPAmount;
          DocumentType = mDocumentType;
          mFounded = 1;
          suspend;
        end
      end
    /*Zalohove listy prijate*/
    mDocumentType = '11';
    for
      SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
        (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
        (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate))
        FROM ReceivedDInvoices A
        left join Periods P on P.ID = A.Period_ID
        left join DocQueues DQ on DQ.ID = A.DocQueue_ID
      INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount
      do begin
        if (((mLocalAmount = mLocalPaidAmount) and (mLocalPaidAmount <> mPLocalAmount)) or ((mAmount = mPaidAmount) and (mPaidAmount <> mPAmount))) then begin
          ID = mID;
          LDifference = mLocalPaidAmount - mPLocalAmount;
          Difference = mPaidAmount - mPAmount;
          DocumentType = mDocumentType;
          mFounded = 1;
          suspend;
        end
      end
    /*Pokud jsou zalohove listy OK zkontrolujeme danove zalohove listy a pred tim jejich dobropisy*/
    if (mFounded = 0) then begin
      /*DDV*/
      mDocumentType = '63';
      for
        SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
          (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate))
          FROM VATIssuedDCreditNotes A
          left join Periods P on P.ID = A.Period_ID
          left join DocQueues DQ on DQ.ID = A.DocQueue_ID
        INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount
        do begin
          if (((mLocalAmount = mLocalPaidAmount) and (mLocalPaidAmount <> mPLocalAmount)) or ((mAmount = mPaidAmount) and (mPaidAmount <> mPAmount))) then begin
            ID = mID;
            LDifference = mLocalPaidAmount - mPLocalAmount;
            Difference = mPaidAmount - mPAmount;
            DocumentType = mDocumentType;
            mFounded = 1;
            suspend;
          end
        end
      /*DDP*/
      mDocumentType = '65';
      for
        SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
          (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate))
          FROM VATReceivedDCreditNotes A
          left join Periods P on P.ID = A.Period_ID
          left join DocQueues DQ on DQ.ID = A.DocQueue_ID
        INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount
        do begin
          if (((mLocalAmount = mLocalPaidAmount) and (mLocalPaidAmount <> mPLocalAmount)) or ((mAmount = mPaidAmount) and (mPaidAmount <> mPAmount))) then begin
            ID = mID;
            LDifference = mLocalPaidAmount - mPLocalAmount;
            Difference = mPaidAmount - mPAmount;
            DocumentType = mDocumentType;
            mFounded = 1;
            suspend;
          end
        end
    end
    if (mFounded = 0) then begin
      /*DZV*/
      mDocumentType = '62';
      for
        SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
          (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT LocalPAmount FROM PaymentsForVATCreditNote (A.ID, :EndDate)),
          (SELECT PAmount FROM PaymentsForVATCreditNote (A.ID, :EndDate))
          FROM VatIssuedDInvoices A
          left join Periods P on P.ID = A.Period_ID
          left join DocQueues DQ on DQ.ID = A.DocQueue_ID
        INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount, mCreditLocalPAmount, mCreditPamount
        do begin
          if (((mLocalAmount = mLocalPaidAmount) and ((mLocalPaidAmount - mCreditLocalPAmount) <> (mPLocalAmount - mCreditLocalPAmount))) or (((mAmount = mPaidAmount) and ((mPaidAmount - mCreditPAmount) <> (mPAmount - mCreditPAmount))))) then begin
            ID = mID;
            Difference = (mLocalPaidAmount - mCreditLocalPAmount) - (mPLocalAmount - mCreditLocalPAmount);
            DocumentType = mDocumentType;
            mFounded = 1;
            suspend;
          end
        end
      /*DZP*/
      mDocumentType = '64';
      for
        SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
          (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT LocalPAmount FROM PaymentsForVATRCreditNote (A.ID, :EndDate)),
          (SELECT PAmount FROM PaymentsForVATRCreditNote (A.ID, :EndDate))
          FROM VatReceivedDInvoices A
          left join Periods P on P.ID = A.Period_ID
          left join DocQueues DQ on DQ.ID = A.DocQueue_ID
        INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount, mCreditLocalPAmount, mCreditPamount
        do begin
          if (((mLocalAmount = mLocalPaidAmount) and ((mLocalPaidAmount - mCreditLocalPAmount) <> (mPLocalAmount - mCreditLocalPAmount))) or (((mAmount = mPaidAmount) and ((mPaidAmount - mCreditPAmount) <> (mPAmount - mCreditPAmount))))) then begin
            ID = mID;
            Difference = (mLocalPaidAmount - mCreditLocalPAmount) - (mPLocalAmount - mCreditLocalPAmount);
            DocumentType = mDocumentType;
            mFounded = 1;
            suspend;
          end
        end
    end
    if (mFounded = 0) then begin
      /*Dobropisy FV*/
      mDocumentType = '60';
      for
        SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
          (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate))
          FROM IssuedCreditNotes A
          left join Periods P on P.ID = A.Period_ID
          left join DocQueues DQ on DQ.ID = A.DocQueue_ID
        INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount
        do begin
          if (((mLocalAmount = mLocalPaidAmount) and (mLocalPaidAmount <> mPLocalAmount)) or ((mAmount = mPaidAmount) and (mPaidAmount <> mPAmount))) then begin
            ID = mID;
            LDifference = mLocalPaidAmount - mPLocalAmount;
            Difference = mPaidAmount - mPAmount;
            DocumentType = mDocumentType;
            mFounded = 1;
            suspend;
          end
        end
      /*Dobropisy FP*/
      mDocumentType = '61';
      for
        SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
          (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate))
          FROM ReceivedCreditNotes A
          left join Periods P on P.ID = A.Period_ID
          left join DocQueues DQ on DQ.ID = A.DocQueue_ID
        INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount
        do begin
          if (((mLocalAmount = mLocalPaidAmount) and (mLocalPaidAmount <> mPLocalAmount)) or ((mAmount = mPaidAmount) and (mPaidAmount <> mPAmount))) then begin
            ID = mID;
            LDifference = mLocalPaidAmount - mPLocalAmount;
            Difference = mPaidAmount - mPAmount;
            DocumentType = mDocumentType;
            mFounded = 1;
            suspend;
          end
        end
    end
    if (mFounded = 0) then begin
      /*FV*/
      mDocumentType = '03';
      for
        SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
          (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT LocalPAmount FROM PaymentAmountsForICreditNote (A.ID, :EndDate)),
          (SELECT PAmount FROM PaymentAmountsForICreditNote (A.ID, :EndDate))
          FROM IssuedInvoices A
          left join Periods P on P.ID = A.Period_ID
          left join DocQueues DQ on DQ.ID = A.DocQueue_ID
        INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount, mCreditLocalPAmount, mCreditPamount
        do begin
          if (((mLocalAmount = mLocalPaidAmount) and ((mLocalPaidAmount - mCreditLocalPAmount) <> (mPLocalAmount - mCreditLocalPAmount))) or (((mAmount = mPaidAmount) and ((mPaidAmount - mCreditPAmount) <> (mPAmount - mCreditPAmount))))) then begin
            ID = mID;
            Difference = (mLocalPaidAmount - mCreditLocalPAmount) - (mPLocalAmount - mCreditLocalPAmount);
            DocumentType = mDocumentType;
            mFounded = 1;
            suspend;
          end
        end
      /*FP*/
      mDocumentType = '04';
      for
        SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
          (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT LocalPAmount FROM PaymentAmountsForRCreditNote (A.ID, :EndDate)),
          (SELECT PAmount FROM PaymentAmountsForRCreditNote (A.ID, :EndDate))
          FROM ReceivedInvoices A
          left join Periods P on P.ID = A.Period_ID
          left join DocQueues DQ on DQ.ID = A.DocQueue_ID
        INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount, mCreditLocalPAmount, mCreditPamount
        do begin
          if (((mLocalAmount = mLocalPaidAmount) and ((mLocalPaidAmount - mCreditLocalPAmount) <> (mPLocalAmount - mCreditLocalPAmount))) or (((mAmount = mPaidAmount) and ((mPaidAmount - mCreditPAmount) <> (mPAmount - mCreditPAmount))))) then begin
            ID = mID;
            Difference = (mLocalPaidAmount - mCreditLocalPAmount) - (mPLocalAmount - mCreditLocalPAmount);
            DocumentType = mDocumentType;
            mFounded = 1;
            suspend;
          end
        end
      /*PF*/
      mDocumentType = '17';
      for
        SELECT A.ID, A.Firm_ID, A.LocalAmount, A.LocalPaidAmount, A.Amount, A.PaidAmount, A.OrdNumber, P.Code, DQ.Code, A.Currency_ID,
          (SELECT SUM(LocalPAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate)),
          (SELECT SUM(PAmount) FROM PaymentsForDocument (:mDocumentType, A.ID, :EndDate))
          FROM PenaltyInvoices A
          left join Periods P on P.ID = A.Period_ID
          left join DocQueues DQ on DQ.ID = A.DocQueue_ID
        INTO :MID, :FIRM_ID, mLocalAmount, mLocalPaidAmount, mAmount, mPaidAmount, OrdNum, Period, DocQueue, Currency_ID, mPLocalAmount, mPAmount
        do begin
          if (((mLocalAmount = mLocalPaidAmount) and (mLocalPaidAmount <> mPLocalAmount)) or ((mAmount = mPaidAmount) and (mPaidAmount <> mPAmount))) then begin
            ID = mID;
            LDifference = mLocalPaidAmount - mPLocalAmount;
            Difference = mPaidAmount - mPAmount;
            DocumentType = mDocumentType;
            mFounded = 1;
            suspend;
          end
        end
    end
end;

Generated by ABRA Software a.s. 27.10.2021 16:34:16