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