Procedura-SimpleCashBook

Parametry:

NázevPopisDatový typ
ADateFrom$DATEFloat(0, 0)
ADateTo$DATEFloat(0, 0)

Návratové hodnoty:

NázevPopisDatový typ
CategoryInteger
DocDate$DATEFloat(0, 0)
BankCreditNumeric(15, 2)
BankDebitNumeric(15, 2)
CashCreditNumeric(15, 2)
CashDebitNumeric(15, 2)
ThroughItemCreditNumeric(15, 2)
ThroughItemDebitNumeric(15, 2)
VatCreditNumeric(15, 2)
VatDebitNumeric(15, 2)
IncomeType_IDChar(10)
ExpenseType_IDChar(10)
TextVarChar(160)
DocumentTypeChar(2)
Document_IDChar(10)
PDocumentTypeChar(2)
PDocument_IDChar(10)
AmountNumeric(15, 2)
DOCUMENTDISPLAYNAMEVarChar(24)
PDOCUMENTDISPLAYNAMEVarChar(24)
ERRORInteger
COMPUTEDROWChar(10)
ROWNUMBERInteger
SORT_DOCUMENTDISPLAYNAMEVarChar(24)
SORT_PDOCUMENTDISPLAYNAMEVarChar(24)

Závislosti:

NázevPopisTřída
GetDocumentInfoProcedures
GetPayableHeadersVrátí placené doklady pro zpracování do peněžního deníku.Procedures
GetPaymentsForDocumentNačtení plateb uvedeného dokladu pro účely peněžního deníku.Procedures
GetRowsForDocumentProcedures
SimpleCashBookPOSProcedures
SimpleCashBookVATDUsagesPřeúčtování čerpání daňových zálohových listů z typu "daňová záloha" na typ v dokladu a nebo zpětProcedures

Tělo:

BEGIN
  SELECT
    CustomsDeclarations_ET_ID,
    IssuedDeposits_IT_ID,
    ReceivedDeposits_ET_ID,
    Wages_ET_ID,
    ExchangeDifferences_IT_ID,
    ExchangeDifferences_ET_ID,
    Rounding_IT_ID,
    Rounding_ET_ID,
    POS_IT_ID,
    VATIssuedDeposits_IT_ID,
    VATReceivedDeposits_ET_ID
  FROM SimpleLedgerParameters
  INTO
    :mCustomsDeclarations_ET_ID,
    :mIssuedDeposits_IT_ID,
    :mReceivedDeposits_ET_ID,
    :mWages_ET_ID,
    :mExchangeDifferences_IT_ID,
    :mExchangeDifferences_ET_ID,
    :mRounding_IT_ID,
    :mRounding_ET_ID,
    :mPOS_IT_ID,
    :MVATISSUEDDEPOSITS_IT_ID,
    :MVATRECEIVEDDEPOSITS_ET_ID;
  mDocument = ib_scbcreate();
  MROWNUMBER = 0;
  FOR
    /* Seznam placených dokladů */
    SELECT PDocumentType, PDocument_ID FROM GetPayableHeaders(:ADateFrom$DATE, :ADateTo$DATE)
    GROUP BY 1, 2
    INTO
    :PDocumentType, :PDocument_ID
  DO BEGIN
    mResult = ib_scbclear(mDocument);
    SELECT Text, DocumentDisplayName, SORT_DocumentDisplayName, RealCredit, AsCredit
    FROM GETDOCUMENTINFO(:PDocumentType, :PDocument_ID)
    INTO :Text, :PDocumentDisplayName, :SORT_PDocumentDisplayName, mRealCredit, mAsCredit;
    FOR
      SELECT TYPE_ID, Amount,  VAT
      FROM GETROWSFORDOCUMENT(:PDocumentType, :PDocument_ID,
        :mIssuedDeposits_IT_ID, :mReceivedDeposits_ET_ID,
        :mCustomsDeclarations_ET_ID,
        :mRounding_IT_ID, :mRounding_ET_ID,
        :mWages_ET_ID, :mPOS_IT_ID,
        :mVATIssuedDeposits_IT_ID, :mVATReceivedDeposits_ET_ID,
        :ADateFrom$DATE
      ) A
      ORDER BY A.POSINDEX NULLS LAST
      INTO :mTempType, :mTempAmount, :mTempVAT
    DO BEGIN
      /* Zapamatování částek z řádků placeného dokladu */
      mResult = IB_SCBADDROW(mDocument, mTempType, mTempAmount, mTempVAT);
    END
    FOR
      /* Načtení plateb placeného dokladu */
      SELECT
        LOCALAmount, LOCALVAT, DocDate$DATE, CREDIT, DocumentType,
        Document_ID, DocumentDisplayName, Text, SORT_DocumentDisplayName,
        PDocumentType, PDocument_ID
      FROM GETPAYMENTSFORDOCUMENT(:PDocumentType, :PDocument_ID, :ADateTo$DATE)
      ORDER BY DocDate$DATE, DocumentType, ROWINDEX
      INTO
        :mTempAmount, :mTempVAT, :mTempDate, :mPayCredit, :DocumentType,
        :Document_ID, :DocumentDisplayName, :mText, :SORT_DocumentDisplayName,
        :mRealPDocumentType, :mRealPDocument_ID
    DO BEGIN
      /* Do plateb jsou zahrnuty i platby elektronických plateb (ostatních dokladů s příznakem ElectronicPayment).
        Pokud se jedná o takovouto platbu je třeba provést případnou korekci znaménka částky. */
      -- 
      IF ((mRealPDocumentType <> :PDocumentType) or (mRealPDocument_ID <> :PDocument_ID)) THEN BEGIN
        IF (mRealPDocumentType = '01') THEN BEGIN
          IF (mRealCredit <> 'A') THEN BEGIN
            mTempAmount = -1 * mTempAmount;
          END
        END
        ELSE
        IF (mRealPDocumentType = '02') THEN BEGIN
          IF (mRealCredit <> 'N') THEN BEGIN
            mTempAmount = -1 * mTempAmount;
          END
        END
      END
      BankCredit = 0;
      BankDebit = 0;
      CashCredit = 0;
      CashDebit = 0;
      ThroughItemCredit = 0;
      ThroughItemDebit = 0;
      VATCredit = 0;
      VATDebit = 0;
      Amount = 0;
      mOriginalPayAmount = mTempAmount;
      Text = MText;
      -- 
      IF (DocumentType = '60') THEN BEGIN
        FOR
          SELECT (LocalTAmount - LocalTAmountWithoutVAT), LocalTAmountWithoutVAT, IncomeType_ID
          FROM ISSUEDCREDITNOTES2 A
          WHERE A.PARENT_ID = :Document_ID
          INTO :mTempVAT, :mTempAmount, mTempType
        DO BEGIN
          mResult = IB_SCBADDCREDITNOTE(mDocument, mTempType, mTempAmount, mTempVAT);
        END
      END ELSE IF (DocumentType = '61') THEN BEGIN
        FOR
          SELECT (LocalTAmount - LocalTAmountWithoutVAT), LocalTAmountWithoutVAT, ExpenseType_ID
          FROM RECEIVEDCREDITNOTES2 A
          WHERE A.PARENT_ID = :Document_ID
          INTO :mTempVAT, :mTempAmount, mTempType
        DO BEGIN
          mResult = IB_SCBADDCREDITNOTE(mDocument, mTempType, mTempAmount, mTempVAT);
        END
      -- Korekce dobropisu
      END ELSE IF (DocumentType = '63') THEN BEGIN
        FOR
          SELECT (LocalTAmount - LocalTAmountWithoutVAT), LocalTAmountWithoutVAT, :mVATIssuedDeposits_IT_ID
          FROM VATISSUEDDCREDITNOTES2 A
          WHERE A.PARENT_ID = :Document_ID
          INTO :mTempVAT, :mTempAmount, mTempType
        DO BEGIN
          mResult = IB_SCBADDCREDITNOTE(mDocument, mTempType, mTempAmount, mTempVAT);
        END
      END ELSE IF (DocumentType = '65') THEN BEGIN
        FOR
          SELECT (LocalTAmount - LocalTAmountWithoutVAT), LocalTAmountWithoutVAT, :mVATReceivedDeposits_ET_ID
          FROM VATRECEIVEDDCREDITNOTES2 A
          WHERE A.PARENT_ID = :Document_ID
          INTO :mTempVAT, :mTempAmount, mTempType
        DO BEGIN
          mResult = IB_SCBADDCREDITNOTE(mDocument, mTempType, mTempAmount, mTempVAT);
        END
      END ELSE BEGIN
        mResult = IB_SCBADDPAYMENT(mDocument, mTempAmount);
      END
      WHILE (IB_SCBISAFFECTEDROWS(mDocument) <> 0) DO 
      BEGIN
        mTempType = IB_SCBREADTYPE(mDocument);
        mTempAmount = IB_SCBREADAMOUNT(mDocument);
        mTempVAT = IB_SCBREADVAT(MDOCUMENT);
        Error = 0;
        IF ((mTempDate >= ADateFrom$DATE) AND (mResult <> 0)) THEN 
        BEGIN
          DocDate$DATE = mTempDate;
          mDecide = mTempType;
          IF (mAsCredit <> mRealCredit) THEN
            mTempAmount = -1 * mTempAmount;
          IF (mAsCredit = 'N') THEN 
          BEGIN
            Category = 1;
            ExpenseType_ID = mTempType;
            IncomeType_ID = null;
            VatDebit = mTempVAT;
            IF ((ExpenseType_ID is Null) or (ExpenseType_ID = '') or (ExpenseType_ID='A000000000')) THEN
              Error = 1;
          END ELSE 
          BEGIN
            Category = 0;
            IncomeType_ID = mTempType;
            mDecide = mTempType;
            ExpenseType_ID = null;
            VATCredit = mTempVAT;
            IF ((IncomeType_ID is Null) or (IncomeType_ID = '') or (IncomeType_ID='A000000000')) THEN
              Error = 1;
          END
          IF (DocumentType = '09') THEN 
          BEGIN
            IF (mPayCredit = 'N') THEN 
            BEGIN
              IF (mRealCredit <> mPayCredit) THEN 
              BEGIN
                BankDebit = -1 * mOriginalPayAmount;
                BankCredit = 0;
              END ELSE 
              BEGIN
                BankDebit = mOriginalPayAmount;
                BankCredit = 0;
              END
            END ELSE 
            BEGIN
              IF (mRealCredit <> mPayCredit) THEN 
              BEGIN
                BankCredit = -1 * mOriginalPayAmount;
                BankDebit = 0;
              END ELSE BEGIN
                BankCredit = mOriginalPayAmount;
                BankDebit = 0;
              END
            END
          END ELSE IF ((DocumentType = '05') or (DocumentType = '06') or (DocumentType = 'CP') or (DocumentType = 'CR')) THEN 
          BEGIN
            IF (mPayCredit = 'N') THEN 
            BEGIN
              IF (mRealCredit <> mPayCredit) THEN
                CashDebit = -1 * mOriginalPayAmount;
              ELSE
                CashDebit = mOriginalPayAmount;
            END ELSE 
            BEGIN
              IF (mRealCredit <> mPayCredit) THEN
                CashCredit = -1 * mOriginalPayAmount;
              ELSE
                CashCredit = mOriginalPayAmount;
            END
          END ELSE IF ((DocumentType = '01') or (DocumentType = '02')) THEN BEGIN
            -- Zda se zapisuje i do prubezne polozky
            mHasImpactToThroughItem='A';
            IF (DocumentType = '01') THEN
             SELECT A.HasImpactToThroughItem
              FROM OtherIncomes A
              WHERE A.ID = :Document_ID
              INTO :mHasImpactToThroughItem;
            ELSE
             SELECT A.HasImpactToThroughItem
              FROM OtherExpenses A
              WHERE A.ID = :Document_ID
              INTO :mHasImpactToThroughItem;
            IF (mHasImpactToThroughItem='A') THEN BEGIN
              IF (mPayCredit = 'N') THEN BEGIN
                IF (mRealCredit <> mPayCredit) THEN
                  ThroughItemDebit = -1 * mOriginalPayAmount;
                ELSE
                  ThroughItemDebit = mOriginalPayAmount;
              END ELSE BEGIN
                IF (mRealCredit <> mPayCredit) THEN
                  ThroughItemCredit = -1 * mOriginalPayAmount;
                ELSE
                  ThroughItemCredit = mOriginalPayAmount;
              END
            END
          END ELSE IF ((DocumentType = 'U0') or (DocumentType = 'U1')) THEN BEGIN
            Amount = -1 * mOriginalPayAmount;
            MBACKVATC = VATCredit;
            MBACKVATD = VatDebit;
            VATCredit = 0;
            VATDebit = 0;
            Error = 0;
            IF (DocumentType = 'U0') THEN BEGIN
              mSaved_ID = IncomeType_ID;
              IncomeType_ID = mIssuedDeposits_IT_ID;
              IF ((IncomeType_ID is Null)  or (IncomeType_ID = '')) THEN
                Error = 1;
              mRowNumber = mRowNumber + 1;
              RowNumber = mRowNumber;
              SUSPEND;
              IncomeType_ID = mSaved_ID;
            END ELSE BEGIN
              mSaved_ID = ExpenseType_ID;
              ExpenseType_ID = mReceivedDeposits_ET_ID;
              IF ((ExpenseType_ID is Null)  or (ExpenseType_ID = '')) THEN
                Error = 1;
              mRowNumber = mRowNumber + 1;
              RowNumber = mRowNumber;
              SUSPEND;
              ExpenseType_ID = mSaved_ID;
            END
            VATCredit = MBACKVATC;
            VatDebit = MBACKVATD;
          END
          IF (PDocumentType = 'CP') THEN BEGIN
            IF (mDecide = 'XX') THEN BEGIN
              ThroughItemDebit = ThroughItemDebit + mOriginalPayAmount;
              mTempAmount = 0;
              IncomeType_ID = 'A000000000';
              ExpenseType_ID = Null;
              ERROR = 0;
            END
          END ELSE IF (PDocumentType = 'CR') THEN BEGIN
            ThroughItemCredit = ThroughItemCredit + mOriginalPayAmount;
            mTempAmount = 0;
            IncomeType_ID = Null;
            ExpenseType_ID = 'A000000000';
            Error = 0;
          END
          Amount = mTempAmount;
          /* Typ příjem / výdej DPH se částka přsune do příslušného sloupce DPH*/
          IF (mAsCredit = 'N') THEN BEGIN
            SELECT ET.Category
            FROM EXPENSETYPES ET
            WHERE ET.ID = :ExpenseType_ID
            INTO :METCategory;
            MITCategory = Null;
          END ELSE BEGIN
            SELECT IT.Category
            FROM IncomeTypes IT
            WHERE IT.ID = :IncomeType_ID
            INTO :MITCategory;
            METCategory = NULL;
          END
          IF (mETCategory = 4)  THEN BEGIN
            VatDebit = VatDebit + Amount;
            Amount = 0;
          END ELSE IF (mITCategory = 2)  THEN BEGIN
            VatCredit = VatCredit + Amount;
            Amount = 0;
          END
          mRowNumber = mRowNumber + 1;
          RowNumber = mRowNumber;
          SUSPEND;
          mOriginalPayAmount = 0;
        END
      END
    END
  END
  ComputedRow = Null;
  /* ted je jeste potreba vratit vsechny doklady pokladna prijem */
  PDocumentType = Null;
  PDocument_ID = Null;
  PDocumentDisplayName = Null;
  SORT_PDocumentDisplayName = Null;
  ThroughItemDebit = 0;
  ThroughItemCredit = 0;
  DocumentType = '05';
  Category = 0;
  BankCredit = 0;
  BankDebit = 0;
  CashDebit = 0;
  VATDebit = 0;
  VATCredit = 0;
  ExpenseType_ID = Null;
  /*Hlavicka*/
  FOR
    SELECT
    B.DocDate$DATE, B.ID, B.Description, B.LOCALAMOUNT, B.LOCALROUNDINGAMOUNT,
    D.Code || '-' || B.OrdNumber || '/' || P.Code, D.Name,
    D.Code || '-' || IB_LPad(B.OrdNumber, 8, '0') || '/' || P.Code
    FROM CashReceived B
    JOIN DocQueues D ON D.ID = B.DocQueue_ID
    JOIN Periods P ON P.ID = B.Period_ID
    WHERE B.PDocument_ID is null and (B.DocDate$DATE<:ADateTo$DATE) and (B.DocDate$DATE>=:ADateFrom$DATE)
    INTO
    :DocDate$DATE, :Document_ID, :Text, :CashCredit, :mTempRoundingAmount,
    :DocumentDisplayName, :mText, :Sort_DocumentDisplayName
  DO BEGIN
    mResult = IB_SCBCLEAR(mDocument);
    FOR
      SELECT A.IncomeType_ID, A.LocalTAmountWithoutVAT, A.LocalTAmount - A.LocalTAmountWithoutVAT
      FROM CASHRECEIVED2 A
      WHERE (A.PARENT_ID = :Document_ID) AND ((A.RowType <> 4) OR (A.VATIndex_ID IS NOT NULL))
      ORDER BY A.POSINDEX
      INTO :mTempType, :mTempAmount, :mTempVAT
    DO BEGIN
      mResult = IB_SCBADDROW(mDocument, mTempType, mTempAmount, mTempVAT);
    END
    IF (MTEMPROUNDINGAMOUNT <> 0) THEN BEGIN
      /*halerove vyrovnani se prida jako radek*/
      mResult = IB_SCBADDROW(mDocument, mRounding_IT_ID, mTempRoundingAmount, 0);
    END
    mResult = IB_SCBADDPAYMENT(mDocument, CashCredit);
    WHILE (IB_SCBISAFFECTEDROWS(mDocument) <> 0) DO BEGIN
      /*ctou se vystupy z UDF*/
      AMOUNT = IB_SCBREADAMOUNT(mDocument);
      VatCredit = IB_SCBREADVAT(mDocument);
      IncomeType_ID = IB_SCBREADTYPE(mDocument);
      SELECT IT.Category
      FROM IncomeTypes IT
      WHERE IT.ID = :IncomeType_ID
      INTO :MITCategory;
      IF (Text = '') THEN
        Text = mText;
      Error = 0;
      ThroughItemDebit = 0;
      IF ((IncomeType_ID is Null) or (IncomeType_ID = '')) THEN
        Error = 1;
      ELSE IF (IncomeType_ID='A000000000') THEN BEGIN
        ThroughItemDebit = Amount;
        Amount = 0;
      END
      /* Typ příjem / výdej DPH se částka přsune do příslušného sloupce DPH*/
      IF (mITCategory = 2)  THEN BEGIN
        VatCredit = VatCredit + Amount;
        Amount = 0;
      END
      mRowNumber = mRowNumber + 1;
      RowNumber = mRowNumber;
      SUSPEND;
      CashCredit = 0;
    END
  END
  ThroughItemDebit = 0;
  ThroughItemCredit = 0;
  /* ted je jeste potreba vratit vsechny doklady pokladna vydej */
  DocumentType = '06';
  Category = 1;
  BankCredit = 0;
  BankDebit = 0;
  CashCredit = 0;
  VATDebit = 0;
  VATCredit = 0;
  IncomeType_ID = Null;
  FOR
    SELECT
    B.DocDate$DATE, B.ID, B.Description, B.LOCALAMOUNT, B.LOCALROUNDINGAMOUNT,
    D.Code || '-' || B.OrdNumber || '/' || P.Code, D.Name,
    D.Code || '-' || IB_LPad(B.OrdNumber, 8, '0') || '/' || P.Code
    FROM CASHPAID B
    JOIN DocQueues D ON D.ID = B.DocQueue_ID
    JOIN Periods P ON P.ID = B.Period_ID
    WHERE B.PDocument_ID is null and (B.DocDate$DATE<:ADateTo$DATE) and (B.DocDate$DATE>=:ADateFrom$DATE)
    INTO
    :DocDate$DATE, :Document_ID, :Text, :CashDebit, :mTempRoundingAmount,
    :DocumentDisplayName, :mText, :Sort_DocumentDisplayName
  DO BEGIN
    mResult = IB_SCBCLEAR(mDocument);
    FOR
      SELECT A.ExpenseType_ID, A.LocalTAmountWithoutVAT, A.LocalTAmount - A.LocalTAmountwithoutVAT
      FROM CASHPAID2 A
      WHERE A.PARENT_ID = :Document_ID
      ORDER BY A.POSINDEX
      INTO :mTempType, :mTempAmount, :mTempVAT
    DO BEGIN
      mResult = IB_SCBADDROW(mDocument, mTempType, mTempAmount, mTempVAT);
    END
    IF (mTempRoundingAmount <> 0) THEN BEGIN
      /*halerove vyrovnani se prida jako radek*/
      mResult = IB_SCBADDROW(mDocument, mRounding_ET_ID, mTempRoundingAmount, 0);
    END
    mResult = IB_SCBADDPAYMENT(mDocument, CashDebit);
    WHILE (IB_SCBISAFFECTEDROWS(mDocument) <> 0) DO BEGIN
      /*ctou se vystupy z UDF*/
      AMOUNT = IB_SCBREADAMOUNT(mDocument);
      VatDebit = IB_SCBREADVAT(mDocument);
      ExpenseType_ID = IB_SCBREADTYPE(mDocument);
      SELECT ET.Category
      FROM EXPENSETYPES ET
      WHERE ET.ID = :ExpenseType_ID
      INTO :METCategory;
      IF (Text = '') THEN
        Text = mText;
      Error = 0;
      ThroughItemCredit = 0;
      IF ((ExpenseType_ID is Null)  or (ExpenseType_ID = '')) THEN
        Error = 1;
      ELSE IF (ExpenseType_ID='A000000000') THEN BEGIN
        ThroughItemCredit = Amount;
        Amount = 0;
      END
      /* Typ příjem / výdej DPH se částka přsune do příslušného sloupce DPH*/
      IF (mETCategory = 4)  THEN BEGIN
        VatDebit = VatDebit + Amount;
        Amount = 0;
      END
      mRowNumber = mRowNumber + 1;
      RowNumber = mRowNumber;
      suspend;
      CashDebit = 0;
    END
  END
  ThroughItemDebit = 0;
  ThroughItemCredit = 0;
  /* ted je jeste potreba vratit vsechny doklady vraceni pokladna prijem */
  DocumentType = '07';
  Category = 0;
  BankCredit = 0;
  BankDebit = 0;
  CashDebit = 0;
  VATDebit = 0;
  VATCredit = 0;
  ExpenseType_ID = Null;
  FOR
    SELECT
    B.DocDate$DATE, B.ID, B.Description, -B.LocalAmount, -B.LocalRoundingAmount,
    D.Code || '-' || B.OrdNumber || '/' || P.Code, D.Name,
    D.Code || '-' || IB_LPad(B.OrdNumber, 8, '0') || '/' || P.Code
    FROM RefundedCashReceived B
    JOIN DocQueues D ON D.ID = B.DocQueue_ID
    JOIN Periods P ON P.ID = B.Period_ID
    WHERE (B.DocDate$DATE<:ADateTo$DATE) and (B.DocDate$DATE>=:ADateFrom$DATE)
    INTO
    :DocDate$DATE, :Document_ID, :Text, :CashCredit, :mTempRoundingAmount,
    :DocumentDisplayName, :mText, :Sort_DocumentDisplayName
  DO BEGIN
    mResult = IB_SCBCLEAR(mDocument);
    FOR
      SELECT A.IncomeType_ID, -A.LocalTAmountwithoutVAT, A.LocalTAmountWithOutVAT - A.LocalTAmount
      FROM RefundedCashReceived2 A
      WHERE (A.PARENT_ID = :Document_ID) AND ((A.RowType <> 4) OR (A.VATIndex_ID IS NOT NULL))
      ORDER BY A.POSINDEX
      INTO :mTempType, :mTempAmount, :mTempVAT
    DO BEGIN
      mResult = IB_SCBADDROW(mDocument, mTempType, mTempAmount, mTempVAT);
    END
    IF (mTempRoundingAmount <> 0) THEN BEGIN
      /*halerove vyrovnani se prida jako radek*/
      mResult = IB_SCBADDROW(mDocument, mRounding_IT_ID, mTempRoundingAmount, 0);
    END
    mResult = IB_SCBADDPAYMENT(mDocument, CASHCREDIT);
    WHILE (IB_SCBISAFFECTEDROWS(mDocument) <> 0) DO BEGIN
      /*ctou se vystupy z UDF*/
      AMOUNT = IB_SCBREADAMOUNT(mDocument);
      VatCredit = IB_SCBREADVAT(mDocument);
      IncomeType_ID = IB_SCBREADTYPE(mDocument);
      SELECT IT.Category
      FROM IncomeTypes IT
      WHERE IT.ID = :IncomeType_ID
      INTO :MITCategory;
      IF (Text = '') THEN
        Text = mText;
      Error = 0;
      ThroughItemDebit = 0;
      IF ((IncomeType_ID is Null) or (IncomeType_ID = '')) THEN
        Error = 1;
      ELSE IF (IncomeType_ID='A000000000') THEN BEGIN
        ThroughItemDebit = Amount;
        Amount = 0;
      END
      /* Typ příjem / výdej DPH se částka přsune do příslušného sloupce DPH*/
      IF (mITCategory = 2)  THEN BEGIN
        VatCredit = VatCredit + Amount;
        Amount = 0;
      END
      mRowNumber = mRowNumber + 1;
      RowNumber = mRowNumber;
      SUSPEND;
      CashCredit = 0;
    END
  END
  ThroughItemDebit = 0;
  ThroughItemCredit = 0;
  /* ted je jeste potreba vratit vsechny doklady vraceni pokladna vydej */
  DocumentType = '08';
  Category = 1;
  BankCredit = 0;
  BankDebit = 0;
  CashCredit = 0;
  VATDebit = 0;
  VATCredit = 0;
  IncomeType_ID = Null;
  FOR
    SELECT
    B.DocDate$DATE, B.ID, B.Description, -B.LocalAmount, -B.LocalRoundingAmount,
    D.Code || '-' || B.OrdNumber || '/' || P.Code, D.Name,
    D.Code || '-' || IB_LPad(B.OrdNumber, 8, '0') || '/' || P.Code
    FROM RefundedCashPaid B
    JOIN DocQueues D ON D.ID = B.DocQueue_ID
    JOIN Periods P ON P.ID = B.Period_ID
    WHERE (B.DocDate$DATE<:ADateTo$DATE) and (B.DocDate$DATE>=:ADateFrom$DATE)
    INTO
    :DocDate$DATE, :Document_ID, :Text, :CASHDEBIT, :MTEMPROUNDINGAMOUNT,
    :DocumentDisplayName, :mText, :Sort_Documentdisplayname
  DO BEGIN
    mResult = IB_SCBCLEAR(mDocument);
    FOR
      SELECT A.ExpenseType_ID, -A.LocalTAmountwithoutVAT, A.LocalTAmountwithoutVAT - A.LocalTAmount
      FROM RefundedCashPaid2 A
      WHERE A.PARENT_ID = :Document_ID
      ORDER BY A.POSINDEX
      INTO :mTempType, :mTempAmount, :mTempVAT
    DO BEGIN
      mResult = IB_SCBADDROW(mDocument, mTempType, mTempAmount, mTempVAT);
    END
    IF (MTEMPROUNDINGAMOUNT <> 0) THEN BEGIN
      /*halerove vyrovnani se prida jako radek*/
      mResult = IB_SCBADDROW(mDocument, mRounding_ET_ID, mTempRoundingAmount, 0);
    END
    mResult = IB_SCBADDPAYMENT(mDocument, CASHDEBIT);
    WHILE (IB_SCBISAFFECTEDROWS(mDocument) <> 0) DO BEGIN
      /*ctou se vystupy z UDF*/
      AMOUNT = IB_SCBREADAMOUNT(mDocument);
      VatDebit = IB_SCBREADVAT(mDocument);
      ExpenseType_ID = IB_SCBREADTYPE(mDocument);
      SELECT ET.Category
      FROM EXPENSETYPES ET
      WHERE ET.ID = :ExpenseType_ID
      INTO :METCategory;
      IF (Text = '') THEN
        Text = mText;
      Error = 0;
      ThroughItemCredit = 0;
      IF ((ExpenseType_ID is Null) or (ExpenseType_ID = '')) THEN
        Error = 1;
      ELSE IF (ExpenseType_ID='A000000000') THEN BEGIN
        ThroughItemCredit = Amount;
        Amount = 0;
      END
      /* Typ příjem / výdej DPH se částka přsune do příslušného sloupce DPH*/
      IF (mETCategory = 4)  THEN BEGIN
        VatDebit = VatDebit + Amount;
        Amount = 0; 
      END
      mRowNumber = mRowNumber + 1;
      RowNumber = mRowNumber;
      suspend;
      CASHDEBIT = 0;
    END
  END
  /* ted je jeste potreba vratit vsechny bankovni vypisy */
  DocumentType = '09';
  CashCredit = 0;
  CashDebit = 0;
  FOR
    SELECT
    A.DocDate$DATE, B.ID, A.IncomeType_ID, A.ExpenseType_ID, A.Credit,
    A.Text, A.LocalTAmount, D.Code || '-' || B.OrdNumber || '/' || P.Code || '/' || A.PosIndex,
    D.Name, ET.Category, IT.Category,
    D.Code || '-' || IB_LPad(B.OrdNumber, 8, '0') || '/' || P.Code || '/' || IB_LPad(A.PosIndex, 3, '0')
    FROM BankStatements2 A
    JOIN BankStatements B ON B.ID = A.Parent_ID
    JOIN DocQueues D ON D.ID = B.DocQueue_ID
    JOIN Periods P ON P.ID = B.Period_ID
    LEFT JOIN ExpenseTypes ET ON ET.ID = A.ExpenseType_ID
    LEFT JOIN IncomeTypes IT ON IT.ID = A.IncomeType_ID
    WHERE A.PDocument_ID is null and (A.DocDate$DATE<:ADateTo$DATE) and (A.DocDate$DATE>=:ADateFrom$DATE) and
    (A.IsMultiPaymentRow = 'N')
    INTO
    :DocDate$DATE, :Document_ID, :IncomeType_ID, :ExpenseType_ID, :mPayCredit,
    :Text, :Amount, :DocumentDisplayName, :mText, :mETCategory, :mITCategory, :Sort_DocumentDisplayName
  DO BEGIN
    Error = 0;
    ThroughItemDebit = 0;
    ThroughItemCredit = 0;
    VATCredit = 0;
    VATDebit = 0;
    IF (mPayCredit = 'N') THEN BEGIN
      Category = 1;
      BankCredit = 0;
      BankDebit = Amount;
      IF ((ExpenseType_ID is Null) or (ExpenseType_ID = '')) THEN
        Error = 1;
      ELSE IF (ExpenseType_ID='A000000000') THEN BEGIN
        ThroughItemCredit = Amount;
        Amount = 0;
      END
      /* Typ výdej DPH se částka přsune do příslušného sloupce DPH*/
      IF (mETCategory = 4)  THEN BEGIN
        VatDebit = VatDebit + Amount;
        Amount = 0;
      END
    END ELSE BEGIN
      Category = 0;
      BankCredit = Amount;
      BankDebit = 0;
      IF ((IncomeType_ID is Null) or (IncomeType_ID = '')) THEN
        Error = 1;
      ELSE IF (IncomeType_ID='A000000000') THEN BEGIN
        ThroughItemDebit = Amount;
        Amount = 0;
      END
      /* Typ příjem DPH se částka přsune do příslušného sloupce DPH*/
      IF (mITCategory = 2) THEN BEGIN
        VatCredit = VatCredit + Amount;
        Amount = 0;
      END
    END
    IF (Text = '') THEN
    Text = mText;
    mRowNumber = mRowNumber + 1;
    RowNumber = mRowNumber;
    suspend;
  END
  ThroughItemDebit = 0;
  ThroughItemCredit = 0;
  /* Zaverkove kurzove rozdily bank */
  DocumentType = '16';
  CashCredit = 0;
  CashDebit = 0;
  VATCredit = 0;
  VATDebit = 0;
  FOR
    SELECT B.DocDate$DATE, B.Amount, B.ID, BA.Name, B.Profit,
    D.Code || '-' || B.OrdNumber || '/' || P.Code, D.Name,
    D.Code || '-' || IB_LPad(B.OrdNumber, 8, '0') || '/' || P.Code
    FROM BankExchangeDifferences B
    JOIN BankAccounts BA ON BA.ID = B.BankAccount_ID
    JOIN DocQueues D ON D.ID = B.DocQueue_ID
    JOIN Periods P ON P.ID = B.Period_ID
    WHERE (B.DocDate$DATE<:ADateTo$DATE) and (B.DocDate$DATE>=:ADateFrom$DATE)
    INTO
    :DocDate$DATE, :Amount, :Document_ID, :Text, :mPayCredit, :DocumentDisplayName, :mText, :Sort_DocumentDisplayName
  DO BEGIN
    Error = 0;
    IF (mPayCredit = 'N') THEN BEGIN
      BankCredit = 0;
      BankDebit = Amount;
      IncomeType_ID = Null;
      ExpenseType_ID = mExchangeDifferences_ET_ID;
      Category = 1;
      IF ((ExpenseType_ID is Null) or (ExpenseType_ID = '') or (ExpenseType_ID='A000000000')) THEN
        Error = 1;
    END ELSE BEGIN
      BankCredit = Amount;
      BankDebit = 0;
      IncomeType_ID = mExchangeDifferences_IT_ID;
      ExpenseType_ID = Null;
      Category = 0;
      IF ((IncomeType_ID is Null) or (IncomeType_ID = '') or (IncomeType_ID='A000000000')) THEN
        Error = 1;
    END
    IF (Text = '') THEN
      Text = mText;
    mRowNumber = mRowNumber + 1;
    RowNumber = mRowNumber;
    SUSPEND;
  END
  /* Zaverkove kurzove rozdily pokladen */
  DocumentType = '19';
  BankCredit = 0;
  BankDebit = 0;
  VATCredit = 0;
  VATDebit = 0;
  FOR
    SELECT B.DocDate$DATE, B.Amount, B.ID, CD.Name, B.Profit,
    D.Code || '-' || B.OrdNumber || '/' || P.Code, D.Name,
    D.Code || '-' || IB_LPad(B.OrdNumber, 8, '0') || '/' || P.Code
    FROM CashDeskExchangeDifferences B
    JOIN CashDesks CD ON CD.ID = B.CashDesk_ID
    JOIN DocQueues D ON D.ID = B.DocQueue_ID
    JOIN Periods P ON P.ID = B.Period_ID
    WHERE (B.DocDate$DATE<:ADateTo$DATE) and (B.DocDate$DATE>=:ADateFrom$DATE)
    INTO
    :DocDate$DATE, :Amount, :Document_ID, :Text, :mPayCredit, :DocumentDisplayName, :mText, :Sort_DocumentDisplayName
  DO BEGIN
    Error = 0;
    IF (mPayCredit = 'N') THEN BEGIN
      CashCredit = 0;
      CashDebit = Amount;
      IncomeType_ID = Null;
      ExpenseType_ID = mExchangeDifferences_ET_ID;
      Category = 1;
      IF ((ExpenseType_ID is Null) or (ExpenseType_ID = '') or (ExpenseType_ID='A000000000')) THEN
        Error = 1;
    END ELSE BEGIN
      CashCredit = Amount;
      CashDebit = 0;
      IncomeType_ID = mExchangeDifferences_IT_ID;
      ExpenseType_ID = Null;
      Category = 0;
      IF ((IncomeType_ID is Null) or (IncomeType_ID = '') or (IncomeType_ID='A000000000')) THEN
        Error = 1;
    END
    IF (Text = '') THEN
      Text = mText;
    mRowNumber = mRowNumber + 1;
    RowNumber = mRowNumber;
    SUSPEND;
  END
  /* tady se jeste zobrazi data z ostatnich zaznamu */
  DocumentType = '99';
  BankCredit = 0;
  BankDebit = 0;
  CashCredit = 0;
  CashDebit = 0;
  VATCredit = 0;
  VATDebit = 0;
  FOR
    SELECT B.DocDate$DATE, A.LocalTAmount, A.IncomeType_ID, A.ExpenseType_ID,
    B.ID, A.Text, B.Credit, B.HasImpactToThroughItem,
    D.Code || '-' || B.OrdNumber || '/' || P.Code, B.Description, D.Name, ET.Category, IT.Category,
    D.Code || '-' || IB_LPad(B.OrdNumber, 8, '0') || '/' || P.Code
    FROM OtherRecords2 A
    JOIN OtherRecords B ON B.ID = A.Parent_ID
    JOIN DocQueues D ON D.ID = B.DocQueue_ID
    JOIN Periods P ON P.ID = B.Period_ID
    LEFT JOIN ExpenseTypes ET ON ET.ID = A.ExpenseType_ID
    LEFT JOIN IncomeTypes IT ON IT.ID = A.IncomeType_ID
    WHERE (B.DocDate$DATE<:ADateTo$DATE) and (B.DocDate$DATE>=:ADateFrom$DATE)
    INTO
    :DocDate$DATE, :Amount, :IncomeType_ID, :ExpenseType_ID, :Document_ID,
    :Text, :mPayCredit, :mHasImpactToThroughItem, :DocumentDisplayName, :mText, :mPText, :mETCategory, :mITCategory, :Sort_DocumentDisplayName
  DO BEGIN
    ThroughItemCredit = 0;
    ThroughItemDebit = 0;
    VATCredit = 0;
    VATDebit = 0;
    Error = 0;
    IF (mPayCredit = 'N') THEN BEGIN
      Category = 1;
      IncomeType_ID = Null;
      IF (mHasImpactToThroughItem = 'A') THEN
        ThroughItemDebit = Amount;
      IF ((ExpenseType_ID is Null) or (ExpenseType_ID = '') or (ExpenseType_ID='A000000000')) THEN
        Error = 1;
      /* Typ výdej DPH se částka přsune do příslušného sloupce DPH*/
      IF (mETCategory = 4)  THEN BEGIN
        VatDebit = Amount;
        Amount = 0;
      END
    END ELSE BEGIN
      Category = 0;
      ExpenseType_ID = Null;
      IF (mHasImpactToThroughItem = 'A') THEN
        ThroughItemCredit = Amount;
      IF ((IncomeType_ID is Null) or (IncomeType_ID = '') or (IncomeType_ID='A000000000')) THEN
        Error = 1;
      /* Typ příjem DPH se částka přsune do příslušného sloupce DPH*/
      IF (mITCategory = 2)  THEN BEGIN
        VatCredit = Amount;
        Amount = 0;
      END
    END
    IF (Text = '') THEN
      Text = mText;
    IF (Text = '') THEN
      Text = mPText;
    mRowNumber = mRowNumber + 1;
    RowNumber = mRowNumber;
    SUSPEND;
  END
  /* tady se preuctuje zuctovani DZL v dokladech FV, DFV, FP, DFP */
  FOR
    SELECT A.Category, A.DocDate$DATE, A.Amount, A.VATCredit, A.VATDebit,
    A.IncomeType_ID, A.ExpenseType_ID, A.Text, A.DocumentType, A.Document_ID,
    A.PDocumentType, A.PDocument_ID,
    A.DocumentDisplayName, A.PDocumentDisplayName, A.Error,
    A.Sort_DocumentDisplayName, A.Sort_PDocumentDisplayName
    FROM SimpleCashBookVATDUsages(:ADateFrom$DATE, :ADateTo$DATE, :mVATIssuedDeposits_IT_ID, :mVATReceivedDeposits_ET_ID) A
    INTO
    :Category, :DocDate$DATE, :Amount, :VATCredit, :VATDebit,
    :IncomeType_ID, :ExpenseType_ID, :Text, :DocumentType, :Document_ID,
    :PDocumentType, :PDocument_ID,
    :DocumentDisplayName, :PDocumentDisplayName, :Error,
    :Sort_DocumentDisplayName, :Sort_PDocumentDisplayName
  DO BEGIN
    ThroughItemCredit = 0;
    ThroughItemDebit = 0;
    BankCredit = 0;
    BankDebit = 0;
    CashCredit = 0;
    CashDebit = 0;
    mRowNumber = mRowNumber + 1;
    RowNumber = mRowNumber;
    SUSPEND;
  END
  /* Jeste souhrnne uctenky z POSu */
  BankCredit = 0;
  BankDebit = 0;
  PDocumentType = Null;
  PDocument_ID = Null;
  PDocumentDisplayName = Null;
  VATDebit = 0;
  VATCredit = 0;
  FOR
    SELECT A.Category, A.DocDate$DATE, A.Amount, A.CashCredit, A.CashDebit,
    A.ThroughItemCredit, A.ThroughItemDebit, A.VATCredit, A.VATDebit,
    A.IncomeType_ID, A.ExpenseType_ID, A.Text, A.DocumentType, A.Document_ID,
    A.DocumentDisplayName, A.Error, A.Sort_DocumentDisplayName
    FROM SimpleCashBookPOS(:ADateFrom$DATE, :ADateTo$DATE, :mPOS_IT_ID) A
    INTO
    :Category, :DocDate$DATE, :Amount, :CashCredit, :CashDebit, :ThroughItemCredit,
    :ThroughItemDebit, :VATCredit, :VATDebit, :IncomeType_ID, :ExpenseType_ID, :Text,
    :DocumentType, :Document_ID, :DocumentDisplayName, :Error, :Sort_DocumentDisplayName
  DO BEGIN
    mRowNumber = mRowNumber + 1;
    RowNumber = mRowNumber;
    SUSPEND;
  END
    mResult = IB_SCBFREE(mDocument);
END

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