Procedura-GeneralLedgerGrps2C

Popis:
Účetní deník souvztažně podle párovacích znaků - omezení za datum, kód účtu, výběr účtu

Parametry:

NázevPopisDatový typ
AccDateFromFloat(0, 0)
AccDateToFloat(0, 0)
AccountCodeVarChar(10)
AccountSelIDChar(10)
WholeGroupChar(1)
ShowGroupsChar(1)

Návratové hodnoty:

NázevPopisDatový typ
AccGroup_IDChar(10)
AccDate$DATEFloat(0, 0)
IDChar(10)
CreditAmountNumeric(15, 2)
DebetAmountNumeric(15, 2)
GroupFirm_IDChar(10)

Závislosti:

NázevPopisTřída
GeneralLedgerGrps2C1Poskytuje data proceduře GeneralLedgerGrps2CProcedures

Tělo:

BEGIN
/* FB */
  GroupFirm_ID = NULL;
  mFullAccGroup  = '__________';
  AccGroup_ID = mFullAccGroup;
  CreditAmount = 0;
  DebetAmount = 0;
  FOR
    SELECT X.AccGroup_ID, X.AccDate$DATE, X.DebetAmount, X.CreditAmount
    FROM (
      /* DEBIT */
      SELECT
        D.AccGroupDebit_ID AccGroup_ID,
        D.AccDate$DATE AccDate$DATE,
        D.Amount DebetAmount,
        0 CreditAmount
      FROM
        GeneralLedger D
        JOIN Accounts AC ON AC.ID = D.DebitAccount_ID
      WHERE
        D.IsRequest='N' and
        (D.AccDate$DATE >= :AccDateFrom AND D.AccDate$DATE < :AccDateTo) and
        ((AC.Code like :AccountCode ESCAPE '~') and
        ((:AccountSelID = '') or (D.DebitAccount_ID in (select OBJ_ID from SELDAT where SEL_ID=:AccountSelID))))
      UNION ALL
      /* CREDIT */
      SELECT
        D.AccGroupCredit_ID AccGroup_ID,
        D.AccDate$DATE AccDate$DATE,
        0 DebetAmount,
        D.Amount CreditAmount
      FROM
        GeneralLedger D
        JOIN Accounts AC ON AC.ID = D.CreditAccount_ID
      WHERE
        D.IsRequest='N' and
        (D.AccDate$DATE >= :AccDateFrom AND D.AccDate$DATE < :AccDateTo) and
        ((AC.Code like :AccountCode ESCAPE '~') and
        ((:AccountSelID = '') or (D.CreditAccount_ID in (select OBJ_ID from SELDAT where SEL_ID=:AccountSelID))))
    ) X
    ORDER BY
      X.AccGroup_ID ASC, X.AccDate$DATE ASC
    INTO
      :mAccGroup_ID, :mAccDate$DATE, :mDebetAmount, :mCreditAmount
  DO BEGIN
    IF (AccGroup_ID = mFullAccGroup or ((AccGroup_ID = mAccGroup_ID) or (AccGroup_ID is null and mAccGroup_ID is null))) THEN
    BEGIN
      CreditAmount = CreditAmount + mCreditAmount;
      DebetAmount = DebetAmount + mDebetAmount;
      AccGroup_ID = mAccGroup_ID;
      AccDate$DATE = mAccDate$DATE;
    END
    ELSE
    BEGIN
-- V prípade, že volime vsechny pohyby, dotahneme ostatni zaznamy ke skupine
      IF (:WholeGroup = 1) THEN
      BEGIN
        FOR
          SELECT
            D.Amount DebetAmount,
            0 CreditAmount
          FROM
            GeneralLedger D
            JOIN Accounts AC ON AC.ID = D.DebitAccount_ID
          WHERE
            D.IsRequest = 'N' AND
            (
            (((D.AccGroupDebit_ID = :AccGroup_ID) AND (AC.Code LIKE :AccountCode ESCAPE '~')) AND
              (:AccountSelID = '' OR D.DebitAccount_ID in (select OBJ_ID from SELDAT where SEL_ID=:AccountSelID)))
            ) AND
            NOT (D.AccDate$DATE >= :AccDateFrom AND D.AccDate$DATE < :AccDateTo)
          UNION ALL
          SELECT
            0 DebetAmount,
            D.Amount CreditAmount
          FROM
            GeneralLedger D
            JOIN Accounts AC ON AC.ID = D.CreditAccount_ID
          WHERE
            D.IsRequest = 'N' AND
            (
            (((D.AccGroupCredit_ID = :AccGroup_ID) AND (AC.Code LIKE :AccountCode ESCAPE '~')) AND
              (:AccountSelID = '' OR D.CreditAccount_ID in (select OBJ_ID from SELDAT where SEL_ID=:AccountSelID)))
            ) AND
            NOT (D.AccDate$DATE >= :AccDateFrom AND D.AccDate$DATE < :AccDateTo)
          INTO
            :mDebetAmount2,  mCreditAmount2
        DO BEGIN
          CreditAmount = CreditAmount + mCreditAmount2;
          DebetAmount = DebetAmount + mDebetAmount2;
        END
      END
      FOR
        SELECT ID
        FROM GeneralLedgerGrps2C1(:AccDateFrom, :AccDateTo, :AccountCode,
          :AccountSelID, :WholeGroup, :AccGroup_ID)
        INTO :ID
      DO BEGIN
        IF (ShowGroups = '0') THEN
          SUSPEND;
        IF (ShowGroups = '1' AND
          ((CreditAmount <= DebetAmount AND DebetAmount - CreditAmount >= 0.01) OR
          (CreditAmount > DebetAmount AND CreditAmount - DebetAmount >= 0.01)) )
        THEN
          SUSPEND;
        IF (ShowGroups = '2' AND
          ((CreditAmount <= DebetAmount AND DebetAmount - CreditAmount < 0.01) OR
          (CreditAmount > DebetAmount AND CreditAmount - DebetAmount < 0.01)) )
        THEN
          SUSPEND;
      END
      CreditAmount = mCreditAmount;
      DebetAmount = mDebetAmount;
      AccGroup_ID = mAccGroup_ID;
      AccDate$DATE = mAccDate$DATE;
    END
  END
  /* Tady je ještě potřeba provést pro poslední data !!!! */
  IF (AccGroup_ID <> mFullAccGroup) THEN
  BEGIN
-- V prípade, že volime vsechny pohyby, dotahneme ostatni zaznamy ke skupine
    IF (:WholeGroup = 1) THEN
    BEGIN
      FOR
        SELECT
          D.Amount DebetAmount,
          0 CreditAmount
        FROM
          GeneralLedger D
          JOIN Accounts AC ON AC.ID = D.DebitAccount_ID
        WHERE
          D.IsRequest = 'N' AND
          (
          (((D.AccGroupDebit_ID = :AccGroup_ID) AND (AC.Code LIKE :AccountCode ESCAPE '~')) AND
            (:AccountSelID = '' OR D.DebitAccount_ID in (select OBJ_ID from SELDAT where SEL_ID=:AccountSelID)))
          ) AND
          NOT (D.AccDate$DATE >= :AccDateFrom AND D.AccDate$DATE < :AccDateTo)
        UNION ALL
        SELECT
          0 DebetAmount,
          D.Amount CreditAmount
        FROM
          GeneralLedger D
          JOIN Accounts AC ON AC.ID = D.CreditAccount_ID
        WHERE
          D.IsRequest = 'N' AND
          (
          (((D.AccGroupCredit_ID = :AccGroup_ID) AND (AC.Code LIKE :AccountCode ESCAPE '~')) AND
            (:AccountSelID = '' OR D.CreditAccount_ID in (select OBJ_ID from SELDAT where SEL_ID=:AccountSelID)))
          ) AND
          NOT (D.AccDate$DATE >= :AccDateFrom AND D.AccDate$DATE < :AccDateTo)
        INTO
          :mDebetAmount2,  mCreditAmount2
      DO BEGIN
        CreditAmount = CreditAmount + mCreditAmount2;
        DebetAmount = DebetAmount + mDebetAmount2;
      END
    END
    FOR
      SELECT ID
      FROM GeneralLedgerGrps2C1(:AccDateFrom, :AccDateTo, :AccountCode,
        :AccountSelID, :WholeGroup, :AccGroup_ID)
      INTO :ID
    DO BEGIN
      IF (ShowGroups = '0') THEN
        SUSPEND;
      IF (ShowGroups = '1' AND
        ((CreditAmount <= DebetAmount AND DebetAmount - CreditAmount >= 0.01) OR
        (CreditAmount > DebetAmount AND CreditAmount - DebetAmount >= 0.01)) )
      THEN
        SUSPEND;
      IF (ShowGroups = '2' AND
        ((CreditAmount <= DebetAmount AND DebetAmount - CreditAmount < 0.01) OR
        (CreditAmount > DebetAmount AND CreditAmount - DebetAmount < 0.01)) )
      THEN
        SUSPEND;
    END
  END
END

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