ProTech's home page

ProTech-Online.com

IBM DB2 SQL code example to pull Quantus GL transactions.

CREATE PROCEDURE TEST_GL_TRANSACTION_REPORT (
    IN @BRANCH1 VARCHAR(8),
    IN @BRANCH2 VARCHAR(8),
    IN @BRANCH3 VARCHAR(8),
    IN @STARTDATE DATE,
    IN @ENDDATE DATE,
    IN @GLRANGE VARCHAR(20) )
SPECIFIC GL_TRANSACTION_REPORT
DYNAMIC RESULT SETS 1
LANGUAGE SQL
------------------------------------------------------------------------
-- SQL Stored Procedure
------------------------------------------------------------------------
P1: BEGIN
    DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_GLTABLE (
       SRCUNIQUE INTEGER,
       JOURNALNUM VARCHAR(8),
       GLACCOUNT VARCHAR(20),
       DTTRANSACTION DATE,
       BRANCH VARCHAR(8),
       DEBITAMT DOUBLE,
       CREDITAMT DOUBLE,
       BALANCE DOUBLE)
       ON COMMIT DELETE ROWS WITH REPLACE NOT LOGGED;
    --This table is used to store balance for each gl account
    DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_BALANCE (
       BRANCH VARCHAR(8),
       GLACCOUNT VARCHAR(20),
       BALANCE DOUBLE)
    ON COMMIT DELETE ROWS WITH REPLACE NOT LOGGED;
    BEGIN ATOMIC
       DECLARE dblBalance DOUBLE DEFAULT 0;
       DECLARE dblCredit DOUBLE DEFAULT 0;
       DECLARE dblDebit DOUBLE DEFAULT 0;
       DECLARE currGLAccount VARCHAR(20) DEFAULT '';
       DECLARE currBranch VARCHAR(8) DEFAULT '';
       DECLARE CURSOR1 CURSOR WITH RETURN TO CLIENT FOR
           SELECT * FROM SESSION.TEMP_GLTABLE;
       --Get all accounts in GLRANGE and store them and their corresponding balances in temp table
       loop1: FOR ROW1 AS
           SELECT QUANTUS.GL_CHART.GLNUMBER, QUANTUS.GL_CHART.BRANCH
           FROM QUANTUS.GL_CHART
           WHERE TRIM(GLNUMBER) LIKE @GLRANGE AND LTRIM(BRANCH) IN (@BRANCH1, @BRANCH2, @BRANCH3)
       DO
           SET dblBalance = QUERIES.TEST_GL_ACCOUNT_BALANCE(ROW1.BRANCH, @STARTDATE - 1 DAY, ROW1.GLNUMBER);
           INSERT INTO SESSION.TEMP_BALANCE VALUES(
               ROW1.BRANCH,
               ROW1.GLNUMBER,
               dblBalance);
       END FOR loop1;
       --Consider using select into
       loop2: FOR ROW2 AS
           SELECT
               MIN(QUANTUS.GL_TRANSACTION.TMCREATED) AS TMCREATED,
               MIN(QUANTUS.GL_TRANSACTION.DTCREATED) AS DTCREATED,
               QUANTUS.GL_TRANSACTION.SRCUNIQUE,
               QUANTUS.GL_TRANSACTION.JOURNALNUM,
               QUANTUS.GL_TRANSACTION.DTTRANSACTION,
               QUANTUS.GL_TRANSACTION.GLACCOUNT,
               QUANTUS.GL_TRANSACTION.BRANCH,
               SUM(QUANTUS.GL_TRANSACTION.DEBITAMT) AS DEBIT,
               SUM(QUANTUS.GL_TRANSACTION.CREDITAMT) AS CREDIT,
               MAX(SESSION.TEMP_BALANCE.BALANCE) AS STARTING_BALANCE
           FROM QUANTUS.GL_TRANSACTION
               INNER JOIN SESSION.TEMP_BALANCE
                  ON QUANTUS.GL_TRANSACTION.BRANCH = SESSION.TEMP_BALANCE.BRANCH
                  AND QUANTUS.GL_TRANSACTION.GLACCOUNT = SESSION.TEMP_BALANCE.GLACCOUNT
           WHERE
               TRIM(QUANTUS.GL_TRANSACTION.GLACCOUNT) LIKE @GLRANGE
               AND QUANTUS.GL_TRANSACTION.DTPOSTED BETWEEN @STARTDATE AND @ENDDATE
               AND LTRIM(QUANTUS.GL_TRANSACTION.BRANCH) IN (@BRANCH1, @BRANCH2, @BRANCH3)
           GROUP BY
               QUANTUS.GL_TRANSACTION.BRANCH,
               QUANTUS.GL_TRANSACTION.GLACCOUNT,
               QUANTUS.GL_TRANSACTION.SRCUNIQUE,
               QUANTUS.GL_TRANSACTION.JOURNALNUM,
               QUANTUS.GL_TRANSACTION.DTTRANSACTION
           ORDER BY
               QUANTUS.GL_TRANSACTION.BRANCH,
               QUANTUS.GL_TRANSACTION.GLACCOUNT,
               QUANTUS.GL_TRANSACTION.DTTRANSACTION ASC,
               DTCREATED ASC,
               TMCREATED ASC
           DO
               IF ROW2.DEBIT - ROW2.CREDIT > 0.00001 OR ROW2.CREDIT - ROW2.DEBIT > 0.00001 THEN
                  IF currGLAccount <> ROW2.GLACCOUNT OR currBranch <> ROW2.BRANCH THEN
                      SET dblBalance = ROW2.STARTING_BALANCE + ROW2.DEBIT - ROW2.CREDIT;
                      SET currGLAccount = ROW2.GLACCOUNT;
                      SET currBranch = ROW2.BRANCH;
                  ELSE
                      SET dblBalance = dblBalance + ROW2.DEBIT - ROW2.CREDIT;
                  END IF;
                  SET dblDebit = 0;
                  SET dblCredit = 0;
                  IF ROUND(ROW2.DEBIT, 2) > ROUND(ROW2.CREDIT, 2) THEN
                      SET dblDebit = ROW2.DEBIT - ROW2.CREDIT;
                  ELSE
                      SET dblCredit = ROW2.CREDIT - ROW2.DEBIT;
                  END IF;
                  INSERT INTO SESSION.TEMP_GLTABLE VALUES(
                      ROW2.SRCUNIQUE,
                      ROW2.JOURNALNUM,
                      ROW2.GLACCOUNT,
                      ROW2.DTTRANSACTION,
                      ROW2.BRANCH,
                      dblDebit,
                      dblCredit,
                      dblBalance);
               END IF;
        END FOR loop2;
       -- Cursor left open for client application
       OPEN CURSOR1;
    END;

END P1



Copyright © 2013 ProTechs-Online.com; All rights reserved.