ALTER TABLE TBCATALOGO_PRODUTO
    ADD HABILITA_ESTOQUE CHAR(1) DEFAULT '0';

COMMENT ON COLUMN TBCATALOGO_PRODUTO.HABILITA_ESTOQUE IS
'0 - Permite Produtos sem Estoque;
1 - Somente Produtos com Estoque;';


UPDATE TBCATALOGO_PRODUTO
    SET HABILITA_ESTOQUE = '0';


SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b01u for tbcatalogo_produto
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE NEW_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE OLD_TABELA_PRECO VARCHAR(500);
DECLARE VARIABLE NEW_TABELA_PRECO VARCHAR(500);
DECLARE VARIABLE OLD_LOCALIZACAO VARCHAR(500);
DECLARE VARIABLE NEW_LOCALIZACAO VARCHAR(500);
DECLARE VARIABLE OLD_CANAL_VENDAS VARCHAR(500);
DECLARE VARIABLE NEW_CANAL_VENDAS VARCHAR(500);
DECLARE VARIABLE OLD_TABELA_PRECO_ESP VARCHAR(500);
DECLARE VARIABLE NEW_TABELA_PRECO_ESP VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_ESTABELECIMENTO     = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.RAZAOSOCIAL  FROM TBESTABELECIMENTO A    WHERE A.CODIGO = OLD.ESTABELECIMENTO_ID), '');
    NEW_ESTABELECIMENTO     = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.RAZAOSOCIAL  FROM TBESTABELECIMENTO A    WHERE A.CODIGO = NEW.ESTABELECIMENTO_ID), '');
    OLD_TABELA_PRECO        = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO        FROM TBTABELA_PRECO B       WHERE B.ID = OLD.TABELA_PRECO_ID), '');
    NEW_TABELA_PRECO        = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO        FROM TBTABELA_PRECO B       WHERE B.ID = NEW.TABELA_PRECO_ID), '');
    OLD_LOCALIZACAO         = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO    FROM TBLOCALIZACAO C        WHERE C.CODIGO = OLD.LOCALIZACAO_ID), '');
    NEW_LOCALIZACAO         = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO    FROM TBLOCALIZACAO C        WHERE C.CODIGO = NEW.LOCALIZACAO_ID), '');
    OLD_CANAL_VENDAS        = COALESCE((SELECT FIRST 1 FN_LPAD(D.ID, 4, '0')||' - '||D.DESCRICAO        FROM TBCANAL_VENDAS D       WHERE D.ID = OLD.CANAL_VENDAS_ID), '');
    NEW_CANAL_VENDAS        = COALESCE((SELECT FIRST 1 FN_LPAD(D.ID, 4, '0')||' - '||D.DESCRICAO        FROM TBCANAL_VENDAS D       WHERE D.ID = NEW.CANAL_VENDAS_ID), '');
    OLD_TABELA_PRECO_ESP    = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO        FROM TBTABELA_PRECO E       WHERE E.ID = OLD.TABELA_PRECO_ESP_ID), '');
    NEW_TABELA_PRECO_ESP    = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO        FROM TBTABELA_PRECO E       WHERE E.ID = NEW.TABELA_PRECO_ESP_ID), '');

    IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC:'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
    END

    IF (OLD.DATA_INICIAL <> NEW.DATA_INICIAL) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.INICIAL:'||FORMATDATE(OLD.DATA_INICIAL)||'->'||FORMATDATE(NEW.DATA_INICIAL);
    END

    IF (OLD.DATA_FIM <> NEW.DATA_FIM) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.FINAL:'||FORMATDATE(OLD.DATA_FIM)||'->'||FORMATDATE(NEW.DATA_FIM);
    END

    IF (OLD.UTILIZADO <> NEW.UTILIZADO) THEN
    BEGIN
        HISTORICO = HISTORICO||' STATUS/UTIL:'||OLD.UTILIZADO||'->'||NEW.UTILIZADO;
    END

    IF (OLD.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' ESTAB:'||OLD_ESTABELECIMENTO||'->'||NEW_ESTABELECIMENTO;
    END

    IF (OLD.LOCALIZACAO_ID <> NEW.LOCALIZACAO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' LOCALIZACAO:'||OLD_LOCALIZACAO||'->'||NEW_LOCALIZACAO;
    END

    IF (OLD.TABELA_PRECO_ID <> NEW.TABELA_PRECO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' TAB.PRECO:'||OLD_TABELA_PRECO||'->'||NEW_TABELA_PRECO;
    END

    IF (OLD.TABELA_PRECO_ESP_ID <> NEW.TABELA_PRECO_ESP_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' TAB.PRECO ESP:'||OLD_TABELA_PRECO_ESP||'->'||NEW_TABELA_PRECO_ESP;
    END

    IF (OLD.CANAL_VENDAS_ID <> NEW.CANAL_VENDAS_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' CANAL VENDAS:'||OLD_CANAL_VENDAS||'->'||NEW_CANAL_VENDAS;
    END

    IF (OLD.ESTOQUE <> NEW.ESTOQUE) THEN
    BEGIN
        HISTORICO = HISTORICO||' DISP.ESTOQUE:'||OLD.ESTOQUE||'->'||NEW.ESTOQUE;
    END

    IF (OLD.VISUALIZACAO_GRADE <> NEW.VISUALIZACAO_GRADE) THEN
    BEGIN
        HISTORICO = HISTORICO||' GRADE TAM:'||OLD.VISUALIZACAO_GRADE||'->'||NEW.VISUALIZACAO_GRADE;
    END

    IF (OLD.VISUALIZACAO_COR <> NEW.VISUALIZACAO_COR) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC.COR:'||OLD.VISUALIZACAO_COR||'->'||NEW.VISUALIZACAO_COR;
    END

    IF (OLD.ALOCAR <> NEW.ALOCAR) THEN
    BEGIN
        HISTORICO = HISTORICO||' ALOCAR:'||OLD.ALOCAR||'->'||NEW.ALOCAR;
    END

    IF (OLD.HABILITA_ESTOQUE <> NEW.HABILITA_ESTOQUE) THEN
    BEGIN
        HISTORICO = HISTORICO||' HAB.ESTOQUE:'||OLD.HABILITA_ESTOQUE||'->'||NEW.HABILITA_ESTOQUE;
    END

    IF (OLD.CONTATO_VENDEDOR <> NEW.CONTATO_VENDEDOR) THEN
    BEGIN
        HISTORICO = HISTORICO||' CONTATO:'||FN_MASK_V2(OLD.CONTATO_VENDEDOR, 'FONE')||'->'||FN_MASK_V2(NEW.CONTATO_VENDEDOR, 'FONE');
    END

    IF (OLD.LINK <> NEW.LINK) THEN
    BEGIN
        HISTORICO = HISTORICO||' CAMPO LINK ALTERADO!';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^

/*******************************************************************************************/
/*******************************************************************************************/

SET TERM ^ ;

CREATE OR ALTER procedure SPC_ESTOQUE_MODELO_SALDO_DISP (
    IMODELO_ID integer not null,
    IESTABELECIMENTO_ID integer not null,
    ILOCALIZACAO_ID integer not null,
    ICOR_ID integer)
returns (
    MODELO_ID integer,
    CORES blob sub_type 1 segment size 80,
    TAMANHOS_1 blob sub_type 1 segment size 80,
    TAMANHOS_2 blob sub_type 1 segment size 80,
    SALDO_TOTAL_1 numeric(15,8),
    SALDO_TOTAL_2 numeric(15,8))
as
BEGIN
    FOR
        SELECT
            Y.MODELO_ID,
            Y.SPLIT_COR AS CORES,

            IIF(COALESCE(Y.SALDO_T01_1, 0) > 0, '01'||',', '')||
            IIF(COALESCE(Y.SALDO_T02_1, 0) > 0, '02'||',', '')||
            IIF(COALESCE(Y.SALDO_T03_1, 0) > 0, '03'||',', '')||
            IIF(COALESCE(Y.SALDO_T04_1, 0) > 0, '04'||',', '')||
            IIF(COALESCE(Y.SALDO_T05_1, 0) > 0, '05'||',', '')||
            IIF(COALESCE(Y.SALDO_T06_1, 0) > 0, '06'||',', '')||
            IIF(COALESCE(Y.SALDO_T07_1, 0) > 0, '07'||',', '')||
            IIF(COALESCE(Y.SALDO_T08_1, 0) > 0, '08'||',', '')||
            IIF(COALESCE(Y.SALDO_T09_1, 0) > 0, '09'||',', '')||
            IIF(COALESCE(Y.SALDO_T10_1, 0) > 0, '10'||',', '')||
            IIF(COALESCE(Y.SALDO_T11_1, 0) > 0, '11'||',', '')||
            IIF(COALESCE(Y.SALDO_T12_1, 0) > 0, '12'||',', '')||
            IIF(COALESCE(Y.SALDO_T13_1, 0) > 0, '13'||',', '')||
            IIF(COALESCE(Y.SALDO_T14_1, 0) > 0, '14'||',', '')||
            IIF(COALESCE(Y.SALDO_T15_1, 0) > 0, '15'||',', '')||
            IIF(COALESCE(Y.SALDO_T16_1, 0) > 0, '16'||',', '')||
            IIF(COALESCE(Y.SALDO_T17_1, 0) > 0, '17'||',', '')||
            IIF(COALESCE(Y.SALDO_T18_1, 0) > 0, '18'||',', '')||
            IIF(COALESCE(Y.SALDO_T19_1, 0) > 0, '19'||',', '')||
            IIF(COALESCE(Y.SALDO_T20_1, 0) > 0, '20'||',', '') AS TAMANHOS_1,

            IIF(COALESCE(Y.SALDO_T01_2, 0) > 0, '01'||',', '')||
            IIF(COALESCE(Y.SALDO_T02_2, 0) > 0, '02'||',', '')||
            IIF(COALESCE(Y.SALDO_T03_2, 0) > 0, '03'||',', '')||
            IIF(COALESCE(Y.SALDO_T04_2, 0) > 0, '04'||',', '')||
            IIF(COALESCE(Y.SALDO_T05_2, 0) > 0, '05'||',', '')||
            IIF(COALESCE(Y.SALDO_T06_2, 0) > 0, '06'||',', '')||
            IIF(COALESCE(Y.SALDO_T07_2, 0) > 0, '07'||',', '')||
            IIF(COALESCE(Y.SALDO_T08_2, 0) > 0, '08'||',', '')||
            IIF(COALESCE(Y.SALDO_T09_2, 0) > 0, '09'||',', '')||
            IIF(COALESCE(Y.SALDO_T10_2, 0) > 0, '10'||',', '')||
            IIF(COALESCE(Y.SALDO_T11_2, 0) > 0, '11'||',', '')||
            IIF(COALESCE(Y.SALDO_T12_2, 0) > 0, '12'||',', '')||
            IIF(COALESCE(Y.SALDO_T13_2, 0) > 0, '13'||',', '')||
            IIF(COALESCE(Y.SALDO_T14_2, 0) > 0, '14'||',', '')||
            IIF(COALESCE(Y.SALDO_T15_2, 0) > 0, '15'||',', '')||
            IIF(COALESCE(Y.SALDO_T16_2, 0) > 0, '16'||',', '')||
            IIF(COALESCE(Y.SALDO_T17_2, 0) > 0, '17'||',', '')||
            IIF(COALESCE(Y.SALDO_T18_2, 0) > 0, '18'||',', '')||
            IIF(COALESCE(Y.SALDO_T19_2, 0) > 0, '19'||',', '')||
            IIF(COALESCE(Y.SALDO_T20_2, 0) > 0, '20'||',', '') AS TAMANHOS_2,

        
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
                COALESCE(Y.SALDO_T01_1, 0), 
                COALESCE(Y.SALDO_T02_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T03_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T04_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T05_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T06_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T07_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T08_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T09_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T10_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T11_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T12_1, 0), '+', 8),
                COALESCE(Y.SALDO_T13_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T14_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T15_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T16_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T17_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T18_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T19_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T20_1, 0), '+', 8) AS SALDO_TOTAL_1,
            
            
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
                COALESCE(Y.SALDO_T01_2, 0),
                COALESCE(Y.SALDO_T02_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T03_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T04_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T05_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T06_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T07_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T08_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T09_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T10_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T11_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T12_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T13_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T14_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T15_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T16_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T17_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T18_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T19_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T20_2, 0), '+', 8) AS SALDO_TOTAL_2
        
        FROM (
            SELECT
                X.MODELO_ID,
                LIST(X.COR_ID, ',') AS  SPLIT_COR,
            
                /* Saldo do Tipo 1 - Estoque == 1 */
                FN_CALC_PRECISION_V2(SUM(X.T01_SALDO), SUM(X.A01_SALDO), '-', 8) AS SALDO_T01_1,
                FN_CALC_PRECISION_V2(SUM(X.T02_SALDO), SUM(X.A02_SALDO), '-', 8) AS SALDO_T02_1,
                FN_CALC_PRECISION_V2(SUM(X.T03_SALDO), SUM(X.A03_SALDO), '-', 8) AS SALDO_T03_1,
                FN_CALC_PRECISION_V2(SUM(X.T04_SALDO), SUM(X.A04_SALDO), '-', 8) AS SALDO_T04_1,
                FN_CALC_PRECISION_V2(SUM(X.T05_SALDO), SUM(X.A05_SALDO), '-', 8) AS SALDO_T05_1,
                FN_CALC_PRECISION_V2(SUM(X.T06_SALDO), SUM(X.A06_SALDO), '-', 8) AS SALDO_T06_1,
                FN_CALC_PRECISION_V2(SUM(X.T07_SALDO), SUM(X.A07_SALDO), '-', 8) AS SALDO_T07_1,
                FN_CALC_PRECISION_V2(SUM(X.T08_SALDO), SUM(X.A08_SALDO), '-', 8) AS SALDO_T08_1,
                FN_CALC_PRECISION_V2(SUM(X.T09_SALDO), SUM(X.A09_SALDO), '-', 8) AS SALDO_T09_1,
                FN_CALC_PRECISION_V2(SUM(X.T10_SALDO), SUM(X.A10_SALDO), '-', 8) AS SALDO_T10_1,
                FN_CALC_PRECISION_V2(SUM(X.T11_SALDO), SUM(X.A11_SALDO), '-', 8) AS SALDO_T11_1,
                FN_CALC_PRECISION_V2(SUM(X.T12_SALDO), SUM(X.A12_SALDO), '-', 8) AS SALDO_T12_1,
                FN_CALC_PRECISION_V2(SUM(X.T13_SALDO), SUM(X.A13_SALDO), '-', 8) AS SALDO_T13_1,
                FN_CALC_PRECISION_V2(SUM(X.T14_SALDO), SUM(X.A14_SALDO), '-', 8) AS SALDO_T14_1,
                FN_CALC_PRECISION_V2(SUM(X.T15_SALDO), SUM(X.A15_SALDO), '-', 8) AS SALDO_T15_1,
                FN_CALC_PRECISION_V2(SUM(X.T16_SALDO), SUM(X.A16_SALDO), '-', 8) AS SALDO_T16_1,
                FN_CALC_PRECISION_V2(SUM(X.T17_SALDO), SUM(X.A17_SALDO), '-', 8) AS SALDO_T17_1,
                FN_CALC_PRECISION_V2(SUM(X.T18_SALDO), SUM(X.A18_SALDO), '-', 8) AS SALDO_T18_1,
                FN_CALC_PRECISION_V2(SUM(X.T19_SALDO), SUM(X.A19_SALDO), '-', 8) AS SALDO_T19_1,
                FN_CALC_PRECISION_V2(SUM(X.T20_SALDO), SUM(X.A20_SALDO), '-', 8) AS SALDO_T20_1,
                
                /* Saldo do Tipo 2 - Estoque == 2 */
                FN_CALC_PRECISION_V2(SUM(X.T01_SALDO), SUM(X.D01_SALDO), '-', 8) AS SALDO_T01_2,
                FN_CALC_PRECISION_V2(SUM(X.T02_SALDO), SUM(X.D02_SALDO), '-', 8) AS SALDO_T02_2,
                FN_CALC_PRECISION_V2(SUM(X.T03_SALDO), SUM(X.D03_SALDO), '-', 8) AS SALDO_T03_2,
                FN_CALC_PRECISION_V2(SUM(X.T04_SALDO), SUM(X.D04_SALDO), '-', 8) AS SALDO_T04_2,
                FN_CALC_PRECISION_V2(SUM(X.T05_SALDO), SUM(X.D05_SALDO), '-', 8) AS SALDO_T05_2,
                FN_CALC_PRECISION_V2(SUM(X.T06_SALDO), SUM(X.D06_SALDO), '-', 8) AS SALDO_T06_2,
                FN_CALC_PRECISION_V2(SUM(X.T07_SALDO), SUM(X.D07_SALDO), '-', 8) AS SALDO_T07_2,
                FN_CALC_PRECISION_V2(SUM(X.T08_SALDO), SUM(X.D08_SALDO), '-', 8) AS SALDO_T08_2,
                FN_CALC_PRECISION_V2(SUM(X.T09_SALDO), SUM(X.D09_SALDO), '-', 8) AS SALDO_T09_2,
                FN_CALC_PRECISION_V2(SUM(X.T10_SALDO), SUM(X.D10_SALDO), '-', 8) AS SALDO_T10_2,
                FN_CALC_PRECISION_V2(SUM(X.T11_SALDO), SUM(X.D11_SALDO), '-', 8) AS SALDO_T11_2,
                FN_CALC_PRECISION_V2(SUM(X.T12_SALDO), SUM(X.D12_SALDO), '-', 8) AS SALDO_T12_2,
                FN_CALC_PRECISION_V2(SUM(X.T13_SALDO), SUM(X.D13_SALDO), '-', 8) AS SALDO_T13_2,
                FN_CALC_PRECISION_V2(SUM(X.T14_SALDO), SUM(X.D14_SALDO), '-', 8) AS SALDO_T14_2,
                FN_CALC_PRECISION_V2(SUM(X.T15_SALDO), SUM(X.D15_SALDO), '-', 8) AS SALDO_T15_2,
                FN_CALC_PRECISION_V2(SUM(X.T16_SALDO), SUM(X.D16_SALDO), '-', 8) AS SALDO_T16_2,
                FN_CALC_PRECISION_V2(SUM(X.T17_SALDO), SUM(X.D17_SALDO), '-', 8) AS SALDO_T17_2,
                FN_CALC_PRECISION_V2(SUM(X.T18_SALDO), SUM(X.D18_SALDO), '-', 8) AS SALDO_T18_2,
                FN_CALC_PRECISION_V2(SUM(X.T19_SALDO), SUM(X.D19_SALDO), '-', 8) AS SALDO_T19_2,
                FN_CALC_PRECISION_V2(SUM(X.T20_SALDO), SUM(X.D20_SALDO), '-', 8) AS SALDO_T20_2
            
            FROM (
                SELECT
                    ROW_NUMBER() OVER(ORDER BY M.CODIGO, P.COR_CODIGO) AS ID,

                    E.CODIGO||' - '||E.RAZAOSOCIAL AS ESTABELECIMENTO,
                    L.CODIGO||' - '||L.DESCRICAO AS LOCALIZACAO,
                    M.CODIGO AS MODELO_ID,
                    P.COR_CODIGO AS COR_ID,

                    S.SALDO,
                    S.T01_SALDO,
                    S.T02_SALDO,
                    S.T03_SALDO,
                    S.T04_SALDO,
                    S.T05_SALDO,
                    S.T06_SALDO,
                    S.T07_SALDO,
                    S.T08_SALDO,
                    S.T09_SALDO,
                    S.T10_SALDO,
                    S.T11_SALDO,
                    S.T12_SALDO,
                    S.T13_SALDO,
                    S.T14_SALDO,
                    S.T15_SALDO,
                    S.T16_SALDO,
                    S.T17_SALDO,
                    S.T18_SALDO,
                    S.T19_SALDO,
                    S.T20_SALDO,

                    IIF( S.T01_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 1),0) AS A01_SALDO,
                    IIF( S.T02_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 2),0) AS A02_SALDO,
                    IIF( S.T03_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 3),0) AS A03_SALDO,
                    IIF( S.T04_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 4),0) AS A04_SALDO,
                    IIF( S.T05_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 5),0) AS A05_SALDO,
                    IIF( S.T06_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 6),0) AS A06_SALDO,
                    IIF( S.T07_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 7),0) AS A07_SALDO,
                    IIF( S.T08_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 8),0) AS A08_SALDO,
                    IIF( S.T09_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 9),0) AS A09_SALDO,
                    IIF( S.T10_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,10),0) AS A10_SALDO,
                    IIF( S.T11_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,11),0) AS A11_SALDO,
                    IIF( S.T12_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,12),0) AS A12_SALDO,
                    IIF( S.T13_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,13),0) AS A13_SALDO,
                    IIF( S.T14_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,14),0) AS A14_SALDO,
                    IIF( S.T15_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,15),0) AS A15_SALDO,
                    IIF( S.T16_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,16),0) AS A16_SALDO,
                    IIF( S.T17_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,17),0) AS A17_SALDO,
                    IIF( S.T18_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,18),0) AS A18_SALDO,
                    IIF( S.T19_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,19),0) AS A19_SALDO,
                    IIF( S.T20_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,20),0) AS A20_SALDO,
            
                    IIF( S.T01_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 1),0) AS D01_SALDO,
                    IIF( S.T02_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 2),0) AS D02_SALDO,
                    IIF( S.T03_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 3),0) AS D03_SALDO,
                    IIF( S.T04_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 4),0) AS D04_SALDO,
                    IIF( S.T05_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 5),0) AS D05_SALDO,
                    IIF( S.T06_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 6),0) AS D06_SALDO,
                    IIF( S.T07_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 7),0) AS D07_SALDO,
                    IIF( S.T08_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 8),0) AS D08_SALDO,
                    IIF( S.T09_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 9),0) AS D09_SALDO,
                    IIF( S.T10_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,10),0) AS D10_SALDO,
                    IIF( S.T11_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,11),0) AS D11_SALDO,
                    IIF( S.T12_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,12),0) AS D12_SALDO,
                    IIF( S.T13_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,13),0) AS D13_SALDO,
                    IIF( S.T14_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,14),0) AS D14_SALDO,
                    IIF( S.T15_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,15),0) AS D15_SALDO,
                    IIF( S.T16_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,16),0) AS D16_SALDO,
                    IIF( S.T17_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,17),0) AS D17_SALDO,
                    IIF( S.T18_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,18),0) AS D18_SALDO,
                    IIF( S.T19_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,19),0) AS D19_SALDO,
                    IIF( S.T20_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,20),0) AS D20_SALDO
            
                FROM TBMODELO M, TBESTOQUE_SALDO S, TBPRODUTO P, TBESTABELECIMENTO E, TBLOCALIZACAO L
                WHERE M.CODIGO = :IMODELO_ID
                AND S.ESTABELECIMENTO_CODIGO = :IESTABELECIMENTO_ID
                AND S.LOCALIZACAO_CODIGO = :ILOCALIZACAO_ID
                AND P.MODELO_CODIGO = M.CODIGO
                AND P.CODIGO = S.PRODUTO_CODIGO
                AND IIF(FN_IS_EMPTY(CAST(:ICOR_ID AS INTEGER)) <> '' AND FN_IS_EMPTY(CAST(:ICOR_ID AS INTEGER)) > 0, P.COR_CODIGO = :ICOR_ID, true = true)
                AND L.CODIGO = S.LOCALIZACAO_CODIGO
                AND E.CODIGO = S.ESTABELECIMENTO_CODIGO
            
                ORDER BY M.CODIGO, P.COR_CODIGO
            ) X
            WHERE true = true
        
            GROUP BY
                X.MODELO_ID
        ) Y
        WHERE true = true

    INTO
        :MODELO_ID,
        :CORES,

        :TAMANHOS_1,
        :TAMANHOS_2,

        :SALDO_TOTAL_1,
        :SALDO_TOTAL_2

    DO
    BEGIN

        SUSPEND;

    END
END
^

SET TERM ; ^

/*******************************************************************************************/
/*******************************************************************************************/

SET TERM ^ ;

CREATE OR ALTER procedure SPC_ESTOQUE_MODELO_TAM_SALDO (
    IMODELO_ID integer not null,
    IESTABELECIMENTO_ID integer not null,
    ILOCALIZACAO_ID integer not null,
    ITAMANHO integer not null,
    ICOR_ID integer)
returns (
    MODELO_ID integer,
    CORES blob sub_type 1 segment size 80,
    TAMANHOS_1 blob sub_type 1 segment size 80,
    TAMANHOS_2 blob sub_type 1 segment size 80,
    SALDO_TOTAL_1 numeric(15,8),
    SALDO_TOTAL_2 numeric(15,8))
as
BEGIN
    FOR
        SELECT
            Y.MODELO_ID,
            Y.SPLIT_COR AS CORES,

            CAST(:ITAMANHO AS VARCHAR(100)) AS TAMANHOS_1,
            CAST(:ITAMANHO AS VARCHAR(100)) AS TAMANHOS_2,
        
            IIF(:ITAMANHO = 1, SALDO_T01_1,
            IIF(:ITAMANHO = 2, SALDO_T02_1,
            IIF(:ITAMANHO = 3, SALDO_T03_1,
            IIF(:ITAMANHO = 4, SALDO_T04_1,
            IIF(:ITAMANHO = 5, SALDO_T05_1,
            IIF(:ITAMANHO = 6, SALDO_T06_1,
            IIF(:ITAMANHO = 7, SALDO_T07_1,
            IIF(:ITAMANHO = 8, SALDO_T08_1,
            IIF(:ITAMANHO = 9, SALDO_T09_1,
            IIF(:ITAMANHO = 10, SALDO_T10_1,
            IIF(:ITAMANHO = 11, SALDO_T11_1,
            IIF(:ITAMANHO = 12, SALDO_T12_1,
            IIF(:ITAMANHO = 13, SALDO_T13_1,
            IIF(:ITAMANHO = 14, SALDO_T14_1,
            IIF(:ITAMANHO = 15, SALDO_T15_1,
            IIF(:ITAMANHO = 16, SALDO_T16_1,
            IIF(:ITAMANHO = 17, SALDO_T17_1,
            IIF(:ITAMANHO = 18, SALDO_T18_1,
            IIF(:ITAMANHO = 19, SALDO_T19_1,
            IIF(:ITAMANHO = 20, SALDO_T20_1, 0)))))))))))))))))))) AS TAMANHO_1,
            
            IIF(:ITAMANHO = 1, SALDO_T01_2,
            IIF(:ITAMANHO = 2, SALDO_T02_2,
            IIF(:ITAMANHO = 3, SALDO_T03_2,
            IIF(:ITAMANHO = 4, SALDO_T04_2,
            IIF(:ITAMANHO = 5, SALDO_T05_2,
            IIF(:ITAMANHO = 6, SALDO_T06_2,
            IIF(:ITAMANHO = 7, SALDO_T07_2,
            IIF(:ITAMANHO = 8, SALDO_T08_2,
            IIF(:ITAMANHO = 9, SALDO_T09_2,
            IIF(:ITAMANHO = 10, SALDO_T10_2,
            IIF(:ITAMANHO = 11, SALDO_T11_2,
            IIF(:ITAMANHO = 12, SALDO_T12_2,
            IIF(:ITAMANHO = 13, SALDO_T13_2,
            IIF(:ITAMANHO = 14, SALDO_T14_2,
            IIF(:ITAMANHO = 15, SALDO_T15_2,
            IIF(:ITAMANHO = 16, SALDO_T16_2,
            IIF(:ITAMANHO = 17, SALDO_T17_2,
            IIF(:ITAMANHO = 18, SALDO_T18_2,
            IIF(:ITAMANHO = 19, SALDO_T19_2,
            IIF(:ITAMANHO = 20, SALDO_T20_2, 0)))))))))))))))))))) AS TAMANHO_2
        
        FROM (
            SELECT FIRST 1
                X.MODELO_ID,
                LIST(X.COR_ID, ',') AS  SPLIT_COR,
            
                /* Saldo do Tipo 1 - Estoque == 1 */
                FN_CALC_PRECISION_V2(SUM(X.T01_SALDO), SUM(X.A01_SALDO), '-', 8) AS SALDO_T01_1,
                FN_CALC_PRECISION_V2(SUM(X.T02_SALDO), SUM(X.A02_SALDO), '-', 8) AS SALDO_T02_1,
                FN_CALC_PRECISION_V2(SUM(X.T03_SALDO), SUM(X.A03_SALDO), '-', 8) AS SALDO_T03_1,
                FN_CALC_PRECISION_V2(SUM(X.T04_SALDO), SUM(X.A04_SALDO), '-', 8) AS SALDO_T04_1,
                FN_CALC_PRECISION_V2(SUM(X.T05_SALDO), SUM(X.A05_SALDO), '-', 8) AS SALDO_T05_1,
                FN_CALC_PRECISION_V2(SUM(X.T06_SALDO), SUM(X.A06_SALDO), '-', 8) AS SALDO_T06_1,
                FN_CALC_PRECISION_V2(SUM(X.T07_SALDO), SUM(X.A07_SALDO), '-', 8) AS SALDO_T07_1,
                FN_CALC_PRECISION_V2(SUM(X.T08_SALDO), SUM(X.A08_SALDO), '-', 8) AS SALDO_T08_1,
                FN_CALC_PRECISION_V2(SUM(X.T09_SALDO), SUM(X.A09_SALDO), '-', 8) AS SALDO_T09_1,
                FN_CALC_PRECISION_V2(SUM(X.T10_SALDO), SUM(X.A10_SALDO), '-', 8) AS SALDO_T10_1,
                FN_CALC_PRECISION_V2(SUM(X.T11_SALDO), SUM(X.A11_SALDO), '-', 8) AS SALDO_T11_1,
                FN_CALC_PRECISION_V2(SUM(X.T12_SALDO), SUM(X.A12_SALDO), '-', 8) AS SALDO_T12_1,
                FN_CALC_PRECISION_V2(SUM(X.T13_SALDO), SUM(X.A13_SALDO), '-', 8) AS SALDO_T13_1,
                FN_CALC_PRECISION_V2(SUM(X.T14_SALDO), SUM(X.A14_SALDO), '-', 8) AS SALDO_T14_1,
                FN_CALC_PRECISION_V2(SUM(X.T15_SALDO), SUM(X.A15_SALDO), '-', 8) AS SALDO_T15_1,
                FN_CALC_PRECISION_V2(SUM(X.T16_SALDO), SUM(X.A16_SALDO), '-', 8) AS SALDO_T16_1,
                FN_CALC_PRECISION_V2(SUM(X.T17_SALDO), SUM(X.A17_SALDO), '-', 8) AS SALDO_T17_1,
                FN_CALC_PRECISION_V2(SUM(X.T18_SALDO), SUM(X.A18_SALDO), '-', 8) AS SALDO_T18_1,
                FN_CALC_PRECISION_V2(SUM(X.T19_SALDO), SUM(X.A19_SALDO), '-', 8) AS SALDO_T19_1,
                FN_CALC_PRECISION_V2(SUM(X.T20_SALDO), SUM(X.A20_SALDO), '-', 8) AS SALDO_T20_1,
                
                /* Saldo do Tipo 2 - Estoque == 2 */
                FN_CALC_PRECISION_V2(SUM(X.T01_SALDO), SUM(X.D01_SALDO), '-', 8) AS SALDO_T01_2,
                FN_CALC_PRECISION_V2(SUM(X.T02_SALDO), SUM(X.D02_SALDO), '-', 8) AS SALDO_T02_2,
                FN_CALC_PRECISION_V2(SUM(X.T03_SALDO), SUM(X.D03_SALDO), '-', 8) AS SALDO_T03_2,
                FN_CALC_PRECISION_V2(SUM(X.T04_SALDO), SUM(X.D04_SALDO), '-', 8) AS SALDO_T04_2,
                FN_CALC_PRECISION_V2(SUM(X.T05_SALDO), SUM(X.D05_SALDO), '-', 8) AS SALDO_T05_2,
                FN_CALC_PRECISION_V2(SUM(X.T06_SALDO), SUM(X.D06_SALDO), '-', 8) AS SALDO_T06_2,
                FN_CALC_PRECISION_V2(SUM(X.T07_SALDO), SUM(X.D07_SALDO), '-', 8) AS SALDO_T07_2,
                FN_CALC_PRECISION_V2(SUM(X.T08_SALDO), SUM(X.D08_SALDO), '-', 8) AS SALDO_T08_2,
                FN_CALC_PRECISION_V2(SUM(X.T09_SALDO), SUM(X.D09_SALDO), '-', 8) AS SALDO_T09_2,
                FN_CALC_PRECISION_V2(SUM(X.T10_SALDO), SUM(X.D10_SALDO), '-', 8) AS SALDO_T10_2,
                FN_CALC_PRECISION_V2(SUM(X.T11_SALDO), SUM(X.D11_SALDO), '-', 8) AS SALDO_T11_2,
                FN_CALC_PRECISION_V2(SUM(X.T12_SALDO), SUM(X.D12_SALDO), '-', 8) AS SALDO_T12_2,
                FN_CALC_PRECISION_V2(SUM(X.T13_SALDO), SUM(X.D13_SALDO), '-', 8) AS SALDO_T13_2,
                FN_CALC_PRECISION_V2(SUM(X.T14_SALDO), SUM(X.D14_SALDO), '-', 8) AS SALDO_T14_2,
                FN_CALC_PRECISION_V2(SUM(X.T15_SALDO), SUM(X.D15_SALDO), '-', 8) AS SALDO_T15_2,
                FN_CALC_PRECISION_V2(SUM(X.T16_SALDO), SUM(X.D16_SALDO), '-', 8) AS SALDO_T16_2,
                FN_CALC_PRECISION_V2(SUM(X.T17_SALDO), SUM(X.D17_SALDO), '-', 8) AS SALDO_T17_2,
                FN_CALC_PRECISION_V2(SUM(X.T18_SALDO), SUM(X.D18_SALDO), '-', 8) AS SALDO_T18_2,
                FN_CALC_PRECISION_V2(SUM(X.T19_SALDO), SUM(X.D19_SALDO), '-', 8) AS SALDO_T19_2,
                FN_CALC_PRECISION_V2(SUM(X.T20_SALDO), SUM(X.D20_SALDO), '-', 8) AS SALDO_T20_2
            
            FROM (
                SELECT
                    ROW_NUMBER() OVER(ORDER BY M.CODIGO, P.COR_CODIGO) AS ID,
            
                    E.CODIGO||' - '||E.RAZAOSOCIAL AS ESTABELECIMENTO,
                    L.CODIGO||' - '||L.DESCRICAO AS LOCALIZACAO,
                    M.CODIGO AS MODELO_ID,
                    P.COR_CODIGO AS COR_ID,
            
                    S.SALDO,
                    S.T01_SALDO,
                    S.T02_SALDO,
                    S.T03_SALDO,
                    S.T04_SALDO,
                    S.T05_SALDO,
                    S.T06_SALDO,
                    S.T07_SALDO,
                    S.T08_SALDO,
                    S.T09_SALDO,
                    S.T10_SALDO,
                    S.T11_SALDO,
                    S.T12_SALDO,
                    S.T13_SALDO,
                    S.T14_SALDO,
                    S.T15_SALDO,
                    S.T16_SALDO,
                    S.T17_SALDO,
                    S.T18_SALDO,
                    S.T19_SALDO,
                    S.T20_SALDO,
            
                    IIF( S.T01_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 1),0) AS A01_SALDO,
                    IIF( S.T02_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 2),0) AS A02_SALDO,
                    IIF( S.T03_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 3),0) AS A03_SALDO,
                    IIF( S.T04_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 4),0) AS A04_SALDO,
                    IIF( S.T05_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 5),0) AS A05_SALDO,
                    IIF( S.T06_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 6),0) AS A06_SALDO,
                    IIF( S.T07_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 7),0) AS A07_SALDO,
                    IIF( S.T08_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 8),0) AS A08_SALDO,
                    IIF( S.T09_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 9),0) AS A09_SALDO,
                    IIF( S.T10_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,10),0) AS A10_SALDO,
                    IIF( S.T11_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,11),0) AS A11_SALDO,
                    IIF( S.T12_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,12),0) AS A12_SALDO,
                    IIF( S.T13_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,13),0) AS A13_SALDO,
                    IIF( S.T14_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,14),0) AS A14_SALDO,
                    IIF( S.T15_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,15),0) AS A15_SALDO,
                    IIF( S.T16_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,16),0) AS A16_SALDO,
                    IIF( S.T17_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,17),0) AS A17_SALDO,
                    IIF( S.T18_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,18),0) AS A18_SALDO,
                    IIF( S.T19_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,19),0) AS A19_SALDO,
                    IIF( S.T20_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,20),0) AS A20_SALDO,
            
                    IIF( S.T01_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 1),0) AS D01_SALDO,
                    IIF( S.T02_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 2),0) AS D02_SALDO,
                    IIF( S.T03_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 3),0) AS D03_SALDO,
                    IIF( S.T04_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 4),0) AS D04_SALDO,
                    IIF( S.T05_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 5),0) AS D05_SALDO,
                    IIF( S.T06_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 6),0) AS D06_SALDO,
                    IIF( S.T07_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 7),0) AS D07_SALDO,
                    IIF( S.T08_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 8),0) AS D08_SALDO,
                    IIF( S.T09_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 9),0) AS D09_SALDO,
                    IIF( S.T10_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,10),0) AS D10_SALDO,
                    IIF( S.T11_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,11),0) AS D11_SALDO,
                    IIF( S.T12_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,12),0) AS D12_SALDO,
                    IIF( S.T13_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,13),0) AS D13_SALDO,
                    IIF( S.T14_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,14),0) AS D14_SALDO,
                    IIF( S.T15_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,15),0) AS D15_SALDO,
                    IIF( S.T16_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,16),0) AS D16_SALDO,
                    IIF( S.T17_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,17),0) AS D17_SALDO,
                    IIF( S.T18_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,18),0) AS D18_SALDO,
                    IIF( S.T19_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,19),0) AS D19_SALDO,
                    IIF( S.T20_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,20),0) AS D20_SALDO
            
                FROM TBMODELO M, TBESTOQUE_SALDO S, TBPRODUTO P, TBESTABELECIMENTO E, TBLOCALIZACAO L
                WHERE M.CODIGO = :IMODELO_ID
                AND S.ESTABELECIMENTO_CODIGO = :IESTABELECIMENTO_ID
                AND S.LOCALIZACAO_CODIGO = :ILOCALIZACAO_ID
                AND P.MODELO_CODIGO = M.CODIGO
                AND P.CODIGO = S.PRODUTO_CODIGO
                AND IIF(FN_IS_EMPTY(CAST(:ICOR_ID AS INTEGER)) <> '' AND FN_IS_EMPTY(CAST(:ICOR_ID AS INTEGER)) > 0, P.COR_CODIGO = :ICOR_ID, true = true)
                AND L.CODIGO = S.LOCALIZACAO_CODIGO
                AND E.CODIGO = S.ESTABELECIMENTO_CODIGO
            
                ORDER BY M.CODIGO, P.COR_CODIGO
            ) X
            WHERE true = true
            
            GROUP BY
                X.MODELO_ID
        ) Y
        WHERE true = true

    INTO
        :MODELO_ID,
        :CORES,

        :TAMANHOS_1,
        :TAMANHOS_2,

        :SALDO_TOTAL_1,
        :SALDO_TOTAL_2

    DO
    BEGIN

        SUSPEND;

    END
END
^

SET TERM ; ^

