Procedura-GeneralLedgerGrps2B

Popis:
Účetní deník souvztažně podle párovacích znaků - omezení přímo za ID z účetního deníku / žádostí

Parametry:

NázevPopisDatový typ
IDSelIDChar(10)
AccountCodeVarChar(10)
AccountSelIDChar(10)

Návratové hodnoty:

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

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 * (select Max(IValue) from SYS$DECIDETable where IValue = 0 or
          D.DebitAccount_ID in (select AC.ID from Accounts AC where D.DebitAccount_ID = AC.ID)) DebetAmount,
        0 CreditAmount
      FROM
        GeneralLedger D
        join SELDAT SLD on SLD.OBJ_ID = D.ID and SLD.SEL_ID=:IDSelID --rychlost !!!
        JOIN Accounts AC ON AC.ID = D.DebitAccount_ID
      WHERE
        D.IsRequest = 'N' 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 DeberAmount,
        D.Amount * (select Max(IValue) from SYS$DECIDETable where IValue = 0 or
          D.CreditAccount_ID in (select AC.ID from Accounts AC where D.CreditAccount_ID = AC.ID)) CreditAmount
      FROM
        GeneralLedger D
        join SELDAT SLD on SLD.OBJ_ID = D.ID and SLD.SEL_ID=:IDSelID --rychlost !!!
        JOIN Accounts AC ON AC.ID = D.CreditAccount_ID
      WHERE
        D.IsRequest = 'N' 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
      FOR
        SELECT D.ID
        FROM GeneralLedger D
        join SELDAT SLD on SLD.OBJ_ID = D.ID and SLD.SEL_ID=:IDSelID --rychlost !!!
        WHERE
          D.IsRequest='N' and
          ((D.AccGroupDebit_ID = :AccGroup_ID) OR (D.AccGroupCredit_ID = :AccGroup_ID))
        INTO :ID
      DO
        SUSPEND;
      CreditAmount = mCreditAmount;
      DebetAmount = mDebetAmount;
      AccGroup_ID = mAccGroup_ID;
      AccDate$DATE = mAccDate$DATE;
    END
  END
  IF (AccGroup_ID <> mFullAccGroup) THEN
  BEGIN
    FOR
      SELECT D.ID
      FROM GeneralLedger D
      join SELDAT SLD on SLD.OBJ_ID = D.ID and SLD.SEL_ID=:IDSelID --rychlost !!!
      WHERE
        D.IsRequest='N' and
        ((D.AccGroupDebit_ID = :AccGroup_ID) OR (D.AccGroupCredit_ID = :AccGroup_ID))
      INTO :ID
    DO
      SUSPEND;
  end
END

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