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;