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