SET TERM ^ ;

CREATE OR ALTER procedure SPC_MODELO_FICHA_CUSTO (
    MODELO_ID integer not null)
as
BEGIN
   --ARMAZENAR DADOS DO MODELO
   INSERT INTO TMPGERAL5 (INTEIRO_01)
    SELECT M.CODIGO AS MODELO_ID 
      FROM TBMODELO M
      WHERE M.CODIGO = :MODELO_ID;

   --ARMAZENAR PRODUTOS DO CONSUMO
   INSERT INTO TMPGERAL6 (INTEIRO_01, INTEIRO_02)
    SELECT DISTINCT PRODUTO_ID, :MODELO_ID
      FROM (
        SELECT A.CONSUMO_PRODUTO_CODIGO AS PRODUTO_ID
          FROM TBMODELO_CONSUMO A, TMPGERAL5 T1, TBPRODUTO P
         WHERE A.MODELO_CODIGO = T1.INTEIRO_01
           AND P.CODIGO = A.CONSUMO_PRODUTO_CODIGO
           AND A.MODELO_CODIGO = :MODELO_ID
    
        UNION ALL
        SELECT B.PRODUTO_ID
          FROM TBMODELO_CONSUMO_COR B, TMPGERAL5 T2, TBPRODUTO P
         WHERE B.MODELO_ID = T2.INTEIRO_01
           AND P.CODIGO = B.PRODUTO_ID
           AND B.MODELO_ID = :MODELO_ID
    
       );

    --ARMAZENAR CUSTO GERAL
    INSERT INTO TMPGERAL(INTEIRO_01, INTEIRO_02, INTEIRO_03, INTEIRO_04, INTEIRO_05, NUMERICO_01)
    SELECT X.PRODUTO_CODIGO, P.GRUPO_PRODUTO_ID, X.TAMANHO, 1 AS TIPO, :MODELO_ID, X.CUSTO_MEDIO
      FROM (
          SELECT PC.PRODUTO_CODIGO, 0 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( CUSTOUNITARIO_MEDIO,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.CUSTOUNITARIO_MEDIO,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO, 1 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T01,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T01,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO, 2 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T02,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T02,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO  AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO, 3 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T03,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T03,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO  AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO, 4 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T04,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T04,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO  AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO, 5 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T05,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T05,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO   AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO, 6 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T06,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T06,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO  AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO, 7 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T07,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T07,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO  AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO, 8 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T08,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T08,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO, 9 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T09,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T09,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,10 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T10,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T10,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,11 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T11,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T11,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,12 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T12,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T12,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,13 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T13,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T13,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,14 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T14,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T14,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,15 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T15,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T15,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,16 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T16,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T16,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,17 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T17,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T17,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,18 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T18,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T18,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,19 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T19,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T19,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
    
          UNION ALL
    
          SELECT PC.PRODUTO_CODIGO,20 TAMANHO,
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( FN_CALC_PRECISION(
                 FN_CALC_PRECISION( T20,
                                   (COALESCE(IMPOSTO_CUSTO,0.0000)/100.00+1),'*'),
                                   (COALESCE(ICMS,0.0000)/100.00+1),'*'),
                                   (COALESCE(IPI,0.0000)/100.00+1),'*'),
                                   (COALESCE(FRETE,0.0000)/100.00+1),'*'),
                                   (COALESCE(FINANCEIRO,0.0000)/100.00+1),'*') CUSTO_MEDIO
    
            FROM TBPRODUTO_CONTABIL PC, TMPGERAL6 T6
           WHERE COALESCE(PC.T20,0) > 0 AND T6.INTEIRO_01 = PC.PRODUTO_CODIGO AND T6.INTEIRO_02 = :MODELO_ID
        ) X, TBPRODUTO P 
        WHERE P.CODIGO = X.PRODUTO_CODIGO;

    --ARMAZENAR ULTIMA ENTRADA
    INSERT INTO TMPGERAL(INTEIRO_01, INTEIRO_02, INTEIRO_03, INTEIRO_04, INTEIRO_05, NUMERICO_01, DATA_01)
      SELECT PRODUTO_ID,
             GRUPO_PRODUTO_ID,
             TAMANHO,
             2 AS TIPO,
             :MODELO_ID,
             CAST(FN_ARRAY(VALOR_CUSTO,1,'|') AS DOUBLE PRECISION) AS VALOR_CUSTO,
            -- (SELECT CAST(VALOR_CUSTO AS DOUBLE PRECISION) FROM SPC_ITEM_CUSTO(X.NFE_ITEM_ID)) AS CUSTO_MEDIO         
            -- CAST(FN_ARRAY(VALOR_CUSTO,2,'|') AS INTEGER) AS NFE_ITEM_ID,
            DATA_ENTRADA
    
        FROM (
          SELECT GRUPO_PRODUTO_ID, PRODUTO_ID, TAMANHO, DATA_ENTRADA,
                (SELECT FIRST 1 (NI.VALOR_CUSTO + COALESCE(NI.CUSTO_FRETE_RATEADO,0))||'|'||NI.CONTROLE
                   FROM TBNFE_ITEM NI
                  WHERE NI.PRODUTO_CODIGO = X.PRODUTO_ID
                    AND NI.DATA_ENTRADA = X.DATA_ENTRADA
                    AND (
                         (X.TAMANHO = 0) OR
                         (X.TAMANHO= 1 AND NI.T01 > 0) OR
                         (X.TAMANHO= 2 AND NI.T02 > 0) OR
                         (X.TAMANHO= 3 AND NI.T03 > 0) OR
                         (X.TAMANHO= 4 AND NI.T04 > 0) OR
                         (X.TAMANHO= 5 AND NI.T05 > 0) OR
                         (X.TAMANHO= 6 AND NI.T06 > 0) OR
                         (X.TAMANHO= 7 AND NI.T07 > 0) OR
                         (X.TAMANHO= 8 AND NI.T08 > 0) OR
                         (X.TAMANHO= 9 AND NI.T09 > 0) OR
                         (X.TAMANHO=10 AND NI.T10 > 0) OR
                         (X.TAMANHO=11 AND NI.T11 > 0) OR
                         (X.TAMANHO=12 AND NI.T12 > 0) OR
                         (X.TAMANHO=13 AND NI.T13 > 0) OR
                         (X.TAMANHO=14 AND NI.T14 > 0) OR
                         (X.TAMANHO=15 AND NI.T15 > 0) OR
                         (X.TAMANHO=16 AND NI.T16 > 0) OR
                         (X.TAMANHO=17 AND NI.T17 > 0) OR
                         (X.TAMANHO=18 AND NI.T18 > 0) OR
                         (X.TAMANHO=19 AND NI.T19 > 0) OR
                         (X.TAMANHO=20 AND NI.T20 > 0)
                         )
                       ORDER BY NI.NFE_CONTROLE DESC, NI.CONTROLE DESC
                    ) AS VALOR_CUSTO
            FROM (
              
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 00 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO = 0
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
             AND T6.INTEIRO_02 = :MODELO_ID
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 01 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0 
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
            AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T01 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 02 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0 
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T02 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 03 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T03 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 04 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0 
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T04 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 05 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T05 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 06 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD , TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T06 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 07 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD , TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0 
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T07 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 08 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T08 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 09 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T09 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 10 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0   
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T10 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 11 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0   
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T11 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 12 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T12 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 13 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0 
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T13 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 14 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0 
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T14 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 15 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T15 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 16 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T16 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 17 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T17 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 18 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T18 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 19 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T19 > 0
            GROUP BY 1,2,3
        
            UNION ALL
        
          SELECT COALESCE(PD.GRUPO_PRODUTO_ID,0) AS GRUPO_PRODUTO_ID,
                 PD.CODIGO AS PRODUTO_ID, 20 AS TAMANHO,
                 MAX(N.DATA_ENTRADA) AS DATA_ENTRADA
            FROM TBNFE N, TBNFE_ITEM NI, TBOPERACAO OPE, TBPRODUTO PD, TMPGERAL6 T6
           WHERE T6.INTEIRO_01 = PD.CODIGO
             AND NI.PRODUTO_CODIGO = PD.CODIGO
             AND NI.NFE_CONTROLE = N.CONTROLE
             AND NI.OPERACAO_CODIGO = OPE.CODIGO 
             AND (OPE.EXIGE_DUPLICATA = '1' OR 
                  OPE.GERA_DUPLICATA = '1' OR 
                  OPE.TRANSFERENCIA = '1') 
             AND (OPE.EXIGE_NF_REFERENCIA = '0') 
             AND (OPE.CONTROLE_DEVOLUCAO  = '0') 
             AND N.NATUREZA = 2 
             AND N.DATA_ENTRADA >= CURRENT_DATE - CAST( /* :DIAS */ 180  AS INTEGER )
             AND PD.GRADE_CODIGO > 0  
             AND N.SITUACAO_NF = 2
             AND NI.VALOR_CUSTO > 0
                         AND T6.INTEIRO_02 = :MODELO_ID
             AND NI.T20 > 0
            GROUP BY 1,2,3
        
                ) X
            ) X;

    --ARMAZENAR MEDIA PONDERADA
    INSERT INTO TMPGERAL(INTEIRO_01, INTEIRO_02, INTEIRO_03, INTEIRO_04, INTEIRO_05, NUMERICO_01, DATA_01)
        SELECT
              X.PRODUTO_ID,
              P.GRUPO_PRODUTO_ID,
              0 TAMANHO, -- X.ESTABELECIMENTO_ID, X.LOCALIZACAO_ID,
              3 AS TIPO,
              :MODELO_ID,
              (SELECT FIRST 1 S.CUSTO_MEDIO FROM TBESTOQUE_SALDO_DIARIO S
                WHERE S.ESTABELECIMENTO_CODIGO = X.ESTABELECIMENTO_id
                  AND S.LOCALIZACAO_CODIGO = X.LOCALIZACAO_ID
                  AND S.PRODUTO_CODIGO = X.PRODUTO_ID
                  AND S.DATA = X.DATA) AS CUSTO_MEDIO,
                X.DATA
          FROM (
                SELECT S.ESTABELECIMENTO_CODIGO AS ESTABELECIMENTO_ID,
                       S.LOCALIZACAO_CODIGO AS LOCALIZACAO_ID,
                       S.PRODUTO_CODIGO AS PRODUTO_ID,
                       MAX(S.DATA) DATA
                  FROM TBESTOQUE_SALDO_DIARIO S, TMPGERAL6 T6
                 WHERE T6.INTEIRO_01 = S.PRODUTO_CODIGO
                   AND S.CUSTO_MEDIO > 0
                   AND T6.INTEIRO_02 = :MODELO_ID
                   AND S.DATA       <= CURRENT_DATE
                 GROUP BY S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, S.PRODUTO_CODIGO
               ) X, TBPRODUTO P WHERE P.CODIGO = X.PRODUTO_ID;

END
^

SET TERM ; ^

