        SELECT SUM(I.QUANTIDADE)
          FROM TBDEFEITO_TRANSACAO_ITEM I
         WHERE I.ESTEIRA_ID = :GP_ID
           AND I.REMESSA    = :REMESSA_ID
           AND I.PRODUTO_ID = :PRODUTO_ID
           AND I.TAMANHO    = :TAMANHO
    ),0);

    QUANTIDADE_SOBRA_APROVEITADA = COALESCE((
        SELECT SUM(S.QUANTIDADE)
          FROM TBREQUISICAO R,
               TBREQUISICAO_SOBRA S
         WHERE R.REMESSA       = :REMESSA_ID
           AND R.PRODUTO_ID    = :PRODUTO_ID
           AND R.TAMANHO       = :TAMANHO
           AND R.GP_ID         = :GP_ID
           AND S.REQUISICAO_ID = R.ID
    ),0);


    SELECT SUM(S.QUANTIDADE), SUM(S.PARES)
      FROM TBREQUISICAO R,
           TBREQUISICAO_PLACA S
     WHERE R.REMESSA       = :REMESSA_ID
       AND R.PRODUTO_ID    = :PRODUTO_ID
       AND R.TAMANHO       = :TAMANHO
       AND R.GP_ID         = :GP_ID
       AND S.REQUISICAO_ID = R.ID
       and s.status < 3
    into QUANTIDADE_PLACA_APROVEITADA, QUANTIDADE_PARES_APROVEITADA;

    QUANTIDADE_PLACA_APROVEITADA = COALESCE(QUANTIDADE_PLACA_APROVEITADA, 0);
    QUANTIDADE_PARES_APROVEITADA = COALESCE(QUANTIDADE_PARES_APROVEITADA, 0);

    QUANTIDADE_SOBRA = COALESCE((
        SELECT SUM(S.SALDO - COALESCE((SELECT SUM(R.SALDO) FROM TBREQUISICAO_SOBRA R WHERE R.SOBRA_ID = S.ID AND R.STATUS = '0'),0.0000))
        FROM
            TBSOBRA S
        WHERE
            S.STATUS             = '1'
        AND S.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
        AND S.TAMANHO            = :TAMANHO
        AND S.PRODUTO_ID IN (
            SELECT P.CODIGO
              FROM TBMODELO M,
                   TBPRODUTO P,
                  (SELECT P.MODELO_CODIGO MODELO_ID,
                          P.COR_CODIGO COR_ID,
                         (SELECT MODELO_PAI
                            FROM TBMODELO
                           WHERE CODIGO     = P.MODELO_CODIGO
                             AND MODELO_PAI > 0) MODELO_PAI
                     FROM TBPRODUTO P
                    WHERE P.CODIGO = :PRODUTO_ID) A
             WHERE A.COR_ID      = P.COR_CODIGO
               AND M.CODIGO      = P.MODELO_CODIGO
               AND (A.MODELO_ID  = M.CODIGO
                OR A.MODELO_ID  = M.MODELO_PAI
                OR A.MODELO_PAI = M.CODIGO
                OR A.MODELO_PAI = M.MODELO_PAI))
    ),0);

    QUANTIDADE_REQUISITADA = COALESCE((
        SELECT SUM(R.QUANTIDADE)
          FROM TBREQUISICAO R
         WHERE R.GP_ID      = :GP_ID
           AND R.REMESSA    = :REMESSA_ID
           AND R.PRODUTO_ID = :PRODUTO_ID
           AND R.TAMANHO    = :TAMANHO
    ),0);

    QUANTIDADE_REQUISITADA_PENDENTE = COALESCE((
        SELECT SUM(R.QUANTIDADE)
          FROM TBREQUISICAO R
         WHERE R.GP_ID      = :GP_ID
           AND R.REMESSA    = :REMESSA_ID
           AND R.PRODUTO_ID = :PRODUTO_ID
           AND R.TAMANHO    = :TAMANHO
           AND COALESCE(R.REMESSA_GERADA,0) = 0
    ),0);

    PERCENTUAL_TOLERANCIA = COALESCE(NULLIF(FN_PARAMETRO('SISTEMA.PERC_DEF_REQ'),''),0);

    QUANTIDADE_TOLERANCIA = FN_ARRENDONDAR((PERCENTUAL_TOLERANCIA/100) * QUANTIDADE_DEFEITO,0,2);

    QUANTIDADE_SALDO = (QUANTIDADE_DEFEITO + QUANTIDADE_TOLERANCIA + QUANTIDADE_APROV) - QUANTIDADE_EXTRA - QUANTIDADE_REQUISITADA - QUANTIDADE_SOBRA_APROVEITADA - QUANTIDADE_PARES_APROVEITADA;
    QUANTIDADE_SALDO = IIF(QUANTIDADE_SALDO < 0,0,QUANTIDADE_SALDO);
    SALDO_PARES      = QUANTIDADE_SALDO;

    QUANTIDADE_SOBRA = iif(QUANTIDADE_SALDO > QUANTIDADE_SOBRA, QUANTIDADE_SOBRA , QUANTIDADE_SALDO   );
    QUANTIDADE_SALDO = iif(QUANTIDADE_SALDO > QUANTIDADE_SOBRA, QUANTIDADE_SALDO - QUANTIDADE_SOBRA, 0);

    QTD_SALDO_BOJO = QUANTIDADE_SALDO;

    QTD_SALDO_BOJO_PARES = QUANTIDADE_SALDO;
    REQUISITAR_PLACAS    = 0;
    QUANTIDADE_PLACAS    = 0;
    PECA_QTD_PARES       = 0;
    PLACAS               = null;
    QUANTIDADE_PLACA_ESTOQUE = 0;

    for
        select
            DENSIDADE,
            ESPESSURA,
            LARGURA,
            COMPRIMENTO,
            COR_ID,
            COR_DESCRICAO,
            SALDO,
            PACA_QTD_PARES

        from SPC_REQUISICAO_PLACA(:REMESSA_ID, :REMESSA_TALAO_ID)
        where saldo > 0
    into
        PECA_DENSIDADE,
        PECA_ESPESSURA,
        PECA_LARGURA,
        PECA_COMPRIMENTO,
        PECA_COR_ID,
        PECA_COR_DESCRICAO,
        PECA_SALDO,
        PECA_QTD_PARES
    do begin

        QUANTIDADE_PLACA_ESTOQUE = QUANTIDADE_PLACA_ESTOQUE + PECA_SALDO;

        if(REQUISITAR_PLACAS = 0)then
        begin
           QTD_SALDO_BOJO = fn_arrendondar_para_cima(QTD_SALDO_BOJO / PECA_QTD_PARES);
        end

       REQUISITAR_PLACAS = 1;

       if( QTD_SALDO_BOJO > 0 )then
       begin

            if(QTD_SALDO_BOJO <= PECA_SALDO)then
            begin

                PLACAS = coalesce(PLACAS||',','[')||fn_to_json_v2(
                    fn_to_par_json('PECA_DENSIDADE'     ,coalesce(PECA_DENSIDADE,0)),
                    fn_to_par_json('PECA_ESPESSURA'     ,coalesce(PECA_ESPESSURA,0)),
                    fn_to_par_json('PECA_LARGURA'       ,coalesce(PECA_LARGURA,0)),
                    fn_to_par_json('PECA_COMPRIMENTO'   ,coalesce(PECA_COMPRIMENTO,0)),
                    fn_to_par_json('PECA_COR_ID'        ,coalesce(PECA_COR_ID,0)),
                    fn_to_par_json('PECA_COR_DESCRICAO' ,coalesce(PECA_COR_DESCRICAO,'')),
                    fn_to_par_json('PECA_SALDO'         ,coalesce(PECA_SALDO,0)),
                    fn_to_par_json('PECA_QTD_PARES'     ,coalesce(PECA_QTD_PARES,0)),
                    fn_to_par_json('QTD'                ,coalesce(QTD_SALDO_BOJO,0))
                );

                QUANTIDADE_PLACAS    = QUANTIDADE_PLACAS + QTD_SALDO_BOJO;
                QTD_SALDO_BOJO       = 0;
                QTD_SALDO_BOJO_PARES = 0;

            end else
            begin

                QTD_SALDO_BOJO = QTD_SALDO_BOJO - PECA_SALDO;
                QUANTIDADE_PLACAS = QUANTIDADE_PLACAS + PECA_SALDO;

                QTD_SALDO_BOJO_PARES = QTD_SALDO_BOJO_PARES - (PECA_SALDO * PECA_QTD_PARES);

                PLACAS = coalesce(PLACAS||',','[')||fn_to_json_v2(
                    fn_to_par_json('PECA_DENSIDADE'     ,coalesce(PECA_DENSIDADE,0)),
                    fn_to_par_json('PECA_ESPESSURA'     ,coalesce(PECA_ESPESSURA,0)),
                    fn_to_par_json('PECA_LARGURA'       ,coalesce(PECA_LARGURA,0)),
                    fn_to_par_json('PECA_COMPRIMENTO'   ,coalesce(PECA_COMPRIMENTO,0)),
                    fn_to_par_json('PECA_COR_ID'        ,coalesce(PECA_COR_ID,0)),
                    fn_to_par_json('PECA_COR_DESCRICAO' ,coalesce(PECA_COR_DESCRICAO,'')),
                    fn_to_par_json('PECA_SALDO'         ,coalesce(PECA_SALDO,0)),
                    fn_to_par_json('PECA_QTD_PARES'     ,coalesce(PECA_QTD_PARES,0)),
                    fn_to_par_json('QTD'                ,coalesce(PECA_SALDO,0))
                );

                /*
                PLACAS = coalesce(PLACAS||',','[')||fn_to_json(
                    fn_to_par_json('PECA_DENSIDADE'     ,PECA_DENSIDADE),
                    fn_to_par_json('PECA_ESPESSURA'     ,PECA_ESPESSURA),
                    fn_to_par_json('PECA_LARGURA'       ,PECA_LARGURA),
                    fn_to_par_json('PECA_COMPRIMENTO'   ,PECA_COMPRIMENTO),
                    fn_to_par_json('PECA_COR_ID'        ,PECA_COR_ID),
                    fn_to_par_json('PECA_COR_DESCRICAO' ,PECA_COR_DESCRICAO),
                    fn_to_par_json('PECA_SALDO'         ,PECA_SALDO),
                    fn_to_par_json('PECA_QTD_PARES'     ,PECA_QTD_PARES),
                    fn_to_par_json('QTD'                ,PECA_SALDO)
                );
                */

            end

       end
    end

    PLACAS = coalesce(PLACAS,'[')||']';

    if(PLACAS = '[]')then
    begin
        REQUISITAR_PLACAS = 0;
        QUANTIDADE_PLACAS = 0;
    end

    if(REQUISITAR_PLACAS = 1 and PECA_QTD_PARES > 0)then
    begin
        QUANTIDADE_SALDO = QTD_SALDO_BOJO_PARES;
    end

    QUANTIDADE_BOJO_PLACA = PECA_QTD_PARES;

    suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_REQUISICAO_BOJO_V3 (
    I_REMESSA_ID integer = 44154,
    REMESSA_TALAO_ID integer = 107,
    NAO_PREENCHER integer = null)
returns (
    ESTABELECIMENTO_ID integer,
    REMESSA_ID integer,
    GP_ID integer,
    GP_DESCRICAO varchar(255),
    GP_REQUISITA_SOBRA integer,
    PRODUTO_ID integer,
    PRODUTO_DESCRICAO varchar(255),
    MODELO_ID integer,
    COR_ID integer,
    GRADE_ID integer,
    TAMANHO integer,
    TAMANHO_DESCRICAO varchar(10),
    UM varchar(10),
    HABILITA_REQ_SKU_FECHADO integer,
    HABILITA_REQ_SEM_LIMITE integer,
    QUANTIDADE_TOTAL numeric(15,4),
    QUANTIDADE_PRODUZIDA numeric(15,4),
    QUANTIDADE_ABERTO numeric(15,4),
    REMESSA_ID_APROV varchar(200),
    REMESSA_TALAO_ID_APROV integer,
    QUANTIDADE_APROV numeric(15,4),
    QUANTIDADE_EXTRA numeric(15,4),
    QUANTIDADE_DEFEITO numeric(15,4),
    QUANTIDADE_SOBRA_APROVEITADA numeric(15,4),
    QUANTIDADE_SOBRA numeric(15,4),
    QUANTIDADE_REQUISITADA numeric(15,4),
    QUANTIDADE_REQUISITADA_PENDENTE numeric(15,4),
    PERCENTUAL_TOLERANCIA numeric(15,4),
    QUANTIDADE_TOLERANCIA numeric(15,4),
    QUANTIDADE_SALDO numeric(15,4),
    QUANTIDADE_PLACAS integer,
    REQUISITAR_PLACAS integer,
    PLACAS blob sub_type 1 segment size 80,
    QUANTIDADE_BOJO_PLACA integer,
    QUANTIDADE_PLACA_APROVEITADA integer,
    QUANTIDADE_PARES_APROVEITADA integer,
    SALDO_PARES integer,
    QUANTIDADE_PLACA_ESTOQUE integer)
as
declare variable QTD_SALDO_BOJO numeric(15,4);
declare variable QTD_SALDO_BOJO_PARES integer;
declare variable PECA_DENSIDADE numeric(18,4);
declare variable PECA_ESPESSURA numeric(18,4);
declare variable PECA_LARGURA numeric(18,4);
declare variable PECA_COMPRIMENTO numeric(18,4);
declare variable PECA_COR_ID integer;
declare variable PECA_COR_DESCRICAO varchar(50);
declare variable PECA_SALDO numeric(18,4);
declare variable PECA_QTD_PARES numeric(18,4);
declare variable CONT integer;
begin

    SELECT FIRST 1
           T.ESTABELECIMENTO_ID,
           T.REMESSA_ID, 
           T.PRODUTO_ID,
           T.TAMANHO,
           T.GP_ID
      FROM VWREMESSA_TALAO_DETALHE T
     WHERE T.REMESSA_ID       = :I_REMESSA_ID
       AND T.REMESSA_TALAO_ID = :REMESSA_TALAO_ID
      INTO :ESTABELECIMENTO_ID,
           :REMESSA_ID,
           :PRODUTO_ID,
           :TAMANHO,
           :GP_ID;

    IF ( PRODUTO_ID IS NULL ) THEN
    BEGIN
        EXCEPTION "..." 'TALAO INVALIDO. VERIFIQUE OS DADOS INFORMADOS: REMESSA ' || COALESCE(I_REMESSA_ID,'') || ' TALAO ' || COALESCE(FN_LPAD(REMESSA_TALAO_ID,4,0),'');
    END

    HABILITA_REQ_SKU_FECHADO = COALESCE(FN_PARAMETRO('TBUSUARIO.REQ_SKU_FECHADO',FN_CURRENT_USER_ID()),0);
    HABILITA_REQ_SEM_LIMITE  = COALESCE(FN_PARAMETRO('TBUSUARIO.REQ_SKU_SEM_LIMITE',FN_CURRENT_USER_ID()),0);

    SELECT FIRST 1
           P.DESCRICAO,
           P.MODELO_CODIGO,
           P.COR_CODIGO,
           P.GRADE_CODIGO,
           P.UNIDADEMEDIDA_SIGLA2
      FROM TBPRODUTO P
     WHERE P.CODIGO = :PRODUTO_ID
      INTO :PRODUTO_DESCRICAO,
           :MODELO_ID,
           :COR_ID,
           :GRADE_ID,
           :UM;

    SELECT FIRST 1
           G.DESCRICAO,
           G.REQUISITA_SOBRA
      FROM TBGP G
     WHERE G.ID = :GP_ID
      INTO GP_DESCRICAO,
           GP_REQUISITA_SOBRA;


    TAMANHO_DESCRICAO = FN_TAMANHO_GRADE(GRADE_ID,TAMANHO);


    QUANTIDADE_TOTAL = COALESCE((
        SELECT SUM(D.QUANTIDADE) QUANTIDADE
          FROM VWREMESSA_TALAO_DETALHE D
         WHERE D.REMESSA_ID        = :REMESSA_ID
           AND D.PRODUTO_ID        = :PRODUTO_ID
           AND D.TAMANHO           = :TAMANHO
           AND D.GP_ID             = :GP_ID
           AND D.REMESSA_TALAO_ID  < 8000
    ),0);

    QUANTIDADE_PRODUZIDA = COALESCE((
        SELECT SUM(D.QUANTIDADE)
          FROM VWREMESSA_TALAO_DETALHE D
         WHERE D.GP_ID            = :GP_ID
           AND D.REMESSA_ID       = :REMESSA_ID
           AND D.PRODUTO_ID       = :PRODUTO_ID
           AND D.TAMANHO          = :TAMANHO
           AND D.REMESSA_TALAO_ID < 8000
           AND D.DATA_PRODUCAO IS NOT NULL
    ),0);

    QUANTIDADE_ABERTO = QUANTIDADE_TOTAL - QUANTIDADE_PRODUZIDA;
        
    if ( COALESCE(NAO_PREENCHER,0) = 0 ) then
    BEGIN
        SELECT
            list(distinct REMESSA_ID,', ') as REMESSA_ID,
            0,
            sum(SALDO_ANTERIOR) as SALDO_ANTERIOR
        from(
        SELECT
            X.REMESSA_ID,
            X.REMESSA_TALAO_ID,
            (SELECT FIRST 1 SALDO_PARES FROM SPC_REQUISICAO_BOJO_V3(REMESSA_ID,REMESSA_TALAO_ID,1)) SALDO_ANTERIOR
        FROM (
            SELECT
                P.GP_ID,
                P.PRODUTO_ID,
                P.TAMANHO,
                P.REMESSA_ID,
                (SELECT FIRST 1 D.ID
                  FROM VWREMESSA_TALAO_DETALHE D
                 WHERE D.REMESSA_ID = P.REMESSA_ID
                   AND D.GP_ID = P.GP_ID
                   AND D.PRODUTO_ID = P.PRODUTO_ID
                   AND D.TAMANHO = P.TAMANHO
                   AND D.DATA_PRODUCAO IS NULL) PRODUZIDO,
                MIN(P.REMESSA_TALAO_ID) REMESSA_TALAO_ID,
                MIN(R.DATA) DATA
            FROM
                VWREMESSA_TALAO P,
                VWREMESSA R,
                VWREMESSA R2,
                TBPRODUTO G1,
                TBPRODUTO G2,
                TBMODELO  F1,
                TBMODELO  F2
            WHERE G1.CODIGO      = :PRODUTO_ID
            AND F1.CODIGO        = G1.MODELO_CODIGO
            AND F1.MODELO_PAI    = F2.MODELO_PAI
            AND G2.MODELO_CODIGO = F2.CODIGO
            AND G2.CODIGO        = P.PRODUTO_ID
            AND G1.COR_CODIGO    = G2.COR_CODIGO
            AND P.TAMANHO        = :TAMANHO
            AND P.GP_ID          = :GP_ID
            AND R2.REMESSA_ID    = :REMESSA_ID
            AND R.REMESSA_ID     = P.REMESSA_ID
            --AND R.REMESSA_ID        <> R2.REMESSA_ID
            AND IIF(P.remessa_id = R2.remessa_id, P.remessa_talao_id <> :REMESSA_TALAO_ID, P.remessa_id <> R2.remessa_id)
            AND R.DATA              <= R2.DATA
            AND P.REMESSA_TALAO_ID  < 8000
            AND DATEDIFF(DAY, R.DATA, CURRENT_DATE) <= 15 /* 15 DIAS DE DIFERENCA A PARTIR DA DATA DA REMESSA BASE */
            GROUP BY 1,2,3,4
            ORDER BY DATA DESC
        ) X
        WHERE
            X.PRODUZIDO IS NULL)
    INTO
        REMESSA_ID_APROV,
        REMESSA_TALAO_ID_APROV,
        QUANTIDADE_APROV;    
    END

    QUANTIDADE_APROV = COALESCE(QUANTIDADE_APROV,0);

    QUANTIDADE_EXTRA = COALESCE((
        SELECT SUM(T.QUANTIDADE) QUANTIDADE
          FROM VWREMESSA_TALAO T
         WHERE T.REMESSA_TALAO_ID BETWEEN 8000 AND 8999
           AND T.GP_ID            = :GP_ID
           AND T.REMESSA_ID       = :REMESSA_ID
           AND T.PRODUTO_ID       = :PRODUTO_ID
           AND T.TAMANHO          = :TAMANHO
    ),0);

    /*
    ID = COALESCE((
        SELECT first 1 r.id
          FROM TBREQUISICAO R
         WHERE R.REMESSA       = :REMESSA_ID
           AND R.PRODUTO_ID    = :PRODUTO_ID
           AND R.TAMANHO       = :TAMANHO
           AND R.GP_ID         = :GP_ID
    ),0);
    */

    QUANTIDADE_DEFEITO = COALESCE((
        SELECT SUM(I.QUANTIDADE)
          FROM TBDEFEITO_TRANSACAO_ITEM I
         WHERE I.ESTEIRA_ID = :GP_ID
           AND I.REMESSA    = :REMESSA_ID
           AND I.PRODUTO_ID = :PRODUTO_ID
           AND I.TAMANHO    = :TAMANHO
    ),0);

    QUANTIDADE_SOBRA_APROVEITADA = COALESCE((
        SELECT SUM(S.QUANTIDADE)
          FROM TBREQUISICAO R,
               TBREQUISICAO_SOBRA S
         WHERE R.REMESSA       = :REMESSA_ID
           AND R.PRODUTO_ID    = :PRODUTO_ID
           AND R.TAMANHO       = :TAMANHO
           AND R.GP_ID         = :GP_ID
           AND S.REQUISICAO_ID = R.ID
    ),0);


    SELECT SUM(S.QUANTIDADE), SUM(S.PARES)
      FROM TBREQUISICAO R,
           TBREQUISICAO_PLACA S
     WHERE R.REMESSA       = :REMESSA_ID
       AND R.PRODUTO_ID    = :PRODUTO_ID
       AND R.TAMANHO       = :TAMANHO
       AND R.GP_ID         = :GP_ID
       AND S.REQUISICAO_ID = R.ID
       and s.status < 3
    into QUANTIDADE_PLACA_APROVEITADA, QUANTIDADE_PARES_APROVEITADA;

    QUANTIDADE_PLACA_APROVEITADA = COALESCE(QUANTIDADE_PLACA_APROVEITADA, 0);
    QUANTIDADE_PARES_APROVEITADA = COALESCE(QUANTIDADE_PARES_APROVEITADA, 0);

    QUANTIDADE_SOBRA = COALESCE((
        SELECT SUM(S.SALDO - COALESCE((SELECT SUM(R.SALDO) FROM TBREQUISICAO_SOBRA R WHERE R.SOBRA_ID = S.ID AND R.STATUS = '0'),0.0000))
        FROM
            TBSOBRA S
        WHERE
            S.STATUS             = '1'
        AND S.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
        AND S.TAMANHO            = :TAMANHO
        AND S.PRODUTO_ID IN (
            SELECT P.CODIGO
              FROM TBMODELO M,
                   TBPRODUTO P,
                  (SELECT P.MODELO_CODIGO MODELO_ID,
                          P.COR_CODIGO COR_ID,
                         (SELECT MODELO_PAI
                            FROM TBMODELO
                           WHERE CODIGO     = P.MODELO_CODIGO
                             AND MODELO_PAI > 0) MODELO_PAI
                     FROM TBPRODUTO P
                    WHERE P.CODIGO = :PRODUTO_ID) A
             WHERE A.COR_ID      = P.COR_CODIGO
               AND M.CODIGO      = P.MODELO_CODIGO
               AND (A.MODELO_ID  = M.CODIGO
                OR A.MODELO_ID  = M.MODELO_PAI
                OR A.MODELO_PAI = M.CODIGO
                OR A.MODELO_PAI = M.MODELO_PAI))
    ),0);

    QUANTIDADE_REQUISITADA = COALESCE((
        SELECT SUM(R.QUANTIDADE)
          FROM TBREQUISICAO R
         WHERE R.GP_ID      = :GP_ID
           AND R.REMESSA    = :REMESSA_ID
           AND R.PRODUTO_ID = :PRODUTO_ID
           AND R.TAMANHO    = :TAMANHO
           AND R.STATUS <> '6'
    ),0);

    QUANTIDADE_REQUISITADA_PENDENTE = COALESCE((
        SELECT SUM(R.QUANTIDADE)
          FROM TBREQUISICAO R
         WHERE R.GP_ID      = :GP_ID
           AND R.REMESSA    = :REMESSA_ID
           AND R.PRODUTO_ID = :PRODUTO_ID
           AND R.TAMANHO    = :TAMANHO
           AND R.STATUS <> '6'
           AND COALESCE(R.REMESSA_GERADA,0) = 0

    ),0);

    PERCENTUAL_TOLERANCIA = COALESCE(NULLIF(FN_PARAMETRO('SISTEMA.PERC_DEF_REQ'),''),0);

    QUANTIDADE_TOLERANCIA = FN_ARRENDONDAR((PERCENTUAL_TOLERANCIA/100) * QUANTIDADE_DEFEITO,0,2);

    QUANTIDADE_SALDO = (QUANTIDADE_DEFEITO + QUANTIDADE_TOLERANCIA + QUANTIDADE_APROV) - QUANTIDADE_EXTRA - QUANTIDADE_REQUISITADA - QUANTIDADE_SOBRA_APROVEITADA - QUANTIDADE_PARES_APROVEITADA;
    QUANTIDADE_SALDO = IIF(QUANTIDADE_SALDO < 0,0,QUANTIDADE_SALDO);
    SALDO_PARES      = QUANTIDADE_SALDO;

    QUANTIDADE_SOBRA = iif(QUANTIDADE_SALDO > QUANTIDADE_SOBRA, QUANTIDADE_SOBRA , QUANTIDADE_SALDO   );
    QUANTIDADE_SALDO = iif(QUANTIDADE_SALDO > QUANTIDADE_SOBRA, QUANTIDADE_SALDO - QUANTIDADE_SOBRA, 0);

    if(QUANTIDADE_SOBRA < 0)then
    begin
        QUANTIDADE_SOBRA = 0;
    end

    QTD_SALDO_BOJO = QUANTIDADE_SALDO;

    QTD_SALDO_BOJO_PARES = QUANTIDADE_SALDO;
    REQUISITAR_PLACAS    = 0;
    QUANTIDADE_PLACAS    = 0;
    PECA_QTD_PARES       = 0;
    PLACAS               = null;
    QUANTIDADE_PLACA_ESTOQUE = 0;

    for
        select
            DENSIDADE,
            ESPESSURA,
            LARGURA,
            COMPRIMENTO,
            COR_ID,
            COR_DESCRICAO,
            SALDO,
            PACA_QTD_PARES

        from SPC_REQUISICAO_PLACA(:REMESSA_ID, :REMESSA_TALAO_ID)
        where saldo > 0
    into
        PECA_DENSIDADE,
        PECA_ESPESSURA,
        PECA_LARGURA,
        PECA_COMPRIMENTO,
        PECA_COR_ID,
        PECA_COR_DESCRICAO,
        PECA_SALDO,
        PECA_QTD_PARES
    do begin

        QUANTIDADE_PLACA_ESTOQUE = QUANTIDADE_PLACA_ESTOQUE + PECA_SALDO;

        if(REQUISITAR_PLACAS = 0)then
        begin
           QTD_SALDO_BOJO = fn_arrendondar_para_cima(QTD_SALDO_BOJO / PECA_QTD_PARES);
        end

       REQUISITAR_PLACAS = 1;

       if( QTD_SALDO_BOJO > 0 )then
       begin

            if(QTD_SALDO_BOJO <= PECA_SALDO)then
            begin
                /*
                PLACAS = coalesce(PLACAS||',','[')||fn_to_json_v2(
                    fn_to_par_json('PECA_DENSIDADE'     ,coalesce(PECA_DENSIDADE,0)),
                    fn_to_par_json('PECA_ESPESSURA'     ,coalesce(PECA_ESPESSURA,0)),
                    fn_to_par_json('PECA_LARGURA'       ,coalesce(PECA_LARGURA,0)),
                    fn_to_par_json('PECA_COMPRIMENTO'   ,coalesce(PECA_COMPRIMENTO,0)),
                    fn_to_par_json('PECA_COR_ID'        ,coalesce(PECA_COR_ID,0)),
                    fn_to_par_json('PECA_COR_DESCRICAO' ,coalesce(PECA_COR_DESCRICAO,'')),
                    fn_to_par_json('PECA_SALDO'         ,coalesce(PECA_SALDO,0)),
                    fn_to_par_json('PECA_QTD_PARES'     ,coalesce(PECA_QTD_PARES,0)),
                    fn_to_par_json('QTD'                ,coalesce(QTD_SALDO_BOJO,0))
                );
                */

                QUANTIDADE_PLACAS    = QUANTIDADE_PLACAS + QTD_SALDO_BOJO;
                QTD_SALDO_BOJO       = 0;
                QTD_SALDO_BOJO_PARES = 0;

            end else
            begin

                QTD_SALDO_BOJO = QTD_SALDO_BOJO - PECA_SALDO;
                QUANTIDADE_PLACAS = QUANTIDADE_PLACAS + PECA_SALDO;

                QTD_SALDO_BOJO_PARES = QTD_SALDO_BOJO_PARES - (PECA_SALDO * PECA_QTD_PARES);

                /*
                PLACAS = coalesce(PLACAS||',','[')||fn_to_json_v2(
                    fn_to_par_json('PECA_DENSIDADE'     ,coalesce(PECA_DENSIDADE,0)),
                    fn_to_par_json('PECA_ESPESSURA'     ,coalesce(PECA_ESPESSURA,0)),
                    fn_to_par_json('PECA_LARGURA'       ,coalesce(PECA_LARGURA,0)),
                    fn_to_par_json('PECA_COMPRIMENTO'   ,coalesce(PECA_COMPRIMENTO,0)),
                    fn_to_par_json('PECA_COR_ID'        ,coalesce(PECA_COR_ID,0)),
                    fn_to_par_json('PECA_COR_DESCRICAO' ,coalesce(PECA_COR_DESCRICAO,'')),
                    fn_to_par_json('PECA_SALDO'         ,coalesce(PECA_SALDO,0)),
                    fn_to_par_json('PECA_QTD_PARES'     ,coalesce(PECA_QTD_PARES,0)),
                    fn_to_par_json('QTD'                ,coalesce(PECA_SALDO,0))
                );
                */

            end

       end

       PLACAS = coalesce(PLACAS||',','[')||fn_to_json_v2(
            fn_to_par_json('PECA_DENSIDADE'     ,coalesce(PECA_DENSIDADE,0)),
            fn_to_par_json('PECA_ESPESSURA'     ,coalesce(PECA_ESPESSURA,0)),
            fn_to_par_json('PECA_LARGURA'       ,coalesce(PECA_LARGURA,0)),
            fn_to_par_json('PECA_COMPRIMENTO'   ,coalesce(PECA_COMPRIMENTO,0)),
            fn_to_par_json('PECA_COR_ID'        ,coalesce(PECA_COR_ID,0)),
            fn_to_par_json('PECA_COR_DESCRICAO' ,coalesce(PECA_COR_DESCRICAO,'')),
            fn_to_par_json('PECA_SALDO'         ,coalesce(PECA_SALDO,0)),
            fn_to_par_json('PECA_QTD_PARES'     ,coalesce(PECA_QTD_PARES,0)),
            fn_to_par_json('QTD'                ,coalesce(PECA_SALDO,0))
        );


    end

    PLACAS = coalesce(PLACAS,'[')||']';

    if(PLACAS = '[]')then
    begin
        REQUISITAR_PLACAS = 0;
        QUANTIDADE_PLACAS = 0;
    end

    if(REQUISITAR_PLACAS = 1 and PECA_QTD_PARES > 0)then
    begin
        QUANTIDADE_SALDO = QTD_SALDO_BOJO_PARES;
    end

    QUANTIDADE_BOJO_PLACA = PECA_QTD_PARES;

    suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_STATUS_PECA (
    ITIPO varchar(10),
    IPECA_ID integer)
returns (
    TIPO varchar(10),
    ID integer,
    PECA varchar(12),
    PRODUTO_ID integer,
    PRODUTO_DESCRICAO varchar(100),
    QUANTIDADE_SALDO numeric(18,5),
    UNIDADEMEDIDA_SIGLA varchar(3),
    LOCALIZACAO_ID integer,
    REMESSA varchar(10),
    TALAO_ID varchar(10),
    TAMANHO integer,
    ESTABELECIMENTO_ID integer)
as
begin

    IF(ITIPO = 'P')THEN
    BEGIN

        FOR
            select first 1
                'P' as TIPO,
                r.id,
                'P'||lpad(r.id,11,'0') as PECA,
                r.produto_id as produto_cod,
                p.descricao as produto_desc,
                r.saldo as QUANTIDADE,
                p.unidademedida_sigla2,
                r.localizacao_entrada,
                '' as remessa,
                '' as talao,
                r.tamanho,
                r.estabelecimento_id
            from tbrevisao r, tbproduto p
            where r.saldo > 0
            and r.produto_id = p.codigo
            AND r.id = :IPECA_ID
        INTO
            TIPO,
            ID,
            PECA,
            PRODUTO_ID,
            PRODUTO_DESCRICAO,
            QUANTIDADE_SALDO,
            UNIDADEMEDIDA_SIGLA,
            LOCALIZACAO_ID,
            REMESSA,
            TALAO_ID,
            TAMANHO,
            ESTABELECIMENTO_ID
        DO BEGIN
          suspend;
        END
                        
    END ELSE
    BEGIN
        IF(ITIPO = 'RD')THEN
        BEGIN

          FOR
             select first 1
                'RD' as TIPO,
                d.id,
                'RD'||lpad(d.id,10,'0') as PECA,
                d.produto_id,
                p.descricao as produto_descricao,
                d.quantidade_saldo,
                p.unidademedida_sigla2,
                d.localizacao_id as localizacao_id,
                v.remessa,
                fn_lpad(d.remessa_talao_id,3,'0') as talao_id,
                d.tamanho,
                v.estabelecimento_id
            from vwremessa_talao_detalhe d,
                vwremessa_talao t,
                vwremessa v,
                tbproduto p
            
            where p.codigo = d.produto_id
            and v.remessa_id = d.remessa_id
            and t.remessa_id = d.remessa_id
            and t.remessa_talao_id = d.remessa_talao_id
            AND D.ID = :IPECA_ID

          INTO
            TIPO,
            ID,
            PECA,
            PRODUTO_ID,
            PRODUTO_DESCRICAO,
            QUANTIDADE_SALDO,
            UNIDADEMEDIDA_SIGLA,
            LOCALIZACAO_ID,
            REMESSA,
            TALAO_ID,
            TAMANHO,
            ESTABELECIMENTO_ID
          DO BEGIN
            suspend;
          END

       END ELSE
       BEGIN
            exception "..." 'Tipo invalido, Permitidos: "P" - Revisão, "RD" - Talões.';
       END
    END

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_STATUS_PECA2 (
    ITIPO varchar(10),
    IPECA_ID integer)
returns (
    TIPO varchar(10),
    ID integer,
    PECA varchar(12),
    PRODUTO_ID integer,
    PRODUTO_DESCRICAO varchar(100),
    QUANTIDADE_SALDO numeric(18,5),
    UNIDADEMEDIDA_SIGLA varchar(3),
    LOCALIZACAO_ID integer,
    REMESSA varchar(10),
    TALAO_ID varchar(10),
    TAMANHO integer,
    ESTABELECIMENTO_ID integer)
as
begin

    IF(ITIPO = 'P')THEN
    BEGIN

        FOR
            select first 1
                'P' as TIPO,
                r.id,
                'P'||lpad(r.id,11,'0') as PECA,
                r.produto_id as produto_cod,
                p.descricao as produto_desc,
                r.saldo as QUANTIDADE,
                p.unidademedida_sigla2,
                r.localizacao_entrada,
                '' as remessa,
                '' as talao,
                r.tamanho,
                r.estabelecimento_id
            from tbrevisao r, tbproduto p
            WHERE r.produto_id = p.codigo
            AND r.id = :IPECA_ID
        INTO
            TIPO,
            ID,
            PECA,
            PRODUTO_ID,
            PRODUTO_DESCRICAO,
            QUANTIDADE_SALDO,
            UNIDADEMEDIDA_SIGLA,
            LOCALIZACAO_ID,
            REMESSA,
            TALAO_ID,
            TAMANHO,
            ESTABELECIMENTO_ID
        DO BEGIN
          suspend;
        END
                        
    END ELSE
    BEGIN
        IF(ITIPO = 'RD')THEN
        BEGIN

          FOR
             select first 1
                'RD' as TIPO,
                d.id,
                'RD'||lpad(d.id,10,'0') as PECA,
                d.produto_id,
                p.descricao as produto_descricao,
                d.quantidade_saldo,
                p.unidademedida_sigla2,
                d.localizacao_id as localizacao_id,
                v.remessa,
                fn_lpad(d.remessa_talao_id,3,'0') as talao_id,
                d.tamanho,
                v.estabelecimento_id
            from vwremessa_talao_detalhe d,
                vwremessa_talao t,
                vwremessa v,
                tbproduto p
            
            where p.codigo = d.produto_id
            and v.remessa_id = d.remessa_id
            and t.remessa_id = d.remessa_id
            and t.remessa_talao_id = d.remessa_talao_id
            AND D.ID = :IPECA_ID

          INTO
            TIPO,
            ID,
            PECA,
            PRODUTO_ID,
            PRODUTO_DESCRICAO,
            QUANTIDADE_SALDO,
            UNIDADEMEDIDA_SIGLA,
            LOCALIZACAO_ID,
            REMESSA,
            TALAO_ID,
            TAMANHO,
            ESTABELECIMENTO_ID
          DO BEGIN
            suspend;
          END

       END ELSE
       BEGIN
            exception "..." 'Tipo invalido, Permitidos: "P" - Revisão, "RD" - Talões.';
       END
    END

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_REMESSA_INTERMEDIARIA (
    DATAHORA_DISPONIBILIDADE timestamp = null)
returns (
    REMESSA_ID integer)
as
declare variable REMESSA_ID_ORIGEM integer;
declare variable REMESSA_ID_VINCULO integer;
declare variable REMESSA_TALAO_DETALHE_ID integer;
declare variable OBSERVACAO varchar(200);
declare variable GP_ID integer;
declare variable TALAO_ID integer;
declare variable TALAO_PRODUTO_DESCRICAO varchar(400);
declare variable TALAO_PERFIL_SKU varchar(10);
declare variable TALAO_PERFIL_SKU_DESCRICAO varchar(80);
declare variable TALAO_COR_CLASSE varchar(10);
declare variable TALAO_COR_SUBCLASSE integer;
declare variable TALAO_CONTROLE varchar(4000);
declare variable TALAO_MODELO_ID integer;
declare variable TALAO_MODELO_DESCRICAO varchar(200);
declare variable TALAO_TAMANHO integer;
declare variable TALAO_PRODUTO_ID integer;
declare variable TALAO_TAMANHO_DESCRICAO varchar(200);
declare variable TALAO_QUANTIDADE numeric(18,5);
declare variable PRODUTO_DESCRICAO varchar(400);
declare variable TAMANHO_DESCRICAO varchar(200);
declare variable UM varchar(12);
declare variable LARGURA numeric(18,5);
declare variable COMPRIMENTO numeric(18,5);
declare variable COR_CLASSE varchar(10);
declare variable COR_SUBCLASSE integer;
declare variable ID integer;
declare variable ESTABELECIMENTO_ID integer;
declare variable REMESSA_TALAO_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable PRODUTO_ID integer;
declare variable MODELO_ID integer;
declare variable COR_ID integer;
declare variable TAMANHO integer;
declare variable QUANTIDADE numeric(18,5);
declare variable QUANTIDADE_ALTERNATIVA numeric(18,4);
declare variable QUANTIDADE_SOBRA numeric(18,4);
declare variable DENSIDADE smallint;
declare variable ESPESSURA numeric(18,2);
declare variable STATUS integer;
declare variable DATA_PRODUCAO date;
declare variable DATA_LIBERACAO date;
declare variable HORA_PRODUCAO timestamp;
declare variable HORA_LIBERACAO timestamp;
declare variable VIA_ETIQUETA integer;
declare variable TURNO char(4);
declare variable TALAO_EXTRA integer;
declare variable PERCENTUAL_EXTRA numeric(18,4);
declare variable UP_ID integer;
declare variable ESTACAO integer;
declare variable DATA date;
declare variable CONSUMO_ID integer;
declare variable CONSUMO_QUANTIDADE numeric(15,5);
declare variable C_ID_OLD integer;
declare variable C_ID integer;
declare variable C_ESTABELECIMENTO_ID integer;
declare variable C_REMESSA_ID integer;
declare variable C_REMESSA_TALAO_ID integer;
declare variable C_REMESSA_TALAO_DETALHE_ID integer;
declare variable C_CONTROLE integer;
declare variable C_LOCALIZACAO_ID integer;
declare variable C_PRODUTO_ID integer;
declare variable C_TAMANHO integer;
declare variable C_DENSIDADE integer;
declare variable C_ESPESSURA numeric(18,2);
declare variable C_QUANTIDADE_ORIGINAL numeric(18,4);
declare variable C_QUANTIDADE_NECES numeric(18,4);
declare variable C_QUANTIDADE_NECES_ALTERN numeric(18,4);
declare variable C_FATOR_UNIDADE numeric(18,8);
declare variable C_FATOR_UNIDADE_ALTERN numeric(18,8);
declare variable C_QUANTIDADE numeric(18,4);
declare variable C_QUANTIDADE_CONSUMO numeric(18,4);
declare variable C_QUANTIDADE_SALDO numeric(18,4);
declare variable C_QUANTIDADE_ALTERNATIVA numeric(18,4);
declare variable C_QUANTIDADE_SOBRA numeric(18,4);
declare variable C_STATUS char(4);
declare variable C_QUANTIDADE_ALTERNATIVA_CONS numeric(18,4);
declare variable C_QUANTIDADE_ALTERNATIVA_SALDO numeric(18,4);
declare variable C_DATAHORA_CONFERENCIA timestamp;
declare variable C_COMPONENTE smallint;
declare variable C_ESTOQUE_ID integer;
declare variable C_SALDO_BAIXAR numeric(18,4);
declare variable TEMPO_TOTAL numeric(15,4);
declare variable QUANTIDADE_DETALHE numeric(15,4);
declare variable TEMPO_SETUP numeric(15,4);
declare variable QTD_INTERMEDIARIA numeric(15,4);
declare variable CONSUMO_INTERMEDIARIA numeric(15,4);
declare variable CONSUMO_COMPONENTE numeric(15,4);
declare variable QTD numeric(15,4);
declare variable LINHA_INTERMEDIARIA numeric(15,4);
declare variable SOBRA_CONSUMO numeric(15,4);
declare variable ACRECIMO_CONSUMO numeric(15,4);
declare variable ACRECIMO_ADD numeric(15,4);
declare variable ID2 integer;
declare variable REMESSA integer;
declare variable TALAO integer;
declare variable DETALHE integer;
declare variable QUANTIDADE_NECES numeric(15,4);
declare variable CONT_TALOES integer;
declare variable QTD_TALOES integer;
begin

    REMESSA_ID = GEN_ID(GTBREMESSA,1);


    SELECT FIRST 1
           T.OBSERVACAO,
           T.GP_ID
      FROM VWREMESSA_TALAO T
     WHERE T.REMESSA_ID = -99999--:REMESSA_ID
      INTO OBSERVACAO,
           GP_ID;
                    
    UPDATE VWREMESSA_TALAO T
       SET T.REMESSA_ID = :REMESSA_ID,
           T.GP_ID      = :GP_ID
     WHERE T.REMESSA_ID = -99999;


    REMESSA_ID_ORIGEM  = (SELECT FIRST 1 SKIP 0 OSPLIT FROM SPLIT(:OBSERVACAO,'-'));
    REMESSA_ID_VINCULO = (SELECT FIRST 1 SKIP 1 OSPLIT FROM SPLIT(:OBSERVACAO,'-'));


    INSERT INTO VWREMESSA
    SELECT ESTABELECIMENTO_ID,
           FAMILIA_ID,
           FAMILIA_ID_MP,
           :REMESSA_ID,
           FN_REMESSA_DESCRICAO(ESTABELECIMENTO_ID,:GP_ID,REMESSA,REQUISICAO),
           DATA,
           PERFIL,
           STATUS,
           FN_REMESSA_DESCRICAO(ESTABELECIMENTO_ID,:GP_ID,REMESSA,REQUISICAO,1),
           '3',
           FN_REMESSA_DESCRICAO(ESTABELECIMENTO_ID,:GP_ID,REMESSA,REQUISICAO,2),
           FN_REMESSA_DESCRICAO(ESTABELECIMENTO_ID,:GP_ID,REMESSA,REQUISICAO,3),
           :GP_ID,
           FN_CURRENT_USER_ID(),
           AMOSTRA,
           'REMESSA INTERMEDIARIA',
           DATA,
           CURRENT_TIMESTAMP,
           '',
           :DATAHORA_DISPONIBILIDADE as DATAHORA_DISPONIBILIDADE
      FROM VWREMESSA R
     WHERE R.REMESSA_ID = :REMESSA_ID_ORIGEM;



    SELECT FIRST 1
        R.ESTABELECIMENTO_ID
    FROM
        VWREMESSA R
    WHERE
        R.REMESSA_ID = :REMESSA_ID
    INTO
        ESTABELECIMENTO_ID;

    FOR

        SELECT
            P2.DESCRICAO TALAO_PRODUTO_DESCRICAO,
            TRIM(S.PERFIL) TALAO_PERFIL_SKU,
            PF.DESCRICAO TALAO_PERFIL_SKU_DESCRICAO,
            C.CLASSE TALAO_COR_CLASSE,
            C.SUBCLASSE TALAO_COR_SUBCLASSE,
            X.TALAO_CONTROLE,
            X.TALAO_MODELO_ID,
            X.TALAO_MODELO_DESCRICAO,
            X.TALAO_TAMANHO,
            X.TALAO_PRODUTO_ID,
            X.TALAO_TAMANHO_DESCRICAO,
            X.TALAO_QUANTIDADE,
            X.PRODUTO_DESCRICAO,
            X.TAMANHO_DESCRICAO,
            X.UM,
            X.LARGURA,
            X.COMPRIMENTO,
            X.COR_CLASSE,
            X.COR_SUBCLASSE,
            X.ID,
            X.REMESSA_TALAO_ID,
            X.LOCALIZACAO_ID,
            X.PRODUTO_ID,
            X.MODELO_ID,
            X.COR_ID,
            X.TAMANHO,
            X.QUANTIDADE,
            X.QUANTIDADE_ALTERNATIVA,
            X.QUANTIDADE_SOBRA,
            X.DENSIDADE,
            X.ESPESSURA,
            X.STATUS,
            X.DATA_PRODUCAO,
            X.DATA_LIBERACAO,
            X.HORA_PRODUCAO,
            X.HORA_LIBERACAO,
            X.VIA_ETIQUETA,
            X.TURNO,
            X.TALAO_EXTRA,
            X.PERCENTUAL_EXTRA
    
        FROM (

                select
                    z.*,
        
                    cast( iif(z.remessa_talao_id > 5000 and z.remessa_talao_id < 6000, z.placa_largura    , fn_array(LARGURA_COMPRIMENTO, 1, '|')) as numeric(15,4)) as LARGURA,
                    cast( iif(z.remessa_talao_id > 5000 and z.remessa_talao_id < 6000, z.placa_comprimento, fn_array(LARGURA_COMPRIMENTO, 2, '|')) as numeric(15,4)) COMPRIMENTO
                from(
                    SELECT
                        FN_LPAD(T2.REMESSA_TALAO_ID,4,0) TALAO_CONTROLE,
                        T2.MODELO_ID TALAO_MODELO_ID,
                        M.DESCRICAO TALAO_MODELO_DESCRICAO,
                        (SELECT FIRST 1 TAMANHO FROM VWREMESSA_TALAO_DETALHE D WHERE D.REMESSA_ID = V.REMESSA_ID AND D.REMESSA_TALAO_ID = V.REMESSA_TALAO_ID) TALAO_TAMANHO,
                        (SELECT FIRST 1 PRODUTO_ID FROM VWREMESSA_TALAO_DETALHE D WHERE D.REMESSA_ID = V.REMESSA_ID AND D.REMESSA_TALAO_ID = V.REMESSA_TALAO_ID) TALAO_PRODUTO_ID,
                        FN_TAMANHO_GRADE(M.GRADE_CODIGO,(SELECT FIRST 1 TAMANHO FROM VWREMESSA_TALAO_DETALHE D WHERE D.REMESSA_ID = V.REMESSA_ID AND D.REMESSA_TALAO_ID = V.REMESSA_TALAO_ID)) TALAO_TAMANHO_DESCRICAO,
                        SUM(T1.QUANTIDADE) OVER (PARTITION BY V.REMESSA_TALAO_ID) TALAO_QUANTIDADE,
                        P.DESCRICAO PRODUTO_DESCRICAO,
                        FN_TAMANHO_GRADE(P.GRADE_CODIGO,T1.TAMANHO) TAMANHO_DESCRICAO,                    
                        P.UNIDADEMEDIDA_SIGLA2 UM,
                        --MT.LARGURA,
                        --MT.COMPRIMENTO,
                        C2.CLASSE COR_CLASSE,
                        C2.SUBCLASSE COR_SUBCLASSE,
                        T1.ID,
                        T1.ESTABELECIMENTO_ID,
                        T1.REMESSA_ID,
                        T1.REMESSA_TALAO_ID,
                        T1.LOCALIZACAO_ID,
                        T1.PRODUTO_ID,
                        T1.MODELO_ID,
                        P.COR_CODIGO COR_ID,
                        T1.TAMANHO,
                        T1.QUANTIDADE,
                        T1.QUANTIDADE_ALTERNATIVA,
                        T1.QUANTIDADE_SOBRA,
                        T1.GP_ID,
                        T1.UP_ID,
                        T1.ESTACAO,
                        T1.DENSIDADE,
                        T1.ESPESSURA,
                        T1.STATUS,
                        T1.OBSERVACAO,
                        T1.DATA_PRODUCAO,
                        T1.DATA_LIBERACAO,
                        T1.HORA_PRODUCAO,
                        T1.HORA_LIBERACAO,
                        T1.VIA_ETIQUETA,
                        T1.TURNO,
                        T1.TALAO_EXTRA,
                        T1.PERCENTUAL_EXTRA,
                        T1.placa_largura,
                        T1.placa_comprimento,
        
                        coalesce(( select MT.LARGURA||'|'||MT.COMPRIMENTO from SPC_REMESSA_CONSUMO_MATRIZ(M2.MATRIZ_CODIGO,M2.GRADE_CODIGO,T1.TAMANHO) MT), '0|0') LARGURA_COMPRIMENTO
        
            
                    FROM
                        VWREMESSA_TALAO T1,
                        VWREMESSA_CONSUMO C,
                        TBREMESSA_CONSUMO_VINCULO V,
                        VWREMESSA_TALAO T2,
                        TBPRODUTO P,
                        TBMODELO M,
                        TBMODELO M2,
                        --SPC_REMESSA_CONSUMO_MATRIZ(M2.MATRIZ_CODIGO,M2.GRADE_CODIGO,T1.TAMANHO) MT,
                        TBCOR C2
            
                    WHERE
                        T1.REMESSA_ID = C.REMESSA_ID
                    AND T1.REMESSA_TALAO_ID = C.REMESSA_TALAO_ID
                    AND V.CONSUMO_ID = C.ID
                    AND T2.REMESSA_ID = V.REMESSA_ID
                    AND T2.REMESSA_TALAO_ID = V.REMESSA_TALAO_ID
                    AND P.CODIGO = T1.PRODUTO_ID
                    AND M.CODIGO = T2.MODELO_ID
                    AND M2.CODIGO = P.MODELO_CODIGO
                    AND C2.CODIGO = P.COR_CODIGO
                    AND T1.REMESSA_ID = :REMESSA_ID_ORIGEM
                    AND T2.REMESSA_ID = :REMESSA_ID_VINCULO
                    --and v.etiqueta = '1'

                    and iif((select count(1) from TBREMESSA_CONSUMO_VINCULO x where x.REMESSA_ID = :REMESSA_ID_VINCULO AND x.CONSUMO_ID = C.ID) = 1, true, v.etiqueta = '1')

                 ) Z
            ) X,
            TBPRODUTO P2,
            VWSKU S,
            TBPERFIL PF,
            TBCOR C
        WHERE
            P2.CODIGO = TALAO_PRODUTO_ID
        AND S.MODELO_ID = P2.MODELO_CODIGO
        AND S.COR_ID = P2.COR_CODIGO
        AND S.TAMANHO = TALAO_TAMANHO
        AND PF.TABELA = 'SKU'
        AND PF.ID = S.PERFIL
        AND C.CODIGO = P2.COR_CODIGO
    INTO
        TALAO_PRODUTO_DESCRICAO,
        TALAO_PERFIL_SKU,
        TALAO_PERFIL_SKU_DESCRICAO,
        TALAO_COR_CLASSE,
        TALAO_COR_SUBCLASSE,
        TALAO_CONTROLE,
        TALAO_MODELO_ID,
        TALAO_MODELO_DESCRICAO,
        TALAO_TAMANHO,
        TALAO_PRODUTO_ID,
        TALAO_TAMANHO_DESCRICAO,
        TALAO_QUANTIDADE,
        PRODUTO_DESCRICAO,
        TAMANHO_DESCRICAO,
        UM,
        LARGURA,
        COMPRIMENTO,
        COR_CLASSE,
        COR_SUBCLASSE,
        ID,
        REMESSA_TALAO_ID,
        LOCALIZACAO_ID,
        PRODUTO_ID,
        MODELO_ID,
        COR_ID,
        TAMANHO,
        QUANTIDADE,
        QUANTIDADE_ALTERNATIVA,
        QUANTIDADE_SOBRA,
        DENSIDADE,
        ESPESSURA,
        STATUS,
        DATA_PRODUCAO,
        DATA_LIBERACAO,
        HORA_PRODUCAO,
        HORA_LIBERACAO,
        VIA_ETIQUETA,
        TURNO,
        TALAO_EXTRA,
        PERCENTUAL_EXTRA
    DO
    BEGIN
        UPDATE VWREMESSA_TALAO T
           SET T.PRODUTO_ID = NULL,
               T.DENSIDADE = :DENSIDADE,
               T.ESPESSURA = :ESPESSURA
         WHERE T.REMESSA_ID = :REMESSA_ID
           AND T.REMESSA_TALAO_ID = :TALAO_CONTROLE;


        REMESSA_TALAO_DETALHE_ID = GEN_ID(GERADOR1_ID, 1);

        FOR
            SELECT
                C.ID,
                C.QUANTIDADE
            FROM
                VWREMESSA_CONSUMO C
            WHERE
                C.REMESSA_ID = :REMESSA_ID_ORIGEM
            AND C.REMESSA_TALAO_ID = :REMESSA_TALAO_ID
        INTO
            CONSUMO_ID,
            CONSUMO_QUANTIDADE
        DO
        BEGIN

            INSERT INTO TBREMESSA_CONSUMO_VINCULO (
                CONSUMO_ID,
                REMESSA_ID,
                REMESSA_TALAO_ID,
                REMESSA_TALAO_DETALHE_ID,
                QUANTIDADE
            ) VALUES (
                :CONSUMO_ID,
                :REMESSA_ID,
                :TALAO_CONTROLE,
                :REMESSA_TALAO_DETALHE_ID,
                :CONSUMO_QUANTIDADE
            );

        END

        INSERT INTO VWREMESSA_TALAO_DETALHE (
            ESTABELECIMENTO_ID,
            REMESSA_ID,
            REMESSA_TALAO_ID,
            ID,
            PRODUTO_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            QUANTIDADE_PRODUCAO,
            QUANTIDADE_SALDO,
--            QUANTIDADE_ALTERN,
            QUANTIDADE_ALTERN_PRODUCAO,
            QUANTIDADE_ALTERN_SALDO,
            GP_ID,
            STATUS
        ) VALUES (
           :ESTABELECIMENTO_ID,
           :REMESSA_ID,
           :TALAO_CONTROLE,
           :REMESSA_TALAO_DETALHE_ID,
           :PRODUTO_ID,
           :MODELO_ID,
           :COR_ID,
           :TAMANHO,
           :QUANTIDADE,
           0,
           0,
--           :QUANTIDADE_ALTERN,
           0,
           0,
           :GP_ID,
           1
        );

    END


    FOR
        SELECT
            T.GP_ID,
            T.UP_ID,
            T.ESTACAO,
            T.ID,
            T.REMESSA_TALAO_ID,
            T.QUANTIDADE,
            T.REMESSA_ID,
            R.DATA

        FROM
            VWREMESSA_TALAO T,
            VWREMESSA R

        WHERE
            R.REMESSA_ID = T.REMESSA_ID
        AND T.REMESSA_ID = :REMESSA_ID
    INTO
        :GP_ID,
        :UP_ID,
        :ESTACAO,
        :TALAO_ID,
        :REMESSA_TALAO_ID,
        :QUANTIDADE,
        :REMESSA_ID,
        :DATA
    DO
    BEGIN
        TEMPO_TOTAL = 0;
        DELETE FROM TMP22040;

        FOR
            SELECT P.MODELO_CODIGO,
                   P.COR_CODIGO,
                   D.TAMANHO,
                   iif(coalesce(d.quantidade_altern,0) = 0, D.QUANTIDADE, d.quantidade_altern) as QUANTIDADE
              FROM VWREMESSA_TALAO_DETALHE D,
                   TBPRODUTO P
             WHERE D.REMESSA_ID = :REMESSA_ID
               AND D.REMESSA_TALAO_ID = :REMESSA_TALAO_ID
               AND P.CODIGO = D.PRODUTO_ID
        INTO
            :MODELO_ID,
            :COR_ID,
            :TAMANHO,
            :QUANTIDADE_DETALHE
        DO
        BEGIN
            INSERT INTO
            TMP22040 (
                UP_ID, 
                MODELO_ID, 
                COR_ID, 
                TAMANHO, 
                QUANTIDADE
            ) VALUES (
               :UP_ID, 
               :MODELO_ID, 
               :COR_ID, 
               :TAMANHO, 
               :QUANTIDADE_DETALHE
            );
                     
--            TEMPO_TOTAL = TEMPO_TOTAL + COALESCE((SELECT FIRST 1 T.TOTAL FROM SPC_PROGRAMACAO_TEMPO_NOVO T),0);
    
--            IF ( TEMPO_TOTAL = 0 ) THEN
--            BEGIN
--                EXCEPTION "..." 'TEMPO NAO LOCALIZADO PARA UP:' || :UP_ID || ' MODELO: ' || :MODELO_ID || ' COR: ' || :COR_ID || ' TAM.: ' || :TAMANHO || ' QTD. ' || :QUANTIDADE_DETALHE;
--            END
        END
          
        SELECT FIRST 1 T.TOTAL, t.totalsetup FROM SPC_PROGRAMACAO_TEMPO_NOVO T
        into :TEMPO_TOTAL, :TEMPO_SETUP;

        TEMPO_TOTAL = COALESCE(:TEMPO_TOTAL,1);
        TEMPO_SETUP = COALESCE(:TEMPO_SETUP,0);

        IF ( TEMPO_TOTAL = 0 ) THEN
        BEGIN
            TEMPO_TOTAL = 1;
        END

        EXECUTE PROCEDURE SPI_PROGRAMACAO2(
            :ESTABELECIMENTO_ID,
            'A',
            :GP_ID,
            :UP_ID,
            :ESTACAO,
            :TALAO_ID,
            0,
            0,
            :QUANTIDADE,
            :TEMPO_TOTAL,
            :REMESSA_ID,
            :DATA,
            :TEMPO_SETUP
        );
    END

    --exception "..." 'Rem:'||coalesce(:REMESSA_ID_VINCULO,0);

    CONT_TALOES = 0;

    FOR
        select
            ID_OLD,
            NEW_ID,
            ESTABELECIMENTO_ID,
            REMESSA_ID,
            REMESSA_TALAO_ID,
            REMESSA_TALAO_DETALHE_ID,
            CONTROLE,
            LOCALIZACAO_ID,
            PRODUTO_ID,
            TAMANHO,
            DENSIDADE,
            ESPESSURA,
            QUANTIDADE_ORIGINAL,
            QUANTIDADE_NECES,
            QUANTIDADE_NECES_ALTERN,
            FATOR_UNIDADE,
            FATOR_UNIDADE_ALTERN,
            QUANTIDADE,
            QUANTIDADE_CONSUMO,
            QUANTIDADE_SALDO,
            QUANTIDADE_ALTERNATIVA,
            QUANTIDADE_SOBRA,
            STATUS,
            QUANTIDADE_ALTERNATIVA_CONSUMO,
            QUANTIDADE_ALTERNATIVA_SALDO,
            DATAHORA_CONFERENCIA,
            COMPONENTE,
            ESTOQUE_ID,
            SALDO_BAIXAR,
            LINHA_INTERMEDIARIA,
            QTD_INTERMEDIARIA,
            CONSUMO_INTERMEDIARIA,
            CONSUMO_COMPONENTE,
            SOBRA_CONSUMO,
            ACRECIMO_CONSUMO,
            iif(LINHA_INTERMEDIARIA >= QTD_INTERMEDIARIA, ACRECIMO_CONSUMO + (SOBRA_CONSUMO - (ACRECIMO_CONSUMO * QTD_INTERMEDIARIA)), ACRECIMO_CONSUMO) as ACRECIMO_ADD
        
        from(
            select
                x.*,
            
                CONSUMO_COMPONENTE - CONSUMO_INTERMEDIARIA as SOBRA_CONSUMO,
                cast((CONSUMO_COMPONENTE - CONSUMO_INTERMEDIARIA) / QTD_INTERMEDIARIA as numeric(15,2)) as ACRECIMO_CONSUMO
            from(
                SELECT
                    C.ID ID_OLD,
                    GEN_ID(GTBREMESSA_CONSUMO,1) as NEW_ID,
                    C.ESTABELECIMENTO_ID,
                    :REMESSA_ID as REMESSA_ID,
                    V.REMESSA_TALAO_ID,
                    C.REMESSA_TALAO_DETALHE_ID,
                    C.CONTROLE,
                    C.LOCALIZACAO_ID,
                    C.PRODUTO_ID,
                    C.TAMANHO,
                    C.DENSIDADE,
                    C.ESPESSURA,
                    C.QUANTIDADE_ORIGINAL,
                    C.QUANTIDADE_NECES,
                    C.QUANTIDADE_NECES_ALTERN,
                    C.FATOR_UNIDADE,
                    C.FATOR_UNIDADE_ALTERN,
                    C.QUANTIDADE,
                    C.QUANTIDADE_CONSUMO,
                    C.QUANTIDADE_SALDO,
                    C.QUANTIDADE_ALTERNATIVA,
                    C.QUANTIDADE_SOBRA,
                    C.STATUS,
                    C.QUANTIDADE_ALTERNATIVA_CONSUMO,
                    C.QUANTIDADE_ALTERNATIVA_SALDO,
                    C.DATAHORA_CONFERENCIA,
                    C.COMPONENTE,
                    C.ESTOQUE_ID,
                    C.SALDO_BAIXAR,
        
                    row_number() over(partition by V.REMESSA_TALAO_ID, C.PRODUTO_ID) as LINHA_INTERMEDIARIA,
                    count(C.QUANTIDADE_NECES) over(partition by V.REMESSA_TALAO_ID, C.PRODUTO_ID) as QTD_INTERMEDIARIA,
                    sum(v.quantidade) over(partition by V.REMESSA_TALAO_ID, C.PRODUTO_ID) as CONSUMO_INTERMEDIARIA,
                    coalesce((select SUM(D.quantidade) FROM vwremessa_talao_detalhe D WHERE D.remessa_id = V.remessa_id AND D.remessa_talao_id = V.remessa_talao_id AND D.produto_id = C.produto_id),0) AS CONSUMO_COMPONENTE
                
                FROM
                    VWREMESSA_CONSUMO C,
                    TBREMESSA_CONSUMO_VINCULO V
                
                WHERE   
                    V.REMESSA_ID = :REMESSA_ID_VINCULO
                AND V.CONSUMO_ID = C.ID
                --and v.etiqueta = '1'

                and iif((select count(1) from TBREMESSA_CONSUMO_VINCULO x where x.REMESSA_ID = :REMESSA_ID_VINCULO AND x.CONSUMO_ID = C.ID) = 1, true, v.etiqueta = '1')

                ORDER BY C.ID
            ) x
        ) y
    INTO
        C_ID_OLD,
        C_ID,
        C_ESTABELECIMENTO_ID,
        C_REMESSA_ID,
        C_REMESSA_TALAO_ID,
        C_REMESSA_TALAO_DETALHE_ID,
        C_CONTROLE,
        C_LOCALIZACAO_ID,
        C_PRODUTO_ID,
        C_TAMANHO,
        C_DENSIDADE,
        C_ESPESSURA,
        C_QUANTIDADE_ORIGINAL,
        C_QUANTIDADE_NECES,
        C_QUANTIDADE_NECES_ALTERN,
        C_FATOR_UNIDADE,
        C_FATOR_UNIDADE_ALTERN,
        C_QUANTIDADE,
        C_QUANTIDADE_CONSUMO,
        C_QUANTIDADE_SALDO,
        C_QUANTIDADE_ALTERNATIVA,
        C_QUANTIDADE_SOBRA,
        C_STATUS,
        C_QUANTIDADE_ALTERNATIVA_CONS,
        C_QUANTIDADE_ALTERNATIVA_SALDO,
        C_DATAHORA_CONFERENCIA,
        C_COMPONENTE,
        C_ESTOQUE_ID,
        C_SALDO_BAIXAR,

        LINHA_INTERMEDIARIA,
        QTD_INTERMEDIARIA,
        CONSUMO_INTERMEDIARIA,
        CONSUMO_COMPONENTE,
        SOBRA_CONSUMO,
        ACRECIMO_CONSUMO,
        ACRECIMO_ADD

    DO
    BEGIN
        CONT_TALOES = CONT_TALOES + 1;

        QTD = C_QUANTIDADE_NECES + ACRECIMO_ADD;

        --seta novo vinculo com a dublagem
        UPDATE TBREMESSA_CONSUMO_VINCULO
           SET CONSUMO_ID = :C_ID
         WHERE CONSUMO_ID = :C_ID_OLD
           AND REMESSA_ID = :REMESSA_ID_VINCULO;

        --consulta REMESSA_TALAO_DETALHE usando o vinculo com o talao do bojo
        select
            v.REMESSA_TALAO_DETALHE_ID
        from tbremessa_consumo_vinculo v
            where v.consumo_id      = :C_ID_OLD
            and v.REMESSA_ID        = :C_REMESSA_ID
            and v.REMESSA_TALAO_ID  = :C_REMESSA_TALAO_ID
        into :C_REMESSA_TALAO_DETALHE_ID;

        /*
        --atualiza o vinculo do talao do bojo com a nova quantidade
        update tbremessa_consumo_vinculo v
        set v.quantidade = :QTD
            where v.consumo_id      = :C_ID_OLD
            and v.REMESSA_ID        = :C_REMESSA_ID
            and v.REMESSA_TALAO_ID  = :C_REMESSA_TALAO_ID;
        */
         /*
        --atualizar consumo do bojo
        update tbremessa_consumo k
        set k.quantidade = :QTD
            where v.consumo_id      = :C_ID_OLD
            and v.REMESSA_ID        = :C_REMESSA_ID
            and v.REMESSA_TALAO_ID  = :C_REMESSA_TALAO_ID;  */

        C_REMESSA_TALAO_DETALHE_ID = coalesce(C_REMESSA_TALAO_DETALHE_ID, 0);

        if(C_REMESSA_TALAO_DETALHE_ID = 0)then
        begin
            exception "..." 'Vínculo com remessa intermediária não encontrado, REM:'||C_REMESSA_ID||', TL:'||C_REMESSA_TALAO_ID||', CON:'||C_ID_OLD;
        end

        INSERT INTO VWREMESSA_CONSUMO (
            ID,
            ESTABELECIMENTO_ID,
            REMESSA_ID,
            REMESSA_TALAO_ID,
            REMESSA_TALAO_DETALHE_ID,
            CONTROLE,
            LOCALIZACAO_ID,
            PRODUTO_ID,
            TAMANHO,
            DENSIDADE,
            ESPESSURA,
            QUANTIDADE_ORIGINAL,
            QUANTIDADE_NECES,
            QUANTIDADE_NECES_ALTERN,
            QUANTIDADE,
            QUANTIDADE_CONSUMO,
            QUANTIDADE_ALTERNATIVA,
            QUANTIDADE_SOBRA,
            STATUS,
            QUANTIDADE_ALTERNATIVA_CONSUMO,
            DATAHORA_CONFERENCIA,
            COMPONENTE,
            ESTOQUE_ID,
            SALDO_BAIXAR
        ) VALUES (
            :C_ID,
            :C_ESTABELECIMENTO_ID,
            :C_REMESSA_ID,
            :C_REMESSA_TALAO_ID,
            :C_REMESSA_TALAO_DETALHE_ID,
            :C_CONTROLE,
            :C_LOCALIZACAO_ID,
            :C_PRODUTO_ID,
            :C_TAMANHO,
            :C_DENSIDADE,
            :C_ESPESSURA,
            :C_QUANTIDADE_ORIGINAL,
            :QTD, --:C_QUANTIDADE_NECES,
            :C_QUANTIDADE_NECES_ALTERN,
            :QTD, --:C_QUANTIDADE,
            :C_QUANTIDADE_CONSUMO,
            :C_QUANTIDADE_ALTERNATIVA,
            :C_QUANTIDADE_SOBRA,
            :C_STATUS,
            :C_QUANTIDADE_ALTERNATIVA_CONS,
            :C_DATAHORA_CONFERENCIA,
            :C_COMPONENTE,
            :C_ESTOQUE_ID,
            :QTD --:C_SALDO_BAIXAR
        );

    END

    QTD_TALOES = coalesce((select count(P.id) FROM tbremessa_item_processado P WHERE P.remessa = :remessa_id_origem),0);

    if(CONT_TALOES <> QTD_TALOES and ((fn_calc_precision(CONT_TALOES,QTD_TALOES,'/')) * 100) <= 10)then
    begin
        exception "..." 'ERRO AO GERAR VINCULOS, NECESSARIOS:'||:QTD_TALOES||', VINCULADOS:'||:CONT_TALOES||', PERC:'||((CONT_TALOES/QTD_TALOES) * 100);
    end

    --corrigir vinculos
    for select id, remessa, talao, detalhe, QUANTIDADE_NECES from(
        select
            id,
            cor_id,
            QUANTIDADE_NECES,
            fn_array(VINCULO,1,'|') as remessa,
            fn_array(VINCULO,2,'|') as talao,
            fn_array(VINCULO,3,'|') as detalhe,
            fn_array(VINCULO,4,'|') as cor
        from(
        select
        
           c.id ,
           u.cor_id,
           c.talao,
           c.QUANTIDADE_NECES,
           (
                select first 1 v.REMESSA_ID||'|'||v.REMESSA_TALAO_ID||'|'||v.REMESSA_TALAO_DETALHE_ID||'|'||p.cor_id
        
                from tbremessa_consumo_vinculo v, tbremessa_consumo d, tbpedido_item_processado p
                where d.remessa = c.remessa
                and c.talao = d.talao
                and d.talao_detalhe_id <> c.talao_detalhe_id
                and v.consumo_id = d.id
                and p.controle = v.remessa_talao_detalhe_id
                and p.remessa = v.remessa_id
                and p.remessa_acumulado_controle = v.remessa_talao_id
                and p.produto_codigo = c.produto_id
                --and p.cor_id = u.cor_id
           ) as VINCULO
        
        from tbpedido_item_processado u, tbremessa_consumo c
        left join tbremessa_consumo_vinculo v on v.consumo_id = c.id
        
        where c.componente = '1'
        and c.id > 4295314
        and v.id is null
        and u.remessa = c.remessa
        and u.remessa_acumulado_controle = c.talao
        and u.controle = c.talao_detalhe_id
        ) ) where cor_id = cor
    into
        :id2,
        :remessa,
        :talao,
        :detalhe,
        :QUANTIDADE_NECES
    do begin
        INSERT INTO TBREMESSA_CONSUMO_VINCULO (CONSUMO_ID, REMESSA_ID, REMESSA_TALAO_ID, REMESSA_TALAO_DETALHE_ID, QUANTIDADE, ETIQUETA) VALUES (:id2, :remessa, :talao, :detalhe, :QUANTIDADE_NECES, '1');
    end

    for
        select
           c.id,
           u.remessa_acumulado_controle
        from tbpedido_item_processado u, tbremessa_consumo c
        left join tbremessa_consumo_vinculo v on v.consumo_id = c.id
        
        where c.componente = '1'
        and c.id >= (select min(c.id) from tbremessa_consumo c where c.remessa = :REMESSA_ID_ORIGEM)
        and v.id is null
        and u.remessa = c.remessa
        and u.remessa_acumulado_controle = c.talao
        and u.controle = c.talao_detalhe_id
    into
        :consumo_id,
        :c_controle
    do begin
       exception "..." 'Vínculos incompletos na remessa ('||:consumo_id||'-'||:c_controle||')';
    end

  /* Procedure Text */
--  suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPU_LIBERACAO_TALAO_COLETOR (
    COD_BARRAS varchar(100),
    OPERADOR_ID integer,
    COD_UP varchar(100))
returns (
    PRODUTO_ID integer,
    PRODUTO_DESCRICAO varchar(100),
    OPERACAO1 varchar(10),
    OPERACAO2 varchar(10),
    LOCALIZACAO_ID_VELHA integer,
    LOCALIZACAO_ID_NOVA integer,
    LOCALIZACAO_DESC_VELHA varchar(100),
    LOCALIZACAO_DESC_NOVA varchar(100),
    REMESSA varchar(20),
    TALAO varchar(20),
    QUANTIDADE varchar(15),
    FAMILIA integer,
    ID varchar(20),
    QUANTIDADE_ALT varchar(15),
    SITUACAO integer,
    GP integer,
    PERFIL_UP varchar(100),
    ESTAB integer,
    TAMANHO integer,
    TAMANHO_DESCRICAO varchar(10),
    TRATAR_ESTOQUE integer,
    REGRA_ID integer,
    CONFERENCIA integer,
    DESFAZER integer,
    ESTOQUE_ID varchar(300),
    OLD_LOCALIZACAO integer,
    UM varchar(10))
as
declare variable TIPO_COD_BARRAS integer;
declare variable ID_CODBARRAS varchar(20);
declare variable POSICAO integer;
declare variable TALAO_DETALHE_ID integer;
declare variable REGRAS integer;
declare variable REGRA_TIPO integer;
declare variable LOCALIZACAO_ID_SAIDA integer;
declare variable LOCALIZACAO_ID_ENTRADA integer;
declare variable OPERACAO_ESTOQUE_SAIDA varchar(40);
declare variable OPERACAO varchar(40);
declare variable OPERACAO_ESTOQUE_ENTRADA varchar(40);
declare variable USUARIO_ID integer;
declare variable T01 numeric(10,5);
declare variable T02 numeric(10,5);
declare variable T03 numeric(10,5);
declare variable T04 numeric(10,5);
declare variable T05 numeric(10,5);
declare variable T06 numeric(10,5);
declare variable T07 numeric(10,5);
declare variable T08 numeric(10,5);
declare variable T09 numeric(10,5);
declare variable T10 numeric(10,5);
declare variable T11 numeric(10,5);
declare variable T12 numeric(10,5);
declare variable T13 numeric(10,5);
declare variable T14 numeric(10,5);
declare variable T15 numeric(10,5);
declare variable T16 numeric(10,5);
declare variable T17 numeric(10,5);
declare variable T18 numeric(10,5);
declare variable T19 numeric(10,5);
declare variable T20 numeric(10,5);
declare variable GP_ID integer;
declare variable PERFIL varchar(10);
declare variable LOCALIZACAO_TEMP varchar(100);
declare variable LOCALIZACAO_DESC_TEMP integer;
declare variable E_CONFERENCIA integer;
declare variable E_QUANTIDADE integer;
declare variable E_ESTOQUE_ID integer;
declare variable E_LOCALIZACAO integer;
declare variable E_TIPO varchar(10);
declare variable CONTROLE_ESTOQUE integer;
begin
    :TIPO_COD_BARRAS = 0;

    if(position('P'  in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 1; POSICAO = 2; end
    if(position('RD' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 2; POSICAO = 3; end
    if(position('RA' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 3; POSICAO = 3; end

    :TAMANHO      = char_length(:COD_BARRAS);
    :ID_CODBARRAS = substring(:COD_BARRAS from POSICAO for TAMANHO);
    :ID_CODBARRAS = cast(cast(ID_CODBARRAS as integer) as varchar(20));



    for
        select
            p.perfil,
            u.gp_id
        from tbup p, tbgp_up u
        where p.codigo1 = :COD_UP
        and u.up_id = p.id
    into
      :PERFIL,
      :GP_ID
    do
    begin
        :GP = :GP_ID;
    end

    if(:TIPO_COD_BARRAS = 1)then
    begin
       for
            select
                0 as talao_detalhe_id,
                r.produto_id as produto_cod,
                p.descricao as produto_desc,
                r.saldo as QUANTIDADE,
                r.localizacao_entrada,
                0 as remessa,
                0 as talao,
                P.familia_codigo,
                r.estabelecimento_id,
                r.situacao,
                '' as perfil_up,
                r.tamanho,
                P.UNIDADEMEDIDA_SIGLA2 UM
                --,0 gp_id
            
            from tbrevisao r,
                 tbproduto p
            
            where r.id = :ID_CODBARRAS
             and p.codigo = r.produto_id

       into
        :talao_detalhe_id,
        :produto_id,            
        :produto_descricao,
        :QUANTIDADE,
        :localizacao_id_velha,
        :remessa,                
        :talao,
        :FAMILIA,
        :ESTAB,
        :SITUACAO,
        :perfil_up,
        :tamanho,
        :UM
        --,:gp_id
       do begin
          :QUANTIDADE_ALT = 0;
          :TRATAR_ESTOQUE = 1;
       end
    end else
    begin
        if(:TIPO_COD_BARRAS = 2)then
        begin
           for
                select first 1
                    d.id as talao_detalhe_id,
                    d.produto_id,
                    p.descricao as produto_descricao,
                    d.quantidade_saldo,
                    d.quantidade_altern_producao,
                    d.localizacao_id as localizacao_id_velha,
                    d.remessa_id,
                    d.remessa_talao_id,
                    p.familia_codigo as FAMILIA,
                    v.estabelecimento_id,
                    t.status,
                    coalesce((select first 1 u.perfil from tbup u where u.id =
                              (SELECT FIRST 1 T.UP_ID
                                 FROM VWREMESSA_TALAO T
                                WHERE T.REMESSA_ID = d.remessa_id
                                  AND T.REMESSA_TALAO_ID = d.REMESSA_TALAO_ID)),'') as perfil_up,
                    d.tamanho,
                    P.UNIDADEMEDIDA_SIGLA2

                    --,d.gp_id


                from vwremessa_talao_detalhe d,
                     vwremessa_talao t,
                     vwremessa v,
                     tbproduto p
                
                where d.id = :ID_CODBARRAS
                and p.codigo = d.produto_id
                and v.remessa_id = d.remessa_id
                and t.remessa_id = d.remessa_id
                and t.remessa_talao_id = d.remessa_talao_id
    
           into
            :talao_detalhe_id,
            :produto_id,            
            :produto_descricao,
            :QUANTIDADE,
            :QUANTIDADE_ALT,
            :localizacao_id_velha,
            :remessa,                
            :talao,                  
            :FAMILIA,
            :ESTAB,
            :SITUACAO,
            :perfil_up,
            :tamanho,
            :UM
            --,:gp_id
           do begin
             :TRATAR_ESTOQUE = 1;
           end

        end else
        begin
            if(:TIPO_COD_BARRAS = 3)then
            begin
               for
                    select
                        d.id,
                        p.CODIGO as produto_id,
                        p.DESCRICAO as produto_descricao,
                        D.TAMANHO,
                        d.localizacao_id as localizacao_id_velha,
                        d.remessa_id,
                        d.remessa_talao_id,
                        v.familia_id as FAMILIA,
                        v.estabelecimento_id,
                        t.status,
                        coalesce((select first 1 u.perfil from tbup u where u.id =
                                  (SELECT FIRST 1 T.UP_ID
                                     FROM VWREMESSA_TALAO T
                                    WHERE T.REMESSA_ID = d.remessa_id
                                      AND T.REMESSA_TALAO_ID = d.REMESSA_TALAO_ID)),'') as perfil_up,
                        P.UNIDADEMEDIDA_SIGLA2,
                        sum(d.quantidade_saldo) as QUANTIDADE,
                        sum(d.quantidade_altern_saldo) QUANTIDADE_ALT
                        --,d.gp_id
                    
                    from vwremessa_talao t,
                         vwremessa_talao_detalhe d,
                         vwremessa v,
                         TBPRODUTO p
                    
                    where t.id = :ID_CODBARRAS
                    and v.remessa_id = d.remessa_id
                    and d.remessa_id = t.remessa_id
                    and d.remessa_talao_id = t.remessa_talao_id
                    and p.codigo = d.PRODUTO_ID
                    
                    group by 1,2,3,4,5,6,7,8,9,10,11,12
        
               into
                :talao_detalhe_id,
                :produto_id,            
                :produto_descricao,
                :TAMANHO,
                :localizacao_id_velha,
                :remessa,                
                :talao,                  
                :FAMILIA,
                :ESTAB,
                :SITUACAO,
                :perfil_up,
                :UM,
                :QUANTIDADE,
                :QUANTIDADE_ALT
                --,:gp_id
               do begin
                    :TRATAR_ESTOQUE = 1;
               end
            end else
            begin
                exception "..." 'Item nao foi encontrado';
            end
        end
    end

    :REGRAS = 0;

    for
        select FIRST 1
            1 REGRAS,
            ID,
            TIPO,
            LOCALIZACAO_ID_SAIDA,
            LOCALIZACAO_ID_ENTRADA,
            CONFERENCIA,
            OPERACAO_ESTOQUE_SAIDA,
            OPERACAO_ESTOQUE_ENTRADA,
            CONFERENCIA
        from tbestoque_transacao_regra r
        where r.tipo = 4
        and   (r.GP_ID is null or R.GP_ID = :GP_ID)
        and   (r.PERFIL_UP is null or R.PERFIL_UP = :PERFIL)
        and   r.FAMILIA_ID = :FAMILIA
        and   r.status = 1

        order by r.gp_id desc
    into
        :REGRAS,
        :REGRA_ID,
        :regra_tipo,
        :LOCALIZACAO_ID_SAIDA,
        :LOCALIZACAO_ID_ENTRADA,
        :CONFERENCIA,
        :OPERACAO_ESTOQUE_SAIDA,
        :OPERACAO_ESTOQUE_ENTRADA,
        :CONFERENCIA
    DO
    BEGIN

    END

    if(:REGRAS <> 1)then
    begin
       exception "..." 'REGRA DE TRANSACAO DE ESTOQUE PARA O'
                       ||' TIPO: 4'
                       ||' GP:'||coalesce(GP_ID,0)
                       ||' PERFIL UP:'||coalesce(PERFIL,'')
                       ||' FAMILIA ID:'||coalesce(:FAMILIA,0)
                       ||' CONFIGURADA INCORRETAMENTE. ENTRE EM CONTATO COM O SUPORTE TECNICO.';
    end

    :operacao1            = :operacao_estoque_saida;
    :localizacao_id_velha = fn_localizacao_codigo(:localizacao_id_saida,:produto_id,:familia, :localizacao_id_velha, :talao_detalhe_id, :gp_id, :PERFIL, :COD_BARRAS);

    :operacao2            = :operacao_estoque_entrada;
    :localizacao_id_nova  = fn_localizacao_codigo(:localizacao_id_entrada,:produto_id,:familia, :localizacao_id_nova, :talao_detalhe_id, :gp_id, :PERFIL, :COD_BARRAS);

    if ( coalesce(localizacao_id_velha,0) = 0 ) then
    begin
       exception "..." 'REGRA DE TRANSACAO DE ESTOQUE PARA O'
                       ||' TIPO: 4'
                       ||' GP:'||coalesce(GP_ID,0)
                       ||' PERFIL UP:'||coalesce(PERFIL,0)
                       ||' FAMILIA ID:'||coalesce(:FAMILIA,'')
                       ||' LOC. (S) ID:'||coalesce(localizacao_id_velha,0)
                       ||' CONFIGURADA INCORRETAMENTE. ENTRE EM CONTATO COM O SUPORTE TECNICO.';

    end

    if ( coalesce(localizacao_id_nova,0) = 0 ) then
    begin
       exception "..." 'REGRA DE TRANSACAO DE ESTOQUE PARA O'
                       ||' TIPO: 4'
                       ||' GP:'||coalesce(GP_ID,0)
                       ||' PERFIL UP:'||coalesce(PERFIL,'')
                       ||' FAMILIA ID:'||coalesce(:FAMILIA,0)
                       ||' LOC. (E) ID:'||coalesce(localizacao_id_nova,0)
                       ||' CONFIGURADA INCORRETAMENTE. ENTRE EM CONTATO COM O SUPORTE TECNICO.';

    end

    if(TIPO_COD_BARRAS = 1)then begin :ID = 'P/' ||:ID_CODBARRAS; end
    if(TIPO_COD_BARRAS = 2)then begin :ID = 'RD/'||:ID_CODBARRAS; end
    if(TIPO_COD_BARRAS = 3)then begin :ID = 'RA/'||:ID_CODBARRAS; end


    :localizacao_desc_nova  = coalesce((select l.descricao from tblocalizacao l where l.codigo = :localizacao_id_nova ),'');
    :localizacao_desc_velha = coalesce((select l.descricao from tblocalizacao l where l.codigo = :localizacao_id_velha),'');

    if(:quantidade = 0)then
    begin
        exception "..." 'PECA SEM SALDO DISPONIVEL.';
    end

    :DESFAZER   = 0;
    :ESTOQUE_ID = '';
    :OLD_LOCALIZACAO = 0;

    if(:TIPO_COD_BARRAS > 1)then
    begin
        if(:SITUACAO < 2)then
        begin
            exception "..." 'Este talao nao esta produzido';
        end
    end

    --verifica se esta indo para localização de onde ele veio
    CONTROLE_ESTOQUE =
    coalesce((SELECT  first 1
                    i.controle
                FROM TBESTOQUE_TRANSACAO_ITEM I
    
                WHERE I.TABELA = 'TBREMESSA_CONSUMO'
                AND I.TABELA_NIVEL = 4
                AND I.REMESSA_ITEM_CONTROLE = :ID_CODBARRAS
                AND I.ESTOQUE_TRANSACAO_REGRA_ID > 0
                and i.tipo = 'S'
                and I.localizacao_codigo = :localizacao_id_nova
    
                order by i.controle desc),0);

--    EXCEPTION "..." SITUACAO || ' - ' || TIPO_COD_BARRAS || ' - ' || CONTROLE_ESTOQUE  ||;


    if( localizacao_id_nova = LOCALIZACAO_ID_VELHA )then
    --if((((:TIPO_COD_BARRAS = 1) and (:SITUACAO = 2)) or ((:TIPO_COD_BARRAS > 1) and (:SITUACAO > 2)))and CONTROLE_ESTOQUE > 0)then
    --if(false)then
    begin
        :DESFAZER = 1;
        --exception "..." 'Este talao ja foi abastecido';

        for
            SELECT   first 2
                i.controle,
                I.CONFERENCIA,
                I.QUANTIDADE,
                I.localizacao_codigo,
                I.tipo
            FROM TBESTOQUE_TRANSACAO_ITEM I

            WHERE I.TABELA = 'TBREMESSA_CONSUMO'
            AND I.TABELA_NIVEL = 4
            AND I.REMESSA_ITEM_CONTROLE = :ID_CODBARRAS
            AND I.ESTOQUE_TRANSACAO_REGRA_ID > 0

             order by i.controle desc
        INTO
            :E_ESTOQUE_ID,
            :E_CONFERENCIA,
            :E_QUANTIDADE,
            :E_LOCALIZACAO,
            :E_TIPO
        do
        begin
            if(:E_TIPO = 'S')then
            begin
              :old_localizacao        = :E_LOCALIZACAO;
              :localizacao_id_nova    = :old_localizacao;
              :localizacao_desc_nova  = coalesce((select l.descricao from tblocalizacao l where l.codigo = :localizacao_id_nova ),'');
            end

            if(:E_TIPO = 'E')then
            begin
              :localizacao_id_velha    = :E_LOCALIZACAO;
              :localizacao_desc_velha  = coalesce((select l.descricao from tblocalizacao l where l.codigo = :localizacao_id_velha ),'');
            end

            if(:ESTOQUE_ID = '')then
            begin
                :ESTOQUE_ID = :E_ESTOQUE_ID;
            end else
            begin
                :ESTOQUE_ID = :ESTOQUE_ID ||', '||:E_ESTOQUE_ID;
            end

            if(:E_CONFERENCIA > 1)then
            begin
                exception "..." 'ESTE ITEM JA FOI CONFERIDO';
            end

            if(cast(:QUANTIDADE as numeric(15,4)) <> cast(:quantidade as numeric(15,4)))then
            begin
                exception "..." 'ESTE ITEM JA FOI UTILIZADO';
            end
        end
    end
    ELSE
    BEGIN

        for
            SELECT   first 1
                i.controle,
                I.CONFERENCIA,
                I.QUANTIDADE,
                I.localizacao_codigo,
                I.tipo
            FROM TBESTOQUE_TRANSACAO_ITEM I

            WHERE I.TABELA = 'TBREMESSA_CONSUMO'
            AND I.TABELA_NIVEL = 4
            AND I.TIPO = 'E'
            AND I.REMESSA_ITEM_CONTROLE = :ID_CODBARRAS
            AND I.ESTOQUE_TRANSACAO_REGRA_ID > 0

             order by i.controle desc
        INTO
            :E_ESTOQUE_ID,
            :E_CONFERENCIA,
            :E_QUANTIDADE,
            :E_LOCALIZACAO,
            :E_TIPO
        do
        begin

            if(:E_CONFERENCIA = 1)then
            begin
                exception "..." 'ESTE ITEM NAO FOI CONFERIDO.';
            end

        end
    END


    if(:SITUACAO = 3)then
    begin
        --exception "..." 'Este talao ja foi liberado';
    end


    TAMANHO_DESCRICAO = FN_TAMANHO_PRODUTO(:PRODUTO_ID,:TAMANHO);
    :perfil_up = :PERFIL;

    QUANTIDADE_ALT = coalesce(QUANTIDADE_ALT,0);
    suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbdefeito_trans_item_b0iu_01 for tbdefeito_transacao_item
active before insert or update position 0
AS
DECLARE VARIABLE ESTABELECIMENTO INTEGER;
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE USUARIO_NOME VARCHAR(20);
DECLARE VARIABLE UM    VARCHAR(3);
DECLARE VARIABLE DESCR VARCHAR(100);
DECLARE VARIABLE FRAC  CHAR(1);
BEGIN

   USUARIO_NOME = (Select MON$USER from mon$attachments where mon$attachment_id = current_connection);

   if (:Usuario_Nome <> 'SYSDBA' and :Usuario_Nome <> 'GC') Then
       Begin

       USUARIO_ID = Coalesce((Select First 1 U.Codigo From TbUsuario U Where U.USUARIO = :USUARIO_NOME and U.Status = '1'),0);

       if (NEW.QUANTIDADE > 10000) then
           BEGIN
             Exception "..." 'QUANTIDADE INVALIDA: '||NEW.QUANTIDADE||
             ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
           END

          if (:USUARIO_ID = 0) then
              BEGIN
                  Exception "..." 'USUÁRIO INATIVO OU NÃO LOCALIZADO: '||:USUARIO_NOME||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END

        Estabelecimento = Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID),0);

        For Select First 1 U.SIGLA, P.DESCRICAO, U.PODE_FRACIONAR,
        IIF(:ESTABELECIMENTO>0,Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID and E.Estabelecimento_Codigo = New.Estabelecimento_Id),0),-1)
        From TbProduto P, TbUnidadeMedida U
        Where P.Codigo = New.Produto_Id and P.Unidademedida_Sigla2 = U.Sigla
        Into :UM, :DESCR, :FRAC, :ESTABELECIMENTO
        Do
        Begin
          if (:ESTABELECIMENTO = 0) then
              BEGIN
                  Exception "..." 'USUARIO NAO TEM PERMISSAO DE REGISTRAR DEFEITOS DO ESTABELECIMENTO INFORMADO: '||
                  :ESTABELECIMENTO||'-'||Coalesce((Select First 1 E.NomeFantasia From TbEstabelecimento E Where E.Codigo = New.Estabelecimento_Id),'')||' -> USUÁRIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
--        if (:FAM_USUARIO = 0) then
--            BEGIN
--                Exception "..." 'USUÁRIO NÃO TEM PERMISSÃO DE REGISTRAR DEFEITOS DA FAMÍLIA DESTE PRODUTO: '||
--                :FAMILIA_ID||'-'||Coalesce((Select First 1 F.Descricao From TbFamilia F Where F.Codigo = :FAMILIA_ID),'')||' -> USUÁRIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
--                ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
--            END
          if (:FRAC = 'N') then
              BEGIN
              if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
                  Exception "..." 'PRODUTO NAO PERMITE QUANTIDADE FRACIONADA: '||
                  NEW.PRODUTO_ID||'-'||:DESCR||' QUANT.'||NEW.QUANTIDADE||' '||:UM||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          NEW.USUARIO_ID = :USUARIO_ID;
        End
     End
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbestoque_trans_item_b0iu_01 for tbestoque_transacao_item
active before insert position 0
AS
DECLARE VARIABLE ESTABELECIMENTO INTEGER;
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE USUARIO_NOME VARCHAR(20);
DECLARE VARIABLE UM    VARCHAR(3);
DECLARE VARIABLE DESCR VARCHAR(200);
DECLARE VARIABLE FRAC  CHAR(1);
DECLARE VARIABLE PROD_STATUS CHAR(1);
DECLARE VARIABLE FAMILIA_ID  INTEGER;
DECLARE VARIABLE FAM_USUARIO INTEGER;
DECLARE VARIABLE FAM_OPERACAO VARCHAR(200);
DECLARE VARIABLE Loc VARCHAR(600);
declare variable Operacao_id INTEGER;
declare variable GRADE_ID INTEGER;
declare variable CCUSTO varchar(10);
BEGIN

   if (NEW.QUANTIDADE < 0 or
       NEW.T01 < 0 or NEW.T02 < 0 or NEW.T03 < 0 or NEW.T04 < 0 or NEW.T05 < 0 or
       NEW.T06 < 0 or NEW.T07 < 0 or NEW.T08 < 0 or NEW.T09 < 0 or NEW.T10 < 0 or
       NEW.T11 < 0 or NEW.T12 < 0 or NEW.T13 < 0 or NEW.T14 < 0 or NEW.T15 < 0 or
       NEW.T16 < 0 or NEW.T17 < 0 or NEW.T18 < 0 or NEW.T19 < 0 or NEW.T20 < 0) then
       BEGIN
          Exception "..." 'QUANTIDADE NAO PODE SER NEGATIVO: '||
          ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
       END

   if (New.Tipo <> 'B') then --Beneficiamento
       Begin
       OPERACAO_ID = Coalesce((Select First 1 O.ID From TbOperacao O
                            Where O.Codigo = New.Operacao_Codigo
                              and O.Tipo   = New.Tipo
                              and O.NotaFiscal = IIF(new.nfe_item_controle>0 or New.Nfs_item_controle > 0,'1','0')),0);
       End else
       Begin
       OPERACAO_ID = Coalesce((Select First 1 O.ID From TbOperacao O
                            Where O.Codigo = New.Operacao_Codigo
                              and O.NotaFiscal = IIF(new.nfe_item_controle>0 or New.Nfs_item_controle > 0,'1','0')),0);
       End

   if (:OPERACAO_ID = 0) then
       BEGIN
          Exception "..." 'OPERACAO INVALIDA OU NAO CADASTRADA: '||coalesce(New.Operacao_Codigo,'')||
          ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
       END

   USUARIO_NOME = (Select MON$USER from mon$attachments where mon$attachment_id = current_connection);
   USUARIO_NOME = current_user;

   if (:Usuario_Nome <> 'SYSDBA' and :Usuario_Nome <> 'GC') Then
       Begin

       USUARIO_ID = Coalesce((Select First 1 U.Codigo From TbUsuario U Where U.USUARIO = :USUARIO_NOME and U.Status = '1'),0);

          if (:USUARIO_ID = 0) then
              BEGIN
                  Exception "..." 'USUARIO INATIVO OU NAO CADASTRADO: '||:USUARIO_NOME||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END

        Estabelecimento = Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID),0);
        if (New.Nfs_Item_Controle > 0 or New.Nfe_Item_Controle > 0) then
            Begin
            Fam_Operacao = '';
            End else
            Begin
            Fam_Operacao = Coalesce((Select First 1 O.Familias From TbOperacao O Where O.Codigo = New.Operacao_Codigo),'');
            End

        For
        Select First 1
        U.SIGLA,
        P.DESCRICAO,
        U.PODE_FRACIONAR,
        P.FAMILIA_CODIGO,
        Coalesce((Select First 1 F.Familia_Id From Tbusuario_Familia F Where F.Familia_Id = P.Familia_Codigo and F.Usuario_Id = :USUARIO_ID),0),
        Coalesce((Select First 1 C.Valor_Ext From TbControle_Usuario C Where C.Usuario_Id = :USUARIO_ID and C.Id = 127),''),
        IIF(:ESTABELECIMENTO>0,Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID and E.Estabelecimento_Codigo = New.Estabelecimento_Codigo),0),-1),
        P.STATUS,
        P.GRADE_CODIGO,
        Coalesce((Select First 1 L.CCusto From TbLocalizacao L Where L.Codigo = New.Localizacao_Codigo),'')
        From TbProduto P, TbUnidadeMedida U
        Where P.Codigo = New.Produto_Codigo and P.Unidademedida_Sigla2 = U.Sigla
        Into :UM, :DESCR, :FRAC, :FAMILIA_ID, :FAM_USUARIO, :Loc, :ESTABELECIMENTO, :PROD_STATUS, :GRADE_ID, :CCUSTO
        Do
        Begin
          if (:PROD_STATUS <> '1') then
              BEGIN
                Exception "..." 'TRANSACAO DE ESTOQUE NAO PERMITIDA PARA PRODUTO INATIVO, PRODUTO:'||coalesce(New.Produto_Codigo,0)||'  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END

           if (:GRADE_ID > 0) Then
               begin
               if (NEW.T01 + NEW.T02 + NEW.T03 + NEW.T04 + NEW.T05 +
                   NEW.T06 + NEW.T07 + NEW.T08 + NEW.T09 + NEW.T10 +
                   NEW.T11 + NEW.T12 + NEW.T13 + NEW.T14 + NEW.T15 +
                   NEW.T16 + NEW.T17 + NEW.T18 + NEW.T19 + NEW.T20 <= 0) then
                   BEGIN
                   Exception "..." 'PRODUTO COM GRADE, EXIGE QUANTIDADE EM ALGUM TAMANHO! PROD.'||NEW.PRODUTO_CODIGO||' QUANT.'||NEW.QUANTIDADE||' OPER.'||NEW.OPERACAO_CODIGO||'. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                   END
               End else
           if (:GRADE_ID = 0) Then
               begin
               if (NEW.T01 + NEW.T02 + NEW.T03 + NEW.T04 + NEW.T05 +
                   NEW.T06 + NEW.T07 + NEW.T08 + NEW.T09 + NEW.T10 +
                   NEW.T11 + NEW.T12 + NEW.T13 + NEW.T14 + NEW.T15 +
                   NEW.T16 + NEW.T17 + NEW.T18 + NEW.T19 + NEW.T20 > 0) then
                   BEGIN
                   Exception "..." 'PRODUTO SEM GRADE, NAO HA NECESSIDADE DE QUANTIDADE POR TAMANHO! '||
                   ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                   END
               End

          if (:ESTABELECIMENTO = 0) then
              BEGIN
                  Exception "..." 'USUARIO NAO TEM PERMISSAO DE MOVIMENTAR ESTOQUE DO ESTABELECIMENTO INFORMADO: '||
                  :ESTABELECIMENTO||'-'||Coalesce((Select First 1 E.NomeFantasia From TbEstabelecimento E Where E.Codigo = New.Estabelecimento_Codigo),'')||' -> USUARIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          if (Position(lPad(New.Localizacao_Codigo,2,'0'),:LOC) = 0) Then
              BEGIN
                Exception "..." 'USUARIO NAO TEM PERMISSAO DE MOVIMENTAR ESTOQUE COM A LOCALIZACAO INFORMADA: '||New.Localizacao_Codigo||'-'||
                Coalesce((Select First 1 L.Descricao From TbLocalizacao L Where L.Codigo = New.Localizacao_Codigo),'')||' -> USUARIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
                ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          if (:FAM_USUARIO = 0) then
              BEGIN
                  Exception "..." 'USUARIO NAO TEM PERMISSAO DE MOVIMENTAR ESTOQUE DA FAMILIA DESTE PRODUTO: '||
                  :FAMILIA_ID||'-'||Coalesce((Select First 1 F.Descricao From TbFamilia F Where F.Codigo = :FAMILIA_ID),'')||' -> USUARIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          if (:FRAC = 'N') then
              BEGIN
              if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
                  Exception "..." 'PRODUTO NAO PERMITE QUANTIDADE FRACIONADA: '||
                  NEW.PRODUTO_CODIGO||'-'||:DESCR||' QUANT.'||NEW.QUANTIDADE||' '||:UM||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          if (:FAM_OPERACAO <> '' and Position(lPad(:FAMILIA_ID,4,'0'),:FAM_OPERACAO) = 0) then
              BEGIN
                  Exception "..." 'OPERACAO NAO PODE SER USADA COM A FAMILIA DE PRODUTOS INFORMADA.'||
                  'OPERACAO: '||NEW.OPERACAO_CODIGO||'- FAMILIA: '||:FAMILIA_ID||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END

          if ((COALESCE(NEW.CENTRO_DE_CUSTO, '') = '') AND (COALESCE(:CCUSTO, '') <> '')) then
              BEGIN
              NEW.CENTRO_DE_CUSTO = :CCUSTO;
              END

          NEW.USUARIO_CODIGO = :USUARIO_ID;
        End
     End
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbkanban_lote_b2i for tbkanban_lote
active before insert position 2
AS
declare variable ID INTEGER;
declare variable LOCALIZACAO_DESCRICAO VARCHAR(100);
declare variable QUANTIDADE_NECESSIDADE NUMERIC(15,5);
begin

    IF ( NEW.LOCALIZACAO_ID IS NULL ) THEN
    BEGIN
        EXCEPTION "..." 'INFORME UMA LOCALIZACAO DE ESTOQUE PARA INICIAR UM LOTE';

    END
    
    QUANTIDADE_NECESSIDADE = COALESCE((
            SELECT ESTOQUE_NECESSIDADE
            FROM (
                SELECT
                    SUM(IIF( ESTOQUE_FISICO < ESTOQUE_MIN, ESTOQUE_MAX - ESTOQUE_FISICO, 0 )) ESTOQUE_NECESSIDADE
    
                FROM (
                    SELECT
                        E.ESTOQUE_MIN,
                        E.ESTOQUE_MAX,
                        COALESCE(
                        (SELECT FIRST 1 SUM(SP.SALDO)
                           FROM VWESTOQUE_SALDO_PRODUTO SP
                          WHERE SP.ESTABELECIMENTO_ID = E.ESTABELECIMENTO_ID
                            AND SP.LOCALIZACAO_ID     = E.LOCALIZACAO_ID
                            AND SP.PRODUTO_ID         = E.PRODUTO_ID
                            AND SP.TAMANHO            = E.TAMANHO),0) ESTOQUE_FISICO,
                        COALESCE(
                        (SELECT FIRST 1 SUM(SP.SALDO)
                           FROM VWESTOQUE_SALDO_PRODUTO SP
                          WHERE SP.ESTABELECIMENTO_ID = E.ESTABELECIMENTO_ID
                            AND SP.LOCALIZACAO_ID     = E.KANBAN_LOCALIZACAO_ID
                            AND SP.PRODUTO_ID         = E.PRODUTO_ID
                            AND SP.TAMANHO            = E.TAMANHO),0) PRODUTO_ESTOQUE_FISICO,
                        P.UNIDADEMEDIDA_SIGLA2 UM
        
                    FROM
                        VWESTOQUE_MINIMO_TAMANHO E,
                        TBPRODUTO P
        
        
                    WHERE TRUE
                    AND P.CODIGO                 = E.PRODUTO_ID
                    AND P.CODIGO                 = E.PRODUTO_ID
                    AND E.HABILITA_KANBAN        = '1'
                    AND E.LOCALIZACAO_ID         = NEW.LOCALIZACAO_ID
                    ) X
                ) Y
            WHERE ESTOQUE_NECESSIDADE > 0),0);

    IF ( QUANTIDADE_NECESSIDADE = 0 ) THEN
    BEGIN
        EXCEPTION "..." 'NAO HA NECESSIDADE DE INICIAR UM NOVO LOTE PARA ESTA LOCALIZACAO';
    END


    ID = COALESCE((
            SELECT FIRST 1 L.ID
              FROM TBKANBAN_LOTE L
             WHERE L.LOCALIZACAO_ID = NEW.LOCALIZACAO_ID
               AND L.STATUS         = '0'),0);

    IF ( ID > 0 ) THEN
    BEGIN
        LOCALIZACAO_DESCRICAO = COALESCE((
                                    SELECT FIRST 1 DESCRICAO
                                      FROM TBLOCALIZACAO L
                                     WHERE L.CODIGO = NEW.LOCALIZACAO_ID),'');


        EXCEPTION "..." 'O LOTE ' || FN_LPAD(ID,5,'0') || ' JA ESTA INICIADO PARA A LOCALIZACAO: ' || NEW.LOCALIZACAO_ID || ' - ' || LOCALIZACAO_DESCRICAO || '. FINALIZE-O PARA PODER INICIAR UM NOVO LOTE.';

    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttboc_item_b0iu_01 for tboc_item
inactive before insert or update position 0
AS
DECLARE VARIABLE UM VARCHAR(3);
DECLARE VARIABLE DESCR VARCHAR(100);
DECLARE VARIABLE FRAC CHAR(1);
DECLARE VARIABLE LOC1 INTEGER;
DECLARE VARIABLE LOC2 INTEGER;


BEGIN


For
    Select First 1
        coalesce(U.SIGLA,'') as SIGLA,
        P.DESCRICAO,
        U.PODE_FRACIONAR,
        P.LOCALIZACAO_CODIGO,
        (SELECT FIRST 1 F.LOCALIZACAO_CODIGO FROM TBFAMILIA F WHERE F.CODIGO = P.FAMILIA_CODIGO)
    From TbProduto P
    left join TbUnidadeMedida U on P.Unidademedida_Sigla2 = U.Sigla
    Where P.Codigo = New.Produto_Codigo
    Into
        :UM,
        :DESCR,
        :FRAC,
        :LOC1,
        :LOC2
Do
Begin

  if(UM = '')then
  begin
     exception "..." 'Unidades de medida do produto nao foi encontrada. Produto:' || New.Produto_Codigo;
  end

  if (New.Controle > 0) then
      Begin
      /* Trigger text */

      if ((NEW.VALOR * NEW.QUANTIDADE) + NEW.ACRESCIMO - NEW.DESCONTO < 0) THEN
          Exception "..." 'VALOR TOTAL DO ITEM INVALIDO, NAO PODE SER NEGATIVO! '||
          NEW.PRODUTO_CODIGO||'-'||:DESCR||
          ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';


      if (:FRAC = 'N') then
          BEGIN
          if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
              Exception "..." 'PRODUTO NAO PERMITE QUANTIDADE FRACIONADA: '||
              NEW.PRODUTO_CODIGO||'-'||:DESCR||' QUANT.'||NEW.QUANTIDADE||' '||:UM||
              ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
          END
    
       if (Coalesce(New.Localizacao_Codigo,0) = 0) then
           Begin
           if (:Loc1 > 0) then
               Begin
               New.Localizacao_Codigo = :Loc1;
               End else
           if (:Loc2 > 0) then
               Begin
               New.Localizacao_Codigo = :Loc2;
               End else
               Begin
               Exception "..." 'LOCALIZACAO PADRAO DE ESTOQUE DO PRODUTO NAO LOCALIZADA '||
               NEW.PRODUTO_CODIGO||'-'||:DESCR||
               ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
               End
           End


    if (Inserting) then
        Begin
            UPDATE OR INSERT INTO TbOc_Item_Saldo (
            Oc,Oc_Item_Controle,Quantidade,        
            T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,
            T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)
            VALUES (NEW.OC,NEW.CONTROLE,NEW.QUANTIDADE,
            NEW.T01,NEW.T02,NEW.T03,NEW.T04,NEW.T05,NEW.T06,NEW.T07,NEW.T08,NEW.T09,NEW.T10,
            NEW.T11,NEW.T12,NEW.T13,NEW.T14,NEW.T15,NEW.T16,NEW.T17,NEW.T18,NEW.T19,NEW.T20)
            MATCHING (Oc,Oc_Item_Controle);
        End

    if (Updating) then
        Begin
        --EXCEPTION "..."NEW.QUANTIDADE||' - '||OLD.QUANTIDADE;   6 -> 3

        if (NEW.QUANTIDADE <> OLD.QUANTIDADE or
            NEW.T01 <> OLD.T01 or NEW.T02 <> OLD.T02 or
            NEW.T03 <> OLD.T03 or NEW.T04 <> OLD.T04 or
            NEW.T05 <> OLD.T05 or NEW.T06 <> OLD.T06 or
            NEW.T07 <> OLD.T07 or NEW.T08 <> OLD.T08 or
            NEW.T09 <> OLD.T09 or NEW.T10 <> OLD.T10 or
            NEW.T11 <> OLD.T11 or NEW.T12 <> OLD.T12 or
            NEW.T13 <> OLD.T13 or NEW.T14 <> OLD.T14 or
            NEW.T15 <> OLD.T15 or NEW.T16 <> OLD.T16 or
            NEW.T17 <> OLD.T17 or NEW.T18 <> OLD.T18 or
            NEW.T19 <> OLD.T19 or NEW.T20 <> OLD.T20) then
            Begin
                --UPDATE OR INSERT INTO TbOc_Item_Saldo T (
                --Oc,Oc_Item_Controle,Quantidade,
                --T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,
                --T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)
                --VALUES (NEW.OC,NEW.CONTROLE, NEW.QUANTIDADE ,
                --NEW.T01,NEW.T02,NEW.T03,NEW.T04,NEW.T05,NEW.T06,NEW.T07,NEW.T08,NEW.T09,NEW.T10,
                --NEW.T11,NEW.T12,NEW.T13,NEW.T14,NEW.T15,NEW.T16,NEW.T17,NEW.T18,NEW.T19,NEW.T20)
                --MATCHING (Oc,Oc_Item_Controle);
                UPDATE TBOC_ITEM_SALDO T
                SET OC = NEW.OC,
                    QUANTIDADE  =  T.QUANTIDADE - (OLD.QUANTIDADE - NEW.QUANTIDADE),
                    T01         =  T.T01 - (OLD.T01 - NEW.T01),
                    T02         =  T.T02 - (OLD.T02 - NEW.T02),
                    T03         =  T.T03 - (OLD.T03 - NEW.T03),
                    T04         =  T.T04 - (OLD.T04 - NEW.T04),
                    T05         =  T.T05 - (OLD.T05 - NEW.T05),
                    T06         =  T.T06 - (OLD.T06 - NEW.T06),
                    T07         =  T.T07 - (OLD.T07 - NEW.T07),
                    T08         =  T.T08 - (OLD.T08 - NEW.T08),
                    T09         =  T.T09 - (OLD.T09 - NEW.T09),
                    T10         =  T.T10 - (OLD.T10 - NEW.T10),
                    T11         =  T.T11 - (OLD.T11 - NEW.T11),
                    T12         =  T.T12 - (OLD.T12 - NEW.T12),
                    T13         =  T.T13 - (OLD.T13 - NEW.T13),
                    T14         =  T.T14 - (OLD.T14 - NEW.T14),
                    T15         =  T.T15 - (OLD.T15 - NEW.T15),
                    T16         =  T.T16 - (OLD.T16 - NEW.T16),
                    T17         =  T.T17 - (OLD.T17 - NEW.T17),
                    T18         =  T.T18 - (OLD.T18 - NEW.T18),
                    T19         =  T.T19 - (OLD.T19 - NEW.T19),
                    T20         =  T.T20 - (OLD.T20 - NEW.T20)
                WHERE (OC_ITEM_CONTROLE = NEW.CONTROLE);

            End
        End

    End

End

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_devolucao_troca_b03i for tbpdv_devolucao_troca
inactive before insert or update or delete position 2
AS

/* INATIVA POIS É NECESSÁRIO BAIXAR SALDO APENAS COM A NOTA DE ENTRADA DE DEVOLUÇÃO  */
DECLARE VARIABLE NFS_CONTROLE         INTEGER;
DECLARE VARIABLE NUMERO_CFE           INTEGER;
DECLARE VARIABLE ITEM_ID              INTEGER;
DECLARE VARIABLE QUANTIDADE           NUMERIC(15,8);
DECLARE VARIABLE QUANTIDADE_ITEM_NFS  NUMERIC(15,8);
DECLARE VARIABLE SALDO_ATUALIZADO     NUMERIC(15,8);
begin
 IF(INSERTING) THEN
 BEGIN
     IF(NEW.TIPO_DOCUMENTO = 1)THEN
     BEGIN
        FOR SELECT
            a.nfs_controle,
            a.CONTROLE,
            t.QUANTIDADE,
            a.quantidade as quantidade_item_nfs,
            Z.QUANTIDADE - t.quantidade saldo_atualizado
        
            FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
            INNER JOIN TBNFS            C ON C.CONTROLE          = T.DOCUMENTO_CONTROLE
            LEFT  JOIN TBNFS_ITEM       A ON A.NFS_CONTROLE      = C.CONTROLE AND A.SEQUENCIA = T.ITEM_SEQUENCIA
            LEFT  JOIN TBNFS_ITEM_SALDO Z ON A.NFS_CONTROLE      = Z.NFS_CONTROLE AND A.CONTROLE = Z.NFS_ITEM_CONTROLE
            INNER JOIN TBPRODUTO        B ON B.CODIGO            = A.PRODUTO_CODIGO
            LEFT  JOIN TBMODELO         D ON D.CODIGO            = B.MODELO_CODIGO
            LEFT  JOIN TbUnidadeMedida  E ON E.SIGLA             = B.UNIDADEMEDIDA_SIGLA2
                    
            WHERE T.PDV_DEVOLUCAO_ID = NEW.ID
            AND C.EMPRESA_CODIGO     = NEW.CLIENTE_ID
            AND A.NFS_CONTROLE       = C.CONTROLE
            INTO :NFS_CONTROLE,
                 :ITEM_ID,
                 :QUANTIDADE,
                 :QUANTIDADE_ITEM_NFS,
                 :SALDO_ATUALIZADO
            DO
            BEGIN
               UPDATE TBNFS_ITEM_SALDO A SET A.QUANTIDADE = :SALDO_ATUALIZADO WHERE A.NFS_CONTROLE = :NFS_CONTROLE AND A.NFS_ITEM_CONTROLE = :ITEM_ID;
            END
     END
     ELSE
     BEGIN
        FOR SELECT A.PDV_CFE_ID,
                A.ID,
                T.QUANTIDADE,
                A.QUANTIDADE  as quantidade_item_nfs,
                (X.QUANTIDADE - t.quantidade) saldo_atualizado
            
                FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
                LEFT  JOIN TBPDV_CFE_ITEM       A ON A.SEQUENCIA  = T.ITEM_SEQUENCIA
                LEFT  JOIN TBPDV_CFE_ITEM_SALDO X ON X.PDV_CFE_ITEM_ID = A.ID AND X.PDV_CFE_ID = A.PDV_CFE_ID
                INNER JOIN TBPRODUTO            B ON B.CODIGO     = A.PRODUTO_ID
                INNER JOIN TBPDV_CFE            C ON C.ID         = T.DOCUMENTO_CONTROLE
                LEFT  JOIN TBMODELO             D ON D.CODIGO     = B.MODELO_CODIGO
                LEFT  JOIN TbUnidadeMedida      E ON E.SIGLA      = B.UNIDADEMEDIDA_SIGLA2
            
                WHERE T.PDV_DEVOLUCAO_ID = NEW.ID
                AND A.PDV_CFE_ID         = C.ID
                AND C.CLIENTE_ID         = NEW.CLIENTE_ID
        INTO :NFS_CONTROLE,
             :ITEM_ID,
             :QUANTIDADE,
             :QUANTIDADE_ITEM_NFS,
             :SALDO_ATUALIZADO
        DO
        BEGIN
           UPDATE TBPDV_CFE_ITEM_SALDO A SET A.QUANTIDADE = :SALDO_ATUALIZADO WHERE A.PDV_CFE_ID = :NFS_CONTROLE AND A.PDV_CFE_ITEM_ID = :ITEM_ID;
        END
     END
 END
 IF(DELETING)THEN
 BEGIN
  IF(OLD.TIPO_DOCUMENTO = 1)THEN
     BEGIN
        FOR SELECT
            a.nfs_controle,
            a.CONTROLE,
            t.QUANTIDADE,
            a.quantidade as quantidade_item_nfs,
            (t.quantidade) saldo_atualizado
        
            FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
            INNER JOIN TBNFS           C ON C.CONTROLE          = T.DOCUMENTO_CONTROLE
            LEFT  JOIN TBNFS_ITEM      A ON A.NFS_CONTROLE      = C.CONTROLE AND A.SEQUENCIA = T.ITEM_SEQUENCIA
            INNER JOIN TBPRODUTO       B ON B.CODIGO            = A.PRODUTO_CODIGO
            LEFT  JOIN TBMODELO        D ON D.CODIGO            = B.MODELO_CODIGO
            LEFT  JOIN TbUnidadeMedida E ON E.SIGLA             = B.UNIDADEMEDIDA_SIGLA2
                    
            WHERE T.PDV_DEVOLUCAO_ID = OLD.ID
            AND C.EMPRESA_CODIGO     = OLD.CLIENTE_ID
            AND A.NFS_CONTROLE       = C.CONTROLE
            INTO :NFS_CONTROLE,
                 :ITEM_ID,
                 :QUANTIDADE,
                 :QUANTIDADE_ITEM_NFS,
                 :SALDO_ATUALIZADO
            DO
            BEGIN
               UPDATE TBNFS_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + :SALDO_ATUALIZADO) WHERE A.NFS_CONTROLE = :NFS_CONTROLE AND A.NFS_ITEM_CONTROLE = :ITEM_ID;
            END
     END
     ELSE
     BEGIN
        FOR SELECT A.PDV_CFE_ID,
                A.ID,
                T.QUANTIDADE,
                A.QUANTIDADE as quantidade_item_nfs,
                (t.quantidade) saldo_atualizado
            
                FROM TBPDV_DEVOLUCAO_TROCA_ITEM T
                LEFT  JOIN TBPDV_CFE_ITEM       A ON A.SEQUENCIA  = T.ITEM_SEQUENCIA
                INNER JOIN TBPRODUTO            B ON B.CODIGO     = A.PRODUTO_ID
                INNER JOIN TBPDV_CFE            C ON C.ID         = T.DOCUMENTO_CONTROLE
                LEFT  JOIN TBMODELO             D ON D.CODIGO     = B.MODELO_CODIGO
                LEFT  JOIN TbUnidadeMedida      E ON E.SIGLA      = B.UNIDADEMEDIDA_SIGLA2
            
                WHERE T.PDV_DEVOLUCAO_ID = OLD.ID
                AND A.PDV_CFE_ID         = C.ID
                AND C.CLIENTE_ID         = OLD.CLIENTE_ID
        INTO :NFS_CONTROLE,
             :ITEM_ID,
             :QUANTIDADE,
             :QUANTIDADE_ITEM_NFS,
             :SALDO_ATUALIZADO
        DO
        BEGIN
           UPDATE TBPDV_CFE_ITEM_SALDO A SET A.QUANTIDADE = (A.QUANTIDADE + :SALDO_ATUALIZADO) WHERE A.PDV_CFE_ID = :NFS_CONTROLE AND A.PDV_CFE_ITEM_ID = :ITEM_ID;
        END
     END
 END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_item_b0i_00 for tbpedido_item
active before insert position 0
AS
DECLARE VARIABLE UM VARCHAR(3);
DECLARE VARIABLE DESCR VARCHAR(100);
DECLARE VARIABLE FRAC CHAR(1);
DECLARE VARIABLE LOC1 INTEGER;
DECLARE VARIABLE LOC2 INTEGER;
BEGIN
For Select First 1 U.SIGLA, P.DESCRICAO, U.PODE_FRACIONAR, P.LOCALIZACAO_CODIGO,
(SELECT FIRST 1 F.LOCALIZACAO_CODIGO FROM TBFAMILIA F WHERE F.CODIGO = P.FAMILIA_CODIGO)
From TbProduto P, TbUnidadeMedida U
Where P.Codigo = New.Produto_Codigo and P.Unidademedida_Sigla2 = U.Sigla
Into :UM, :DESCR, :FRAC, :LOC1, :LOC2
Do
Begin

  if (:FRAC = 'N') then
      BEGIN
      if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
          Exception "..." 'PRODUTO NÃO PERMITE QUANTIDADE FRACIONADA: '||
          NEW.PRODUTO_CODIGO||'-'||:DESCR||' QUANT.'||NEW.QUANTIDADE||' '||:UM||
          ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      END

   if (Coalesce(New.Localizacao_ID,0) = 0) then
       Begin
       if (:Loc1 > 0) then
           Begin
           New.Localizacao_ID = :Loc1;
           End else
       if (:Loc2 > 0) then
           Begin
           New.Localizacao_ID = :Loc2;
           End else
           Begin
           Exception "..." 'LOCALIZAÇÃO PADRÃO DE ESTOQUE DO PRODUTO NÃO LOCALIZADA '||
           NEW.PRODUTO_CODIGO||'-'||:DESCR||
           ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
           End
       End
End

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_item_b0u_00 for tbpedido_item
inactive before update position 0
AS
DECLARE VARIABLE UM VARCHAR(3);
DECLARE VARIABLE DESCR VARCHAR(100);
DECLARE VARIABLE FRAC CHAR(1);
DECLARE VARIABLE LOC1 INTEGER;
DECLARE VARIABLE LOC2 INTEGER;
BEGIN

  if (New.Quantidade <> Old.Quantidade or
      New.Produto_Codigo <> Old.Produto_Codigo) Then
      Begin

        For Select First 1 U.SIGLA, P.DESCRICAO, U.PODE_FRACIONAR, P.LOCALIZACAO_CODIGO,
        (SELECT FIRST 1 F.LOCALIZACAO_CODIGO FROM TBFAMILIA F WHERE F.CODIGO = P.FAMILIA_CODIGO)
        From TbProduto P, TbUnidadeMedida U
        Where P.Codigo = New.Produto_Codigo and P.Unidademedida_Sigla2 = U.Sigla
        Into :UM, :DESCR, :FRAC, :LOC1, :LOC2
        Do
        Begin
          if (:FRAC = 'N') then
              BEGIN
              if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
                  Exception "..." 'PRODUTO NÃO PERMITE QUANTIDADE FRACIONADA: '||
                  NEW.PRODUTO_CODIGO||'-'||:DESCR||' QUANT.'||NEW.QUANTIDADE||' '||:UM||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          if (Coalesce(New.Localizacao_ID,0) = 0) then
              Begin
               if (:Loc1 > 0) then
                   Begin
                   New.Localizacao_ID = :Loc1;
                   End else
               if (:Loc2 > 0) then
                   Begin
                   New.Localizacao_ID = :Loc2;
                   End else
                   Begin
                   Exception "..." 'LOCALIZAÇÃO PADRÃO DE ESTOQUE DO PRODUTO NÃO LOCALIZADA '||
                   NEW.PRODUTO_CODIGO||'-'||:DESCR||
                   ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                   End
              End
        End
      End
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_item_processado_b8u for tbpedido_item_processado
active before update position 8
AS
declare variable REMESSA_WEB VARCHAR(10);
declare variable REMESSA VARCHAR(15);
declare variable REMESSA_FAMILIA_ID INTEGER;
declare variable TALAO_ID INTEGER;
declare variable TALAO_GP_ID INTEGER;
declare variable TALAO_UP_ID INTEGER;
declare variable TALAO_ESTACAO INTEGER;
declare variable TALAO_LOCALIZACAO_ID INTEGER;   
declare variable TALAO_ESTOQUE_ID INTEGER;
declare variable PROGRAMACAO_STATUS VARCHAR(10);
declare variable PROGRAMACAO_ID INTEGER;
declare variable OPERACAO_ENTRADA VARCHAR(255);
declare variable UP_PERFIL VARCHAR(10);
declare variable UP_CCUSTO VARCHAR(10);
declare variable CONSUMO_ID INTEGER;
declare variable CONSUMO_PRODUTO_ID INTEGER;
declare variable CONSUMO_TAMANHO INTEGER;
declare variable CONSUMO_FATOR_UNIDADE NUMERIC(15,8);
declare variable CONSUMO_LOCALIZACAO_ID INTEGER;
declare variable CONSUMO_ESTOQUE_ID INTEGER;    
declare variable CONSUMO_QUANTIDADE NUMERIC(15,5);    
declare variable CONSUMO_QUANTIDADE_SALDO NUMERIC(15,5);
declare variable CONSUMO_UM VARCHAR(10);                
declare variable CONSUMO_FAMILIA_ID INTEGER;
declare variable CONSUMO_PERMITE_FRACAO VARCHAR(5);
declare variable ULTIMO_TALAO BOOLEAN;
declare variable PRODUCAO_TOTAL BOOLEAN;
declare variable CONSUMO_PRODUTO_TALAO INTEGER;
begin

    SELECT FIRST 1
           R.REMESSA,
           COALESCE(WEB,'0'),
           R.FAMILIA_ID
      FROM VWREMESSA R
     WHERE R.REMESSA_ID = NEW.REMESSA
     INTO REMESSA,
          REMESSA_WEB,
          REMESSA_FAMILIA_ID;

    IF ( REMESSA_WEB = '2' ) THEN
    BEGIN
        /* FINALIZANDO O TALAO DETALHADO */
        IF ( OLD.SITUACAO < 2 AND NEW.SITUACAO = 2 ) THEN
        BEGIN
    
            SELECT FIRST 1
                   T.ID,
                   T.GP_ID,
                   T.UP_ID,
                   T.ESTACAO
              FROM VWREMESSA_TALAO T
             WHERE T.REMESSA_ID = NEW.REMESSA
               AND T.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE
              INTO TALAO_ID,
                   TALAO_GP_ID,
                   TALAO_UP_ID,
                   TALAO_ESTACAO;
            /*
            IF ( NOT FN_GP_REMESSA_LIBERADA(NEW.REMESSA,:TALAO_GP_ID,:TALAO_UP_ID) ) THEN
            BEGIN
                EXCEPTION "..." 'REMESSA BLOQUEADA PARA PRODUCAO.';
            END
            */
    
            /* VERIFICA SE EH O ULTIMO TALAO DA SEQUENCIA */
            ULTIMO_TALAO = IIF(COALESCE((
                SELECT COUNT(D.ID)
                  FROM VWREMESSA_TALAO_DETALHE D
                 WHERE D.REMESSA_ID = NEW.REMESSA
                   AND D.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE
                   AND D.STATUS < 2
            ),0) = 1,TRUE, FALSE);
    
            SELECT ID,
                   STATUS
              FROM TBPROGRAMACAO P
             WHERE P.TABELA_ID = :TALAO_ID
               AND P.TIPO = 'A'
              INTO PROGRAMACAO_ID,
                   PROGRAMACAO_STATUS;
    
            IF ( PROGRAMACAO_STATUS <> '2' ) THEN
            BEGIN
                EXCEPTION "..." 'O talão('||:TALAO_ID||') não está em produção. Operação cancelada.';
            END
    
            /* SE FOR O ULTIMO TALAO, ATUALIZA O TALAO ACUMULADO PARA PRODUZIDO E A PROGRAMACAO PARA FINALIZADO */
            IF ( ULTIMO_TALAO ) THEN
            BEGIN
                          
                UPDATE TBPROGRAMACAO P
                   SET P.STATUS = '3',
                       P.DATAHORA_FINALIZADO = iif(coalesce(p.flag_data,0) = 0, CURRENT_TIMESTAMP, P.DATAHORA_FINALIZADO)
                 WHERE P.TABELA_ID = :TALAO_ID
                   AND P.TIPO      = 'A';
    
                INSERT INTO TBPROGRAMACAO_REGISTRO (
                    PROGRAMACAO_ID,
                    STATUS,
                    OPERADOR_ID
                ) VALUES (
                   :PROGRAMACAO_ID,       
                   2,
                   NEW.OPERADOR_ID_PRODUCAO
                );
    
                UPDATE VWREMESSA_TALAO T
                   SET T.STATUS = 2,
                       T.DATA_PRODUCAO = FN_DATA_PRODUCAO()
                 WHERE T.ID     = :TALAO_ID;
    
    --            UPDATE TBUP_ESTACAO
    --               SET TALAO_ID = 0,
    --                   INCREMENTO = 1
    --             WHERE (UP_ID = :TALAO_UP_ID) AND (ID = :TALAO_ESTACAO);
    
                
                EXECUTE PROCEDURE SPU_PROCESSAR_TEMPO_REALIZAD_V2((
                    SELECT FIRST 1 ID
                      FROM TBPROGRAMACAO P
                     WHERE P.TABELA_ID = :TALAO_ID));
    
                EXECUTE PROCEDURE SPU_PROGRAMACAO_PRODUZIDO1(
                    NEW.ESTABELECIMENTO_CODIGO,
                    'A',
                    :TALAO_ID
                );
            END
    
            /* CAPTURA A LOCALIZACAO DE ENTRADA NO ESTOQUE */
            TALAO_LOCALIZACAO_ID = COALESCE(( SELECT FIRST 1 P.LOCALIZACAO_CODIGO FROM TBPRODUTO P WHERE P.CODIGO = NEW.PRODUTO_CODIGO ),0);
            
            /* CAPTURA A OPERACAO DE ESTOQUE */
            OPERACAO_ENTRADA = (SELECT FIRST 1 VALOR_EXT FROM TBCONTROLE_N WHERE ID = 30);
            
            /* CAPTURA O CCUSTO DA TRANSACAO */
            SELECT FIRST 1
                   U.CCUSTO,
                   U.PERFIL
              FROM TBUP U
             WHERE U.ID = :TALAO_UP_ID
              INTO UP_CCUSTO,
                   UP_PERFIL;
            

            
            NEW.ESTEIRA_PRODUCAO = TALAO_GP_ID;
            NEW.SETOR_CODIGO     = TALAO_UP_ID;
    
            /* GUARDA DATA E HORA DE PRODUCAO */
            NEW.HORA_PRODUCAO = CURRENT_TIMESTAMP;
    
            /* GUARDA DATA DE PRODUCAO DO TURNO CORRENTE */
            NEW.DATA_PRODUCAO =  FN_DATA_PRODUCAO();

            /* ATUALIZA A QUANTIDADE PRODUZIDA NO TALAO DETALHADO */
            IF ( NOT (COALESCE(NEW.QUANTIDADE_PRODUCAO,0) > 0) ) THEN
            BEGIN
                NEW.QUANTIDADE_PRODUCAO = NEW.QUANTIDADE_PEDIDO;
            END

            IF ( NEW.QUANTIDADE_PRODUCAO <> NEW.QUANTIDADE_PEDIDO ) THEN
            BEGIN
                FN_OPERADOR_AUTENTICACAO(NEW.OPERADOR_ID_PRODUCAO,34); /* REGISTRAR PRODUCAO PARCIAL */
            END

            NEW.QUANTIDADE_SALDO    = NEW.QUANTIDADE_PRODUCAO;


            PRODUCAO_TOTAL = COALESCE((SELECT IIF(SUM(P.QUANTIDADE_PEDIDO) = (SUM(P.QUANTIDADE_PRODUCAO)+NEW.QUANTIDADE_PRODUCAO),TRUE,FALSE)
                                             FROM TBPEDIDO_ITEM_PROCESSADO P
                                            WHERE P.REMESSA = NEW.REMESSA
                                              AND P.REMESSA_ACUMULADO_CONTROLE = NEW.REMESSA_ACUMULADO_CONTROLE),TRUE);
    
    
    ---------------- NAO SERA MAIS APLICADO --------------
    ---------- ENTRADA VIA CONFERENCIA DO COLETOR --------
    ------------------------------------------------------    
    --        /* GERA O ID DA TRANSACAO DE ENTRADA NO ESTOQUE */
    --        TALAO_ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);
    --        /* GUARDA O ID DA TRANSACAO DE ESTOQUE NO TALAO DETALHADO */
    --        NEW.ESTOQUE_ID = :TALAO_ESTOQUE_ID;
    --        /* REGISTRA A ENTRADA NO ESTOQUE DO TALAO DETALHADO */
    --        EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO(
    --            'TBPEDIDO_ITEM_PROCESSADO',
    --            0,
    --            NEW.CONTROLE,
    --            NEW.ESTABELECIMENTO_CODIGO,
    --            :TALAO_LOCALIZACAO_ID,
    --            NEW.DATA_PRODUCAO,
    --            NEW.PRODUTO_CODIGO,
    --            NEW.TAMANHO,
    --            NEW.QUANTIDADE_PRODUCAO,
    --            'E',
    --            OPERACAO_ENTRADA,
    --            '0',
    --            :CCUSTO,
    --            'WEB22180 - ENTRADA POR REMESSA DE PRODUCAO',
    --            NEW.ESTOQUE_ID
    --        );
    
        
    
            /* REALIZA AS BAIXAS DE CONSUMO GERAL AO TALAO */
            FOR
                SELECT
                    C.ID,
                    C.PRODUTO_ID,
                    C.TAMANHO,
                    C.FATOR_UNIDADE,
                    C.QUANTIDADE_SALDO,
                    P.UNIDADEMEDIDA_SIGLA2,
                    P.FAMILIA_CODIGO,
                    P.LOCALIZACAO_CODIGO
                FROM
                    VWREMESSA_CONSUMO C,
                    TBPRODUTO P
                WHERE
                    P.CODIGO = C.PRODUTO_ID
                AND C.REMESSA_ID = NEW.REMESSA
                AND C.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE
                AND COALESCE(C.REMESSA_TALAO_DETALHE_ID,0) = 0
                AND C.STATUS = '0'
                AND C.COMPONENTE = '0'
            INTO
                CONSUMO_ID,
                CONSUMO_PRODUTO_ID,
                CONSUMO_TAMANHO,
                CONSUMO_FATOR_UNIDADE,
                CONSUMO_QUANTIDADE_SALDO,
                CONSUMO_UM,
                CONSUMO_FAMILIA_ID,
                CONSUMO_LOCALIZACAO_ID
            DO
            BEGIN
    
                /* VERIFICA SE O PRODUTO PERMITE BAIXA FRACIONADA */
                CONSUMO_PERMITE_FRACAO = COALESCE((
                    SELECT U.PODE_FRACIONAR
                      FROM TbUnidadeMedida U
                     WHERE U.SIGLA = :CONSUMO_UM),'N');
    
                /* GERA O ID DA TRANSACAO DE SAIDA DO CONSUMO */
                CONSUMO_ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);
    
                /* REALIZA O CALCULO DE CONSUMO */
                /*
                   OBS1:
                       SE FOR O ULTIMO TALAO DETALHADO A SER PRODUZIDO A BAIXA DEVE SER IGUAL AO RESTANTE A SER CONSUMIDO,
                       SENAO, DEVERA SER CALCULDO BASEADO NA QUANTIDADE DO TALAO DETALHADO.
                   OBS2:
                       SE O PRODUTO NAO PERMITIR QUANTIDADE FRANCIONADA, O VALOR SERA ARREDONDADO PARA CIMA.
                */            
                CONSUMO_PRODUTO_TALAO = (
                    SELECT FIRST 1 Z.ID
                      FROM TBREMESSA_CONSUMO_TALAO Z
                     WHERE Z.TIPO = 1
                       AND Z.FAMILIA_ID = :REMESSA_FAMILIA_ID
                       AND (Z.INSUMO_PRODUTO_ID = :CONSUMO_PRODUTO_ID OR Z.INSUMO_FAMILIA_ID = :CONSUMO_FAMILIA_ID));
                CONSUMO_QUANTIDADE = IIF(ULTIMO_TALAO AND PRODUCAO_TOTAL,COALESCE(CONSUMO_QUANTIDADE_SALDO,0), COALESCE(IIF(CONSUMO_PRODUTO_TALAO > 0,NEW.QUANTIDADE_PEDIDO, NEW.QUANTIDADE_PRODUCAO) * CONSUMO_FATOR_UNIDADE,0));
                CONSUMO_QUANTIDADE = IIF(CONSUMO_PERMITE_FRACAO = 'S',CONSUMO_QUANTIDADE,FN_ARRENDONDAR_PARA_CIMA(CONSUMO_QUANTIDADE));
    
    
                IF ( CONSUMO_QUANTIDADE <= 0 ) THEN
                BEGIN
                    EXCEPTION "..." 'Quantidade consumida deverá ser maior que zero. Produto: ' || CONSUMO_PRODUTO_ID || ' Operação cancelada.';
                END
    
    
                /* VERIFICA SE O CONSUMO ESTÁ MAIOR QUE O PROJETADO. */
                /*
                    OBS: ESSE ERRO SO DEVE DISPARAR SE HOUVER PROBLEMA COM O FATOR UNIDADE OU SE O PRODUTO NAO PERMITIR FRACAO PARA CONSUMO
                 */
                IF ( CONSUMO_QUANTIDADE > CONSUMO_QUANTIDADE_SALDO ) THEN
                BEGIN
                    EXCEPTION "..." 'Quantidade consumida não deve ser maior que o saldo da projeção. Produto: ' || CONSUMO_PRODUTO_ID || ' QTD. CONS.:'||CONSUMO_QUANTIDADE||' QTD. SAL. CONS.:'||CONSUMO_QUANTIDADE_SALDO||' Operação cancelada.';
                END
    
                /* ATUALIZA A QUANTIDADE CONSUMIDA */
                UPDATE VWREMESSA_CONSUMO C
                   SET C.QUANTIDADE_CONSUMO = COALESCE(C.QUANTIDADE_CONSUMO,0) + :CONSUMO_QUANTIDADE,
                       C.ESTOQUE_ID = :CONSUMO_ESTOQUE_ID,
                       C.STATUS = IIF(:ULTIMO_TALAO,1,C.STATUS)
                 WHERE C.ID = :CONSUMO_ID;
    
    
    
    --            /* GUARDA A LOCALIZACAO DE PROCESSO (WIP) */
    --            CONSUMO_LOCALIZACAO_ID = COALESCE((
    --                SELECT FIRST 1 F.LOCALIZACAO_PROCESSO
    --                  FROM TBFAMILIA_FICHA F
    --                 WHERE F.FAMILIA_CODIGO         = :CONSUMO_FAMILIA_ID
    --                   AND F.ESTABELECIMENTO_CODIGO = NEW.ESTABELECIMENTO_CODIGO),0);
    --
    --            /* VERIFICA SE A LOCALIZACAO DE PROCESSO ESTA CONFIGURADA */
    --            IF ( CONSUMO_LOCALIZACAO_ID = 0 ) THEN
    --            BEGIN
    --                EXCEPTION "..." 'FAMILIA DO PRODUTO SEM LOCALIZACAO DE PROCESSO (WIP) DEFINIDA. ID PROD.' || CONSUMO_PRODUTO_ID || '. OPERACAO CANCELADA! ';
    --            END            
    
                /* REALIZA A TRANSACAO DE SAIDA DO CONSUMO */
                EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO_REGRA(
                    3,
                    :TALAO_GP_ID,
                    :UP_PERFIL,
                    :CONSUMO_FAMILIA_ID,  
                    :CONSUMO_LOCALIZACAO_ID,
                    'TBREMESSA_CONSUMO',
                    2,
                    :CONSUMO_ID,
                    NEW.ESTABELECIMENTO_CODIGO,
                    NEW.DATA_PRODUCAO,
                    :CONSUMO_PRODUTO_ID,
                    :CONSUMO_TAMANHO,
                    :CONSUMO_QUANTIDADE,
                    'S',
                    '1',
                    :UP_CCUSTO,
                    'WEB22180 - SAIDA POR CONSUMO DE REMESSA DE PRODUCAO. REMESSA: ' || REMESSA || ' TALAO: ' || FN_LPAD(NEW.REMESSA_ACUMULADO_CONTROLE,4,0),
                    :CONSUMO_ESTOQUE_ID,
                    NEW.REMESSA,
                    NEW.CONTROLE
                );
    
            END
    
    
            /* REALIZA AS BAIXAS DE CONSUMO GERAL AO TALAO */
            FOR
                SELECT
                    C.ID,
                    C.PRODUTO_ID,
                    C.TAMANHO,
                    C.FATOR_UNIDADE,
                    C.QUANTIDADE_SALDO,
                    P.UNIDADEMEDIDA_SIGLA2,
                    P.FAMILIA_CODIGO,
                    P.LOCALIZACAO_CODIGO
                FROM
                    VWREMESSA_CONSUMO C,
                    TBPRODUTO P
                WHERE
                    P.CODIGO = C.PRODUTO_ID
                AND C.REMESSA_ID = NEW.REMESSA
                AND C.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE
                AND C.REMESSA_TALAO_DETALHE_ID = NEW.CONTROLE
                AND C.STATUS = '0'
                AND C.COMPONENTE = '0'
            INTO
                CONSUMO_ID,
                CONSUMO_PRODUTO_ID,
                CONSUMO_TAMANHO,
                CONSUMO_FATOR_UNIDADE,
                CONSUMO_QUANTIDADE_SALDO,
                CONSUMO_UM,
                CONSUMO_FAMILIA_ID,
                CONSUMO_LOCALIZACAO_ID
            DO
            BEGIN
    
                /* VERIFICA SE O PRODUTO PERMITE BAIXA FRACIONADA */
                CONSUMO_PERMITE_FRACAO = COALESCE((
                    SELECT U.PODE_FRACIONAR
                      FROM TbUnidadeMedida U
                     WHERE U.SIGLA = :CONSUMO_UM),'N');
    
                /* GERA O ID DA TRANSACAO DE SAIDA DO CONSUMO */
                CONSUMO_ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);
    
                /* REALIZA O CALCULO DE CONSUMO */
                /*
                   OBS1:
                       SE FOR O ULTIMO TALAO DETALHADO A SER PRODUZIDO A BAIXA DEVE SER IGUAL AO RESTANTE A SER CONSUMIDO,
                       SENAO, DEVERA SER CALCULDO BASEADO NA QUANTIDADE DO TALAO DETALHADO.
                   OBS2:
                       SE O PRODUTO NAO PERMITIR QUANTIDADE FRANCIONADA, O VALOR SERA ARREDONDADO PARA CIMA.
                */
                CONSUMO_PRODUTO_TALAO = (
                    SELECT FIRST 1 Z.ID
                      FROM TBREMESSA_CONSUMO_TALAO Z
                     WHERE Z.TIPO = 1
                       AND Z.FAMILIA_ID = :REMESSA_FAMILIA_ID
                       AND (Z.INSUMO_PRODUTO_ID = :CONSUMO_PRODUTO_ID OR Z.INSUMO_FAMILIA_ID = :CONSUMO_FAMILIA_ID));
                CONSUMO_QUANTIDADE = IIF(ULTIMO_TALAO AND PRODUCAO_TOTAL,COALESCE(CONSUMO_QUANTIDADE_SALDO,0), COALESCE(IIF(CONSUMO_PRODUTO_TALAO > 0,NEW.QUANTIDADE_PEDIDO, NEW.QUANTIDADE_PRODUCAO) * CONSUMO_FATOR_UNIDADE,0));
                CONSUMO_QUANTIDADE = IIF(CONSUMO_PERMITE_FRACAO = 'S',CONSUMO_QUANTIDADE,FN_ARRENDONDAR_PARA_CIMA(CONSUMO_QUANTIDADE));
    
    
                IF ( CONSUMO_QUANTIDADE <= 0 ) THEN
                BEGIN
                    EXCEPTION "..." 'Quantidade consumida deverá ser maior que zero. Produto: ' || CONSUMO_PRODUTO_ID || ' Operação cancelada.';
                END
    
    
                /* VERIFICA SE O CONSUMO ESTÁ MAIOR QUE O PROJETADO. */
                /*
                    OBS: ESSE ERRO SO DEVE DISPARAR SE HOUVER PROBLEMA COM O FATOR UNIDADE OU SE O PRODUTO NAO PERMITIR FRACAO PARA CONSUMO
                 */
                IF ( CONSUMO_QUANTIDADE > CONSUMO_QUANTIDADE_SALDO ) THEN
                BEGIN
                    EXCEPTION "..." 'Quantidade consumida não deve ser maior que o saldo da projeção. Produto: ' || CONSUMO_PRODUTO_ID || ' QTD. CONS.:'||CONSUMO_QUANTIDADE||' QTD. SAL. CONS.:'||CONSUMO_QUANTIDADE_SALDO||' Operação cancelada.';
                END
    
                /* ATUALIZA A QUANTIDADE CONSUMIDA */
                UPDATE VWREMESSA_CONSUMO C
                   SET C.QUANTIDADE_CONSUMO = COALESCE(C.QUANTIDADE_CONSUMO,0) + :CONSUMO_QUANTIDADE,
                       C.ESTOQUE_ID = :CONSUMO_ESTOQUE_ID,
                       C.STATUS = 1
                 WHERE C.ID = :CONSUMO_ID;
    
    
    
    --            /* GUARDA A LOCALIZACAO DE PROCESSO (WIP) */
    --            CONSUMO_LOCALIZACAO_ID = COALESCE((
    --                SELECT FIRST 1 F.LOCALIZACAO_PROCESSO
    --                  FROM TBFAMILIA_FICHA F
    --                 WHERE F.FAMILIA_CODIGO         = :CONSUMO_FAMILIA_ID
    --                   AND F.ESTABELECIMENTO_CODIGO = NEW.ESTABELECIMENTO_CODIGO),0);
    --
    --            /* VERIFICA SE A LOCALIZACAO DE PROCESSO ESTA CONFIGURADA */
    --            IF ( CONSUMO_LOCALIZACAO_ID = 0 ) THEN
    --            BEGIN
    --                EXCEPTION "..." 'FAMILIA DO PRODUTO SEM LOCALIZACAO DE PROCESSO (WIP) DEFINIDA. ID PROD.' || CONSUMO_PRODUTO_ID || '. OPERACAO CANCELADA! ';
    --            END            
    
                /* REALIZA A TRANSACAO DE SAIDA DO CONSUMO */
                EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO_REGRA(
                    3,
                    :TALAO_GP_ID,
                    :UP_PERFIL,
                    :CONSUMO_FAMILIA_ID,  
                    :CONSUMO_LOCALIZACAO_ID,
                    'TBREMESSA_CONSUMO',
                    2,
                    :CONSUMO_ID,
                    NEW.ESTABELECIMENTO_CODIGO,
                    NEW.DATA_PRODUCAO,
                    :CONSUMO_PRODUTO_ID,
                    :CONSUMO_TAMANHO,
                    :CONSUMO_QUANTIDADE,
                    'S',
                    '1',
                    :UP_CCUSTO,
                    'WEB22180 - SAIDA POR CONSUMO DE REMESSA DE PRODUCAO. REMESSA: ' || REMESSA || ' TALAO: ' || FN_LPAD(NEW.REMESSA_ACUMULADO_CONTROLE,4,0),
                    :CONSUMO_ESTOQUE_ID,
                    NEW.REMESSA,
                    NEW.CONTROLE
                );
    
            END
    
    
    
        END
        ELSE
        /* CANCELANDO PRODUCAO */
        IF ( OLD.SITUACAO = 2 AND NEW.SITUACAO = 1 ) THEN
        BEGIN

            FN_OPERADOR_AUTENTICACAO(NEW.OPERADOR_ID_PRODUCAO,31); /* CANCELAR PRODUCAO */


            SELECT FIRST 1
                   T.ID,
                   T.GP_ID,
                   T.UP_ID,
                   T.ESTACAO
              FROM VWREMESSA_TALAO T
             WHERE T.REMESSA_ID = NEW.REMESSA
               AND T.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE
              INTO TALAO_ID,
                   TALAO_GP_ID,
                   TALAO_UP_ID,
                   TALAO_ESTACAO;

    
            SELECT ID,
                   STATUS
              FROM TBPROGRAMACAO P
             WHERE P.TABELA_ID = :TALAO_ID
               AND P.TIPO = 'A'
              INTO PROGRAMACAO_ID,
                   PROGRAMACAO_STATUS;


            IF ( PROGRAMACAO_STATUS <> 2 ) THEN
            BEGIN       
                UPDATE TBPROGRAMACAO P SET P.STATUS = 2 WHERE P.TIPO = 'A' AND P.TABELA_ID = :TALAO_ID;
    
                INSERT INTO TBPROGRAMACAO_REGISTRO (
                    PROGRAMACAO_ID,
                    STATUS,
                    OPERADOR_ID
                ) VALUES (
                   :PROGRAMACAO_ID,       
                   0,
                   NEW.OPERADOR_ID_PRODUCAO
                );
            END


            NEW.QUANTIDADE_PRODUCAO = 0;
            NEW.QUANTIDADE_SALDO = 0;
            NEW.HORA_PRODUCAO = NULL;
            NEW.DATA_PRODUCAO = NULL;


            FOR
                SELECT I.CONTROLE,
                       I.TABELA_ID,
                       I.QUANTIDADE
                  FROM TBESTOQUE_TRANSACAO_ITEM I
                 WHERE I.DOCUMENTO = NEW.REMESSA
                   AND I.REMESSA_ITEM_CONTROLE = NEW.CONTROLE
                   AND I.TABELA = 'TBREMESSA_CONSUMO'
                   AND I.TIPO = 'S'
                   AND I.TABELA_NIVEL = 2
            INTO
                CONSUMO_ESTOQUE_ID,
                CONSUMO_ID,
                CONSUMO_QUANTIDADE
            DO
            BEGIN
                UPDATE VWREMESSA_CONSUMO X
                   SET X.STATUS = '0',
                       X.ESTOQUE_ID = 0,
                       X.QUANTIDADE_CONSUMO = X.QUANTIDADE_CONSUMO - :CONSUMO_QUANTIDADE
                 WHERE X.ID = :CONSUMO_ID;

                 DELETE FROM TBESTOQUE_TRANSACAO_ITEM I WHERE I.CONTROLE = :CONSUMO_ESTOQUE_ID;

            END

        END
        ELSE
        IF ( OLD.SITUACAO = 3 AND NEW.SITUACAO = 1  ) THEN
        BEGIN
            EXCEPTION "..." 'TALAO JA COLETADO PARA A EXPEDICAO, OPERACAO NAO PERMITIDA.';
        END
        ELSE
        IF ( OLD.SITUACAO = 2 AND NEW.SITUACAO = 3 ) THEN
        BEGIN
            /* O TALAO ESTA SENDO COLETADO NA EXPEDICAO */
        END
        ELSE
        IF ( OLD.SITUACAO IS DISTINCT FROM NEW.SITUACAO  ) THEN
        BEGIN
            EXCEPTION "..." 'OPERACAO NAO DISPONIVEL PARA ESTE TALAO. ENTRE EM CONTATO COM SUPORTE TECNICO E INFORME A OPERACAO A SER REALIZADA.';
        END
    END

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbplaca_avulsa_b02ui for tbplaca_avulsa
active before insert or update position 2
AS
declare variable produto_gerado integer;
declare variable cor varchar(100);
begin

    produto_gerado = 0;

    if(
        inserting or (
        new.cor_id        <> old.cor_id       or
        new.DENSIDADE     <> old.DENSIDADE    or
        new.largura       <> old.largura      or
        new.comprimento   <> old.comprimento  or
        new.espessura     <> old.espessura    or
        new.quantidade    <> old.quantidade   or
        new.modelo_origem <> old.modelo_origem
        ) )then
    begin

        SELECT first 1
            p.codigo as ID
        from tbproduto p, tbproduto_ficha f
        where MODELO_CODIGO   = ( select p.modelo_codigo from tbproduto p where p.codigo = fn_parametro('SISTEMA.PRODUTO_TALAO_PLACA'))
        and f.LARGURA         = new.LARGURA
        and f.COMPRIMENTO     = new.comprimento
        and p.cor_codigo      = new.cor_id
        and f.produto_codigo  = p.codigo
        and f.densidade       = new.DENSIDADE
        and f.espessura       = new.espessura
        and p.modelo_origem   = new.modelo_origem
        into :produto_gerado;
    
        produto_gerado = coalesce(produto_gerado,0);
    
        if(produto_gerado > 0)then
        begin
            new.produto_id = :produto_gerado;
            new.gererou_produto = 0;
        end else
        begin
            new.gererou_produto = 1;
            cor =  coalesce((select first 1 c.descricao from tbcor c where c.codigo = new.cor_id),'');
            if(cor = '')then
            begin
                exception "..." 'Cor não encontrada.';
            end
    
            :produto_gerado = gen_id(GTBPRODUTO, 1);
            new.produto_id = :produto_gerado;
    
            INSERT into tbproduto (
                DESCRICAO,
                CODIGO,
                CODIGOANTIGO,
                UNIDADEMEDIDA_SIGLA2,
                FAMILIA_CODIGO,
                GRADE_CODIGO,
                LOCALIZACAO_CODIGO,
                TIPOPRODUTO_CODIGO,
                NCM_CODIGO,
                MODELO_CODIGO,
                COR_CODIGO,
                STATUS,
                STATUSEXCLUSAO,
                USUARIO_CODIGO,
                DATA,
                HABILITA_COMPRA,
                HABILITA_VENDA,
                DATA_ALTERACAO,
                EAN,
                LINHA_CODIGO,
                OBSERVACAO,
                PAFECF,
                TOLERANCIA,
                NBM_CODIGO,
                SALESFORCE,
                FLAG_FORNECEDOR,
                SEGURANCA,
                PROGRAMAR_SEM_ESTOQUE,
                INVENTARIO,
                GERAR_OC,
                FEEF,
                FEEF_PERC_DEDUCAO,
                DATA_AMOSTRA_INVENTARIO,
                EXCLUIR_ECOMERCE,
                INFORMACOES_COMPLEMENTARES,
                TOLERANCIA_PRO_QTD_MAIOR,
                TOLERANCIA_PRO_QTD_MENOR,
                TOLERANCIA_CON_QTD_MAIOR,
                TOLERANCIA_CON_QTD_MENOR,
                SOBRA_PRODUCAO,
                SOBRA_CONSUMO,
                TOLERANCIA_TIPO_PRO,
                TOLERANCIA_TIPO_CON,
                DATA_ATIVACAO,
                DATA_INATIVACAO,
                FEEF_DATA_VALIDADE,
                MODELO_ORIGEM,
                LARGURA,
                COMPRIMENTO,
                familia_alternativa)
            select
                'PLC BJ D'||new.DENSIDADE||' '||replace(new.espessura, '.',',')||'MM '||:cor||' '||replace(new.LARGURA, '.',',')||'x'||replace(new.COMPRIMENTO, '.',',') as DESCRICAO,
                :produto_gerado as CODIGO,
                CODIGOANTIGO,
                UNIDADEMEDIDA_SIGLA2,
                FAMILIA_CODIGO,
                GRADE_CODIGO,
                LOCALIZACAO_CODIGO,
                TIPOPRODUTO_CODIGO,
                NCM_CODIGO,
                MODELO_CODIGO,
                new.cor_id as COR_CODIGO,
                STATUS,
                STATUSEXCLUSAO,
                USUARIO_CODIGO,
                DATA,
                HABILITA_COMPRA,
                HABILITA_VENDA,
                DATA_ALTERACAO,
                EAN,
                LINHA_CODIGO,
                OBSERVACAO,
                PAFECF,
                TOLERANCIA,
                NBM_CODIGO,
                SALESFORCE,
                FLAG_FORNECEDOR,
                SEGURANCA,
                PROGRAMAR_SEM_ESTOQUE,
                INVENTARIO,
                GERAR_OC,
                FEEF,
                FEEF_PERC_DEDUCAO,
                DATA_AMOSTRA_INVENTARIO,
                EXCLUIR_ECOMERCE,
                INFORMACOES_COMPLEMENTARES,
                TOLERANCIA_PRO_QTD_MAIOR,
                TOLERANCIA_PRO_QTD_MENOR,
                TOLERANCIA_CON_QTD_MAIOR,
                TOLERANCIA_CON_QTD_MENOR,
                SOBRA_PRODUCAO,
                SOBRA_CONSUMO,
                TOLERANCIA_TIPO_PRO,
                TOLERANCIA_TIPO_CON,
                DATA_ATIVACAO,
                DATA_INATIVACAO,
                FEEF_DATA_VALIDADE,
                new.MODELO_ORIGEM,
                new.largura as LARGURA,
                new.comprimento as COMPRIMENTO,
                familia_alternativa
            from tbproduto p
            where p.codigo = fn_parametro('SISTEMA.PRODUTO_TALAO_PLACA');
    
            UPDATE OR INSERT INTO TBPRODUTO_FICHA (PRODUTO_CODIGO, DENSIDADE, ESPESSURA, LARGURA, COMPRIMENTO)
                VALUES (:produto_gerado, new.DENSIDADE, new.espessura, new.largura, new.comprimento)
            MATCHING (PRODUTO_CODIGO);
    
        end
    end

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbproduto_b03iu for tbproduto
inactive before insert or update position 0
AS
begin
--  new.descricao = replace(new.descricao, '|'    , '-');
--  new.descricao = replace(new.descricao, '''''' , '"');
--  new.descricao = replace(new.descricao, ''''   , '"');

  if (NEW.Descricao <> OLD.Descricao) then
      Begin
          NEW.Descricao = REPLACE(NEW.Descricao,'|','-');
          NEW.Descricao = REPLACE(NEW.Descricao,'"',' ');
          NEW.Descricao = REPLACE(NEW.Descricao,'''',' ');
      End

  if (char_length(new.unidademedida_sigla2) = 0) Then
      Begin
          Exception "..." 'UNIDADE DE MEDIDA INVÁLIDA! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      End 

  if (NOT (char_length(new.NBM_CODIGO) + char_length(new.NCM_CODIGO) > 1)) Then
      Begin
          Exception "..." 'NCM/NBM INVÁLIDO! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      End

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbproduto_b9u for tbproduto
inactive before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
BEGIN

   HISTORICO = '';

   IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC:'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
       END
   IF (OLD.TIPOPRODUTO_CODIGO <> NEW.TIPOPRODUTO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TIPO:'||OLD.TIPOPRODUTO_CODIGO||'->'||NEW.TIPOPRODUTO_CODIGO;
       END
   IF (OLD.FAMILIA_CODIGO <> NEW.FAMILIA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM:'||OLD.FAMILIA_CODIGO||'->'||NEW.FAMILIA_CODIGO;
       END
   IF (OLD.LINHA_CODIGO <> NEW.LINHA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' LIN:'||OLD.LINHA_CODIGO||'->'||NEW.LINHA_CODIGO;
       END
   IF (OLD.MODELO_CODIGO <> NEW.MODELO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' MOD:'||OLD.MODELO_CODIGO||'->'||NEW.MODELO_CODIGO;
       END
   IF (OLD.GRADE_CODIGO <> NEW.GRADE_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' GDE:'||OLD.GRADE_CODIGO||'->'||NEW.GRADE_CODIGO;
       END
   IF (OLD.UNIDADEMEDIDA_SIGLA2 <> NEW.UNIDADEMEDIDA_SIGLA2) THEN
       BEGIN
       HISTORICO = HISTORICO||' UND:'||OLD.UNIDADEMEDIDA_SIGLA2||'->'||NEW.UNIDADEMEDIDA_SIGLA2;
       END
   IF (OLD.COR_CODIGO <> NEW.COR_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COR:'||OLD.COR_CODIGO||'->'||NEW.COR_CODIGO;
       END
   IF (OLD.LOCALIZACAO_CODIGO <> NEW.LOCALIZACAO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' LOC:'||OLD.LOCALIZACAO_CODIGO||'->'||NEW.LOCALIZACAO_CODIGO;
       END

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

   IF (OLD.NBM_CODIGO <> NEW.NBM_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' NBM:'||OLD.NBM_CODIGO||'->'||NEW.NBM_CODIGO;
       END
   IF (OLD.EAN <> NEW.EAN) THEN
       BEGIN
       HISTORICO = HISTORICO||' EAN:'||OLD.EAN||'->'||NEW.EAN;
       END
   IF (OLD.HABILITA_COMPRA <> NEW.HABILITA_COMPRA) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.COMP:'||OLD.HABILITA_COMPRA||'->'||NEW.HABILITA_COMPRA;
       END
   IF (OLD.HABILITA_VENDA <> NEW.HABILITA_VENDA) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.VEND:'||OLD.HABILITA_VENDA||'->'||NEW.HABILITA_VENDA;
       END
   IF (OLD.PROGRAMAR_SEM_ESTOQUE <> NEW.PROGRAMAR_SEM_ESTOQUE) THEN
       BEGIN
       HISTORICO = HISTORICO||' PROG.S/EST:'||OLD.PROGRAMAR_SEM_ESTOQUE||'->'||NEW.PROGRAMAR_SEM_ESTOQUE;
       END
   IF (OLD.INVENTARIO <> NEW.INVENTARIO) THEN
       BEGIN
       HISTORICO = HISTORICO||' INV:'||OLD.INVENTARIO||'->'||NEW.INVENTARIO;
       END
   IF (OLD.TOLERANCIA <> NEW.TOLERANCIA) THEN
       BEGIN
       HISTORICO = HISTORICO||' TOLERANCIA: '||OLD.TOLERANCIA||'->'||NEW.TOLERANCIA;
       END
   IF (OLD.SEGURANCA <> NEW.SEGURANCA) THEN
       BEGIN
       HISTORICO = HISTORICO||' %EST.SEG:'||OLD.SEGURANCA||'->'||NEW.SEGURANCA;
       END
   IF (OLD.GERAR_OC <> NEW.GERAR_OC) THEN
       BEGIN
       HISTORICO = HISTORICO||' GERAR OC:'||OLD.GERAR_OC||'->'||NEW.GERAR_OC;
       END
   IF (OLD.FEEF <> NEW.FEEF) THEN
       BEGIN
       HISTORICO = HISTORICO||' FEEF:'||OLD.FEEF||'->'||NEW.FEEF;
       END
   IF (OLD.FAMILIA_ALTERNATIVA <> NEW.FAMILIA_ALTERNATIVA) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM.ALT:'||OLD.FAMILIA_ALTERNATIVA||'->'||NEW.FAMILIA_ALTERNATIVA;
       END
   IF (OLD.DESCRICAO_ETIQUETA <> NEW.DESCRICAO_ETIQUETA) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.ETIQ:'||OLD.DESCRICAO_ETIQUETA||'->'||NEW.DESCRICAO_ETIQUETA;
       END
   IF (OLD.INFORMACOES_COMPLEMENTARES <> NEW.INFORMACOES_COMPLEMENTARES) THEN
       BEGIN
       HISTORICO = HISTORICO||' INF.COMP:'||FN_ELIPSES(OLD.INFORMACOES_COMPLEMENTARES,100)||'->'||FN_ELIPSES(NEW.INFORMACOES_COMPLEMENTARES,100);
       END

   IF (OLD.STATUS <> NEW.STATUS) THEN
       BEGIN
       HISTORICO = HISTORICO||' STATUS:'||OLD.STATUS||'->'||NEW.STATUS;
       IF (NEW.STATUS = '0') THEN
           BEGIN
           NEW.DATA_INATIVACAO = CURRENT_DATE;
           END
       IF (NEW.STATUS = '1') THEN
           BEGIN
           NEW.DATA_ATIVACAO = CURRENT_DATE;
           END
       END

   if (HISTORICO <> '') Then
       Begin
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP,HISTORICO ) VALUES (
      'TBPRODUTO', OLD.CODIGO,
      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
        FN_ELIPSES(:Historico,500));
       End
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbregistro_parada_b2i for tbregistro_parada
active before insert position 2
AS
declare variable vEMAIL VarChar(500);
declare variable vCORPO_EMAIL BLOB SUB_TYPE 0 SEGMENT SIZE 80;
declare variable VJUSTIFICATIVA VarChar(200);
declare variable vOPERADOR_NOME VarChar(20);
declare variable VTEMPOORIGINAL Integer;

declare variable LINHA_ID INTEGER;
declare variable LINHA_DESCRICAO VARCHAR(50);
declare variable MODELO_ID INTEGER;                                                
declare variable MODELO_DESCRICAO VARCHAR(50);
declare variable COR_ID INTEGER;
declare variable COR_DESCRICAO VARCHAR(20);
declare variable TAMANHO INTEGER;
declare variable TAM_DESCRICAO VARCHAR(10);
declare variable FERRAMENTA_ID INTEGER;
declare variable FERRAMENTA_DESCRICAO VARCHAR(100);
declare variable GP_ID INTEGER;
declare variable GP_DESCRICAO VARCHAR(20);
declare variable UP_ID INTEGER;
declare variable UP_DESCRICAO VARCHAR(20);
declare variable ESTACAO INTEGER;
declare variable ESTACAO_DESCRICAO VARCHAR(20);
declare variable REMESSA_ID INTEGER;
declare variable TALAO_ID INTEGER;
declare variable TALAO INTEGER;
declare variable QUANTIDADE NUMERIC(18,4);
declare variable UM VARCHAR(3);

BEGIN

  if (New.Status > 0 and New.tabela = 'INEFICIENCIA') then -- ID da Justificativa
      Begin

      For
      Select P.Linha_Codigo Linha_Id,
            (Select First 1 L.Descricao From TbModelo_Linha L Where L.Codigo = P.Linha_Codigo) Linha_Descricao,
             P.Modelo_Codigo Modelo_Id,
            (Select First 1 M.Descricao From TbModelo M Where M.Codigo = P.Modelo_Codigo) Modelo_Descricao,
             P.Cor_Codigo Cor_ID,
            (Select First 1 C.Descricao From TbCor C Where C.Codigo = P.Cor_Codigo) Cor_Descricao,
             PR.Tamanho,
            (Select First 1 Tam_Descricao From SP_TAMANHO_GRADE (P.Grade_Codigo,PR.Tamanho)) Tam_Descricao,
             PR.Ferramenta_ID,
            (Select First 1 F.Serie||'-'||F.Descricao From TbFerramentaria F Where F.ID = PR.Ferramenta_ID) Ferramenta_Descricao,
             PR.GP_Id,
            (Select First 1 G.Descricao From TBGP G Where G.ID = PR.Gp_ID) GP_Descricao,
             PR.UP_Id,
            (Select First 1 U.Descricao From TbUP U Where U.ID = PR.UP_ID) UP_Descricao,
             PR.Estacao,
            (Select First 1 S.Descricao From TbSub_UP S Where S.Up_ID = PR.Up_ID and S.ID = PR.Estacao) Estacao_Descricao,
             PR.Remessa_ID,
             PR.Tabela_ID Talao_ID,
            (Select First 1 R.Controle From TbRemessa_Item_Processado R Where R.Id = PR.Tabela_ID) Talao,
             PR.Quantidade, P.UnidadeMedida_Sigla2 UM
        From TbProgramacao PR, TbProduto P
       Where PR.Produto_ID = P.Codigo
         and PR.ID = :NEW.Tabela_ID
        Into :LINHA_ID,:LINHA_DESCRICAO,:MODELO_ID,:MODELO_DESCRICAO,:COR_ID,
             :COR_DESCRICAO,:TAMANHO,:TAM_DESCRICAO,:FERRAMENTA_ID,
             :FERRAMENTA_DESCRICAO,:GP_ID,:GP_DESCRICAO,:UP_ID,:UP_DESCRICAO,
             :ESTACAO,:ESTACAO_DESCRICAO,:REMESSA_ID,:TALAO_ID,:TALAO,:QUANTIDADE,:UM

          Do Begin

             vEMAIL         = Coalesce((Select First 1 CC.VALOR_EXT from TbControle_N CC Where CC.ID = 239),'');
             vOPERADOR_NOME = Coalesce((Select First 1 O.Nome From TbOperador O Where O.Codigo = New.Operador_ID),'');
             VJUSTIFICATIVA = Coalesce((Select First 1 J.Descricao From TbJustificativa J Where J.ID = New.Status),'');
             VTEMPOORIGINAL = COALESCE((Select First 1 MF.TM from tbup_fluxo pf, TBMODELO_FLUXO_PRODUCAO mf
                                         where mf.fluxo_id  = pf.fluxo_id and pf.up_id = :UP_ID
                                           and mf.modelo_id = :MODELO_ID and mf.cor_id = :COR_ID
                                           and mf.tamanho   = :TAMANHO),0);

             if (vEMAIL <> '') then
                 Begin
                 vCORPO_EMAIL = ' LINHA: '||:LINHA_ID||' - '||:LINHA_DESCRICAO||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' MODELO: '||:MODELO_ID||' - '||:MODELO_DESCRICAO||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' COR: '||:COR_ID||' - '||:COR_DESCRICAO||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' TAMANHO: '||:TAM_DESCRICAO||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' FERRAMENTA: '||:FERRAMENTA_DESCRICAO||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' GP/UP/ESTACAO: '||:GP_DESCRICAO||'/'||:UP_DESCRICAO||'/'||:ESTACAO_DESCRICAO||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' REMESSA/TALAO: '||:REMESSA_ID||' - '||:TALAO||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' QUANTIDADE: '||Trunc(:QUANTIDADE)||' '||:UM||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' OPERADOR: '||NEW.OPERADOR_ID||' - '||vOPERADOR_NOME||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' DATA/HORA REGISTRO: '||FORMATDATETIME(Current_TimeStamp)||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' TEMPO MAQUINA ATUAL: '||Trunc(:VTEMPOORIGINAL)||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ' JUSTIFICATIVA: '||:vJustificativa||': '||NEW.OBSERVACAO
                                --||ASCII_CHAR(13)||ASCII_CHAR(10)||'<br>'||
                                ;

                 Insert Into tbemail (email, usuario_id, assunto, corpo, status, datahora)
                 Values (:vEmail, 0, 'GC - REGISTRO DE JUSTIFICATIVA: '||:vJustificativa, :vCORPO_EMAIL, 0, Current_TimeStamp);
                 End
    
             End
      End
End
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrequisicao_b0iu_01 for tbrequisicao
active before insert or update position 0
AS
DECLARE VARIABLE ESTABELECIMENTO INTEGER;
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE USUARIO_NOME VARCHAR(20);
DECLARE VARIABLE UM    VARCHAR(3);
DECLARE VARIABLE DESCR VARCHAR(100);
DECLARE VARIABLE FRAC  CHAR(1);
DECLARE VARIABLE FAMILIA_ID  INTEGER;
DECLARE VARIABLE FAM_USUARIO INTEGER;
BEGIN

   USUARIO_NOME = (Select MON$USER from mon$attachments where mon$attachment_id = current_connection);

   if (:Usuario_Nome <> 'SYSDBA' and :Usuario_Nome <> 'GC') Then
       Begin

       USUARIO_ID = Coalesce((Select First 1 U.Codigo From TbUsuario U Where U.USUARIO = :USUARIO_NOME and U.Status = '1'),0);

          if (:USUARIO_ID = 0) then
              BEGIN
                  Exception "..." 'USUÁRIO INATIVO OU NÃO LOCALIZADO: '||:USUARIO_NOME||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END

        Estabelecimento = Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID),0);

        For Select First 1 U.SIGLA, P.DESCRICAO, U.PODE_FRACIONAR, P.FAMILIA_CODIGO,
        Coalesce((Select First 1 F.Familia_Id From TbUsuario_Familia F Where F.Familia_Id = P.Familia_Codigo and F.Usuario_Id = :USUARIO_ID),0),
        IIF(:ESTABELECIMENTO>0,Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID and E.Estabelecimento_Codigo = New.Estabelecimento_Id),0),-1)
        From TbProduto P, TbUnidadeMedida U
        Where P.Codigo = New.PRODUTO_ID and P.Unidademedida_Sigla2 = U.Sigla
        Into :UM, :DESCR, :FRAC, :FAMILIA_ID, :FAM_USUARIO, :ESTABELECIMENTO
        Do
        Begin
          if (:ESTABELECIMENTO = 0) then
              BEGIN
                  Exception "..." 'USUÁRIO NÃO TEM PERMISSÃO DE REGISTRAR REQUISIÇÕES PARA O ESTABELECIMENTO INFORMADO: '||
                  :ESTABELECIMENTO||'-'||Coalesce((Select First 1 E.NomeFantasia From TbEstabelecimento E Where E.Codigo = New.Estabelecimento_Id),'')||' -> USUÁRIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          if (:FAM_USUARIO = 0) then
              BEGIN
                  Exception "..." 'USUÁRIO NÃO TEM PERMISSÃO DE REGISTRAR REQUISIÇÕES PARA A FAMÍLIA DESTE PRODUTO: '||
                  :FAMILIA_ID||'-'||Coalesce((Select First 1 F.Descricao From TbFamilia F Where F.Codigo = :FAMILIA_ID),'')||' -> USUÁRIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          if (:FRAC = 'N') then
              BEGIN
              if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
                  Exception "..." 'PRODUTO NÃO PERMITE QUANTIDADE FRACIONADA: '||
                  NEW.PRODUTO_ID||'-'||:DESCR||' QUANT.'||NEW.QUANTIDADE||' '||:UM||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
        --  NEW.USUARIO_ID = :USUARIO_ID;
        End
     End
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrequisicao_oc_item_b3iu for tbrequisicao_oc_item
active before insert or update position 1
AS
declare variable UM varchar(10);
declare variable pode_fracionar char(1);
declare variable DESCRICAO VARCHAR(300);
begin
    if(new.PRODUTO_ID > 0) then
    begin
    FOR select first 1 coalesce(b.PODE_FRACIONAR,'N') AS PODE_FRACIONAR,
        coalesce(b.SIGLA,'') AS UM, A.DESCRICAO
        from tbproduto a, TbUnidadeMedida b where a.codigo = new.produto_id
        and a.UNIDADEMEDIDA_SIGLA2 = b.SIGLA INTO PODE_FRACIONAR, UM, DESCRICAO DO
         BEGIN

           if(pode_fracionar = 'N') then
              BEGIN
              if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
                  Exception "..." 'PRODUTO NAO PERMITE QUANTIDADE FRACIONADA: '||
                  NEW.produto_id||'-'||DESCRICAO||' QUANT.'||NEW.QUANTIDADE||' '||UM||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
       END
    end
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbsobra_b0iu_01 for tbsobra
active before insert or update position 0
AS
DECLARE VARIABLE ESTABELECIMENTO INTEGER;
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE USUARIO_NOME VARCHAR(20);
DECLARE VARIABLE UM    VARCHAR(3);
DECLARE VARIABLE DESCR VARCHAR(100);
DECLARE VARIABLE FRAC  CHAR(1);
BEGIN

   USUARIO_NOME = (Select MON$USER from mon$attachments where mon$attachment_id = current_connection);

   if (:Usuario_Nome <> 'SYSDBA' and :Usuario_Nome <> 'GC') Then
       Begin

       USUARIO_ID = Coalesce((Select First 1 U.Codigo From TbUsuario U Where U.USUARIO = :USUARIO_NOME and U.Status = '1'),0);

          if (:USUARIO_ID = 0) then
              BEGIN
                  Exception "..." 'USUÁRIO INATIVO OU NÃO LOCALIZADO: '||:USUARIO_NOME||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END

        Estabelecimento = Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID),0);

        For Select First 1 U.SIGLA, P.DESCRICAO, U.PODE_FRACIONAR,
        IIF(:ESTABELECIMENTO>0,Coalesce((Select First 1 E.Estabelecimento_Codigo From TbUsuario_Estabelecimento E Where E.Usuario_Codigo = :USUARIO_ID and E.Estabelecimento_Codigo = New.Estabelecimento_Id),0),-1)
        From TbProduto P, TbUnidadeMedida U
        Where P.Codigo = New.Produto_Id and P.Unidademedida_Sigla2 = U.Sigla
        Into :UM, :DESCR, :FRAC, :ESTABELECIMENTO
        Do
        Begin
          if (:ESTABELECIMENTO = 0) then
              BEGIN
                  Exception "..." 'USUÁRIO NÃO TEM PERMISSÃO DE REGISTRAR SOBRAS DO ESTABELECIMENTO INFORMADO: '||
                  :ESTABELECIMENTO||'-'||Coalesce((Select First 1 E.NomeFantasia From TbEstabelecimento E Where E.Codigo = New.Estabelecimento_Id),'')||' -> USUÁRIO: '||:USUARIO_ID||'-'||:Usuario_Nome||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
          if (:FRAC = 'N') then
              BEGIN
              if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
                  Exception "..." 'PRODUTO NÃO PERMITE QUANTIDADE FRACIONADA: '||
                  NEW.PRODUTO_ID||'-'||:DESCR||' QUANT.'||NEW.QUANTIDADE||' '||:UM||
                  ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
              END
        End
     End
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbnfs_item_b08u for tbnfs_item
inactive before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
  
  HISTORICO = '';
    
    IF(NEW.SEQUENCIA <> OLD.SEQUENCIA) THEN
        BEGIN                
            HISTORICO = HISTORICO||' Seq:'||OLD.SEQUENCIA||' -> '||NEW.SEQUENCIA;
        END                  
    IF(NEW.OPERACAO_CODIGO <> OLD.OPERACAO_CODIGO) THEN
        BEGIN                    
            HISTORICO = HISTORICO||' Oper:'||OLD.OPERACAO_CODIGO||' -> '||NEW.OPERACAO_CODIGO;
        END                  
    IF(NEW.CFOP_CODIGO <> OLD.CFOP_CODIGO) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' CFOP:'||OLD.CFOP_CODIGO||' -> '||NEW.CFOP_CODIGO;
        END                  
    IF(NEW.PRODUTO_CODIGO <> OLD.PRODUTO_CODIGO) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' ID.Prod:'||OLD.PRODUTO_CODIGO||' -> '||NEW.PRODUTO_CODIGO;
        END                  
    IF(NEW.PRODUTO_DESCRICAO <> OLD.PRODUTO_DESCRICAO) THEN
        BEGIN                                        
            HISTORICO = HISTORICO||' Desc.Prod:'||OLD.PRODUTO_DESCRICAO||' -> '||NEW.PRODUTO_DESCRICAO;
        END                      
    IF(NEW.PRODUTO_UNIDADEMEDIDA2 <> OLD.PRODUTO_UNIDADEMEDIDA2) THEN
        BEGIN                                        
            HISTORICO = HISTORICO||' UM:'||OLD.PRODUTO_UNIDADEMEDIDA2||' -> '||NEW.PRODUTO_UNIDADEMEDIDA2;
        END                      
    IF(NEW.NCM_CODIGO <> OLD.NCM_CODIGO) THEN
        BEGIN                                  
            HISTORICO = HISTORICO||' NCM:'||OLD.NCM_CODIGO||' -> '||NEW.NCM_CODIGO;
        END                
    IF(NEW.TRIBUTACAO_ICMS <> OLD.TRIBUTACAO_ICMS) THEN
        BEGIN                                  
            HISTORICO = HISTORICO||' CST ICMS:'||OLD.TRIBUTACAO_ICMS||' -> '||NEW.TRIBUTACAO_ICMS;
        END                
    IF(NEW.TRIBUTACAO_IPI <> OLD.TRIBUTACAO_IPI) THEN
        BEGIN                    
            HISTORICO = HISTORICO||' CST IPI:'||OLD.TRIBUTACAO_IPI||' -> '||NEW.TRIBUTACAO_IPI;
        END
    IF(NEW.TRIBUTACAO_ORIGEM <> OLD.TRIBUTACAO_ORIGEM) THEN
        BEGIN                    
            HISTORICO = HISTORICO||' CST Orig:'||OLD.TRIBUTACAO_ORIGEM||' -> '||NEW.TRIBUTACAO_ORIGEM;
        END
    IF(NEW.LOCALIZACAO_CODIGO <> OLD.LOCALIZACAO_CODIGO) THEN
        BEGIN                    
            HISTORICO = HISTORICO||' Loc.:'||OLD.LOCALIZACAO_CODIGO||' -> '||NEW.LOCALIZACAO_CODIGO;
        END
    IF(NEW.QUANTIDADE <> OLD.QUANTIDADE) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' Qtd:'||OLD.QUANTIDADE||' -> '||NEW.QUANTIDADE;
        END               
    IF(NEW.VALOR_UNITARIO <> OLD.VALOR_UNITARIO) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' Vr.Unit:'||OLD.VALOR_UNITARIO||' -> '||NEW.VALOR_UNITARIO;
        END               
    IF(NEW.VALOR_TOTAL <> OLD.VALOR_TOTAL) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Total:'||OLD.VALOR_TOTAL||' -> '||NEW.VALOR_TOTAL;
        END
    IF(NEW.BASECALCULO_ICMS <> OLD.BASECALCULO_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Bs.Calc.ICMS:'||OLD.BASECALCULO_ICMS||' -> '||NEW.BASECALCULO_ICMS;
        END
    IF(NEW.PERCENTUAL_ICMS <> OLD.PERCENTUAL_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' %ICMS:'||OLD.PERCENTUAL_ICMS||' -> '||NEW.PERCENTUAL_ICMS;
        END
    IF(NEW.PERCENTUAL_IPI <> OLD.PERCENTUAL_IPI) THEN
        BEGIN             
            HISTORICO = HISTORICO||' %IPI:'||OLD.PERCENTUAL_IPI||' -> '||NEW.PERCENTUAL_IPI;
        END               
    IF(NEW.VALOR_IPI <> OLD.VALOR_IPI) THEN
        BEGIN             
            HISTORICO = HISTORICO||' Vr.IPI:'||OLD.VALOR_IPI||' -> '||NEW.VALOR_IPI;
        END               
    IF(NEW.PERCENTUAL_PIS <> OLD.PERCENTUAL_PIS) THEN
        BEGIN
            HISTORICO = HISTORICO||' %PIS:'||OLD.PERCENTUAL_PIS||' -> '||NEW.PERCENTUAL_PIS;
        END
    IF(NEW.VALOR_PIS <> OLD.VALOR_PIS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.PIS:'||OLD.VALOR_PIS||' -> '||NEW.VALOR_PIS;
        END
    IF(NEW.PERCENTUAL_COFINS <> OLD.PERCENTUAL_COFINS) THEN
        BEGIN
            HISTORICO = HISTORICO||' %COF:'||OLD.PERCENTUAL_COFINS||' -> '||NEW.PERCENTUAL_COFINS;
        END
    IF(NEW.VALOR_COFINS <> OLD.VALOR_COFINS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Cof:'||OLD.VALOR_COFINS||' -> '||NEW.VALOR_COFINS;
        END
    IF(NEW.NFE <> OLD.NFE) THEN
        BEGIN
            HISTORICO = HISTORICO||' NF.Ref:'||OLD.NFE||' -> '||NEW.NFE;
        END
    IF(NEW.NFE_ITEM_CONTROLE <> OLD.NFE_ITEM_CONTROLE) THEN
        BEGIN
            HISTORICO = HISTORICO||' ID.Nf.Ref:'||OLD.NFE_ITEM_CONTROLE||' -> '||NEW.NFE_ITEM_CONTROLE;
        END
    IF(NEW.NF_EXTERNO <> OLD.NF_EXTERNO) THEN
        BEGIN
            HISTORICO = HISTORICO||' NF.Ref:'||OLD.NF_EXTERNO||' -> '||NEW.NF_EXTERNO;
        END
    IF(NEW.NF_EXTERNO_ITEM_CONTROLE <> OLD.NF_EXTERNO_ITEM_CONTROLE) THEN
        BEGIN
            HISTORICO = HISTORICO||' ID.NF.Ref:' ||OLD.NF_EXTERNO_ITEM_CONTROLE||' -> '||NEW.NF_EXTERNO_ITEM_CONTROLE;
        END
    IF(NEW.PEDIDO <> OLD.PEDIDO) THEN
        BEGIN
            HISTORICO = HISTORICO||' Ped:'||OLD.PEDIDO||' -> '||NEW.PEDIDO;
        END
    IF(NEW.PEDIDO_ITEM_CONTROLE <> OLD.PEDIDO_ITEM_CONTROLE) THEN
        BEGIN
            HISTORICO = HISTORICO||' ID.Ped.Item:'||OLD.PEDIDO_ITEM_CONTROLE||' -> '||NEW.PEDIDO_ITEM_CONTROLE;
        END
    IF(NEW.PEDIDO_ITEM_PE_CONTROLE <> OLD.PEDIDO_ITEM_PE_CONTROLE) THEN
        BEGIN                        
            HISTORICO = HISTORICO||' ID.Ped.Item:'||OLD.PEDIDO_ITEM_PE_CONTROLE||' -> '||NEW.PEDIDO_ITEM_PE_CONTROLE;
        END                          
    IF(NEW.PEDIDO_PROC_ITEM_CONTROLE <> OLD.PEDIDO_PROC_ITEM_CONTROLE) THEN
        BEGIN
            HISTORICO = HISTORICO||' ID.Ped.Item:'||OLD.PEDIDO_PROC_ITEM_CONTROLE||' -> '||NEW.PEDIDO_PROC_ITEM_CONTROLE;
        END
    IF(NEW.T01 <> OLD.T01) THEN
        BEGIN
            HISTORICO = HISTORICO||' T01:'||OLD.T01||' -> '||NEW.T01;
        END
    IF(NEW.T02 <> OLD.T02) THEN
        BEGIN
            HISTORICO = HISTORICO||' T02:'||OLD.T02||' -> '||NEW.T02;
        END
    IF(NEW.T03 <> OLD.T03) THEN
        BEGIN
            HISTORICO = HISTORICO||' T03:'||OLD.T03||' -> '||NEW.T03;
        END
    IF(NEW.T04 <> OLD.T04) THEN
        BEGIN
            HISTORICO = HISTORICO||' T04:'||OLD.T04||' -> '||NEW.T04;
        END
    IF(NEW.T05 <> OLD.T05) THEN
        BEGIN
            HISTORICO = HISTORICO||' T05:'||OLD.T05||' -> '||NEW.T05;
        END
    IF(NEW.T06 <> OLD.T06) THEN
        BEGIN
            HISTORICO = HISTORICO||' T06:'||OLD.T06||' -> '||NEW.T06;
        END
    IF(NEW.T07 <> OLD.T07) THEN
        BEGIN
            HISTORICO = HISTORICO||' T07:'||OLD.T07||' -> '||NEW.T07;
        END
    IF(NEW.T08 <> OLD.T08) THEN
        BEGIN
            HISTORICO = HISTORICO||' T08:'||OLD.T08||' -> '||NEW.T08;
        END
    IF(NEW.T09 <> OLD.T09) THEN
        BEGIN
            HISTORICO = HISTORICO||' T09:'||OLD.T09||' -> '||NEW.T09;
        END
    IF(NEW.T10 <> OLD.T10) THEN
        BEGIN
            HISTORICO = HISTORICO||' T10:'||OLD.T10||' -> '||NEW.T10;
        END
    IF(NEW.T11 <> OLD.T11) THEN
        BEGIN
            HISTORICO = HISTORICO||' T11:'||OLD.T11||' -> '||NEW.T11;
        END
    IF(NEW.T12 <> OLD.T12) THEN
        BEGIN
            HISTORICO = HISTORICO||' T12:'||OLD.T12||' -> '||NEW.T12;
        END
    IF(NEW.T13 <> OLD.T13) THEN
        BEGIN
            HISTORICO = HISTORICO||' T13:'||OLD.T13||' -> '||NEW.T13;
        END
    IF(NEW.T14 <> OLD.T14) THEN
        BEGIN
            HISTORICO = HISTORICO||' T14:'||OLD.T14||' -> '||NEW.T14;
        END
    IF(NEW.T15 <> OLD.T15) THEN
        BEGIN
            HISTORICO = HISTORICO||' T15:'||OLD.T15||' -> '||NEW.T15;
        END
    IF(NEW.T16 <> OLD.T16) THEN
        BEGIN
            HISTORICO = HISTORICO||' T16:'||OLD.T16||' -> '||NEW.T16;
        END
    IF(NEW.T17 <> OLD.T17) THEN
        BEGIN
            HISTORICO = HISTORICO||' T17:'||OLD.T17||' -> '||NEW.T17;
        END
    IF(NEW.T18 <> OLD.T18) THEN
        BEGIN
            HISTORICO = HISTORICO||' T18:'||OLD.T18||' -> '||NEW.T18;
        END
    IF(NEW.T19 <> OLD.T19) THEN
        BEGIN
            HISTORICO = HISTORICO||' T19:'||OLD.T19||' -> '||NEW.T19;
        END
    IF(NEW.T20 <> OLD.T20) THEN
        BEGIN
            HISTORICO = HISTORICO||' T20:'||OLD.T20||' -> '||NEW.T20;
        END
    IF(NEW.ESTABELECIMENTO_CODIGO <> OLD.ESTABELECIMENTO_CODIGO) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Est:'||OLD.ESTABELECIMENTO_CODIGO||' -> '||NEW.ESTABELECIMENTO_CODIGO;
        END                    
    IF(NEW.EMPRESA_CODIGO <> OLD.EMPRESA_CODIGO) THEN
        BEGIN                
            HISTORICO = HISTORICO||' Emp:'||OLD.EMPRESA_CODIGO||' -> '||NEW.EMPRESA_CODIGO;
        END                  
    IF(NEW.NUMERO_NOTAFISCAL <> OLD.NUMERO_NOTAFISCAL and OLD.NUMERO_NOTAFISCAL > 0) THEN
        BEGIN                
            HISTORICO = HISTORICO||' NF:'||OLD.NUMERO_NOTAFISCAL||' -> '||NEW.NUMERO_NOTAFISCAL;
        END                  
    IF(NEW.DATA_EMISSAO <> OLD.DATA_EMISSAO) THEN
        BEGIN                
            HISTORICO = HISTORICO||' Dt.Emissao:'||FN_DATE_TO_STRING(OLD.DATA_EMISSAO)||' -> '||FN_DATE_TO_STRING(NEW.DATA_EMISSAO);
        END                  
--    IF(NEW.SITUACAO <> OLD.SITUACAO) THEN
--        BEGIN
--            HISTORICO = HISTORICO||' Sit:'||OLD.SITUACAO||' -> '||NEW.SITUACAO;
--        END
    IF(NEW.VALOR_CUSTO <> OLD.VALOR_CUSTO) THEN
        BEGIN                
            HISTORICO = HISTORICO||' Vr.Custo:'||OLD.VALOR_CUSTO||' -> '||NEW.VALOR_CUSTO;
        END                  
    IF(NEW.TECELAGEM <> OLD.TECELAGEM) THEN
        BEGIN                
            HISTORICO = HISTORICO||' Tecel:'||OLD.TECELAGEM||' -> '||NEW.TECELAGEM;
        END                  
    IF(NEW.TRIBUTACAO_PIS <> OLD.TRIBUTACAO_PIS) THEN
        BEGIN 
            HISTORICO = HISTORICO||' CST.PIS:'||OLD.TRIBUTACAO_PIS||' -> '||NEW.TRIBUTACAO_PIS;
        END                    
    IF(NEW.TRIBUTACAO_COFINS <> OLD.TRIBUTACAO_COFINS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' CST.Conf:'||OLD.TRIBUTACAO_COFINS||' -> '||NEW.TRIBUTACAO_COFINS;
        END                    
    IF(NEW.VALOR_ICMS <> OLD.VALOR_ICMS) THEN
        BEGIN              
            HISTORICO = HISTORICO||' VR.ICMS:'||OLD.VALOR_ICMS||' -> '||NEW.VALOR_ICMS;
        END                
    IF(NEW.BASECALCULO_IPI <> OLD.BASECALCULO_IPI) THEN
        BEGIN              
            HISTORICO = HISTORICO||' Bs.Calc.IPI:'||OLD.BASECALCULO_IPI||' -> '||NEW.BASECALCULO_IPI;
        END                
    IF(NEW.BASECALCULO_PIS <> OLD.BASECALCULO_PIS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Bs.Calc.PIS:'||OLD.BASECALCULO_PIS||' -> '||NEW.BASECALCULO_PIS;
        END                    
    IF(NEW.BASECALCULO_COFINS  <> OLD.BASECALCULO_COFINS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Bs.Calc.Cof:'||OLD.BASECALCULO_COFINS||' -> '||NEW.BASECALCULO_COFINS;
        END                    
    IF(NEW.VALOR_ACRESCIMO <> OLD.VALOR_ACRESCIMO) THEN
        BEGIN              
            HISTORICO = HISTORICO||' VR.Acresc:'||OLD.VALOR_ACRESCIMO||' -> '||NEW.VALOR_ACRESCIMO;
        END                
    IF(NEW.VALOR_DESCONTO <> OLD.VALOR_DESCONTO) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' VR.Desc:'||OLD.VALOR_DESCONTO||' -> '||NEW.VALOR_DESCONTO;
        END                    
    IF(NEW.FISCAL_ISENTAS_IPI  <> OLD.FISCAL_ISENTAS_IPI) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.Isen.IPI:'||OLD.FISCAL_ISENTAS_IPI||' -> '||NEW.FISCAL_ISENTAS_IPI;
        END                    
    IF(NEW.FISCAL_ISENTAS_ICMS <> OLD.FISCAL_ISENTAS_ICMS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.Isen.ICMS:'||OLD.FISCAL_ISENTAS_ICMS||' -> '||NEW.FISCAL_ISENTAS_ICMS;
        END                    
    IF(NEW.FISCAL_OUTRAS_IPI <> OLD.FISCAL_OUTRAS_IPI) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.Out.IPI:'||OLD.FISCAL_OUTRAS_IPI||' -> '||NEW.FISCAL_OUTRAS_IPI;
        END                    
    IF(NEW.FISCAL_OUTRAS_ICMS <> OLD.FISCAL_OUTRAS_ICMS) THEN
        BEGIN                 
            HISTORICO = HISTORICO||' Fisc.Out.ICMS:'||OLD.FISCAL_OUTRAS_ICMS||' -> '||NEW.FISCAL_OUTRAS_ICMS;
        END                   
    IF(NEW.FISCAL_VALOR_ICMS <> OLD.FISCAL_VALOR_ICMS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.VR.ICMS:'||OLD.FISCAL_VALOR_ICMS||' -> '||NEW.FISCAL_VALOR_ICMS;
        END                    
    IF(NEW.FISCAL_VALOR_IPI <> OLD.FISCAL_VALOR_IPI) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.VR.IPI:'||OLD.FISCAL_VALOR_IPI||' -> '||NEW.FISCAL_VALOR_IPI;
        END                 
    IF(NEW.FISCAL_VALOR_PIS <> OLD.FISCAL_VALOR_PIS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.VR.PIS:'||OLD.FISCAL_VALOR_PIS||' -> '||NEW.FISCAL_VALOR_PIS;
        END                    
    IF(NEW.FISCAL_VALOR_COFINS <> OLD.FISCAL_VALOR_COFINS) THEN
        BEGIN   
            HISTORICO = HISTORICO||' Fisc.VR.Cof:'||OLD.FISCAL_VALOR_COFINS||' -> '||NEW.FISCAL_VALOR_COFINS;
        END                       
    IF(NEW.FISCAL_PERCENTUAL_ICMS <> OLD.FISCAL_PERCENTUAL_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.%.Icms:'||OLD.FISCAL_PERCENTUAL_ICMS||' -> '||NEW.FISCAL_PERCENTUAL_ICMS;
        END                       
    IF(NEW.FISCAL_PERCENTUAL_IPI  <> OLD.FISCAL_PERCENTUAL_IPI) THEN
        BEGIN                     
            HISTORICO = HISTORICO||' Fisc.%.IPI:'||OLD.FISCAL_PERCENTUAL_IPI||' -> '||NEW.FISCAL_PERCENTUAL_IPI;
        END                       
    IF(NEW.FISCAL_PERCENTUAL_PIS  <> OLD.FISCAL_PERCENTUAL_PIS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.%.PIS:'||OLD.FISCAL_PERCENTUAL_PIS||' -> '||NEW.FISCAL_PERCENTUAL_PIS;
        END
    IF(NEW.FISCAL_PERCENTUAL_COFINS <> OLD.FISCAL_PERCENTUAL_COFINS) THEN
        BEGIN              
            HISTORICO = HISTORICO||' Fisc.%.Cof:'||OLD.FISCAL_PERCENTUAL_COFINS||' -> '||NEW.FISCAL_PERCENTUAL_COFINS;
        END                         
    IF(NEW.FISCAL_BASECALCULO_ICMS <> OLD.FISCAL_BASECALCULO_ICMS) THEN
        BEGIN                           
            HISTORICO = HISTORICO||' Fisc.Bs.Calc.ICMS:'||OLD.FISCAL_BASECALCULO_ICMS||' -> '||NEW.FISCAL_BASECALCULO_ICMS;
        END                         
    IF(NEW.FISCAL_BASECALCULO_IPI <> OLD.FISCAL_BASECALCULO_IPI) THEN
        BEGIN                           
            HISTORICO = HISTORICO||' Fisc.Bs.Calc.IPI:'||OLD.FISCAL_BASECALCULO_IPI||' -> '||NEW.FISCAL_BASECALCULO_IPI;
        END                         
    IF(NEW.FISCAL_BASECALCULO_PIS <> OLD.FISCAL_BASECALCULO_PIS) THEN
        BEGIN    
            HISTORICO = HISTORICO||' Fisc.Bs.Calc.PIS:'||OLD.FISCAL_BASECALCULO_PIS||' -> '||NEW.FISCAL_BASECALCULO_PIS;
        END
    IF(NEW.FISCAL_BASECALCULO_COFINS  <> OLD.FISCAL_BASECALCULO_COFINS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.Bs.Calc.Cof:'||OLD.FISCAL_BASECALCULO_COFINS||' -> '||NEW.FISCAL_BASECALCULO_COFINS;
        END
    IF(NEW.FISCAL_TRIBUTACAO_ORIGEM <> OLD.FISCAL_TRIBUTACAO_ORIGEM) THEN
        BEGIN           
            HISTORICO = HISTORICO||' Fisc.CST.Orig:'||OLD.FISCAL_TRIBUTACAO_ORIGEM||' -> '||NEW.FISCAL_TRIBUTACAO_ORIGEM;
        END                         
    IF(NEW.FISCAL_TRIBUTACAO_ICMS <> OLD.FISCAL_TRIBUTACAO_ICMS) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.CST.ICMS:'||OLD.FISCAL_TRIBUTACAO_ICMS||' -> '||NEW.FISCAL_TRIBUTACAO_ICMS;
        END                         
    IF(NEW.FISCAL_TRIBUTACAO_IPI <> OLD.FISCAL_TRIBUTACAO_IPI) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.CST.IPI:'||OLD.FISCAL_TRIBUTACAO_IPI||' -> '||NEW.FISCAL_TRIBUTACAO_IPI;
        END                      
    IF(NEW.FISCAL_TRIBUTACAO_PIS <> OLD.FISCAL_TRIBUTACAO_PIS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.CST.PIS:'||OLD.FISCAL_TRIBUTACAO_PIS||' -> '||NEW.FISCAL_TRIBUTACAO_PIS;
        END                         
    IF(NEW.FISCAL_TRIBUTACAO_COFINS <> OLD.FISCAL_TRIBUTACAO_COFINS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.CST.Cof:'||OLD.FISCAL_TRIBUTACAO_COFINS||' -> '||NEW.FISCAL_TRIBUTACAO_COFINS;
        END                         
    IF(NEW.FISCAL_CFOP_CODIGO <> OLD.FISCAL_CFOP_CODIGO) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.CFOP:'||OLD.FISCAL_CFOP_CODIGO||' -> '||NEW.FISCAL_CFOP_CODIGO;
        END                   
    IF(NEW.VALOR_CONTABIL <> OLD.VALOR_CONTABIL) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Cont:'||OLD.VALOR_CONTABIL||' -> '||NEW.VALOR_CONTABIL;
        END
    IF(NEW.DESCONTO_BASECALCULO_ICMS <> OLD.DESCONTO_BASECALCULO_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Desc.Bs.Calc.Cof:'||OLD.DESCONTO_BASECALCULO_ICMS||' -> '||NEW.DESCONTO_BASECALCULO_ICMS;
        END
    IF(NEW.VALOR_BASECALCULO_ICMS <> OLD.VALOR_BASECALCULO_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Bs.Calc.ICMS:'||OLD.VALOR_BASECALCULO_ICMS||' -> '||NEW.VALOR_BASECALCULO_ICMS;
        END
    IF(NEW.MODALIDADE_ICMS <> OLD.MODALIDADE_ICMS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Mod.ICMS:'||OLD.MODALIDADE_ICMS||' -> '||NEW.MODALIDADE_ICMS;
        END                    
    IF(NEW.MODALIDADE_ICMS_ST <> OLD.MODALIDADE_ICMS_ST) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Mod.ICMS.St:'||OLD.MODALIDADE_ICMS_ST||' -> '||NEW.MODALIDADE_ICMS_ST;
        END                    
    IF(NEW.MARGEM_ICMS_ST <> OLD.MARGEM_ICMS_ST) THEN
        BEGIN              
            HISTORICO = HISTORICO||' Marg.ICMS.St:'||OLD.MARGEM_ICMS_ST||' -> '||NEW.MARGEM_ICMS_ST;
        END                
    IF(NEW.REDUCAO_ICMS_ST <> OLD.REDUCAO_ICMS_ST) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Red.ICMS.St:'||OLD.REDUCAO_ICMS_ST||' -> '||NEW.REDUCAO_ICMS_ST;
        END                    
    IF(NEW.BASECALCULO_ICMS_ST <> OLD.BASECALCULO_ICMS_ST) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Bs.Calc.ICMS.St:'||OLD.BASECALCULO_ICMS_ST||' -> '||NEW.BASECALCULO_ICMS_ST;
        END                    
    IF(NEW.ALIQUOTA_ICMS_ST <> OLD.ALIQUOTA_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' %ICMS.St:'||OLD.ALIQUOTA_ICMS_ST||' -> '||NEW.ALIQUOTA_ICMS_ST;
        END                 
    IF(NEW.VALOR_ICMS_ST <> OLD.VALOR_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Vr.ICMS.St:'||OLD.VALOR_ICMS_ST||' -> '||NEW.VALOR_ICMS_ST;
        END                 
    IF(NEW.PEDIDO_CLIENTE <> OLD.PEDIDO_CLIENTE) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Ped.Cliente:'||OLD.PEDIDO_CLIENTE||' -> '||NEW.PEDIDO_CLIENTE;
        END
    IF(NEW.INFORMACOES_COMPLEMENTARES <> OLD.INFORMACOES_COMPLEMENTARES) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Inf.Comp:'||OLD.INFORMACOES_COMPLEMENTARES||' -> '||NEW.INFORMACOES_COMPLEMENTARES;
        END
    IF(NEW.NF_CONSIGNACAO <> OLD.NF_CONSIGNACAO) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' NF.Consig:'||OLD.NF_CONSIGNACAO||' -> '||NEW.NF_CONSIGNACAO;
        END                    
    IF(NEW.NF_CONSIGNACAO_ITEM <> OLD.NF_CONSIGNACAO_ITEM) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' Vl.Consig.item:'||OLD.NF_CONSIGNACAO_ITEM||' -> '||NEW.NF_CONSIGNACAO_ITEM;
        END                    
    IF(NEW.FCI_MENSAGEM <> OLD.FCI_MENSAGEM) THEN
        BEGIN                                     
            HISTORICO = HISTORICO||' Fci.Mensg:'||OLD.FCI_MENSAGEM||' -> '||NEW.FCI_MENSAGEM;
        END                        
    IF(NEW.FCI_PARCELA_IMPORTACAO <> OLD.FCI_PARCELA_IMPORTACAO) THEN
        BEGIN                                     
            HISTORICO = HISTORICO||' FCI.Parc.Imp:'||OLD.FCI_PARCELA_IMPORTACAO||' -> '||NEW.FCI_PARCELA_IMPORTACAO;
        END                        
    IF(NEW.FCI_CONTEUDO_IMPORTACAO <> OLD.FCI_CONTEUDO_IMPORTACAO) THEN
        BEGIN               
            HISTORICO = HISTORICO||' FCI.Cont.Imp:'||OLD.FCI_CONTEUDO_IMPORTACAO||' -> '||NEW.FCI_CONTEUDO_IMPORTACAO;
        END
    IF(NEW.FCI_NUMERO <> OLD.FCI_NUMERO) THEN
        BEGIN                      
            HISTORICO = HISTORICO||' Nr.FCI:'||OLD.FCI_NUMERO||' -> '||NEW.FCI_NUMERO;
        END             
    IF(NEW.VALOR_FRETE <> OLD.VALOR_FRETE) THEN
        BEGIN                          
            HISTORICO = HISTORICO||' Vr.Frete:'||OLD.VALOR_FRETE||' -> '||NEW.VALOR_FRETE;
        END             
    IF(NEW.VALOR_SEGURO <> OLD.VALOR_SEGURO) THEN
        BEGIN                          
            HISTORICO = HISTORICO||' Vr.Seg:'||OLD.VALOR_SEGURO||' -> '||NEW.VALOR_SEGURO;
        END             
    IF(NEW.PESO_LIQUIDO <> OLD.PESO_LIQUIDO) THEN
        BEGIN                          
            HISTORICO = HISTORICO||' Peso Liq:'||OLD.PESO_LIQUIDO||' -> '||NEW.PESO_LIQUIDO;
        END             
    IF(NEW.PESO_BRUTO <> OLD.PESO_BRUTO) THEN
        BEGIN                          
            HISTORICO = HISTORICO||' Peso Brt:'||OLD.PESO_BRUTO||' -> '||NEW.PESO_BRUTO;
        END             
    IF(NEW.VOLUMES <> OLD.VOLUMES) THEN
        BEGIN                          
            HISTORICO = HISTORICO||' Vol:'||OLD.VOLUMES||' -> '||NEW.VOLUMES;
        END             
    IF(NEW.CUBAGEM <> OLD.CUBAGEM) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Cub:'||OLD.CUBAGEM||' -> '||NEW.CUBAGEM;
        END
    IF(NEW.FISCAL_REDUCAO_ICMS_ST <> OLD.FISCAL_REDUCAO_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.Red.ICMS.St:'||OLD.FISCAL_REDUCAO_ICMS_ST||' -> '||NEW.FISCAL_REDUCAO_ICMS_ST;
        END
    IF(NEW.FISCAL_BASECALCULO_ICMS_ST <> OLD.FISCAL_BASECALCULO_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.Bs.ICMS.St:'||OLD.FISCAL_BASECALCULO_ICMS_ST||' -> '||NEW.FISCAL_BASECALCULO_ICMS_ST;
        END
    IF(NEW.FISCAL_ALIQUOTA_ICMS_ST <> OLD.FISCAL_ALIQUOTA_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.%ICMS.St:'||OLD.FISCAL_ALIQUOTA_ICMS_ST||' -> '||NEW.FISCAL_ALIQUOTA_ICMS_ST;
        END
    IF(NEW.FISCAL_VALOR_ICMS_ST <> OLD.FISCAL_VALOR_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.Vr.ICMS.St:'||OLD.FISCAL_VALOR_ICMS_ST||' -> '||NEW.FISCAL_VALOR_ICMS_ST;
        END
    IF(NEW.EXP_NUMERO_DRAWBACK <> OLD.EXP_NUMERO_DRAWBACK) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' Exp.Num.Drawbck:'||OLD.EXP_NUMERO_DRAWBACK||' -> '||NEW.EXP_NUMERO_DRAWBACK;
        END                    
    IF(NEW.EXP_NUMERO_RE <> OLD.EXP_NUMERO_RE) THEN
        BEGIN                            
            HISTORICO = HISTORICO||' Exp.Num.Re:'||OLD.EXP_NUMERO_RE||' -> '||NEW.EXP_NUMERO_RE;
        END               
    IF(NEW.EXP_CHAVE <> OLD.EXP_CHAVE) THEN
        BEGIN                            
            HISTORICO = HISTORICO||' Exp.Chave:'||OLD.EXP_CHAVE||' -> '||NEW.EXP_CHAVE;
        END               
    IF(NEW.EXP_QUANTIDADE <> OLD.EXP_QUANTIDADE) THEN
        BEGIN                            
            HISTORICO = HISTORICO||' Exp.QTD:'||OLD.EXP_QUANTIDADE||' -> '||NEW.EXP_QUANTIDADE;
        END               
    IF(NEW.CONTA_CONTABIL <> OLD.CONTA_CONTABIL) THEN
        BEGIN                            
            HISTORICO = HISTORICO||' C.Contab:'||OLD.CONTA_CONTABIL||' -> '||NEW.CONTA_CONTABIL;
        END               
    IF(NEW.CCUSTO <> OLD.CCUSTO) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' C.Custo:'||OLD.CCUSTO||' -> '||NEW.CCUSTO;
        END                    
    IF(NEW.ENQUADRAMENTO_IPI <> OLD.ENQUADRAMENTO_IPI) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' Enqrd.IPI:'||OLD.ENQUADRAMENTO_IPI||' -> '||NEW.ENQUADRAMENTO_IPI;
        END                    
    IF(NEW.VALOR_FRETE_RATEADO <> OLD.VALOR_FRETE_RATEADO) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Vr.Frete.Rat:'||OLD.VALOR_FRETE_RATEADO||' -> '||NEW.VALOR_FRETE_RATEADO;
        END
    IF(NEW.VBCUFDEST <> OLD.VBCUFDEST) THEN
        BEGIN                         
            HISTORICO = HISTORICO||' VBCUFDEST:'||OLD.VBCUFDEST||' -> '||NEW.VBCUFDEST;
        END            
    IF(NEW.PFCPUFDEST <> OLD.PFCPUFDEST) THEN
        BEGIN                         
            HISTORICO = HISTORICO||' PFCPUFDEST:'||OLD.PFCPUFDEST||' -> '||NEW.PFCPUFDEST;
        END            
    IF(NEW.PICMSUFDEST <> OLD.PICMSUFDEST) THEN
        BEGIN                         
            HISTORICO = HISTORICO||' PICMSUFDEST:'||OLD.PICMSUFDEST||' -> '||NEW.PICMSUFDEST;
        END            
    IF(NEW.PICMSINTER <> OLD.PICMSINTER) THEN
        BEGIN                         
            HISTORICO = HISTORICO||' PICMSINTER:'||OLD.PICMSINTER||' -> '||NEW.PICMSINTER;
        END            
    IF(NEW.VFCPUFDEST <> OLD.VFCPUFDEST) THEN
        BEGIN                         
            HISTORICO = HISTORICO||' VFCPUFDEST:'||OLD.VFCPUFDEST||' -> '||NEW.VFCPUFDEST;
        END            
    IF(NEW.VICMSUFDEST <> OLD.VICMSUFDEST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' VICMSUFDEST:'||OLD.VICMSUFDEST||' -> '||NEW.VICMSUFDEST;
        END
    IF(NEW.VICMSUFREMET <> OLD.VICMSUFREMET) THEN
        BEGIN               
            HISTORICO = HISTORICO||' VICMSUFREMET:'||OLD.VICMSUFREMET||' -> '||NEW.VICMSUFREMET;
        END
    IF(NEW.PICMSINTERPART<> OLD.PICMSINTERPART) THEN
        BEGIN               
            HISTORICO = HISTORICO||' PICMSINTERPART:'||OLD.PICMSINTERPART||' -> '||NEW.PICMSINTERPART;
        END
    IF(NEW.TAMANHO <> OLD.TAMANHO) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Tam:'||OLD.TAMANHO||' -> '||NEW.TAMANHO;
        END
    IF(NEW.QUANTIDADE_ALTERNATIVA <> OLD.QUANTIDADE_ALTERNATIVA) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Qtd.Altern:'||OLD.QUANTIDADE_ALTERNATIVA||' -> '||NEW.QUANTIDADE_ALTERNATIVA;
        END                       
    IF(NEW.UM_ALTERNATIVA <> OLD.UM_ALTERNATIVA) THEN
        BEGIN                               
            HISTORICO = HISTORICO||' UM.Altern:'||OLD.UM_ALTERNATIVA||' -> '||NEW.UM_ALTERNATIVA;
        END                  
    IF(NEW.VALOR_ALTERNATIVO <> OLD.VALOR_ALTERNATIVO) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Vr.Altern:'||OLD.VALOR_ALTERNATIVO||' -> '||NEW.VALOR_ALTERNATIVO;
        END                       
    IF(NEW.CUSTO_FRETE_RATEADO <> OLD.CUSTO_FRETE_RATEADO) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Custo Frete.Rat:'||OLD.CUSTO_FRETE_RATEADO||' -> '||NEW.CUSTO_FRETE_RATEADO;
        END                       
    IF(NEW.MARGEM <> OLD.MARGEM) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Margem:'||OLD.MARGEM||' -> '||NEW.MARGEM;
        END                       
    IF(NEW.REDUCAO_BASE_PISCOF <> OLD.REDUCAO_BASE_PISCOF) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Red.Bs.PisCof:'||OLD.REDUCAO_BASE_PISCOF||' -> '||NEW.REDUCAO_BASE_PISCOF;
        END
    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'Item:'||new.SEQUENCIA||' alterado. '||HISTORICO;
        HISTORICO = FN_ELIPSES(HISTORICO,500);
        EXECUTE PROCEDURE SPI_HISTORICO('TBNFS', NEW.NFS_CONTROLE, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFS_ITEM10 (
    CONTROLE_1 integer)
returns (
    NFS_CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    GRADE_CODIGO integer,
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    CONTROLE integer,
    VALOR_CUSTO numeric(10,5),
    PRODUTO_GRADE_CODIGO integer,
    MODELO_CODIGO integer,
    TECELAGEM integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    LOCALIZACAO_DESCRICAO varchar(20),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    VOLUMES integer,
    CUBAGEM numeric(10,4),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(500),
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    ENQUADRAMENTO_IPI varchar(3),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    VBCUFDEST numeric(15,2),
    PFCPUFDEST numeric(15,2),
    PICMSUFDEST numeric(15,2),
    PICMSINTER numeric(15,2),
    VFCPUFDEST numeric(15,2),
    VICMSUFDEST numeric(15,2),
    VICMSUFREMET numeric(15,2),
    PICMSINTERPART numeric(15,2),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1))
as
begin
for select
A.NFS_CONTROLE      ,A.SEQUENCIA        ,A.OPERACAO_CODIGO      ,A.CFOP_CODIGO      ,
A.PRODUTO_CODIGO    ,A.PRODUTO_DESCRICAO,A.PRODUTO_UNIDADEMEDIDA2,A.GRADE_CODIGO     ,
A.NCM_CODIGO        ,A.TRIBUTACAO_ICMS  ,A.TRIBUTACAO_IPI       ,A.TRIBUTACAO_ORIGEM,
A.LOCALIZACAO_CODIGO,A.QUANTIDADE       ,A.VALOR_UNITARIO       ,A.VALOR_TOTAL      ,
A.BASECALCULO_ICMS  ,A.PERCENTUAL_ICMS  ,A.PERCENTUAL_IPI       ,A.VALOR_IPI        ,
A.PERCENTUAL_PIS    ,A.VALOR_PIS        ,A.PERCENTUAL_COFINS    ,A.VALOR_COFINS     ,
A.NFE, A.NFE_ITEM_CONTROLE, A.NF_EXTERNO, A.NF_EXTERNO_ITEM_CONTROLE,
A.PEDIDO,A.PEDIDO_ITEM_PE_CONTROLE,
A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
A.ESTABELECIMENTO_CODIGO,A.EMPRESA_CODIGO,A.NUMERO_NOTAFISCAL,A.DATA_EMISSAO,
A.SITUACAO,A.CONTROLE,A.VALOR_CUSTO,
(Select First 1 E.grade_codigo  From TbProduto E Where A.Produto_Codigo = E.Codigo),
(Select First 1 E.modelo_codigo From TbProduto E Where A.Produto_Codigo = E.Codigo),
A.Tecelagem,A.tributacao_PIS, A.tributacao_cofins,
A.VALOR_ICMS,A.BASECALCULO_IPI,A.BASECALCULO_PIS,A.BASECALCULO_COFINS,

(Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo),
A.VALOR_FRETE, A.VALOR_SEGURO, A.PESO_LIQUIDO, A.PESO_BRUTO, A.VOLUMES, A.CUBAGEM,

A.VALOR_ACRESCIMO,A.VALOR_DESCONTO,A.FISCAL_ISENTAS_IPI,A.FISCAL_ISENTAS_ICMS,
A.FISCAL_OUTRAS_IPI,A.FISCAL_OUTRAS_ICMS,A.FISCAL_VALOR_ICMS,A.FISCAL_VALOR_IPI,
A.FISCAL_VALOR_PIS,A.FISCAL_VALOR_COFINS,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_BASECALCULO_IPI,A.FISCAL_BASECALCULO_PIS,A.FISCAL_BASECALCULO_COFINS,
A.VALOR_CONTABIL, A.Valor_BaseCalculo_Icms, A.FISCAL_CFOP_CODIGO,
A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,A.FISCAL_TRIBUTACAO_IPI,
A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST, A.REDUCAO_ICMS_ST,
A.BASECALCULO_ICMS_ST, A.ALIQUOTA_ICMS_ST, A.VALOR_ICMS_ST, A.FISCAL_REDUCAO_ICMS_ST,
A.FISCAL_BASECALCULO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST, A.FISCAL_VALOR_ICMS_ST,
A.PEDIDO_CLIENTE,
A.INFORMACOES_COMPLEMENTARES, A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO,
A.enquadramento_ipi, A.ccusto, A.conta_contabil,

A.VBCUFDEST,
A.pFCPUFDest,
A.pICMSUFDest,
A.pICMSInter,
A.vFCPUFDest,
A.vICMSUFDest,
A.vICMSUFRemet,
A.pICMSInterPart,

QUANTIDADE_ALTERNATIVA,
UM_ALTERNATIVA,
VALOR_ALTERNATIVO,
A.REDUCAO_BASE_PISCOF

From TbNfs_Item A
where (A.NFS_CONTROLE = :CONTROLE_1)
order by A.SEQUENCIA
into
    :NFS_CONTROLE      ,:SEQUENCIA        ,:OPERACAO_CODIGO      ,:CFOP_CODIGO      ,
    :PRODUTO_CODIGO    ,:PRODUTO_DESCRICAO,:PRODUTO_UNIDADEMEDIDA,:GRADE_CODIGO     ,
    :NCM_CODIGO        ,:TRIBUTACAO_ICMS  ,:TRIBUTACAO_IPI       ,:TRIBUTACAO_ORIGEM,
    :LOCALIZACAO_CODIGO,:QUANTIDADE       ,:VALOR_UNITARIO       ,:VALOR_TOTAL      ,
    :BASECALCULO_ICMS  ,:PERCENTUAL_ICMS  ,:PERCENTUAL_IPI       ,:VALOR_IPI        ,
    :PERCENTUAL_PIS    ,:VALOR_PIS        ,:PERCENTUAL_COFINS ,:VALOR_COFINS        ,
    :NFE   ,:NFE_ITEM_CONTROLE,:NF_EXTERNO        ,:NF_EXTERNO_ITEM_CONTROLE        ,
    :PEDIDO,:PEDIDO_ITEM_PE_CONTROLE,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,:DATA_EMISSAO,
    :SITUACAO,:CONTROLE,:VALOR_CUSTO,:PRODUTO_GRADE_CODIGO,:MODELO_CODIGO,
    :TECELAGEM,:tributacao_PIS, :tributacao_cofins,
    :VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,

    :LOCALIZACAO_DESCRICAO,
    :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :VOLUMES, :CUBAGEM,

    :VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
    :FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
    :FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
    :FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
    :FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
    :VALOR_CONTABIL,:Valor_BaseCalculo_Icms,:FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,:FISCAL_TRIBUTACAO_ICMS,
    :FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,:FISCAL_TRIBUTACAO_COFINS,
    :MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
    :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST, :FISCAL_REDUCAO_ICMS_ST,
    :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
    :PEDIDO_CLIENTE,
    :INFORMACOES_COMPLEMENTARES, :Nf_Consignacao, :Nf_Consignacao_Item,
    :FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,
    :enquadramento_ipi, :ccusto, :conta_contabil,
    :VBCUFDEST,:pFCPUFDest,:pICMSUFDest,:pICMSInter,:vFCPUFDest,:vICMSUFDest,:vICMSUFRemet,:pICMSInterPart,
    :QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO, :REDUCAO_BASE_PISCOF

do suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFS_ITEM5 (
    CONTROLE_1 integer)
returns (
    NFS_CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    GRADE_CODIGO integer,
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    CONTROLE integer,
    VALOR_CUSTO numeric(10,5),
    PRODUTO_GRADE_CODIGO integer,
    MODELO_CODIGO integer,
    TECELAGEM integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    LOCALIZACAO_DESCRICAO varchar(20),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    VOLUMES integer,
    CUBAGEM numeric(10,4),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(200),
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40))
as
begin
for select
A.NFS_CONTROLE      ,A.SEQUENCIA        ,A.OPERACAO_CODIGO      ,A.CFOP_CODIGO      ,
A.PRODUTO_CODIGO    ,A.PRODUTO_DESCRICAO,A.PRODUTO_UNIDADEMEDIDA2,A.GRADE_CODIGO     ,
A.NCM_CODIGO        ,A.TRIBUTACAO_ICMS  ,A.TRIBUTACAO_IPI       ,A.TRIBUTACAO_ORIGEM,
A.LOCALIZACAO_CODIGO,A.QUANTIDADE       ,A.VALOR_UNITARIO       ,A.VALOR_TOTAL      ,
A.BASECALCULO_ICMS  ,A.PERCENTUAL_ICMS  ,A.PERCENTUAL_IPI       ,A.VALOR_IPI        ,
A.PERCENTUAL_PIS    ,A.VALOR_PIS        ,A.PERCENTUAL_COFINS    ,A.VALOR_COFINS     ,
A.NFE, A.NFE_ITEM_CONTROLE, A.NF_EXTERNO, A.NF_EXTERNO_ITEM_CONTROLE,
A.PEDIDO,A.PEDIDO_ITEM_PE_CONTROLE,
A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
A.ESTABELECIMENTO_CODIGO,A.EMPRESA_CODIGO,A.NUMERO_NOTAFISCAL,A.DATA_EMISSAO,
A.SITUACAO,A.CONTROLE,A.VALOR_CUSTO,
(Select First 1 E.grade_codigo  From TbProduto E Where A.Produto_Codigo = E.Codigo),
(Select First 1 E.modelo_codigo From TbProduto E Where A.Produto_Codigo = E.Codigo),
A.Tecelagem,A.tributacao_PIS, A.tributacao_cofins,
A.VALOR_ICMS,A.BASECALCULO_IPI,A.BASECALCULO_PIS,A.BASECALCULO_COFINS,

(Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo),
A.VALOR_FRETE, A.VALOR_SEGURO, A.PESO_LIQUIDO, A.PESO_BRUTO, A.VOLUMES, A.CUBAGEM,

A.VALOR_ACRESCIMO,A.VALOR_DESCONTO,A.FISCAL_ISENTAS_IPI,A.FISCAL_ISENTAS_ICMS,
A.FISCAL_OUTRAS_IPI,A.FISCAL_OUTRAS_ICMS,A.FISCAL_VALOR_ICMS,A.FISCAL_VALOR_IPI,
A.FISCAL_VALOR_PIS,A.FISCAL_VALOR_COFINS,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_BASECALCULO_IPI,A.FISCAL_BASECALCULO_PIS,A.FISCAL_BASECALCULO_COFINS,
A.VALOR_CONTABIL, A.Valor_BaseCalculo_Icms, A.FISCAL_CFOP_CODIGO,
A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,A.FISCAL_TRIBUTACAO_IPI,
A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST, A.REDUCAO_ICMS_ST,
A.BASECALCULO_ICMS_ST, A.ALIQUOTA_ICMS_ST, A.VALOR_ICMS_ST, A.FISCAL_REDUCAO_ICMS_ST,
A.FISCAL_BASECALCULO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST, A.FISCAL_VALOR_ICMS_ST,
A.PEDIDO_CLIENTE,
A.INFORMACOES_COMPLEMENTARES, A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO

From TbNfs_Item A
where (A.NFS_CONTROLE = :CONTROLE_1)
order by A.SEQUENCIA
into
    :NFS_CONTROLE      ,:SEQUENCIA        ,:OPERACAO_CODIGO      ,:CFOP_CODIGO      ,
    :PRODUTO_CODIGO    ,:PRODUTO_DESCRICAO,:PRODUTO_UNIDADEMEDIDA,:GRADE_CODIGO     ,
    :NCM_CODIGO        ,:TRIBUTACAO_ICMS  ,:TRIBUTACAO_IPI       ,:TRIBUTACAO_ORIGEM,
    :LOCALIZACAO_CODIGO,:QUANTIDADE       ,:VALOR_UNITARIO       ,:VALOR_TOTAL      ,
    :BASECALCULO_ICMS  ,:PERCENTUAL_ICMS  ,:PERCENTUAL_IPI       ,:VALOR_IPI        ,
    :PERCENTUAL_PIS    ,:VALOR_PIS        ,:PERCENTUAL_COFINS ,:VALOR_COFINS        ,
    :NFE   ,:NFE_ITEM_CONTROLE,:NF_EXTERNO        ,:NF_EXTERNO_ITEM_CONTROLE        ,
    :PEDIDO,:PEDIDO_ITEM_PE_CONTROLE,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,:DATA_EMISSAO,
    :SITUACAO,:CONTROLE,:VALOR_CUSTO,:PRODUTO_GRADE_CODIGO,:MODELO_CODIGO,
    :TECELAGEM,:tributacao_PIS, :tributacao_cofins,
    :VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,

    :LOCALIZACAO_DESCRICAO,
    :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :VOLUMES, :CUBAGEM,

    :VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
    :FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
    :FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
    :FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
    :FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
    :VALOR_CONTABIL,:Valor_BaseCalculo_Icms,:FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,:FISCAL_TRIBUTACAO_ICMS,
    :FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,:FISCAL_TRIBUTACAO_COFINS,
    :MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
    :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST, :FISCAL_REDUCAO_ICMS_ST,
    :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
    :PEDIDO_CLIENTE,
    :INFORMACOES_COMPLEMENTARES, :Nf_Consignacao, :Nf_Consignacao_Item,
    :FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO

do suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFS_ITEM6 (
    CONTROLE_1 integer)
returns (
    NFS_CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    GRADE_CODIGO integer,
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    CONTROLE integer,
    VALOR_CUSTO numeric(10,5),
    PRODUTO_GRADE_CODIGO integer,
    MODELO_CODIGO integer,
    TECELAGEM integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    LOCALIZACAO_DESCRICAO varchar(20),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    VOLUMES integer,
    CUBAGEM numeric(10,4),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(200),
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    ENQUADRAMENTO_IPI varchar(3),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11))
as
begin
for select
A.NFS_CONTROLE      ,A.SEQUENCIA        ,A.OPERACAO_CODIGO      ,A.CFOP_CODIGO      ,
A.PRODUTO_CODIGO    ,A.PRODUTO_DESCRICAO,A.PRODUTO_UNIDADEMEDIDA2,A.GRADE_CODIGO     ,
A.NCM_CODIGO        ,A.TRIBUTACAO_ICMS  ,A.TRIBUTACAO_IPI       ,A.TRIBUTACAO_ORIGEM,
A.LOCALIZACAO_CODIGO,A.QUANTIDADE       ,A.VALOR_UNITARIO       ,A.VALOR_TOTAL      ,
A.BASECALCULO_ICMS  ,A.PERCENTUAL_ICMS  ,A.PERCENTUAL_IPI       ,A.VALOR_IPI        ,
A.PERCENTUAL_PIS    ,A.VALOR_PIS        ,A.PERCENTUAL_COFINS    ,A.VALOR_COFINS     ,
A.NFE, A.NFE_ITEM_CONTROLE, A.NF_EXTERNO, A.NF_EXTERNO_ITEM_CONTROLE,
A.PEDIDO,A.PEDIDO_ITEM_PE_CONTROLE,
A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
A.ESTABELECIMENTO_CODIGO,A.EMPRESA_CODIGO,A.NUMERO_NOTAFISCAL,A.DATA_EMISSAO,
A.SITUACAO,A.CONTROLE,A.VALOR_CUSTO,
(Select First 1 E.grade_codigo  From TbProduto E Where A.Produto_Codigo = E.Codigo),
(Select First 1 E.modelo_codigo From TbProduto E Where A.Produto_Codigo = E.Codigo),
A.Tecelagem,A.tributacao_PIS, A.tributacao_cofins,
A.VALOR_ICMS,A.BASECALCULO_IPI,A.BASECALCULO_PIS,A.BASECALCULO_COFINS,

(Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo),
A.VALOR_FRETE, A.VALOR_SEGURO, A.PESO_LIQUIDO, A.PESO_BRUTO, A.VOLUMES, A.CUBAGEM,

A.VALOR_ACRESCIMO,A.VALOR_DESCONTO,A.FISCAL_ISENTAS_IPI,A.FISCAL_ISENTAS_ICMS,
A.FISCAL_OUTRAS_IPI,A.FISCAL_OUTRAS_ICMS,A.FISCAL_VALOR_ICMS,A.FISCAL_VALOR_IPI,
A.FISCAL_VALOR_PIS,A.FISCAL_VALOR_COFINS,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_BASECALCULO_IPI,A.FISCAL_BASECALCULO_PIS,A.FISCAL_BASECALCULO_COFINS,
A.VALOR_CONTABIL, A.Valor_BaseCalculo_Icms, A.FISCAL_CFOP_CODIGO,
A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,A.FISCAL_TRIBUTACAO_IPI,
A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST, A.REDUCAO_ICMS_ST,
A.BASECALCULO_ICMS_ST, A.ALIQUOTA_ICMS_ST, A.VALOR_ICMS_ST, A.FISCAL_REDUCAO_ICMS_ST,
A.FISCAL_BASECALCULO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST, A.FISCAL_VALOR_ICMS_ST,
A.PEDIDO_CLIENTE,
A.INFORMACOES_COMPLEMENTARES, A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO,
A.enquadramento_ipi, A.ccusto, A.conta_contabil

From TbNfs_Item A
where (A.NFS_CONTROLE = :CONTROLE_1)
order by A.SEQUENCIA
into
    :NFS_CONTROLE      ,:SEQUENCIA        ,:OPERACAO_CODIGO      ,:CFOP_CODIGO      ,
    :PRODUTO_CODIGO    ,:PRODUTO_DESCRICAO,:PRODUTO_UNIDADEMEDIDA,:GRADE_CODIGO     ,
    :NCM_CODIGO        ,:TRIBUTACAO_ICMS  ,:TRIBUTACAO_IPI       ,:TRIBUTACAO_ORIGEM,
    :LOCALIZACAO_CODIGO,:QUANTIDADE       ,:VALOR_UNITARIO       ,:VALOR_TOTAL      ,
    :BASECALCULO_ICMS  ,:PERCENTUAL_ICMS  ,:PERCENTUAL_IPI       ,:VALOR_IPI        ,
    :PERCENTUAL_PIS    ,:VALOR_PIS        ,:PERCENTUAL_COFINS ,:VALOR_COFINS        ,
    :NFE   ,:NFE_ITEM_CONTROLE,:NF_EXTERNO        ,:NF_EXTERNO_ITEM_CONTROLE        ,
    :PEDIDO,:PEDIDO_ITEM_PE_CONTROLE,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,:DATA_EMISSAO,
    :SITUACAO,:CONTROLE,:VALOR_CUSTO,:PRODUTO_GRADE_CODIGO,:MODELO_CODIGO,
    :TECELAGEM,:tributacao_PIS, :tributacao_cofins,
    :VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,

    :LOCALIZACAO_DESCRICAO,
    :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :VOLUMES, :CUBAGEM,

    :VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
    :FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
    :FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
    :FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
    :FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
    :VALOR_CONTABIL,:Valor_BaseCalculo_Icms,:FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,:FISCAL_TRIBUTACAO_ICMS,
    :FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,:FISCAL_TRIBUTACAO_COFINS,
    :MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
    :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST, :FISCAL_REDUCAO_ICMS_ST,
    :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
    :PEDIDO_CLIENTE,
    :INFORMACOES_COMPLEMENTARES, :Nf_Consignacao, :Nf_Consignacao_Item,
    :FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,
    :enquadramento_ipi, :ccusto, :conta_contabil

do suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFS_ITEM7 (
    CONTROLE_1 integer)
returns (
    NFS_CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    GRADE_CODIGO integer,
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    CONTROLE integer,
    VALOR_CUSTO numeric(10,5),
    PRODUTO_GRADE_CODIGO integer,
    MODELO_CODIGO integer,
    TECELAGEM integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    LOCALIZACAO_DESCRICAO varchar(20),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    VOLUMES integer,
    CUBAGEM numeric(10,4),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(200),
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    ENQUADRAMENTO_IPI varchar(3),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    VBCUFDEST numeric(15,2),
    PFCPUFDEST numeric(15,2),
    PICMSUFDEST numeric(15,2),
    PICMSINTER numeric(15,2),
    VFCPUFDEST numeric(15,2),
    VICMSUFDEST numeric(15,2),
    VICMSUFREMET numeric(15,2),
    PICMSINTERPART numeric(15,2))
as
begin
for select
A.NFS_CONTROLE      ,A.SEQUENCIA        ,A.OPERACAO_CODIGO      ,A.CFOP_CODIGO      ,
A.PRODUTO_CODIGO    ,A.PRODUTO_DESCRICAO,A.PRODUTO_UNIDADEMEDIDA2,A.GRADE_CODIGO     ,
A.NCM_CODIGO        ,A.TRIBUTACAO_ICMS  ,A.TRIBUTACAO_IPI       ,A.TRIBUTACAO_ORIGEM,
A.LOCALIZACAO_CODIGO,A.QUANTIDADE       ,A.VALOR_UNITARIO       ,A.VALOR_TOTAL      ,
A.BASECALCULO_ICMS  ,A.PERCENTUAL_ICMS  ,A.PERCENTUAL_IPI       ,A.VALOR_IPI        ,
A.PERCENTUAL_PIS    ,A.VALOR_PIS        ,A.PERCENTUAL_COFINS    ,A.VALOR_COFINS     ,
A.NFE, A.NFE_ITEM_CONTROLE, A.NF_EXTERNO, A.NF_EXTERNO_ITEM_CONTROLE,
A.PEDIDO,A.PEDIDO_ITEM_PE_CONTROLE,
A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
A.ESTABELECIMENTO_CODIGO,A.EMPRESA_CODIGO,A.NUMERO_NOTAFISCAL,A.DATA_EMISSAO,
A.SITUACAO,A.CONTROLE,A.VALOR_CUSTO,
(Select First 1 E.grade_codigo  From TbProduto E Where A.Produto_Codigo = E.Codigo),
(Select First 1 E.modelo_codigo From TbProduto E Where A.Produto_Codigo = E.Codigo),
A.Tecelagem,A.tributacao_PIS, A.tributacao_cofins,
A.VALOR_ICMS,A.BASECALCULO_IPI,A.BASECALCULO_PIS,A.BASECALCULO_COFINS,

(Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo),
A.VALOR_FRETE, A.VALOR_SEGURO, A.PESO_LIQUIDO, A.PESO_BRUTO, A.VOLUMES, A.CUBAGEM,

A.VALOR_ACRESCIMO,A.VALOR_DESCONTO,A.FISCAL_ISENTAS_IPI,A.FISCAL_ISENTAS_ICMS,
A.FISCAL_OUTRAS_IPI,A.FISCAL_OUTRAS_ICMS,A.FISCAL_VALOR_ICMS,A.FISCAL_VALOR_IPI,
A.FISCAL_VALOR_PIS,A.FISCAL_VALOR_COFINS,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_BASECALCULO_IPI,A.FISCAL_BASECALCULO_PIS,A.FISCAL_BASECALCULO_COFINS,
A.VALOR_CONTABIL, A.Valor_BaseCalculo_Icms, A.FISCAL_CFOP_CODIGO,
A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,A.FISCAL_TRIBUTACAO_IPI,
A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST, A.REDUCAO_ICMS_ST,
A.BASECALCULO_ICMS_ST, A.ALIQUOTA_ICMS_ST, A.VALOR_ICMS_ST, A.FISCAL_REDUCAO_ICMS_ST,
A.FISCAL_BASECALCULO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST, A.FISCAL_VALOR_ICMS_ST,
A.PEDIDO_CLIENTE,
A.INFORMACOES_COMPLEMENTARES, A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO,
A.enquadramento_ipi, A.ccusto, A.conta_contabil,

A.VBCUFDEST,
A.pFCPUFDest,
A.pICMSUFDest,
A.pICMSInter,
A.vFCPUFDest,
A.vICMSUFDest,
A.vICMSUFRemet,
A.pICMSInterPart

From TbNfs_Item A
where (A.NFS_CONTROLE = :CONTROLE_1)
order by A.SEQUENCIA
into
    :NFS_CONTROLE      ,:SEQUENCIA        ,:OPERACAO_CODIGO      ,:CFOP_CODIGO      ,
    :PRODUTO_CODIGO    ,:PRODUTO_DESCRICAO,:PRODUTO_UNIDADEMEDIDA,:GRADE_CODIGO     ,
    :NCM_CODIGO        ,:TRIBUTACAO_ICMS  ,:TRIBUTACAO_IPI       ,:TRIBUTACAO_ORIGEM,
    :LOCALIZACAO_CODIGO,:QUANTIDADE       ,:VALOR_UNITARIO       ,:VALOR_TOTAL      ,
    :BASECALCULO_ICMS  ,:PERCENTUAL_ICMS  ,:PERCENTUAL_IPI       ,:VALOR_IPI        ,
    :PERCENTUAL_PIS    ,:VALOR_PIS        ,:PERCENTUAL_COFINS ,:VALOR_COFINS        ,
    :NFE   ,:NFE_ITEM_CONTROLE,:NF_EXTERNO        ,:NF_EXTERNO_ITEM_CONTROLE        ,
    :PEDIDO,:PEDIDO_ITEM_PE_CONTROLE,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,:DATA_EMISSAO,
    :SITUACAO,:CONTROLE,:VALOR_CUSTO,:PRODUTO_GRADE_CODIGO,:MODELO_CODIGO,
    :TECELAGEM,:tributacao_PIS, :tributacao_cofins,
    :VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,

    :LOCALIZACAO_DESCRICAO,
    :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :VOLUMES, :CUBAGEM,

    :VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
    :FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
    :FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
    :FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
    :FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
    :VALOR_CONTABIL,:Valor_BaseCalculo_Icms,:FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,:FISCAL_TRIBUTACAO_ICMS,
    :FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,:FISCAL_TRIBUTACAO_COFINS,
    :MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
    :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST, :FISCAL_REDUCAO_ICMS_ST,
    :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
    :PEDIDO_CLIENTE,
    :INFORMACOES_COMPLEMENTARES, :Nf_Consignacao, :Nf_Consignacao_Item,
    :FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,
    :enquadramento_ipi, :ccusto, :conta_contabil,
    :VBCUFDEST,:pFCPUFDest,:pICMSUFDest,:pICMSInter,:vFCPUFDest,:vICMSUFDest,:vICMSUFRemet,:pICMSInterPart


do suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFS_ITEM8 (
    CONTROLE_1 integer)
returns (
    NFS_CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    GRADE_CODIGO integer,
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    CONTROLE integer,
    VALOR_CUSTO numeric(10,5),
    PRODUTO_GRADE_CODIGO integer,
    MODELO_CODIGO integer,
    TECELAGEM integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    LOCALIZACAO_DESCRICAO varchar(20),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    VOLUMES integer,
    CUBAGEM numeric(10,4),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(200),
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    ENQUADRAMENTO_IPI varchar(3),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    VBCUFDEST numeric(15,2),
    PFCPUFDEST numeric(15,2),
    PICMSUFDEST numeric(15,2),
    PICMSINTER numeric(15,2),
    VFCPUFDEST numeric(15,2),
    VICMSUFDEST numeric(15,2),
    VICMSUFREMET numeric(15,2),
    PICMSINTERPART numeric(15,2),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10))
as
begin
for select
A.NFS_CONTROLE      ,A.SEQUENCIA        ,A.OPERACAO_CODIGO      ,A.CFOP_CODIGO      ,
A.PRODUTO_CODIGO    ,A.PRODUTO_DESCRICAO,A.PRODUTO_UNIDADEMEDIDA2,A.GRADE_CODIGO     ,
A.NCM_CODIGO        ,A.TRIBUTACAO_ICMS  ,A.TRIBUTACAO_IPI       ,A.TRIBUTACAO_ORIGEM,
A.LOCALIZACAO_CODIGO,A.QUANTIDADE       ,A.VALOR_UNITARIO       ,A.VALOR_TOTAL      ,
A.BASECALCULO_ICMS  ,A.PERCENTUAL_ICMS  ,A.PERCENTUAL_IPI       ,A.VALOR_IPI        ,
A.PERCENTUAL_PIS    ,A.VALOR_PIS        ,A.PERCENTUAL_COFINS    ,A.VALOR_COFINS     ,
A.NFE, A.NFE_ITEM_CONTROLE, A.NF_EXTERNO, A.NF_EXTERNO_ITEM_CONTROLE,
A.PEDIDO,A.PEDIDO_ITEM_PE_CONTROLE,
A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
A.ESTABELECIMENTO_CODIGO,A.EMPRESA_CODIGO,A.NUMERO_NOTAFISCAL,A.DATA_EMISSAO,
A.SITUACAO,A.CONTROLE,A.VALOR_CUSTO,
(Select First 1 E.grade_codigo  From TbProduto E Where A.Produto_Codigo = E.Codigo),
(Select First 1 E.modelo_codigo From TbProduto E Where A.Produto_Codigo = E.Codigo),
A.Tecelagem,A.tributacao_PIS, A.tributacao_cofins,
A.VALOR_ICMS,A.BASECALCULO_IPI,A.BASECALCULO_PIS,A.BASECALCULO_COFINS,

(Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo),
A.VALOR_FRETE, A.VALOR_SEGURO, A.PESO_LIQUIDO, A.PESO_BRUTO, A.VOLUMES, A.CUBAGEM,

A.VALOR_ACRESCIMO,A.VALOR_DESCONTO,A.FISCAL_ISENTAS_IPI,A.FISCAL_ISENTAS_ICMS,
A.FISCAL_OUTRAS_IPI,A.FISCAL_OUTRAS_ICMS,A.FISCAL_VALOR_ICMS,A.FISCAL_VALOR_IPI,
A.FISCAL_VALOR_PIS,A.FISCAL_VALOR_COFINS,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_BASECALCULO_IPI,A.FISCAL_BASECALCULO_PIS,A.FISCAL_BASECALCULO_COFINS,
A.VALOR_CONTABIL, A.Valor_BaseCalculo_Icms, A.FISCAL_CFOP_CODIGO,
A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,A.FISCAL_TRIBUTACAO_IPI,
A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST, A.REDUCAO_ICMS_ST,
A.BASECALCULO_ICMS_ST, A.ALIQUOTA_ICMS_ST, A.VALOR_ICMS_ST, A.FISCAL_REDUCAO_ICMS_ST,
A.FISCAL_BASECALCULO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST, A.FISCAL_VALOR_ICMS_ST,
A.PEDIDO_CLIENTE,
A.INFORMACOES_COMPLEMENTARES, A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO,
A.enquadramento_ipi, A.ccusto, A.conta_contabil,

A.VBCUFDEST,
A.pFCPUFDest,
A.pICMSUFDest,
A.pICMSInter,
A.vFCPUFDest,
A.vICMSUFDest,
A.vICMSUFRemet,
A.pICMSInterPart,

QUANTIDADE_ALTERNATIVA,
UM_ALTERNATIVA,
VALOR_ALTERNATIVO

From TbNfs_Item A
where (A.NFS_CONTROLE = :CONTROLE_1)
order by A.SEQUENCIA
into
    :NFS_CONTROLE      ,:SEQUENCIA        ,:OPERACAO_CODIGO      ,:CFOP_CODIGO      ,
    :PRODUTO_CODIGO    ,:PRODUTO_DESCRICAO,:PRODUTO_UNIDADEMEDIDA,:GRADE_CODIGO     ,
    :NCM_CODIGO        ,:TRIBUTACAO_ICMS  ,:TRIBUTACAO_IPI       ,:TRIBUTACAO_ORIGEM,
    :LOCALIZACAO_CODIGO,:QUANTIDADE       ,:VALOR_UNITARIO       ,:VALOR_TOTAL      ,
    :BASECALCULO_ICMS  ,:PERCENTUAL_ICMS  ,:PERCENTUAL_IPI       ,:VALOR_IPI        ,
    :PERCENTUAL_PIS    ,:VALOR_PIS        ,:PERCENTUAL_COFINS ,:VALOR_COFINS        ,
    :NFE   ,:NFE_ITEM_CONTROLE,:NF_EXTERNO        ,:NF_EXTERNO_ITEM_CONTROLE        ,
    :PEDIDO,:PEDIDO_ITEM_PE_CONTROLE,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,:DATA_EMISSAO,
    :SITUACAO,:CONTROLE,:VALOR_CUSTO,:PRODUTO_GRADE_CODIGO,:MODELO_CODIGO,
    :TECELAGEM,:tributacao_PIS, :tributacao_cofins,
    :VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,

    :LOCALIZACAO_DESCRICAO,
    :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :VOLUMES, :CUBAGEM,

    :VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
    :FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
    :FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
    :FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
    :FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
    :VALOR_CONTABIL,:Valor_BaseCalculo_Icms,:FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,:FISCAL_TRIBUTACAO_ICMS,
    :FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,:FISCAL_TRIBUTACAO_COFINS,
    :MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
    :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST, :FISCAL_REDUCAO_ICMS_ST,
    :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
    :PEDIDO_CLIENTE,
    :INFORMACOES_COMPLEMENTARES, :Nf_Consignacao, :Nf_Consignacao_Item,
    :FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,
    :enquadramento_ipi, :ccusto, :conta_contabil,
    :VBCUFDEST,:pFCPUFDest,:pICMSUFDest,:pICMSInter,:vFCPUFDest,:vICMSUFDest,:vICMSUFRemet,:pICMSInterPart,
    :QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO

do suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFS_ITEM9 (
    CONTROLE_1 integer)
returns (
    NFS_CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    GRADE_CODIGO integer,
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    CONTROLE integer,
    VALOR_CUSTO numeric(10,5),
    PRODUTO_GRADE_CODIGO integer,
    MODELO_CODIGO integer,
    TECELAGEM integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    LOCALIZACAO_DESCRICAO varchar(20),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    VOLUMES integer,
    CUBAGEM numeric(10,4),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(200),
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    ENQUADRAMENTO_IPI varchar(3),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    VBCUFDEST numeric(15,2),
    PFCPUFDEST numeric(15,2),
    PICMSUFDEST numeric(15,2),
    PICMSINTER numeric(15,2),
    VFCPUFDEST numeric(15,2),
    VICMSUFDEST numeric(15,2),
    VICMSUFREMET numeric(15,2),
    PICMSINTERPART numeric(15,2),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1))
as
begin
for select
A.NFS_CONTROLE      ,A.SEQUENCIA        ,A.OPERACAO_CODIGO      ,A.CFOP_CODIGO      ,
A.PRODUTO_CODIGO    ,A.PRODUTO_DESCRICAO,A.PRODUTO_UNIDADEMEDIDA2,A.GRADE_CODIGO     ,
A.NCM_CODIGO        ,A.TRIBUTACAO_ICMS  ,A.TRIBUTACAO_IPI       ,A.TRIBUTACAO_ORIGEM,
A.LOCALIZACAO_CODIGO,A.QUANTIDADE       ,A.VALOR_UNITARIO       ,A.VALOR_TOTAL      ,
A.BASECALCULO_ICMS  ,A.PERCENTUAL_ICMS  ,A.PERCENTUAL_IPI       ,A.VALOR_IPI        ,
A.PERCENTUAL_PIS    ,A.VALOR_PIS        ,A.PERCENTUAL_COFINS    ,A.VALOR_COFINS     ,
A.NFE, A.NFE_ITEM_CONTROLE, A.NF_EXTERNO, A.NF_EXTERNO_ITEM_CONTROLE,
A.PEDIDO,A.PEDIDO_ITEM_PE_CONTROLE,
A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
A.ESTABELECIMENTO_CODIGO,A.EMPRESA_CODIGO,A.NUMERO_NOTAFISCAL,A.DATA_EMISSAO,
A.SITUACAO,A.CONTROLE,A.VALOR_CUSTO,
(Select First 1 E.grade_codigo  From TbProduto E Where A.Produto_Codigo = E.Codigo),
(Select First 1 E.modelo_codigo From TbProduto E Where A.Produto_Codigo = E.Codigo),
A.Tecelagem,A.tributacao_PIS, A.tributacao_cofins,
A.VALOR_ICMS,A.BASECALCULO_IPI,A.BASECALCULO_PIS,A.BASECALCULO_COFINS,

(Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo),
A.VALOR_FRETE, A.VALOR_SEGURO, A.PESO_LIQUIDO, A.PESO_BRUTO, A.VOLUMES, A.CUBAGEM,

A.VALOR_ACRESCIMO,A.VALOR_DESCONTO,A.FISCAL_ISENTAS_IPI,A.FISCAL_ISENTAS_ICMS,
A.FISCAL_OUTRAS_IPI,A.FISCAL_OUTRAS_ICMS,A.FISCAL_VALOR_ICMS,A.FISCAL_VALOR_IPI,
A.FISCAL_VALOR_PIS,A.FISCAL_VALOR_COFINS,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_BASECALCULO_IPI,A.FISCAL_BASECALCULO_PIS,A.FISCAL_BASECALCULO_COFINS,
A.VALOR_CONTABIL, A.Valor_BaseCalculo_Icms, A.FISCAL_CFOP_CODIGO,
A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,A.FISCAL_TRIBUTACAO_IPI,
A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST, A.REDUCAO_ICMS_ST,
A.BASECALCULO_ICMS_ST, A.ALIQUOTA_ICMS_ST, A.VALOR_ICMS_ST, A.FISCAL_REDUCAO_ICMS_ST,
A.FISCAL_BASECALCULO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST, A.FISCAL_VALOR_ICMS_ST,
A.PEDIDO_CLIENTE,
A.INFORMACOES_COMPLEMENTARES, A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO,
A.enquadramento_ipi, A.ccusto, A.conta_contabil,

A.VBCUFDEST,
A.pFCPUFDest,
A.pICMSUFDest,
A.pICMSInter,
A.vFCPUFDest,
A.vICMSUFDest,
A.vICMSUFRemet,
A.pICMSInterPart,

QUANTIDADE_ALTERNATIVA,
UM_ALTERNATIVA,
VALOR_ALTERNATIVO,
A.REDUCAO_BASE_PISCOF

From TbNfs_Item A
where (A.NFS_CONTROLE = :CONTROLE_1)
order by A.SEQUENCIA
into
    :NFS_CONTROLE      ,:SEQUENCIA        ,:OPERACAO_CODIGO      ,:CFOP_CODIGO      ,
    :PRODUTO_CODIGO    ,:PRODUTO_DESCRICAO,:PRODUTO_UNIDADEMEDIDA,:GRADE_CODIGO     ,
    :NCM_CODIGO        ,:TRIBUTACAO_ICMS  ,:TRIBUTACAO_IPI       ,:TRIBUTACAO_ORIGEM,
    :LOCALIZACAO_CODIGO,:QUANTIDADE       ,:VALOR_UNITARIO       ,:VALOR_TOTAL      ,
    :BASECALCULO_ICMS  ,:PERCENTUAL_ICMS  ,:PERCENTUAL_IPI       ,:VALOR_IPI        ,
    :PERCENTUAL_PIS    ,:VALOR_PIS        ,:PERCENTUAL_COFINS ,:VALOR_COFINS        ,
    :NFE   ,:NFE_ITEM_CONTROLE,:NF_EXTERNO        ,:NF_EXTERNO_ITEM_CONTROLE        ,
    :PEDIDO,:PEDIDO_ITEM_PE_CONTROLE,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,:DATA_EMISSAO,
    :SITUACAO,:CONTROLE,:VALOR_CUSTO,:PRODUTO_GRADE_CODIGO,:MODELO_CODIGO,
    :TECELAGEM,:tributacao_PIS, :tributacao_cofins,
    :VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,

    :LOCALIZACAO_DESCRICAO,
    :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :VOLUMES, :CUBAGEM,

    :VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
    :FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
    :FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
    :FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
    :FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
    :VALOR_CONTABIL,:Valor_BaseCalculo_Icms,:FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,:FISCAL_TRIBUTACAO_ICMS,
    :FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,:FISCAL_TRIBUTACAO_COFINS,
    :MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
    :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST, :FISCAL_REDUCAO_ICMS_ST,
    :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
    :PEDIDO_CLIENTE,
    :INFORMACOES_COMPLEMENTARES, :Nf_Consignacao, :Nf_Consignacao_Item,
    :FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,
    :enquadramento_ipi, :ccusto, :conta_contabil,
    :VBCUFDEST,:pFCPUFDest,:pICMSUFDest,:pICMSInter,:vFCPUFDest,:vICMSUFDest,:vICMSUFRemet,:pICMSInterPart,
    :QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO, :REDUCAO_BASE_PISCOF

do suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFS_ITEM_ACUMULADO (
    CONTROLE_1 integer)
returns (
    NFS_CONTROLE integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    NCM_CODIGO varchar(10),
    GRADE_CODIGO integer,
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    VALOR_CUSTO numeric(10,5),
    SEQUENCIA integer,
    CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    PRODUTO_GRADE_CODIGO integer,
    MODELO_CODIGO integer,
    TECELAGEM integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    LOCALIZACAO_DESCRICAO varchar(20),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    VOLUMES integer,
    CUBAGEM numeric(10,4),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(500),
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    ENQUADRAMENTO_IPI varchar(3),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    VBCUFDEST numeric(15,2),
    PFCPUFDEST numeric(15,2),
    PICMSUFDEST numeric(15,2),
    PICMSINTER numeric(15,2),
    VFCPUFDEST numeric(15,2),
    VICMSUFDEST numeric(15,2),
    VICMSUFREMET numeric(15,2),
    PICMSINTERPART numeric(15,2),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1))
as
BEGIN
FOR
Select Distinct(A.Nfs_Controle), A.Operacao_Codigo, A.Cfop_Codigo, A.Produto_Codigo,
A.Produto_Descricao, A.Produto_UnidadeMedida2, A.Ncm_Codigo, A.Grade_Codigo,
A.Tributacao_Icms,A.Tributacao_Ipi, A.Tributacao_Origem, A.Localizacao_Codigo,
Sum(A.Quantidade), A.Valor_Unitario, Sum(A.Valor_Total), A.BaseCalculo_Icms,
A.Percentual_Icms, A.Percentual_Ipi, Sum(A.Valor_Ipi), A.Percentual_Pis,
Sum(A.Valor_Pis), A.Percentual_Cofins, Sum(A.Valor_Cofins), A.Nfe,
A.Nfe_Item_Controle, A.Nf_Externo, A.Nf_Externo_Item_Controle,
Sum(A.T01),Sum(A.T02),Sum(A.T03),Sum(A.T04),Sum(A.T05),Sum(A.T06),Sum(A.T07),
Sum(A.T08),Sum(A.T09),Sum(A.T10),Sum(A.T11),Sum(A.T12),Sum(A.T13),Sum(A.T14),
Sum(A.T15),Sum(A.T16),Sum(A.T17),Sum(A.T18),Sum(A.T19),Sum(A.T20),
A.Estabelecimento_Codigo, A.Empresa_Codigo, A.Numero_NotaFiscal, A.Data_Emissao,
A.Situacao, A.Valor_Custo, Min(A.Sequencia),0,0,0,
Max((Select First 1 E.grade_codigo  From TbProduto E Where A.Produto_Codigo = E.Codigo)),
Max((Select First 1 E.modelo_codigo From TbProduto E Where A.Produto_Codigo = E.Codigo)),
A.Tecelagem,A.tributacao_PIS, A.Tributacao_Cofins,
SUM(A.VALOR_ICMS),SUM(A.BASECALCULO_IPI),SUM(A.BASECALCULO_PIS),SUM(A.BASECALCULO_COFINS),

Max((Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo)),
SUM(A.VALOR_FRETE), SUM(A.VALOR_SEGURO), SUM(A.PESO_LIQUIDO),
SUM(A.PESO_BRUTO), SUM(A.VOLUMES), SUM(A.CUBAGEM),

SUM(A.VALOR_ACRESCIMO),SUM(A.VALOR_DESCONTO),SUM(A.FISCAL_ISENTAS_IPI),SUM(A.FISCAL_ISENTAS_ICMS),
SUM(A.FISCAL_OUTRAS_IPI),SUM(A.FISCAL_OUTRAS_ICMS),SUM(A.FISCAL_VALOR_ICMS),SUM(A.FISCAL_VALOR_IPI),
SUM(A.FISCAL_VALOR_PIS),SUM(A.FISCAL_VALOR_COFINS),A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
SUM(A.FISCAL_BASECALCULO_IPI),SUM(A.FISCAL_BASECALCULO_PIS),SUM(A.FISCAL_BASECALCULO_COFINS),
Sum(A.VALOR_CONTABIL),Sum(A.Valor_BaseCalculo_Icms),A.FISCAL_CFOP_CODIGO,A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,
A.FISCAL_TRIBUTACAO_IPI,A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST, A.REDUCAO_ICMS_ST,
SUM(A.BASECALCULO_ICMS_ST), A.ALIQUOTA_ICMS_ST, SUM(A.VALOR_ICMS_ST),
A.FISCAL_REDUCAO_ICMS_ST, SUM(A.FISCAL_BASECALCULO_ICMS_ST),
A.FISCAL_ALIQUOTA_ICMS_ST, SUM(A.FISCAL_VALOR_ICMS_ST),

MAX(A.PEDIDO_CLIENTE), MAX(A.INFORMACOES_COMPLEMENTARES), A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO,
A.enquadramento_ipi, A.ccusto, A.conta_contabil,

Sum(A.VBCUFDEST),
A.pFCPUFDest,
A.pICMSUFDest,
A.pICMSInter,
Sum(A.vFCPUFDest),
Sum(A.vICMSUFDest),
Sum(A.vICMSUFRemet),
A.pICMSInterPart,

Sum(A.QUANTIDADE_ALTERNATIVA) QUANTIDADE_ALTERNATIVA,
A.UM_ALTERNATIVA,
A.VALOR_ALTERNATIVO,
REDUCAO_BASE_PISCOF

From TbNfs_Item A
Where A.Nfs_Controle > 0 and A.Nfs_Controle = :CONTROLE_1
Group By A.Nfs_Controle, A.Operacao_Codigo, A.Cfop_Codigo, A.Produto_Codigo,
A.Produto_Descricao, A.Produto_UnidadeMedida2, A.Ncm_Codigo, A.Grade_Codigo,
A.Tributacao_Icms, A.Tributacao_Ipi, A.Tributacao_Origem, A.Localizacao_Codigo,
A.Valor_Unitario, A.BaseCalculo_Icms, A.Percentual_Icms, A.Percentual_Ipi,
A.Percentual_Pis, A.Percentual_Cofins, A.Nfe, A.Nfe_Item_Controle, A.Nf_Externo,
A.Nf_Externo_Item_Controle, A.Estabelecimento_Codigo, A.Empresa_Codigo,
A.Numero_NotaFiscal, A.Data_Emissao, A.Situacao, A.Valor_Custo, A.Tecelagem,
A.tributacao_PIS, A.tributacao_cofins,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_CFOP_CODIGO,A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,
A.FISCAL_TRIBUTACAO_IPI,A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST,
A.REDUCAO_ICMS_ST, A.ALIQUOTA_ICMS_ST,
A.FISCAL_REDUCAO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST,
A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO,
A.enquadramento_ipi, A.ccusto, A.conta_contabil,
A.pFCPUFDest,A.pICMSUFDest,A.pICMSInter,A.pICMSInterPart,
A.UM_ALTERNATIVA,A.VALOR_ALTERNATIVO,REDUCAO_BASE_PISCOF


Order By 54, A.Nfs_Controle, A.Produto_Codigo
INTO
:Nfs_Controle,:Operacao_Codigo,:Cfop_Codigo,:Produto_Codigo,:Produto_Descricao,
:Produto_UnidadeMedida,:Ncm_Codigo,:Grade_Codigo,:Tributacao_Icms,:Tributacao_Ipi,
:Tributacao_Origem,:Localizacao_Codigo,:QUANTIDADE,:Valor_Unitario,:VALOR_TOTAL,
:BaseCalculo_Icms,:Percentual_Icms,:Percentual_Ipi,:VALOR_IPI,:Percentual_Pis,
:VALOR_PIS,:Percentual_Cofins,:VALOR_COFINS,:Nfe,:Nfe_Item_Controle,:Nf_Externo,
:Nf_Externo_Item_Controle,:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:Estabelecimento_Codigo,
:Empresa_Codigo,:Numero_NotaFiscal,:Data_Emissao,:Situacao,:Valor_Custo,
:Sequencia, :Controle, :Pedido, :Pedido_Item_Pe_Controle, :Produto_Grade_Codigo,
:modelo_codigo, :Tecelagem,:tributacao_PIS, :tributacao_cofins,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,

    :LOCALIZACAO_DESCRICAO,
    :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :VOLUMES, :CUBAGEM,

:VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
:FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
:FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
:FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
:FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
:VALOR_CONTABIL,:Valor_BaseCalculo_Icms,:FISCAL_CFOP_CODIGO,
:FISCAL_TRIBUTACAO_ORIGEM, :FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,
:FISCAL_TRIBUTACAO_PIS, :FISCAL_TRIBUTACAO_COFINS,

:MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST,
:REDUCAO_ICMS_ST, :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,
:FISCAL_REDUCAO_ICMS_ST, :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
:PEDIDO_CLIENTE,
:INFORMACOES_COMPLEMENTARES, :Nf_Consignacao, :Nf_Consignacao_Item,
:FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,
:enquadramento_ipi, :ccusto, :conta_contabil,
:VBCUFDEST,:pFCPUFDest,:pICMSUFDest,:pICMSInter,:vFCPUFDest,:vICMSUFDest,:vICMSUFRemet,:pICMSInterPart,
:QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO,:REDUCAO_BASE_PISCOF

DO
SUSPEND;
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFS_ITEM_ACUMULADO2 (
    CONTROLE_1 integer)
returns (
    NFS_CONTROLE integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    NCM_CODIGO varchar(10),
    GRADE_CODIGO integer,
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    VALOR_CUSTO numeric(10,5),
    SEQUENCIA integer,
    CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    PRODUTO_GRADE_CODIGO integer,
    MODELO_CODIGO integer,
    TECELAGEM integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    LOCALIZACAO_DESCRICAO varchar(20),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    VOLUMES integer,
    CUBAGEM numeric(10,4),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(500),
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    ENQUADRAMENTO_IPI varchar(3),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    VBCUFDEST numeric(15,2),
    PFCPUFDEST numeric(15,2),
    PICMSUFDEST numeric(15,2),
    PICMSINTER numeric(15,2),
    VFCPUFDEST numeric(15,2),
    VICMSUFDEST numeric(15,2),
    VICMSUFREMET numeric(15,2),
    PICMSINTERPART numeric(15,2),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1))
as
BEGIN
FOR
Select Distinct(A.Nfs_Controle), A.Operacao_Codigo, A.Cfop_Codigo,
A.Produto_Codigo,
Max((Select First 1 (Case When char_length(Trim(M.Descricao_Nf)) > 0 Then M.Descricao_Nf else M.Descricao End) From TbModelo M Where E.Modelo_codigo = M.Codigo)) Produto_Descricao,
A.Produto_UnidadeMedida2, A.Ncm_Codigo, A.Grade_Codigo,
A.Tributacao_Icms,A.Tributacao_Ipi, A.Tributacao_Origem, A.Localizacao_Codigo,
Sum(A.Quantidade), A.Valor_Unitario, Sum(A.Valor_Total), A.BaseCalculo_Icms,
A.Percentual_Icms, A.Percentual_Ipi, Sum(A.Valor_Ipi), A.Percentual_Pis,
Sum(A.Valor_Pis), A.Percentual_Cofins, Sum(A.Valor_Cofins),
A.Nfe, A.Nfe_Item_Controle, A.Nf_Externo, A.Nf_Externo_Item_Controle,

Sum(A.T01),Sum(A.T02),Sum(A.T03),Sum(A.T04),Sum(A.T05),Sum(A.T06),Sum(A.T07),
Sum(A.T08),Sum(A.T09),Sum(A.T10),Sum(A.T11),Sum(A.T12),Sum(A.T13),Sum(A.T14),
Sum(A.T15),Sum(A.T16),Sum(A.T17),Sum(A.T18),Sum(A.T19),Sum(A.T20),
A.Estabelecimento_Codigo, A.Empresa_Codigo, A.Numero_NotaFiscal, A.Data_Emissao,
A.Situacao, A.Valor_Custo, Min(A.Sequencia),0,A.PEDIDO,A.pedido_item_pe_controle,E.Grade_codigo, E.Modelo_codigo,
A.Tecelagem,A.tributacao_PIS, A.Tributacao_Cofins,

SUM(A.VALOR_ICMS),SUM(A.BASECALCULO_IPI),SUM(A.BASECALCULO_PIS),SUM(A.BASECALCULO_COFINS),
Max((Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo)),
SUM(A.VALOR_FRETE), SUM(A.VALOR_SEGURO), SUM(A.PESO_LIQUIDO),
SUM(A.PESO_BRUTO), SUM(A.VOLUMES), SUM(A.CUBAGEM),
SUM(A.VALOR_ACRESCIMO),SUM(A.VALOR_DESCONTO),SUM(A.FISCAL_ISENTAS_IPI),SUM(A.FISCAL_ISENTAS_ICMS),
SUM(A.FISCAL_OUTRAS_IPI),SUM(A.FISCAL_OUTRAS_ICMS),SUM(A.FISCAL_VALOR_ICMS),SUM(A.FISCAL_VALOR_IPI),
SUM(A.FISCAL_VALOR_PIS),SUM(A.FISCAL_VALOR_COFINS),A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
SUM(A.FISCAL_BASECALCULO_IPI),SUM(A.FISCAL_BASECALCULO_PIS),SUM(A.FISCAL_BASECALCULO_COFINS),
Sum(A.VALOR_CONTABIL),Sum(A.Valor_BaseCalculo_Icms ),A.FISCAL_CFOP_CODIGO,A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,
A.FISCAL_TRIBUTACAO_IPI,A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST,
A.REDUCAO_ICMS_ST, SUM(A.BASECALCULO_ICMS_ST), A.ALIQUOTA_ICMS_ST, SUM(A.VALOR_ICMS_ST),
A.FISCAL_REDUCAO_ICMS_ST, SUM(A.FISCAL_BASECALCULO_ICMS_ST), A.FISCAL_ALIQUOTA_ICMS_ST, SUM(A.FISCAL_VALOR_ICMS_ST),

(A.PEDIDO_CLIENTE), MAX(A.INFORMACOES_COMPLEMENTARES), A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO,
A.enquadramento_ipi, A.ccusto, A.conta_contabil,

Sum(A.VBCUFDEST),
A.pFCPUFDest,
A.pICMSUFDest,
A.pICMSInter,
Sum(A.vFCPUFDest),
Sum(A.vICMSUFDest),
Sum(A.vICMSUFRemet),
A.pICMSInterPart,

A.QUANTIDADE_ALTERNATIVA,
A.UM_ALTERNATIVA,
A.VALOR_ALTERNATIVO,
A.REDUCAO_BASE_PISCOF

From TbNfs_Item A, TbProduto E
Where A.Produto_Codigo = E.Codigo
  and A.Nfs_Controle > 0 and A.Nfs_Controle = :CONTROLE_1

Group By A.Nfs_Controle, A.Operacao_Codigo, A.Cfop_Codigo, A.PRODUTO_CODIGO,
A.Produto_UnidadeMedida2, A.Ncm_Codigo, A.Grade_Codigo,
A.Tributacao_Icms, A.Tributacao_Ipi, A.Tributacao_Origem, A.Localizacao_Codigo,
A.Valor_Unitario, A.BaseCalculo_Icms, A.Percentual_Icms, A.Percentual_Ipi,
A.Percentual_Pis, A.Percentual_Cofins, A.Nfe, A.Nfe_Item_Controle, A.Nf_Externo,
A.Nf_Externo_Item_Controle, A.Estabelecimento_Codigo, A.Empresa_Codigo,
A.Numero_NotaFiscal, A.Data_Emissao, A.Situacao, A.Valor_Custo,
E.Grade_codigo, E.Modelo_codigo, A.Tecelagem,
A.tributacao_PIS, A.tributacao_cofins,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_CFOP_CODIGO,A.FISCAL_TRIBUTACAO_ORIGEM,A.FISCAL_TRIBUTACAO_ICMS,
A.FISCAL_TRIBUTACAO_IPI,A.FISCAL_TRIBUTACAO_PIS,A.FISCAL_TRIBUTACAO_COFINS,
A.PEDIDO,A.PEDIDO_CLIENTE,A.pedido_item_pe_controle,
A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST,
A.REDUCAO_ICMS_ST, A.ALIQUOTA_ICMS_ST,
A.FISCAL_REDUCAO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST,
A.Nf_Consignacao, A.Nf_Consignacao_Item,
A.FCI_MENSAGEM, A.FCI_PARCELA_IMPORTACAO, A.FCI_CONTEUDO_IMPORTACAO, A.FCI_NUMERO,
A.enquadramento_ipi, A.ccusto, A.conta_contabil,
A.pFCPUFDest,A.pICMSUFDest,A.pICMSInter,A.pICMSInterPart,
A.QUANTIDADE_ALTERNATIVA, A.UM_ALTERNATIVA, A.VALOR_ALTERNATIVO, A.REDUCAO_BASE_PISCOF

Order By 54, A.Nfs_Controle, A.PRODUTO_CODIGO 
INTO
:Nfs_Controle,:Operacao_Codigo,:Cfop_Codigo,:Produto_Codigo,:Produto_Descricao,
:Produto_UnidadeMedida,:Ncm_Codigo,:Grade_Codigo,:Tributacao_Icms,:Tributacao_Ipi,
:Tributacao_Origem,:Localizacao_Codigo,:QUANTIDADE,:Valor_Unitario,:VALOR_TOTAL,
:BaseCalculo_Icms,:Percentual_Icms,:Percentual_Ipi,:VALOR_IPI,:Percentual_Pis,
:VALOR_PIS,:Percentual_Cofins,:VALOR_COFINS,:Nfe,:Nfe_Item_Controle,:Nf_Externo,
:Nf_Externo_Item_Controle,:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:Estabelecimento_Codigo,
:Empresa_Codigo,:Numero_NotaFiscal,:Data_Emissao,:Situacao,:Valor_Custo,
:Sequencia, :Controle, :Pedido, :Pedido_Item_Pe_Controle, :Produto_Grade_Codigo,
:modelo_codigo, :Tecelagem,:tributacao_PIS, :tributacao_cofins,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,

    :LOCALIZACAO_DESCRICAO,
    :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :VOLUMES, :CUBAGEM,

:VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
:FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
:FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
:FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
:FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
:VALOR_CONTABIL,:Valor_BaseCalculo_Icms,:FISCAL_CFOP_CODIGO,
:FISCAL_TRIBUTACAO_ORIGEM, :FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,
:FISCAL_TRIBUTACAO_PIS, :FISCAL_TRIBUTACAO_COFINS,

:MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST,
:REDUCAO_ICMS_ST, :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,
:FISCAL_REDUCAO_ICMS_ST, :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
:PEDIDO_CLIENTE,
:INFORMACOES_COMPLEMENTARES, :Nf_Consignacao, :Nf_Consignacao_Item,
:FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,
:enquadramento_ipi, :ccusto, :conta_contabil,
:VBCUFDEST,:pFCPUFDest,:pICMSUFDest,:pICMSInter,:vFCPUFDest,:vICMSUFDest,
:vICMSUFRemet,:pICMSInterPart,:QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA,
:VALOR_ALTERNATIVO,:REDUCAO_BASE_PISCOF

DO
SUSPEND;
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_REL_NFS_ROMANEIO_ITEM (
    ESTABELECIMENTO_1 integer,
    CONTROLE_1 integer)
returns (
    SEQUENCIA integer,
    CONTROLE integer,
    NFS_CONTROLE integer,
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    QUANTIDADE numeric(10,5),
    DESCRICAO varchar(100),
    UNIDADEMEDIDA_SIGLA varchar(3),
    CODIGO varchar(10))
as
BEGIN
FOR Select A.Sequencia, A.Controle, A.Nfs_Controle, A.PRODUTO_CODIGO,
       A.PRODUTO_DESCRICAO, A.PRODUTO_UNIDADEMEDIDA2, A.QUANTIDADE,
       B.DESCRICAO, B.UNIDADEMEDIDA_SIGLA, B.CODIGO
From TbNfs_Item A
Left Join TbProduto_Edi B On A.Produto_Codigo = B.Produto_Codigo
                         and A.Empresa_Codigo = B.Empresa_Codigo
Where (A.Estabelecimento_Codigo  = :ESTABELECIMENTO_1)
  and (A.NFS_Controle            = :CONTROLE_1)
Order By A.Sequencia
Into
    :Sequencia,
    :Controle,
    :Nfs_Controle,
    :produto_codigo,
    :produto_descricao,
    :PRODUTO_UNIDADEMEDIDA,
    :QUANTIDADE,
    :DESCRICAO,
    :UNIDADEMEDIDA_SIGLA,
    :CODIGO
DO SUSPEND;
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_REL_NFS_ROMANEIO_NF (
    ESTABELECIMENTO_1 integer,
    EMPRESA_1 integer,
    TRANSPORTADORA_T integer,
    TRANSPORTADORA_1 integer,
    DATA_T date,
    DATA_1 date,
    NOTAFISCAL_1 integer,
    NOTAFISCAL_2 integer,
    SERIE_1 varchar(3),
    CFOP1 varchar(5),
    CFOP2 varchar(5),
    CFOP3 varchar(5),
    CFOP4 varchar(5),
    CFOP5 varchar(5))
returns (
    DATA_EMISSAO date,
    NUMERO_NOTAFISCAL integer,
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    QUANTIDADE numeric(10,5),
    PEDIDO varchar(20),
    NFE integer,
    NF_EXTERNO integer,
    CFOP_CODIGO varchar(5))
as
BEGIN
FOR Select B.DATA_EMISSAO, B.NUMERO_NOTAFISCAL, C.PRODUTO_CODIGO, C.PRODUTO_DESCRICAO,
       C.PRODUTO_UNIDADEMEDIDA2, C.QUANTIDADE,
       (select D.PEDIDO_CLIENTE FROM tbpedido D WHERE C.PEDIDO = D.PEDIDO),
       C.NFE, C.NF_EXTERNO, C.CFOP_CODIGO
From TbNfs B, TbNfs_Item C, TbNfs_Transportadora A
Where  B.Controle = C.Nfs_Controle
  and  B.Controle = A.Nfs_Controle
  and (B.Situacao < 3)
  and (A.Transportadora_Codigo > 0)
  and (B.Estabelecimento_Codigo  = :ESTABELECIMENTO_1)
  and (A.Transportadora_Codigo  >= :TRANSPORTADORA_T or
       A.Transportadora_Codigo   = :TRANSPORTADORA_1)
  and (B.Empresa_Codigo          = :EMPRESA_1)
  and (B.Data_Emissao            > :DATA_T OR
       B.Data_Emissao            = :DATA_1   )
  and (B.Numero_NotaFiscal between :NOTAFISCAL_1 and :NOTAFISCAL_2)
  and (B.Serie like :SERIE_1)
  and (C.Cfop_Codigo Like :Cfop1 or
       C.Cfop_Codigo Like :Cfop2 or
       C.Cfop_Codigo Like :Cfop3 or
       C.Cfop_Codigo Like :Cfop4 or
       C.Cfop_Codigo Like :Cfop5)

Order By B.NUMERO_NOTAFISCAL
Into
    :DATA_EMISSAO  ,
    :NUMERO_NOTAFISCAL ,
    :PRODUTO_CODIGO  ,
    :PRODUTO_DESCRICAO ,
    :PRODUTO_UNIDADEMEDIDA ,
    :QUANTIDADE ,
    :PEDIDO ,
    :NFE ,
    :NF_EXTERNO,
    :CFOP_CODIGO
DO SUSPEND;
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_NFS_ITEM (
    NFS_CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    NF_NATUREZA integer,
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ORIGEM integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_PIS char(2),
    TRIBUTACAO_COFINS char(2),
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    TECELAGEM integer,
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    CUBAGEM numeric(10,4),
    VOLUMES integer,
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,2),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(500),
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    ENQUADRAMENTO_IPI varchar(3),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1),
    OPERACAO_TIPO_DESCONTO varchar(1),
    GC_WEB integer,
    MARGEM numeric(10,2) = 0,
    PDV_CONFERENCIA_ITEM_ID integer = 0,
    PDV_CONFERENCIA_ID integer = 0)
as
BEGIN
INSERT INTO TBNFS_ITEM(
NFS_CONTROLE,ESTABELECIMENTO_CODIGO,EMPRESA_CODIGO,NUMERO_NOTAFISCAL,DATA_EMISSAO,NF_SITUACAO, NF_NATUREZA,
NF_CONSIGNACAO,NF_CONSIGNACAO_ITEM,NFE,NFE_ITEM_CONTROLE,PEDIDO,
PEDIDO_ITEM_PE_CONTROLE,NF_EXTERNO,NF_EXTERNO_ITEM_CONTROLE    ,
CONTROLE,SEQUENCIA,OPERACAO_CODIGO,CFOP_CODIGO,PRODUTO_CODIGO,PRODUTO_DESCRICAO           ,
PRODUTO_UNIDADEMEDIDA2,NCM_CODIGO,TRIBUTACAO_ORIGEM,TRIBUTACAO_IPI,TRIBUTACAO_ICMS         ,
TRIBUTACAO_PIS,TRIBUTACAO_COFINS                                                          ,
LOCALIZACAO_CODIGO,QUANTIDADE,VALOR_UNITARIO,VALOR_TOTAL,BASECALCULO_ICMS,PERCENTUAL_ICMS ,
PERCENTUAL_IPI,VALOR_IPI,PERCENTUAL_PIS,VALOR_PIS,PERCENTUAL_COFINS,VALOR_COFINS          ,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,TECELAGEM,
VALOR_ICMS,BASECALCULO_IPI,BASECALCULO_PIS,BASECALCULO_COFINS,
VALOR_ACRESCIMO, VALOR_FRETE, VALOR_SEGURO, PESO_LIQUIDO, PESO_BRUTO, CUBAGEM, VOLUMES,
VALOR_DESCONTO,FISCAL_ISENTAS_IPI,FISCAL_ISENTAS_ICMS,
FISCAL_OUTRAS_IPI,FISCAL_OUTRAS_ICMS,FISCAL_VALOR_ICMS,FISCAL_VALOR_IPI,
FISCAL_VALOR_PIS,FISCAL_VALOR_COFINS,FISCAL_PERCENTUAL_ICMS,FISCAL_PERCENTUAL_IPI,
FISCAL_PERCENTUAL_PIS,FISCAL_PERCENTUAL_COFINS,FISCAL_BASECALCULO_ICMS,
FISCAL_BASECALCULO_IPI,FISCAL_BASECALCULO_PIS,FISCAL_BASECALCULO_COFINS,
VALOR_CONTABIL, VALOR_BASECALCULO_ICMS, FISCAL_CFOP_CODIGO, FISCAL_TRIBUTACAO_ORIGEM,
FISCAL_TRIBUTACAO_ICMS, FISCAL_TRIBUTACAO_IPI, FISCAL_TRIBUTACAO_PIS,
FISCAL_TRIBUTACAO_COFINS, MODALIDADE_ICMS, MODALIDADE_ICMS_ST, MARGEM_ICMS_ST,
REDUCAO_ICMS_ST, BASECALCULO_ICMS_ST, ALIQUOTA_ICMS_ST, VALOR_ICMS_ST,
FISCAL_REDUCAO_ICMS_ST, FISCAL_BASECALCULO_ICMS_ST, FISCAL_ALIQUOTA_ICMS_ST, FISCAL_VALOR_ICMS_ST,
PEDIDO_CLIENTE, INFORMACOES_COMPLEMENTARES, FCI_MENSAGEM,
FCI_PARCELA_IMPORTACAO, FCI_CONTEUDO_IMPORTACAO, FCI_NUMERO,CCUSTO,CONTA_CONTABIL,ENQUADRAMENTO_IPI,
QUANTIDADE_ALTERNATIVA, UM_ALTERNATIVA, VALOR_ALTERNATIVO, REDUCAO_BASE_PISCOF, TIPO_DESCONTO, GC_WEB, MARGEM, PDV_CONFERENCIA_ITEM_ID, PDV_CONFERENCIA_ID)
VALUES  (
:NFS_CONTROLE,:ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,
:DATA_EMISSAO,:SITUACAO,:NF_NATUREZA,:NF_CONSIGNACAO,:NF_CONSIGNACAO_ITEM,
:NFE,:NFE_ITEM_CONTROLE,:PEDIDO,:PEDIDO_ITEM_PE_CONTROLE,:NF_EXTERNO,
:NF_EXTERNO_ITEM_CONTROLE,:CONTROLE,:SEQUENCIA,:OPERACAO_CODIGO,:CFOP_CODIGO,
:PRODUTO_CODIGO,:PRODUTO_DESCRICAO,:PRODUTO_UNIDADEMEDIDA,:NCM_CODIGO,:TRIBUTACAO_ORIGEM,
:TRIBUTACAO_IPI,:TRIBUTACAO_ICMS,:TRIBUTACAO_PIS,:TRIBUTACAO_COFINS,:LOCALIZACAO_CODIGO,
:QUANTIDADE,:VALOR_UNITARIO,:VALOR_TOTAL,:BASECALCULO_ICMS,:PERCENTUAL_ICMS,
:PERCENTUAL_IPI,:VALOR_IPI,:PERCENTUAL_PIS,:VALOR_PIS,:PERCENTUAL_COFINS,
:VALOR_COFINS,:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:TECELAGEM,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
:VALOR_ACRESCIMO, :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :CUBAGEM, :VOLUMES,
:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
:FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
:FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
:FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
:FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
:VALOR_CONTABIL, :VALOR_BASECALCULO_ICMS, :FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,
:FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,
:FISCAL_TRIBUTACAO_COFINS,

:MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
:BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,
:FISCAL_REDUCAO_ICMS_ST, :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
:PEDIDO_CLIENTE, :INFORMACOES_COMPLEMENTARES,
:FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,:CCUSTO,:CONTA_CONTABIL,:ENQUADRAMENTO_IPI,
:QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO, :REDUCAO_BASE_PISCOF, :OPERACAO_TIPO_DESCONTO, :GC_WEB, :MARGEM, :PDV_CONFERENCIA_ITEM_ID, :PDV_CONFERENCIA_ID);

INSERT INTO TBNFS_ITEM_SALDO (            
NFS_ITEM_CONTROLE,NFS_CONTROLE,QUANTIDADE,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,  
T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)  
VALUES (                                  
:CONTROLE,:NFS_CONTROLE,:QUANTIDADE,
:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20);

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_NFS_ITEM5 (
    NFS_CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ORIGEM integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_PIS char(2),
    TRIBUTACAO_COFINS char(2),
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    TECELAGEM integer,
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    CUBAGEM numeric(10,4),
    VOLUMES integer,
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,2),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(200),
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40))
as
BEGIN
INSERT INTO TbNfs_Item(
Nfs_Controle,Estabelecimento_Codigo,Empresa_Codigo,Numero_NotaFiscal,Data_Emissao,Situacao,
Nf_CONSIGNACAO,Nf_CONSIGNACAO_Item,Nfe,Nfe_Item_Controle,Pedido,
Pedido_Item_PE_Controle,Nf_Externo,Nf_Externo_Item_Controle    ,
Controle,Sequencia,Operacao_Codigo,Cfop_Codigo,Produto_Codigo,Produto_Descricao           ,
Produto_UnidadeMedida2,Ncm_Codigo,Tributacao_Origem,Tributacao_Ipi,Tributacao_Icms         ,
Tributacao_Pis,Tributacao_Cofins                                                          ,
Localizacao_Codigo,Quantidade,Valor_Unitario,Valor_Total,BaseCalculo_Icms,Percentual_Icms ,
Percentual_Ipi,Valor_Ipi,Percentual_Pis,Valor_Pis,Percentual_Cofins,Valor_Cofins          ,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,Tecelagem,
VALOR_ICMS,BASECALCULO_IPI,BASECALCULO_PIS,BASECALCULO_COFINS,
VALOR_ACRESCIMO, Valor_FRETE, Valor_SEGURO, PESO_LIQUIDO, PESO_BRUTO, CUBAGEM, VOLUMES,
VALOR_DESCONTO,FISCAL_ISENTAS_IPI,FISCAL_ISENTAS_ICMS,
FISCAL_OUTRAS_IPI,FISCAL_OUTRAS_ICMS,FISCAL_VALOR_ICMS,FISCAL_VALOR_IPI,
FISCAL_VALOR_PIS,FISCAL_VALOR_COFINS,FISCAL_PERCENTUAL_ICMS,FISCAL_PERCENTUAL_IPI,
FISCAL_PERCENTUAL_PIS,FISCAL_PERCENTUAL_COFINS,FISCAL_BASECALCULO_ICMS,
FISCAL_BASECALCULO_IPI,FISCAL_BASECALCULO_PIS,FISCAL_BASECALCULO_COFINS,
VALOR_CONTABIL, valor_basecalculo_icms, FISCAL_CFOP_CODIGO, FISCAL_TRIBUTACAO_ORIGEM,
FISCAL_TRIBUTACAO_ICMS, FISCAL_TRIBUTACAO_IPI, FISCAL_TRIBUTACAO_PIS,
FISCAL_TRIBUTACAO_COFINS, MODALIDADE_ICMS, MODALIDADE_ICMS_ST, MARGEM_ICMS_ST,
REDUCAO_ICMS_ST, BASECALCULO_ICMS_ST, ALIQUOTA_ICMS_ST, VALOR_ICMS_ST,
FISCAL_REDUCAO_ICMS_ST, FISCAL_BASECALCULO_ICMS_ST, FISCAL_ALIQUOTA_ICMS_ST, FISCAL_VALOR_ICMS_ST,
PEDIDO_CLIENTE, INFORMACOES_COMPLEMENTARES, FCI_MENSAGEM,
FCI_PARCELA_IMPORTACAO, FCI_CONTEUDO_IMPORTACAO, FCI_NUMERO )
VALUES  (
:Nfs_Controle,:Estabelecimento_Codigo,:Empresa_Codigo,:Numero_NotaFiscal,
:Data_Emissao,:Situacao,:Nf_CONSIGNACAO,:Nf_CONSIGNACAO_Item,
:Nfe,:Nfe_Item_Controle,:Pedido,:Pedido_Item_PE_Controle,:Nf_Externo,
:Nf_Externo_Item_Controle,:Controle,:Sequencia,:Operacao_Codigo,:Cfop_Codigo,
:Produto_Codigo,:Produto_Descricao,:Produto_UnidadeMedida,:Ncm_Codigo,:Tributacao_Origem,
:Tributacao_Ipi,:Tributacao_Icms,:Tributacao_Pis,:Tributacao_Cofins,:Localizacao_Codigo,
:Quantidade,:Valor_Unitario,:Valor_Total,:BaseCalculo_Icms,:Percentual_Icms,
:Percentual_Ipi,:Valor_Ipi,:Percentual_Pis,:Valor_Pis,:Percentual_Cofins,
:Valor_Cofins,:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:Tecelagem,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
:VALOR_ACRESCIMO, :Valor_FRETE, :Valor_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :CUBAGEM, :VOLUMES,
:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
:FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
:FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
:FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
:FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
:VALOR_CONTABIL, :valor_basecalculo_icms, :FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,
:FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,
:FISCAL_TRIBUTACAO_COFINS,

:MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
:BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,
:FISCAL_REDUCAO_ICMS_ST, :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
:PEDIDO_CLIENTE, :INFORMACOES_COMPLEMENTARES,
:FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO );

INSERT INTO TbNfs_Item_Saldo (            
Nfs_Item_Controle,Nfs_Controle,Quantidade,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,  
T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)  
VALUES (                                  
:Controle,:Nfs_Controle,:Quantidade,
:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20);

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_NFS_ITEM6 (
    NFS_CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ORIGEM integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_PIS char(2),
    TRIBUTACAO_COFINS char(2),
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    TECELAGEM integer,
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    CUBAGEM numeric(10,4),
    VOLUMES integer,
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,2),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(200),
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    ENQUADRAMENTO_IPI varchar(3))
as
BEGIN
INSERT INTO TbNfs_Item(
Nfs_Controle,Estabelecimento_Codigo,Empresa_Codigo,Numero_NotaFiscal,Data_Emissao,Situacao,
Nf_CONSIGNACAO,Nf_CONSIGNACAO_Item,Nfe,Nfe_Item_Controle,Pedido,
Pedido_Item_PE_Controle,Nf_Externo,Nf_Externo_Item_Controle    ,
Controle,Sequencia,Operacao_Codigo,Cfop_Codigo,Produto_Codigo,Produto_Descricao           ,
Produto_UnidadeMedida2,Ncm_Codigo,Tributacao_Origem,Tributacao_Ipi,Tributacao_Icms         ,
Tributacao_Pis,Tributacao_Cofins                                                          ,
Localizacao_Codigo,Quantidade,Valor_Unitario,Valor_Total,BaseCalculo_Icms,Percentual_Icms ,
Percentual_Ipi,Valor_Ipi,Percentual_Pis,Valor_Pis,Percentual_Cofins,Valor_Cofins          ,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,Tecelagem,
VALOR_ICMS,BASECALCULO_IPI,BASECALCULO_PIS,BASECALCULO_COFINS,
VALOR_ACRESCIMO, Valor_FRETE, Valor_SEGURO, PESO_LIQUIDO, PESO_BRUTO, CUBAGEM, VOLUMES,
VALOR_DESCONTO,FISCAL_ISENTAS_IPI,FISCAL_ISENTAS_ICMS,
FISCAL_OUTRAS_IPI,FISCAL_OUTRAS_ICMS,FISCAL_VALOR_ICMS,FISCAL_VALOR_IPI,
FISCAL_VALOR_PIS,FISCAL_VALOR_COFINS,FISCAL_PERCENTUAL_ICMS,FISCAL_PERCENTUAL_IPI,
FISCAL_PERCENTUAL_PIS,FISCAL_PERCENTUAL_COFINS,FISCAL_BASECALCULO_ICMS,
FISCAL_BASECALCULO_IPI,FISCAL_BASECALCULO_PIS,FISCAL_BASECALCULO_COFINS,
VALOR_CONTABIL, valor_basecalculo_icms, FISCAL_CFOP_CODIGO, FISCAL_TRIBUTACAO_ORIGEM,
FISCAL_TRIBUTACAO_ICMS, FISCAL_TRIBUTACAO_IPI, FISCAL_TRIBUTACAO_PIS,
FISCAL_TRIBUTACAO_COFINS, MODALIDADE_ICMS, MODALIDADE_ICMS_ST, MARGEM_ICMS_ST,
REDUCAO_ICMS_ST, BASECALCULO_ICMS_ST, ALIQUOTA_ICMS_ST, VALOR_ICMS_ST,
FISCAL_REDUCAO_ICMS_ST, FISCAL_BASECALCULO_ICMS_ST, FISCAL_ALIQUOTA_ICMS_ST, FISCAL_VALOR_ICMS_ST,
PEDIDO_CLIENTE, INFORMACOES_COMPLEMENTARES, FCI_MENSAGEM,
FCI_PARCELA_IMPORTACAO, FCI_CONTEUDO_IMPORTACAO, FCI_NUMERO,ccusto,conta_contabil,enquadramento_ipi )
VALUES  (
:Nfs_Controle,:Estabelecimento_Codigo,:Empresa_Codigo,:Numero_NotaFiscal,
:Data_Emissao,:Situacao,:Nf_CONSIGNACAO,:Nf_CONSIGNACAO_Item,
:Nfe,:Nfe_Item_Controle,:Pedido,:Pedido_Item_PE_Controle,:Nf_Externo,
:Nf_Externo_Item_Controle,:Controle,:Sequencia,:Operacao_Codigo,:Cfop_Codigo,
:Produto_Codigo,:Produto_Descricao,:Produto_UnidadeMedida,:Ncm_Codigo,:Tributacao_Origem,
:Tributacao_Ipi,:Tributacao_Icms,:Tributacao_Pis,:Tributacao_Cofins,:Localizacao_Codigo,
:Quantidade,:Valor_Unitario,:Valor_Total,:BaseCalculo_Icms,:Percentual_Icms,
:Percentual_Ipi,:Valor_Ipi,:Percentual_Pis,:Valor_Pis,:Percentual_Cofins,
:Valor_Cofins,:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:Tecelagem,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
:VALOR_ACRESCIMO, :Valor_FRETE, :Valor_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :CUBAGEM, :VOLUMES,
:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
:FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
:FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
:FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
:FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
:VALOR_CONTABIL, :valor_basecalculo_icms, :FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,
:FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,
:FISCAL_TRIBUTACAO_COFINS,

:MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
:BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,
:FISCAL_REDUCAO_ICMS_ST, :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
:PEDIDO_CLIENTE, :INFORMACOES_COMPLEMENTARES,
:FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,:ccusto,:conta_contabil,:enquadramento_ipi );

INSERT INTO TbNfs_Item_Saldo (            
Nfs_Item_Controle,Nfs_Controle,Quantidade,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,  
T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)  
VALUES (                                  
:Controle,:Nfs_Controle,:Quantidade,
:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20);

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_NFS_ITEM7 (
    NFS_CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ORIGEM integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_PIS char(2),
    TRIBUTACAO_COFINS char(2),
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    TECELAGEM integer,
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    CUBAGEM numeric(10,4),
    VOLUMES integer,
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,2),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(200),
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    ENQUADRAMENTO_IPI varchar(3),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10))
as
BEGIN
INSERT INTO TbNfs_Item(
Nfs_Controle,Estabelecimento_Codigo,Empresa_Codigo,Numero_NotaFiscal,Data_Emissao,Situacao,
Nf_CONSIGNACAO,Nf_CONSIGNACAO_Item,Nfe,Nfe_Item_Controle,Pedido,
Pedido_Item_PE_Controle,Nf_Externo,Nf_Externo_Item_Controle    ,
Controle,Sequencia,Operacao_Codigo,Cfop_Codigo,Produto_Codigo,Produto_Descricao           ,
Produto_UnidadeMedida2,Ncm_Codigo,Tributacao_Origem,Tributacao_Ipi,Tributacao_Icms         ,
Tributacao_Pis,Tributacao_Cofins                                                          ,
Localizacao_Codigo,Quantidade,Valor_Unitario,Valor_Total,BaseCalculo_Icms,Percentual_Icms ,
Percentual_Ipi,Valor_Ipi,Percentual_Pis,Valor_Pis,Percentual_Cofins,Valor_Cofins          ,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,Tecelagem,
VALOR_ICMS,BASECALCULO_IPI,BASECALCULO_PIS,BASECALCULO_COFINS,
VALOR_ACRESCIMO, Valor_FRETE, Valor_SEGURO, PESO_LIQUIDO, PESO_BRUTO, CUBAGEM, VOLUMES,
VALOR_DESCONTO,FISCAL_ISENTAS_IPI,FISCAL_ISENTAS_ICMS,
FISCAL_OUTRAS_IPI,FISCAL_OUTRAS_ICMS,FISCAL_VALOR_ICMS,FISCAL_VALOR_IPI,
FISCAL_VALOR_PIS,FISCAL_VALOR_COFINS,FISCAL_PERCENTUAL_ICMS,FISCAL_PERCENTUAL_IPI,
FISCAL_PERCENTUAL_PIS,FISCAL_PERCENTUAL_COFINS,FISCAL_BASECALCULO_ICMS,
FISCAL_BASECALCULO_IPI,FISCAL_BASECALCULO_PIS,FISCAL_BASECALCULO_COFINS,
VALOR_CONTABIL, valor_basecalculo_icms, FISCAL_CFOP_CODIGO, FISCAL_TRIBUTACAO_ORIGEM,
FISCAL_TRIBUTACAO_ICMS, FISCAL_TRIBUTACAO_IPI, FISCAL_TRIBUTACAO_PIS,
FISCAL_TRIBUTACAO_COFINS, MODALIDADE_ICMS, MODALIDADE_ICMS_ST, MARGEM_ICMS_ST,
REDUCAO_ICMS_ST, BASECALCULO_ICMS_ST, ALIQUOTA_ICMS_ST, VALOR_ICMS_ST,
FISCAL_REDUCAO_ICMS_ST, FISCAL_BASECALCULO_ICMS_ST, FISCAL_ALIQUOTA_ICMS_ST, FISCAL_VALOR_ICMS_ST,
PEDIDO_CLIENTE, INFORMACOES_COMPLEMENTARES, FCI_MENSAGEM,
FCI_PARCELA_IMPORTACAO, FCI_CONTEUDO_IMPORTACAO, FCI_NUMERO,ccusto,conta_contabil,enquadramento_ipi,
QUANTIDADE_ALTERNATIVA, UM_ALTERNATIVA, VALOR_ALTERNATIVO)
VALUES  (
:Nfs_Controle,:Estabelecimento_Codigo,:Empresa_Codigo,:Numero_NotaFiscal,
:Data_Emissao,:Situacao,:Nf_CONSIGNACAO,:Nf_CONSIGNACAO_Item,
:Nfe,:Nfe_Item_Controle,:Pedido,:Pedido_Item_PE_Controle,:Nf_Externo,
:Nf_Externo_Item_Controle,:Controle,:Sequencia,:Operacao_Codigo,:Cfop_Codigo,
:Produto_Codigo,:Produto_Descricao,:Produto_UnidadeMedida,:Ncm_Codigo,:Tributacao_Origem,
:Tributacao_Ipi,:Tributacao_Icms,:Tributacao_Pis,:Tributacao_Cofins,:Localizacao_Codigo,
:Quantidade,:Valor_Unitario,:Valor_Total,:BaseCalculo_Icms,:Percentual_Icms,
:Percentual_Ipi,:Valor_Ipi,:Percentual_Pis,:Valor_Pis,:Percentual_Cofins,
:Valor_Cofins,:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:Tecelagem,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
:VALOR_ACRESCIMO, :Valor_FRETE, :Valor_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :CUBAGEM, :VOLUMES,
:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
:FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
:FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
:FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
:FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
:VALOR_CONTABIL, :valor_basecalculo_icms, :FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,
:FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,
:FISCAL_TRIBUTACAO_COFINS,

:MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
:BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,
:FISCAL_REDUCAO_ICMS_ST, :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
:PEDIDO_CLIENTE, :INFORMACOES_COMPLEMENTARES,
:FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,:ccusto,:conta_contabil,:enquadramento_ipi,
:QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO);

INSERT INTO TbNfs_Item_Saldo (            
Nfs_Item_Controle,Nfs_Controle,Quantidade,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,  
T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)  
VALUES (                                  
:Controle,:Nfs_Controle,:Quantidade,
:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20);

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_NFS_ITEM8 (
    NFS_CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ORIGEM integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_PIS char(2),
    TRIBUTACAO_COFINS char(2),
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    TECELAGEM integer,
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    CUBAGEM numeric(10,4),
    VOLUMES integer,
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,2),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(200),
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    ENQUADRAMENTO_IPI varchar(3),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1))
as
BEGIN
INSERT INTO TbNfs_Item(
Nfs_Controle,Estabelecimento_Codigo,Empresa_Codigo,Numero_NotaFiscal,Data_Emissao,Situacao,
Nf_CONSIGNACAO,Nf_CONSIGNACAO_Item,Nfe,Nfe_Item_Controle,Pedido,
Pedido_Item_PE_Controle,Nf_Externo,Nf_Externo_Item_Controle    ,
Controle,Sequencia,Operacao_Codigo,Cfop_Codigo,Produto_Codigo,Produto_Descricao           ,
Produto_UnidadeMedida2,Ncm_Codigo,Tributacao_Origem,Tributacao_Ipi,Tributacao_Icms         ,
Tributacao_Pis,Tributacao_Cofins                                                          ,
Localizacao_Codigo,Quantidade,Valor_Unitario,Valor_Total,BaseCalculo_Icms,Percentual_Icms ,
Percentual_Ipi,Valor_Ipi,Percentual_Pis,Valor_Pis,Percentual_Cofins,Valor_Cofins          ,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,Tecelagem,
VALOR_ICMS,BASECALCULO_IPI,BASECALCULO_PIS,BASECALCULO_COFINS,
VALOR_ACRESCIMO, Valor_FRETE, Valor_SEGURO, PESO_LIQUIDO, PESO_BRUTO, CUBAGEM, VOLUMES,
VALOR_DESCONTO,FISCAL_ISENTAS_IPI,FISCAL_ISENTAS_ICMS,
FISCAL_OUTRAS_IPI,FISCAL_OUTRAS_ICMS,FISCAL_VALOR_ICMS,FISCAL_VALOR_IPI,
FISCAL_VALOR_PIS,FISCAL_VALOR_COFINS,FISCAL_PERCENTUAL_ICMS,FISCAL_PERCENTUAL_IPI,
FISCAL_PERCENTUAL_PIS,FISCAL_PERCENTUAL_COFINS,FISCAL_BASECALCULO_ICMS,
FISCAL_BASECALCULO_IPI,FISCAL_BASECALCULO_PIS,FISCAL_BASECALCULO_COFINS,
VALOR_CONTABIL, valor_basecalculo_icms, FISCAL_CFOP_CODIGO, FISCAL_TRIBUTACAO_ORIGEM,
FISCAL_TRIBUTACAO_ICMS, FISCAL_TRIBUTACAO_IPI, FISCAL_TRIBUTACAO_PIS,
FISCAL_TRIBUTACAO_COFINS, MODALIDADE_ICMS, MODALIDADE_ICMS_ST, MARGEM_ICMS_ST,
REDUCAO_ICMS_ST, BASECALCULO_ICMS_ST, ALIQUOTA_ICMS_ST, VALOR_ICMS_ST,
FISCAL_REDUCAO_ICMS_ST, FISCAL_BASECALCULO_ICMS_ST, FISCAL_ALIQUOTA_ICMS_ST, FISCAL_VALOR_ICMS_ST,
PEDIDO_CLIENTE, INFORMACOES_COMPLEMENTARES, FCI_MENSAGEM,
FCI_PARCELA_IMPORTACAO, FCI_CONTEUDO_IMPORTACAO, FCI_NUMERO,ccusto,conta_contabil,enquadramento_ipi,
QUANTIDADE_ALTERNATIVA, UM_ALTERNATIVA, VALOR_ALTERNATIVO, REDUCAO_BASE_PISCOF)
VALUES  (
:Nfs_Controle,:Estabelecimento_Codigo,:Empresa_Codigo,:Numero_NotaFiscal,
:Data_Emissao,:Situacao,:Nf_CONSIGNACAO,:Nf_CONSIGNACAO_Item,
:Nfe,:Nfe_Item_Controle,:Pedido,:Pedido_Item_PE_Controle,:Nf_Externo,
:Nf_Externo_Item_Controle,:Controle,:Sequencia,:Operacao_Codigo,:Cfop_Codigo,
:Produto_Codigo,:Produto_Descricao,:Produto_UnidadeMedida,:Ncm_Codigo,:Tributacao_Origem,
:Tributacao_Ipi,:Tributacao_Icms,:Tributacao_Pis,:Tributacao_Cofins,:Localizacao_Codigo,
:Quantidade,:Valor_Unitario,:Valor_Total,:BaseCalculo_Icms,:Percentual_Icms,
:Percentual_Ipi,:Valor_Ipi,:Percentual_Pis,:Valor_Pis,:Percentual_Cofins,
:Valor_Cofins,:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:Tecelagem,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
:VALOR_ACRESCIMO, :Valor_FRETE, :Valor_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :CUBAGEM, :VOLUMES,
:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
:FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
:FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
:FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
:FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
:VALOR_CONTABIL, :valor_basecalculo_icms, :FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,
:FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,
:FISCAL_TRIBUTACAO_COFINS,

:MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
:BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,
:FISCAL_REDUCAO_ICMS_ST, :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
:PEDIDO_CLIENTE, :INFORMACOES_COMPLEMENTARES,
:FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,:ccusto,:conta_contabil,:enquadramento_ipi,
:QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO, :REDUCAO_BASE_PISCOF);

INSERT INTO TbNfs_Item_Saldo (            
Nfs_Item_Controle,Nfs_Controle,Quantidade,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,  
T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)  
VALUES (                                  
:Controle,:Nfs_Controle,:Quantidade,
:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20);

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_NFS_ITEM9 (
    NFS_CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    NF_CONSIGNACAO integer,
    NF_CONSIGNACAO_ITEM integer,
    NFE integer,
    NFE_ITEM_CONTROLE integer,
    PEDIDO integer,
    PEDIDO_ITEM_PE_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ORIGEM integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_PIS char(2),
    TRIBUTACAO_COFINS char(2),
    LOCALIZACAO_CODIGO integer,
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    TECELAGEM integer,
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    PESO_LIQUIDO numeric(10,4),
    PESO_BRUTO numeric(10,4),
    CUBAGEM numeric(10,4),
    VOLUMES integer,
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,2),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    PEDIDO_CLIENTE varchar(15),
    INFORMACOES_COMPLEMENTARES varchar(500),
    FCI_MENSAGEM varchar(255),
    FCI_PARCELA_IMPORTACAO numeric(15,2),
    FCI_CONTEUDO_IMPORTACAO numeric(15,2),
    FCI_NUMERO varchar(40),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    ENQUADRAMENTO_IPI varchar(3),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1))
as
BEGIN
INSERT INTO TbNfs_Item(
Nfs_Controle,Estabelecimento_Codigo,Empresa_Codigo,Numero_NotaFiscal,Data_Emissao,Situacao,
Nf_CONSIGNACAO,Nf_CONSIGNACAO_Item,Nfe,Nfe_Item_Controle,Pedido,
Pedido_Item_PE_Controle,Nf_Externo,Nf_Externo_Item_Controle    ,
Controle,Sequencia,Operacao_Codigo,Cfop_Codigo,Produto_Codigo,Produto_Descricao           ,
Produto_UnidadeMedida2,Ncm_Codigo,Tributacao_Origem,Tributacao_Ipi,Tributacao_Icms         ,
Tributacao_Pis,Tributacao_Cofins                                                          ,
Localizacao_Codigo,Quantidade,Valor_Unitario,Valor_Total,BaseCalculo_Icms,Percentual_Icms ,
Percentual_Ipi,Valor_Ipi,Percentual_Pis,Valor_Pis,Percentual_Cofins,Valor_Cofins          ,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,Tecelagem,
VALOR_ICMS,BASECALCULO_IPI,BASECALCULO_PIS,BASECALCULO_COFINS,
VALOR_ACRESCIMO, Valor_FRETE, Valor_SEGURO, PESO_LIQUIDO, PESO_BRUTO, CUBAGEM, VOLUMES,
VALOR_DESCONTO,FISCAL_ISENTAS_IPI,FISCAL_ISENTAS_ICMS,
FISCAL_OUTRAS_IPI,FISCAL_OUTRAS_ICMS,FISCAL_VALOR_ICMS,FISCAL_VALOR_IPI,
FISCAL_VALOR_PIS,FISCAL_VALOR_COFINS,FISCAL_PERCENTUAL_ICMS,FISCAL_PERCENTUAL_IPI,
FISCAL_PERCENTUAL_PIS,FISCAL_PERCENTUAL_COFINS,FISCAL_BASECALCULO_ICMS,
FISCAL_BASECALCULO_IPI,FISCAL_BASECALCULO_PIS,FISCAL_BASECALCULO_COFINS,
VALOR_CONTABIL, valor_basecalculo_icms, FISCAL_CFOP_CODIGO, FISCAL_TRIBUTACAO_ORIGEM,
FISCAL_TRIBUTACAO_ICMS, FISCAL_TRIBUTACAO_IPI, FISCAL_TRIBUTACAO_PIS,
FISCAL_TRIBUTACAO_COFINS, MODALIDADE_ICMS, MODALIDADE_ICMS_ST, MARGEM_ICMS_ST,
REDUCAO_ICMS_ST, BASECALCULO_ICMS_ST, ALIQUOTA_ICMS_ST, VALOR_ICMS_ST,
FISCAL_REDUCAO_ICMS_ST, FISCAL_BASECALCULO_ICMS_ST, FISCAL_ALIQUOTA_ICMS_ST, FISCAL_VALOR_ICMS_ST,
PEDIDO_CLIENTE, INFORMACOES_COMPLEMENTARES, FCI_MENSAGEM,
FCI_PARCELA_IMPORTACAO, FCI_CONTEUDO_IMPORTACAO, FCI_NUMERO,ccusto,conta_contabil,enquadramento_ipi,
QUANTIDADE_ALTERNATIVA, UM_ALTERNATIVA, VALOR_ALTERNATIVO, REDUCAO_BASE_PISCOF)
VALUES  (
:Nfs_Controle,:Estabelecimento_Codigo,:Empresa_Codigo,:Numero_NotaFiscal,
:Data_Emissao,:Situacao,:Nf_CONSIGNACAO,:Nf_CONSIGNACAO_Item,
:Nfe,:Nfe_Item_Controle,:Pedido,:Pedido_Item_PE_Controle,:Nf_Externo,
:Nf_Externo_Item_Controle,:Controle,:Sequencia,:Operacao_Codigo,:Cfop_Codigo,
:Produto_Codigo,:Produto_Descricao,:Produto_UnidadeMedida,:Ncm_Codigo,:Tributacao_Origem,
:Tributacao_Ipi,:Tributacao_Icms,:Tributacao_Pis,:Tributacao_Cofins,:Localizacao_Codigo,
:Quantidade,:Valor_Unitario,:Valor_Total,:BaseCalculo_Icms,:Percentual_Icms,
:Percentual_Ipi,:Valor_Ipi,:Percentual_Pis,:Valor_Pis,:Percentual_Cofins,
:Valor_Cofins,:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:Tecelagem,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
:VALOR_ACRESCIMO, :Valor_FRETE, :Valor_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :CUBAGEM, :VOLUMES,
:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
:FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
:FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
:FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
:FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
:VALOR_CONTABIL, :valor_basecalculo_icms, :FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,
:FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,
:FISCAL_TRIBUTACAO_COFINS,

:MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
:BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,
:FISCAL_REDUCAO_ICMS_ST, :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
:PEDIDO_CLIENTE, :INFORMACOES_COMPLEMENTARES,
:FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,:ccusto,:conta_contabil,:enquadramento_ipi,
:QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO, :REDUCAO_BASE_PISCOF);

INSERT INTO TbNfs_Item_Saldo (            
Nfs_Item_Controle,Nfs_Controle,Quantidade,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,  
T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)  
VALUES (                                  
:Controle,:Nfs_Controle,:Quantidade,
:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20);

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbnfe_item_b09u for tbnfe_item
inactive before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
  
  HISTORICO = '';
    
    IF(NEW.SEQUENCIA <> OLD.SEQUENCIA) THEN
        BEGIN                
            HISTORICO = HISTORICO||' Seq:'||OLD.SEQUENCIA||' -> '||NEW.SEQUENCIA;
        END                  
    IF(NEW.OPERACAO_CODIGO <> OLD.OPERACAO_CODIGO) THEN
        BEGIN                    
            HISTORICO = HISTORICO||' Oper:'||OLD.OPERACAO_CODIGO||' -> '||NEW.OPERACAO_CODIGO;
        END                  
    IF(NEW.CFOP_CODIGO <> OLD.CFOP_CODIGO) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' CFOP:'||OLD.CFOP_CODIGO||' -> '||NEW.CFOP_CODIGO;
        END                  
    IF(NEW.PRODUTO_CODIGO <> OLD.PRODUTO_CODIGO) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Id.Prod:'||OLD.PRODUTO_CODIGO||' -> '||NEW.PRODUTO_CODIGO;
        END                  
    IF(NEW.PRODUTO_DESCRICAO <> OLD.PRODUTO_DESCRICAO) THEN
        BEGIN                                        
            HISTORICO = HISTORICO||' Desc.Prod:'||OLD.PRODUTO_DESCRICAO||' -> '||NEW.PRODUTO_DESCRICAO;
        END                      
    IF(NEW.PRODUTO_UNIDADEMEDIDA2 <> OLD.PRODUTO_UNIDADEMEDIDA2) THEN
        BEGIN                                        
            HISTORICO = HISTORICO||' UM:'||OLD.PRODUTO_UNIDADEMEDIDA2||' -> '||NEW.PRODUTO_UNIDADEMEDIDA2;
        END                      
    IF(NEW.NCM_CODIGO <> OLD.NCM_CODIGO) THEN
        BEGIN                                  
            HISTORICO = HISTORICO||' NCM:'||OLD.NCM_CODIGO||' -> '||NEW.NCM_CODIGO;
        END                
    IF(NEW.TRIBUTACAO_ICMS <> OLD.TRIBUTACAO_ICMS) THEN
        BEGIN                                  
            HISTORICO = HISTORICO||' CST.ICMS:'||OLD.TRIBUTACAO_ICMS||' -> '||NEW.TRIBUTACAO_ICMS;
        END                
    IF(NEW.TRIBUTACAO_IPI <> OLD.TRIBUTACAO_IPI) THEN
        BEGIN                    
            HISTORICO = HISTORICO||' CST.IPI:'||OLD.TRIBUTACAO_IPI||' -> '||NEW.TRIBUTACAO_IPI;
        END
    IF(NEW.TRIBUTACAO_ORIGEM <> OLD.TRIBUTACAO_ORIGEM) THEN
        BEGIN                    
            HISTORICO = HISTORICO||' Orig:'||OLD.TRIBUTACAO_ORIGEM||' -> '||NEW.TRIBUTACAO_ORIGEM;
        END
    IF(NEW.LOCALIZACAO_CODIGO <> OLD.LOCALIZACAO_CODIGO) THEN
        BEGIN                    
            HISTORICO = HISTORICO||' Loc:'||OLD.LOCALIZACAO_CODIGO||' -> '||NEW.LOCALIZACAO_CODIGO;
        END
    IF(NEW.QUANTIDADE <> OLD.QUANTIDADE) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' Qtd:'||OLD.QUANTIDADE||' -> '||NEW.QUANTIDADE;
        END               
    IF(NEW.VALOR_UNITARIO <> OLD.VALOR_UNITARIO) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' Vr.Unit:'||OLD.VALOR_UNITARIO||' -> '||NEW.VALOR_UNITARIO;
        END               
    IF(NEW.VALOR_TOTAL <> OLD.VALOR_TOTAL) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Total:'||OLD.VALOR_TOTAL||' -> '||NEW.VALOR_TOTAL;
        END
    IF(NEW.BASECALCULO_ICMS <> OLD.BASECALCULO_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Bs.Calc.ICMS:'||OLD.BASECALCULO_ICMS||' -> '||NEW.BASECALCULO_ICMS;
        END
    IF(NEW.PERCENTUAL_ICMS <> OLD.PERCENTUAL_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' %ICMS:'||OLD.PERCENTUAL_ICMS||' -> '||NEW.PERCENTUAL_ICMS;
        END
    IF(NEW.PERCENTUAL_IPI <> OLD.PERCENTUAL_IPI) THEN
        BEGIN             
            HISTORICO = HISTORICO||' %IPI:'||OLD.PERCENTUAL_IPI||' -> '||NEW.PERCENTUAL_IPI;
        END               
    IF(NEW.VALOR_IPI <> OLD.VALOR_IPI) THEN
        BEGIN             
            HISTORICO = HISTORICO||' Vr.%IPI:'||OLD.VALOR_IPI||' -> '||NEW.VALOR_IPI;
        END               
    IF(NEW.PERCENTUAL_PIS <> OLD.PERCENTUAL_PIS) THEN
        BEGIN
            HISTORICO = HISTORICO||' %PIS:'||OLD.PERCENTUAL_PIS||' -> '||NEW.PERCENTUAL_PIS;
        END
    IF(NEW.VALOR_PIS <> OLD.VALOR_PIS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.PIS:'||OLD.VALOR_PIS||' -> '||NEW.VALOR_PIS;
        END
    IF(NEW.PERCENTUAL_COFINS <> OLD.PERCENTUAL_COFINS) THEN
        BEGIN
            HISTORICO = HISTORICO||' %COF:'||OLD.PERCENTUAL_COFINS||' -> '||NEW.PERCENTUAL_COFINS;
        END
    IF(NEW.VALOR_COFINS <> OLD.VALOR_COFINS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Cof:'||OLD.VALOR_COFINS||' -> '||NEW.VALOR_COFINS;
        END
    IF(NEW.NFS <> OLD.NFS) THEN
        BEGIN
            HISTORICO = HISTORICO||' NFS:'||OLD.NFS||' -> '||NEW.NFS;
        END 
    IF(NEW.NFS_ITEM_CONTROLE <> OLD.NFS_ITEM_CONTROLE) THEN
        BEGIN
            HISTORICO = HISTORICO||' ID.Nf.Ref:'||OLD.NFS_ITEM_CONTROLE||' -> '||NEW.NFS_ITEM_CONTROLE;
        END
    IF(NEW.NF_EXTERNO <> OLD.NF_EXTERNO) THEN
        BEGIN
            HISTORICO = HISTORICO||' NFS:'||OLD.NF_EXTERNO||' -> '||NEW.NF_EXTERNO;
        END
    IF(NEW.NF_EXTERNO_ITEM_CONTROLE <> OLD.NF_EXTERNO_ITEM_CONTROLE) THEN
        BEGIN
            HISTORICO = HISTORICO||' ID.NF.Ref:'||OLD.NF_EXTERNO_ITEM_CONTROLE||' -> '||NEW.NF_EXTERNO_ITEM_CONTROLE;
        END 
    IF(NEW.OC <> OLD.OC) THEN
        BEGIN
            HISTORICO = HISTORICO||' OC:'||OLD.OC||' -> '||NEW.OC;
        END                             
    IF(NEW.OC_ITEM_CONTROLE <> OLD.OC_ITEM_CONTROLE) THEN
        BEGIN
            HISTORICO = HISTORICO||' Id.OC.Item:'||OLD.OC_ITEM_CONTROLE||' -> '||NEW.OC_ITEM_CONTROLE;
        END
    IF(NEW.T01 <> OLD.T01) THEN
        BEGIN
            HISTORICO = HISTORICO||' T01:'||OLD.T01||' -> '||NEW.T01;
        END
    IF(NEW.T02 <> OLD.T02) THEN
        BEGIN
            HISTORICO = HISTORICO||' T02:'||OLD.T02||' -> '||NEW.T02;
        END
    IF(NEW.T03 <> OLD.T03) THEN
        BEGIN
            HISTORICO = HISTORICO||' T03:'||OLD.T03||' -> '||NEW.T03;
        END
    IF(NEW.T04 <> OLD.T04) THEN
        BEGIN
            HISTORICO = HISTORICO||' T04:'||OLD.T04||' -> '||NEW.T04;
        END
    IF(NEW.T05 <> OLD.T05) THEN
        BEGIN
            HISTORICO = HISTORICO||' T05:'||OLD.T05||' -> '||NEW.T05;
        END
    IF(NEW.T06 <> OLD.T06) THEN
        BEGIN
            HISTORICO = HISTORICO||' T06:'||OLD.T06||' -> '||NEW.T06;
        END
    IF(NEW.T07 <> OLD.T07) THEN
        BEGIN
            HISTORICO = HISTORICO||' T07:'||OLD.T07||' -> '||NEW.T07;
        END
    IF(NEW.T08 <> OLD.T08) THEN
        BEGIN
            HISTORICO = HISTORICO||' T08:'||OLD.T08||' -> '||NEW.T08;
        END
    IF(NEW.T09 <> OLD.T09) THEN
        BEGIN
            HISTORICO = HISTORICO||' T09:'||OLD.T09||' -> '||NEW.T09;
        END
    IF(NEW.T10 <> OLD.T10) THEN
        BEGIN
            HISTORICO = HISTORICO||' T10:'||OLD.T10||' -> '||NEW.T10;
        END
    IF(NEW.T11 <> OLD.T11) THEN
        BEGIN
            HISTORICO = HISTORICO||' T11:'||OLD.T11||' -> '||NEW.T11;
        END
    IF(NEW.T12 <> OLD.T12) THEN
        BEGIN
            HISTORICO = HISTORICO||' T12:'||OLD.T12||' -> '||NEW.T12;
        END
    IF(NEW.T13 <> OLD.T13) THEN
        BEGIN
            HISTORICO = HISTORICO||' T13:'||OLD.T13||' -> '||NEW.T13;
        END
    IF(NEW.T14 <> OLD.T14) THEN
        BEGIN
            HISTORICO = HISTORICO||' T14:'||OLD.T14||' -> '||NEW.T14;
        END
    IF(NEW.T15 <> OLD.T15) THEN
        BEGIN
            HISTORICO = HISTORICO||' T15:'||OLD.T15||' -> '||NEW.T15;
        END
    IF(NEW.T16 <> OLD.T16) THEN
        BEGIN
            HISTORICO = HISTORICO||' T16:'||OLD.T16||' -> '||NEW.T16;
        END
    IF(NEW.T17 <> OLD.T17) THEN
        BEGIN
            HISTORICO = HISTORICO||' T17:'||OLD.T17||' -> '||NEW.T17;
        END
    IF(NEW.T18 <> OLD.T18) THEN
        BEGIN
            HISTORICO = HISTORICO||' T18:'||OLD.T18||' -> '||NEW.T18;
        END
    IF(NEW.T19 <> OLD.T19) THEN
        BEGIN
            HISTORICO = HISTORICO||' T19:'||OLD.T19||' -> '||NEW.T19;
        END
    IF(NEW.T20 <> OLD.T20) THEN
        BEGIN
            HISTORICO = HISTORICO||' T20:'||OLD.T20||' -> '||NEW.T20;
        END
    IF(NEW.ESTABELECIMENTO_CODIGO <> OLD.ESTABELECIMENTO_CODIGO) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Est:'||OLD.ESTABELECIMENTO_CODIGO||' -> '||NEW.ESTABELECIMENTO_CODIGO;
        END                    
    IF(NEW.EMPRESA_CODIGO <> OLD.EMPRESA_CODIGO) THEN
        BEGIN                
            HISTORICO = HISTORICO||' Emp:'||OLD.EMPRESA_CODIGO||' -> '||NEW.EMPRESA_CODIGO;
        END                  
    IF(NEW.NUMERO_NOTAFISCAL <> OLD.NUMERO_NOTAFISCAL and OLD.NUMERO_NOTAFISCAL > 0) THEN
        BEGIN                
            HISTORICO = HISTORICO||' NF:'||OLD.NUMERO_NOTAFISCAL||' -> '||NEW.NUMERO_NOTAFISCAL;
        END
--    IF(NEW.SITUACAO <> OLD.SITUACAO) THEN
--        BEGIN
--            HISTORICO = HISTORICO||' Sit:'||OLD.SITUACAO||' -> '||NEW.SITUACAO;
--        END
    IF(NEW.VALOR_CUSTO <> OLD.VALOR_CUSTO) THEN
        BEGIN                
            HISTORICO = HISTORICO||' Vr.Custo:'||OLD.VALOR_CUSTO||' -> '||NEW.VALOR_CUSTO;
        END                  
    IF(NEW.TECELAGEM <> OLD.TECELAGEM) THEN
        BEGIN                
            HISTORICO = HISTORICO||' Tecel:'||OLD.TECELAGEM||' -> '||NEW.TECELAGEM;
        END                  
    IF(NEW.TRIBUTACAO_PIS <> OLD.TRIBUTACAO_PIS) THEN
        BEGIN 
            HISTORICO = HISTORICO||' CST PIS:'||OLD.TRIBUTACAO_PIS||' -> '||NEW.TRIBUTACAO_PIS;
        END                    
    IF(NEW.TRIBUTACAO_COFINS <> OLD.TRIBUTACAO_COFINS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' CST Cof:'||OLD.TRIBUTACAO_COFINS||' -> '||NEW.TRIBUTACAO_COFINS;
        END                    
    IF(NEW.DI <> OLD.DI) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI:'||OLD.DI||' -> '||NEW.DI;
        END                      
    IF(NEW.DI_DATA_REGISTRO <> OLD.DI_DATA_REGISTRO) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Dt.Reg:'||OLD.DI_DATA_REGISTRO||' -> '||NEW.DI_DATA_REGISTRO;
        END                      
    IF(NEW.DI_DATA_DESEMBARACO <> OLD.DI_DATA_DESEMBARACO) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Dt.Desem:'||OLD.DI_DATA_DESEMBARACO||' -> '||NEW.DI_DATA_DESEMBARACO;
        END                      
    IF(NEW.DI_LOCAL_DESEMBARACO <> OLD.DI_LOCAL_DESEMBARACO) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Lcl.Desem:'||OLD.DI_LOCAL_DESEMBARACO||' -> '||NEW.DI_LOCAL_DESEMBARACO;
        END                      
    IF(NEW.DI_UF_DESEMBARACO <> OLD.DI_UF_DESEMBARACO) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.UF.Desem:'||OLD.DI_UF_DESEMBARACO||' -> '||NEW.DI_UF_DESEMBARACO;
        END                      
    IF(NEW.DI_CODIGO_EXPORTADOR <> OLD.DI_CODIGO_EXPORTADOR) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Cod.Exp:'||OLD.DI_CODIGO_EXPORTADOR||' -> '||NEW.DI_CODIGO_EXPORTADOR;
        END                      
    IF(NEW.DI_ADICAO <> OLD.DI_ADICAO) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Adic:'||OLD.DI_ADICAO||' -> '||NEW.DI_ADICAO;
        END                      
    IF(NEW.DI_SEQUENCIAL <> OLD.DI_SEQUENCIAL) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Seq:'||OLD.DI_SEQUENCIAL||' -> '||NEW.DI_SEQUENCIAL;
        END                      
    IF(NEW.DI_CODIGO_FABRICANTE <> OLD.DI_CODIGO_FABRICANTE) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Cod.Fab:'||OLD.DI_CODIGO_FABRICANTE||' -> '||NEW.DI_CODIGO_FABRICANTE;
        END                      
    IF(NEW.DI_DESCONTO_ADICAO <> OLD.DI_DESCONTO_ADICAO) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Desc.Adic:'||OLD.DI_DESCONTO_ADICAO||' -> '||NEW.DI_DESCONTO_ADICAO;
        END                      
    IF(NEW.DI_BASE_CALCULO <> OLD.DI_BASE_CALCULO) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.BS.Calc:'||OLD.DI_BASE_CALCULO||' -> '||NEW.DI_BASE_CALCULO;
        END                      
    IF(NEW.DI_DESPESAS_ADUANEIRAS <> OLD.DI_DESPESAS_ADUANEIRAS) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Desp.Aduan:'||OLD.DI_DESPESAS_ADUANEIRAS||' -> '||NEW.DI_DESPESAS_ADUANEIRAS;
        END                      
    IF(NEW.DI_VALOR_II <> OLD.DI_VALOR_II) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Vr.II:'||OLD.DI_VALOR_II||' -> '||NEW.DI_VALOR_II;
        END                      
    IF(NEW.DI_VALOR_IOF <> OLD.DI_VALOR_IOF) THEN
        BEGIN              
            HISTORICO = HISTORICO||' DI.Vr.IOF:'||OLD.DI_VALOR_IOF||' -> '||NEW.DI_VALOR_IOF;
        END                
    IF(NEW.BASECALCULO_IPI <> OLD.BASECALCULO_IPI) THEN
        BEGIN              
            HISTORICO = HISTORICO||' Bs.Calc.IPI:'||OLD.BASECALCULO_IPI||' -> '||NEW.BASECALCULO_IPI;
        END                
    IF(NEW.BASECALCULO_PIS <> OLD.BASECALCULO_PIS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Bs.Calc.PIS:'||OLD.BASECALCULO_PIS||' -> '||NEW.BASECALCULO_PIS;
        END                    
    IF(NEW.BASECALCULO_COFINS  <> OLD.BASECALCULO_COFINS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Bs.Calc.Cof:'||OLD.BASECALCULO_COFINS||' -> '||NEW.BASECALCULO_COFINS;
        END                    
    IF(NEW.VALOR_ACRESCIMO <> OLD.VALOR_ACRESCIMO) THEN
        BEGIN              
            HISTORICO = HISTORICO||' Vr.Acresc:'||OLD.VALOR_ACRESCIMO||' -> '||NEW.VALOR_ACRESCIMO;
        END                
    IF(NEW.VALOR_DESCONTO <> OLD.VALOR_DESCONTO) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Vr.Desc:'||OLD.VALOR_DESCONTO||' -> '||NEW.VALOR_DESCONTO;
        END                    
    IF(NEW.FISCAL_ISENTAS_IPI  <> OLD.FISCAL_ISENTAS_IPI) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.Isen.IPI:'||OLD.FISCAL_ISENTAS_IPI||' -> '||NEW.FISCAL_ISENTAS_IPI;
        END                    
    IF(NEW.FISCAL_ISENTAS_ICMS <> OLD.FISCAL_ISENTAS_ICMS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.Isen.ICMS:'||OLD.FISCAL_ISENTAS_ICMS||' -> '||NEW.FISCAL_ISENTAS_ICMS;
        END                    
    IF(NEW.FISCAL_OUTRAS_IPI <> OLD.FISCAL_OUTRAS_IPI) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.Out.IPI:'||OLD.FISCAL_OUTRAS_IPI||' -> '||NEW.FISCAL_OUTRAS_IPI;
        END                    
    IF(NEW.FISCAL_OUTRAS_ICMS <> OLD.FISCAL_OUTRAS_ICMS) THEN
        BEGIN                 
            HISTORICO = HISTORICO||' Fisc.Out.ICMS:'||OLD.FISCAL_OUTRAS_ICMS||' -> '||NEW.FISCAL_OUTRAS_ICMS;
        END                   
    IF(NEW.FISCAL_VALOR_ICMS <> OLD.FISCAL_VALOR_ICMS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.Vr.ICMS:'||OLD.FISCAL_VALOR_ICMS||' -> '||NEW.FISCAL_VALOR_ICMS;
        END                    
    IF(NEW.FISCAL_VALOR_IPI <> OLD.FISCAL_VALOR_IPI) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.Vr.IPI:'||OLD.FISCAL_VALOR_IPI||' -> '||NEW.FISCAL_VALOR_IPI;
        END                 
    IF(NEW.FISCAL_VALOR_PIS <> OLD.FISCAL_VALOR_PIS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Fisc.Vr.PIS:'||OLD.FISCAL_VALOR_PIS||' -> '||NEW.FISCAL_VALOR_PIS;
        END                    
    IF(NEW.FISCAL_VALOR_COFINS <> OLD.FISCAL_VALOR_COFINS) THEN
        BEGIN   
            HISTORICO = HISTORICO||' Fisc.Vr.Cof:'||OLD.FISCAL_VALOR_COFINS||' -> '||NEW.FISCAL_VALOR_COFINS;
        END                       
    IF(NEW.FISCAL_PERCENTUAL_ICMS <> OLD.FISCAL_PERCENTUAL_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.%.Icms:'||OLD.FISCAL_PERCENTUAL_ICMS||' -> '||NEW.FISCAL_PERCENTUAL_ICMS;
        END                       
    IF(NEW.FISCAL_PERCENTUAL_IPI  <> OLD.FISCAL_PERCENTUAL_IPI) THEN
        BEGIN                     
            HISTORICO = HISTORICO||' Fisc.%.IPI:'||OLD.FISCAL_PERCENTUAL_IPI||' -> '||NEW.FISCAL_PERCENTUAL_IPI;
        END                       
    IF(NEW.FISCAL_PERCENTUAL_PIS  <> OLD.FISCAL_PERCENTUAL_PIS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.%.PIS:'||OLD.FISCAL_PERCENTUAL_PIS||' -> '||NEW.FISCAL_PERCENTUAL_PIS;
        END
    IF(NEW.FISCAL_PERCENTUAL_COFINS <> OLD.FISCAL_PERCENTUAL_COFINS) THEN
        BEGIN              
            HISTORICO = HISTORICO||' Fisc.%.Cof:'||OLD.FISCAL_PERCENTUAL_COFINS||' -> '||NEW.FISCAL_PERCENTUAL_COFINS;
        END                         
    IF(NEW.FISCAL_BASECALCULO_ICMS <> OLD.FISCAL_BASECALCULO_ICMS) THEN
        BEGIN                           
            HISTORICO = HISTORICO||' Fisc.Bs.Calc.ICMS:'||OLD.FISCAL_BASECALCULO_ICMS||' -> '||NEW.FISCAL_BASECALCULO_ICMS;
        END                         
    IF(NEW.FISCAL_BASECALCULO_IPI <> OLD.FISCAL_BASECALCULO_IPI) THEN
        BEGIN                           
            HISTORICO = HISTORICO||' Fisc.Bs.Calc.IPI:'||OLD.FISCAL_BASECALCULO_IPI||' -> '||NEW.FISCAL_BASECALCULO_IPI;
        END                         
    IF(NEW.FISCAL_BASECALCULO_PIS <> OLD.FISCAL_BASECALCULO_PIS) THEN
        BEGIN    
            HISTORICO = HISTORICO||' Fisc.Bs.Calc.PIS:'||OLD.FISCAL_BASECALCULO_PIS||' -> '||NEW.FISCAL_BASECALCULO_PIS;
        END
    IF(NEW.FISCAL_BASECALCULO_COFINS  <> OLD.FISCAL_BASECALCULO_COFINS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.Bs.Calc.Cofins:'||OLD.FISCAL_BASECALCULO_COFINS||' -> '||NEW.FISCAL_BASECALCULO_COFINS;
        END
    IF(NEW.VALOR_ICMS <> OLD.VALOR_ICMS) THEN
        BEGIN           
            HISTORICO = HISTORICO||' Vr.ICMS:'||OLD.VALOR_ICMS||' -> '||NEW.VALOR_ICMS;
        END
    IF(NEW.FISCAL_TRIBUTACAO_ORIGEM <> OLD.FISCAL_TRIBUTACAO_ORIGEM) THEN
        BEGIN           
            HISTORICO = HISTORICO||' Fisc.Trib.Origem:'||OLD.FISCAL_TRIBUTACAO_ORIGEM||' -> '||NEW.FISCAL_TRIBUTACAO_ORIGEM;
        END                         
    IF(NEW.FISCAL_TRIBUTACAO_ICMS <> OLD.FISCAL_TRIBUTACAO_ICMS) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.Trib.ICMS:'||OLD.FISCAL_TRIBUTACAO_ICMS||' -> '||NEW.FISCAL_TRIBUTACAO_ICMS;
        END                         
    IF(NEW.FISCAL_TRIBUTACAO_IPI <> OLD.FISCAL_TRIBUTACAO_IPI) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.Trib.IPI:'||OLD.FISCAL_TRIBUTACAO_IPI||' -> '||NEW.FISCAL_TRIBUTACAO_IPI;
        END                      
    IF(NEW.FISCAL_TRIBUTACAO_PIS <> OLD.FISCAL_TRIBUTACAO_PIS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.Trib.PIS:'||OLD.FISCAL_TRIBUTACAO_PIS||' -> '||NEW.FISCAL_TRIBUTACAO_PIS;
        END                         
    IF(NEW.FISCAL_TRIBUTACAO_COFINS <> OLD.FISCAL_TRIBUTACAO_COFINS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.Trib.Cof:'||OLD.FISCAL_TRIBUTACAO_COFINS||' -> '||NEW.FISCAL_TRIBUTACAO_COFINS;
        END                         
    IF(NEW.FISCAL_CFOP_CODIGO <> OLD.FISCAL_CFOP_CODIGO) THEN
        BEGIN
            HISTORICO = HISTORICO||' Fisc.CFOP:'||OLD.FISCAL_CFOP_CODIGO||' -> '||NEW.FISCAL_CFOP_CODIGO;
        END                   
    IF(NEW.VALOR_CONTABIL <> OLD.VALOR_CONTABIL) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Contabil:'||OLD.VALOR_CONTABIL||' -> '||NEW.VALOR_CONTABIL;
        END                    
    IF(NEW.VALOR_PEDAGIO <> OLD.VALOR_PEDAGIO) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Pedagio:'||OLD.VALOR_PEDAGIO||' -> '||NEW.VALOR_PEDAGIO;
        END
    IF(NEW.DESCONTO_BASECALCULO_ICMS <> OLD.DESCONTO_BASECALCULO_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Desc.Bs.Calc.Cof:'||OLD.DESCONTO_BASECALCULO_ICMS||' -> '||NEW.DESCONTO_BASECALCULO_ICMS;
        END
    IF(NEW.VALOR_BASECALCULO_ICMS <> OLD.VALOR_BASECALCULO_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.BS.Calc.ICMS:'||OLD.VALOR_BASECALCULO_ICMS||' -> '||NEW.VALOR_BASECALCULO_ICMS;
        END
    IF(NEW.MODALIDADE_ICMS <> OLD.MODALIDADE_ICMS) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Mod.ICMS:'||OLD.MODALIDADE_ICMS||' -> '||NEW.MODALIDADE_ICMS;
        END                    
    IF(NEW.MODALIDADE_ICMS_ST <> OLD.MODALIDADE_ICMS_ST) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Mod.ICMS.St:'||OLD.MODALIDADE_ICMS_ST||' -> '||NEW.MODALIDADE_ICMS_ST;
        END                    
    IF(NEW.MARGEM_ICMS_ST <> OLD.MARGEM_ICMS_ST) THEN
        BEGIN              
            HISTORICO = HISTORICO||' Marg.ICMS.St:'||OLD.MARGEM_ICMS_ST||' -> '||NEW.MARGEM_ICMS_ST;
        END                
    IF(NEW.REDUCAO_ICMS_ST <> OLD.REDUCAO_ICMS_ST) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Red.ICMS.St:'||OLD.REDUCAO_ICMS_ST||' -> '||NEW.REDUCAO_ICMS_ST;
        END                    
    IF(NEW.BASECALCULO_ICMS_ST <> OLD.BASECALCULO_ICMS_ST) THEN
        BEGIN                  
            HISTORICO = HISTORICO||'BS.Calc.ICMS.St:'||OLD.BASECALCULO_ICMS_ST||' -> '||NEW.BASECALCULO_ICMS_ST;
        END                    
    IF(NEW.ALIQUOTA_ICMS_ST <> OLD.ALIQUOTA_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Aliq.ICMS.St:'||OLD.ALIQUOTA_ICMS_ST||' -> '||NEW.ALIQUOTA_ICMS_ST;
        END                 
    IF(NEW.VALOR_ICMS_ST <> OLD.VALOR_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Vl.ICMS.St:'||OLD.VALOR_ICMS_ST||' -> '||NEW.VALOR_ICMS_ST;
        END
    IF(NEW.INFORMACOES_COMPLEMENTARES <> OLD.INFORMACOES_COMPLEMENTARES) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Inf.Comp:'||OLD.INFORMACOES_COMPLEMENTARES||' -> '||NEW.INFORMACOES_COMPLEMENTARES;
        END 
    IF(NEW.BASECALCULO_FCI <> OLD.BASECALCULO_FCI) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Bs.Calc.FCI:'||OLD.BASECALCULO_FCI||' -> '||NEW.BASECALCULO_FCI;
        END
    IF(NEW.VALOR_FRETE <> OLD.VALOR_FRETE) THEN
        BEGIN                          
            HISTORICO = HISTORICO||' Vr.Frete:'||OLD.VALOR_FRETE||' -> '||NEW.VALOR_FRETE;
        END             
    IF(NEW.VALOR_SEGURO <> OLD.VALOR_SEGURO) THEN
        BEGIN                          
            HISTORICO = HISTORICO||' Vr.Seg:'||OLD.VALOR_SEGURO||' -> '||NEW.VALOR_SEGURO;
        END
    IF(NEW.FISCAL_REDUCAO_ICMS_ST <> OLD.FISCAL_REDUCAO_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.Red.ICMS.St:'||OLD.FISCAL_REDUCAO_ICMS_ST||' -> '||NEW.FISCAL_REDUCAO_ICMS_ST;
        END
    IF(NEW.FISCAL_BASECALCULO_ICMS_ST <> OLD.FISCAL_BASECALCULO_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.Bs.ICMS.St:'||OLD.FISCAL_BASECALCULO_ICMS_ST||' -> '||NEW.FISCAL_BASECALCULO_ICMS_ST;
        END
    IF(NEW.FISCAL_ALIQUOTA_ICMS_ST <> OLD.FISCAL_ALIQUOTA_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.Aliq.ICMS.St:'||OLD.FISCAL_ALIQUOTA_ICMS_ST||' -> '||NEW.FISCAL_ALIQUOTA_ICMS_ST;
        END
    IF(NEW.FISCAL_VALOR_ICMS_ST <> OLD.FISCAL_VALOR_ICMS_ST) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Fisc.Vr.ICMS.St:'||OLD.FISCAL_VALOR_ICMS_ST||' -> '||NEW.FISCAL_VALOR_ICMS_ST;
        END
    IF(NEW.DI_NVE <> OLD.DI_NVE) THEN
        BEGIN               
            HISTORICO = HISTORICO||' DI.NVE:'||OLD.DI_NVE||' -> '||NEW.DI_NVE;
        END
    IF(NEW.DI_TIPO_VIA_TRANSP <> OLD.DI_TIPO_VIA_TRANSP) THEN
        BEGIN               
            HISTORICO = HISTORICO||' DI.Tp.Via.Trsp:'||OLD.DI_TIPO_VIA_TRANSP||' -> '||NEW.DI_TIPO_VIA_TRANSP;
        END
    IF(NEW.DI_VALOR_AFRMM <> OLD.DI_VALOR_AFRMM) THEN
        BEGIN               
            HISTORICO = HISTORICO||' DI.Vr.Afrmm:'||OLD.DI_VALOR_AFRMM||' -> '||NEW.DI_VALOR_AFRMM;
        END
    IF(NEW.DI_TIPO_INTERMEDIO <> OLD.DI_TIPO_INTERMEDIO) THEN
        BEGIN               
            HISTORICO = HISTORICO||' DI.Tp.Inter:'||OLD.DI_TIPO_INTERMEDIO||' -> '||NEW.DI_TIPO_INTERMEDIO;
        END
    IF(NEW.DI_CNPJ_INTERMEDIO <> OLD.DI_CNPJ_INTERMEDIO) THEN
        BEGIN               
            HISTORICO = HISTORICO||' DI.Cnpj.Inter:'||OLD.DI_CNPJ_INTERMEDIO||' -> '||NEW.DI_CNPJ_INTERMEDIO;
        END
    IF(NEW.DI_UF_INTERMEDIO <> OLD.DI_UF_INTERMEDIO) THEN
        BEGIN               
            HISTORICO = HISTORICO||' DI.UF.Inter:'||OLD.DI_UF_INTERMEDIO||' -> '||NEW.DI_UF_INTERMEDIO;
        END
    IF(NEW.DI_NUMERO_DRAWBACK <> OLD.DI_NUMERO_DRAWBACK) THEN
        BEGIN               
            HISTORICO = HISTORICO||' DI.Num.Drawbck:'||OLD.DI_NUMERO_DRAWBACK||' -> '||NEW.DI_NUMERO_DRAWBACK;
        END
    IF(NEW.CONTA_CONTABIL <> OLD.CONTA_CONTABIL) THEN
        BEGIN                            
            HISTORICO = HISTORICO||' Conta Contab:'||OLD.CONTA_CONTABIL||' -> '||NEW.CONTA_CONTABIL;
        END               
    IF(NEW.CCUSTO <> OLD.CCUSTO) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' C.Custo:'||OLD.CCUSTO||' -> '||NEW.CCUSTO;
        END                    
    IF(NEW.ENQUADRAMENTO_IPI <> OLD.ENQUADRAMENTO_IPI) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' Enqrd.IPI:'||OLD.ENQUADRAMENTO_IPI||' -> '||NEW.ENQUADRAMENTO_IPI;
        END                     
    IF(NEW.STATUS_REVISAO <> OLD.STATUS_REVISAO) THEN
        BEGIN                                 
            HISTORICO = HISTORICO||' Status.Rev:'||OLD.STATUS_REVISAO||' -> '||NEW.STATUS_REVISAO;
        END
    IF(NEW.VALOR_FRETE_RATEADO <> OLD.VALOR_FRETE_RATEADO) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Vr.Frete.Rt:'||OLD.VALOR_FRETE_RATEADO||' -> '||NEW.VALOR_FRETE_RATEADO;
        END
    IF(NEW.QUANTIDADE_ALTERNATIVA <> OLD.QUANTIDADE_ALTERNATIVA) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Qtd. Alter:'||OLD.QUANTIDADE_ALTERNATIVA||' -> '||NEW.QUANTIDADE_ALTERNATIVA;
        END                       
    IF(NEW.UM_ALTERNATIVA <> OLD.UM_ALTERNATIVA) THEN
        BEGIN                               
            HISTORICO = HISTORICO||' UM.Alter:'||OLD.UM_ALTERNATIVA||' -> '||NEW.UM_ALTERNATIVA;
        END                  
    IF(NEW.VALOR_ALTERNATIVO <> OLD.VALOR_ALTERNATIVO) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Vr.Alter:'||OLD.VALOR_ALTERNATIVO||' -> '||NEW.VALOR_ALTERNATIVO;
        END                       
    IF(NEW.CUSTO_FRETE_RATEADO <> OLD.CUSTO_FRETE_RATEADO) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Cst.Frete.Rt:'||OLD.CUSTO_FRETE_RATEADO||' -> '||NEW.CUSTO_FRETE_RATEADO;
        END                        
    IF(NEW.ESTOQUE_ID <> OLD.ESTOQUE_ID) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Estoq.ID:'||OLD.ESTOQUE_ID||' -> '||NEW.ESTOQUE_ID;
        END                       
    IF(NEW.MARGEM_ICMS_ST <> OLD.MARGEM_ICMS_ST) THEN
        BEGIN                                    
            HISTORICO = HISTORICO||' Mrg.ICMS.St:'||OLD.MARGEM_ICMS_ST||' -> '||NEW.MARGEM_ICMS_ST;
        END                       
    IF(NEW.REDUCAO_BASE_PISCOF <> OLD.REDUCAO_BASE_PISCOF) THEN
        BEGIN               
            HISTORICO = HISTORICO||' Red.Bs.PisCof:'||OLD.REDUCAO_BASE_PISCOF||' -> '||NEW.REDUCAO_BASE_PISCOF;
        END
    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'Item:'||NEW.SEQUENCIA||' alterado. '||HISTORICO;
        HISTORICO = FN_ELIPSES(HISTORICO,500);
        EXECUTE PROCEDURE SPI_HISTORICO('TBNFE', NEW.NFE_CONTROLE, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_CLIENTE_NFE_ITEM (
    CONTROLE_1 integer)
returns (
    CFOP_CODIGO char(5),
    OPERACAO_CODIGO char(3),
    PRODUTO_CODIGO integer,
    PRODUTO varchar(110),
    QUANTIDADE numeric(10,4),
    VALOR_UNITARIO numeric(10,4),
    NFS integer)
as
BEGIN
FOR Select CFOP_CODIGO,OPERACAO_CODIGO,PRODUTO_CODIGO,
           PRODUTO_DESCRICAO||'/'||PRODUTO_UNIDADEMEDIDA2 Produto,
           Cast(QUANTIDADE as Numeric(15,4)) Quantidade,
           Cast(VALOR_UNITARIO as Numeric(15,4)) Valor_Unitario,
           NFS
From TbNfE_Item
Where NFE_CONTROLE = :Controle_1
INTO
   :CFOP_CODIGO,
   :OPERACAO_CODIGO,
   :PRODUTO_CODIGO,
   :PRODUTO,
   :QUANTIDADE,
   :VALOR_UNITARIO,
   :NFS
DO SUSPEND;
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_FORTES_NFE (
    ESTABELECIMENTO integer,
    DATA_INICIAL date,
    DATA_FINAL date)
returns (
    CONTEUDO varchar(1000))
as
declare variable CONT1 varchar(1000);
declare variable CONT2 varchar(1000);
declare variable CONTADOR integer;
declare variable NFE_ID integer;
begin

  CONTADOR = 1;
  Conteudo = 'CAB'||
             '|'||'71'|| /* VERSAO */
             '|GCWeb'||
             '|'||EXTRACT(YEAR FROM CURRENT_DATE)||LPAD(EXTRACT(MONTH FROM CURRENT_DATE),2,'0')||LPAD(EXTRACT(DAY FROM CURRENT_DATE),2,'0')||
             '|'||COALESCE((SELECT VALOR_EXT FROM TBCONTROLE_N WHERE ID = 133),'')||  /* GRUPO EMPRESARIAL */
             '|'||EXTRACT(YEAR FROM DATA_INICIAL)||LPAD(EXTRACT(MONTH FROM DATA_INICIAL),2,'0')||LPAD(EXTRACT(DAY FROM DATA_INICIAL),2,'0')||
             '|'||EXTRACT(YEAR FROM DATA_FINAL)||LPAD(EXTRACT(MONTH FROM DATA_FINAL),2,'0')||LPAD(EXTRACT(DAY FROM DATA_FINAL),2,'0')||
             '|ENTRADAS COM PRODUTOS'||
             '|N';
  SUSPEND;

/*
        SELECT
        'PAR'||
        '|'||Empresa_Codigo||
        '|'||RazaoSocial||
        '|'||UF||
        '|'||Cnpj||
        '|'||IE||
        '|'||coalesce(Im,'')||
        '|N||||N||N|N|' ||
        '|'||Endereco||
        '|'||Numero||
        '|'||coalesce(Complemento,'')||
        '|01|'||Bairro||
        '|'||Cep||
        '|'||FN_LPAD(Codigo_Ibge,5,'0')||
        '|||||||'||
        IIF(UF<>'EX','1058',FN_LPAD(Codigo_Pais,4,'0'))
        FROM (
                SELECT 
                DISTINCT 
                IIF((A.CNPJ = '00000000000000' or A.CNPJ = '') and (A.UF <> 'EX'), B.EMPRESA_CNPJ, B.EMPRESA_CODIGO) as EMPRESA_CODIGO,
                B.EMPRESA_CNPJ AS CNPJ, 
                A.IE, 
                B.SUFRAMA,
                A.COMPLEMENTO, 
                A.IM,
                (SELECT First 1 E.PAIS_CODIGO FROM TBCIDADE E WHERE MAX(B.EMPRESA_CIDADE) = E.DESCRICAO AND MAX(B.EMPRESA_UF) = E.UF) Codigo_Pais,
                (SELECT First 1 E.CODIGOIBGE  FROM TBCIDADE E WHERE MAX(B.EMPRESA_CIDADE) = E.DESCRICAO AND MAX(B.EMPRESA_UF) = E.UF) Codigo_Ibge,
                MAX(B.EMPRESA_UF) AS UF,
                MAX(B.EMPRESA_RAZAOSOCIAL) AS RAZAOSOCIAL,
                MAX(B.EMPRESA_BAIRRO) AS BAIRRO,
                MAX(B.EMPRESA_ENDERECO) AS ENDERECO,
                MAX(B.EMPRESA_NUMERO) AS NUMERO,
                MAX(B.EMPRESA_CEP) AS CEP
                
                FROM TbNfs B, TBEMPRESA A
                
                WHERE  B.EMPRESA_CODIGO = A.CODIGO
                  AND B.sped = '1'
                  AND B.NATUREZA = 1
                  AND B.situacao = 2
                  AND B.estabelecimento_codigo = :ESTABELECIMENTO
                  and(Extract(Year  from B.Data_Emissao) = :ANO)
                  and(Extract(Month from B.Data_Emissao) = :MES)
                
                Group By
                A.CNPJ,A.UF,B.EMPRESA_CNPJ,B.EMPRESA_CODIGO,
                B.EMPRESA_CNPJ,A.IE,B.SUFRAMA,A.COMPLEMENTO,A.IM
                
                Order By 1
             )

        SELECT
        'PRO'||
        '|'||FN_LPAD(CODIGO,8,'0')||
        '|'||FN_RPAD(DESCRICAO,60,' ')||
        '|'||FN_LPAD(CODIGO,8,'0')||
        '|'||NCM2||
        '|'||UNIDADEMEDIDA_SIGLA2||
        '|'||IIF( UNID = '1' , 'LT'  ,
             IIF( UNID = '2' , 'MT'  ,
             IIF( UNID = '3' , 'M3'  ,
             IIF( UNID = '4' , 'M2'  ,
             IIF( UNID = '5' , 'PR'  ,
             IIF( UNID = '6' , 'KG'  ,
             IIF( UNID = '7' , 'KW'  ,
             IIF( UNID = '8' , 'UN'  , '')))))))) ||
        '|||001|00||' AS PRO,
        
        'OUM'||
        '|'||FN_LPAD(CODIGO,8,'0')||
        '|'||UNIDADEMEDIDA_SIGLA||
        '|1.000' AS OUM
        FROM (
                SELECT DISTINCT
                       C.CODIGO,
                       C.DESCRICAO,
                       C.UNIDADEMEDIDA_SIGLA2,
                       C.NCM_CODIGO NCM2,
                      (SELECT FIRST 1 E.UNID_DIEF FROM TBFAMILIA_FICHA E
                        WHERE C.FAMILIA_CODIGO = E.FAMILIA_CODIGO
                          AND E.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO) UNID
                FROM TBNFS_ITEM A, TBNFS B, TBPRODUTO C
                WHERE A.NFS_CONTROLE = B.CONTROLE
                  AND C.CODIGO = A.PRODUTO_CODIGO
                  AND B.SPED = '1'
                
                  AND ((B.NATUREZA = 1 AND B.SITUACAO = 2) OR
                       (B.NATUREZA = 2 AND B.SITUACAO = 1 AND B.EMPRESA_UF <> 'EX'))
                
                  AND B.ESPECIE IN('01','1B','04','55')
                  AND B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
                  AND   (EXTRACT(YEAR  FROM B.DATA_EMISSAO) = :ANO)
                  AND   (EXTRACT(MONTH FROM B.DATA_EMISSAO) = :MES)
        
                ORDER BY 1
             )
   */

     /* EMPRESAS */
        FOR
        SELECT
        'PAR'||
        '|'||EMPRESA_CODIGO||
        '|'||RAZAOSOCIAL||
        '|'||UF||
        '|'||CNPJ||
        '|'||IE||
        '|'||COALESCE(IM,'')||
        '|N'||
        '|N'||
        '|N'||
        '|N'||
        '|N'||
        '|N'||
        '|N'||
        '|N'||
        '|'|| -- tipo logradouro
        '|'||ENDERECO||
        '|'||NUMERO||
        '|'||COALESCE(COMPLEMENTO,'')||
        '|01'|| -- tipo de bairro
        '|'||BAIRRO||
        '|'||CEP||
        '|'||FN_LPAD(CODIGO_IBGE,5,'0')||
        '|'||  -- ddd
        '|'||  -- telefone
        '|N'|| -- suframa
        '|'||  -- subst. icms
        '|'||  -- conta remetente
        '|'||  -- conta prestador
        '|'||IIF(UF<>'EX','1058',FN_LPAD(CODIGO_PAIS,4,'0'))||
        '|'||IIF(UF<>'EX','N','S')||
        '|N'||
        '|'||EMAIL

        FROM (
                SELECT DISTINCT
                CAST(B.EMPRESA_CODIGO AS VARCHAR(14)) AS EMPRESA_CODIGO, 
                A.UF, A.CNPJ, A.IE, A.RAZAOSOCIAL, 
                A.COMPLEMENTO, A.BAIRRO, A.ENDERECO, A.NUMERO, A.CEP, A.IM,
                (SELECT E.PAIS_CODIGO FROM TBCIDADE E WHERE 
                  A.CIDADE = E.DESCRICAO AND A.UF = E.UF) CODIGO_PAIS,
                (SELECT E.CODIGOIBGE  FROM TBCIDADE E WHERE 
                  A.CIDADE = E.DESCRICAO AND A.UF = E.UF) CODIGO_IBGE,
                  A.EMAIL
                FROM TBNFE B, TBEMPRESA A
                WHERE B.EMPRESA_CODIGO = A.CODIGO
                  AND B.SPED = '1'
                  AND ((B.NATUREZA = 1 AND B.SITUACAO = 2) OR
                       (B.NATUREZA = 2 AND B.SITUACAO = 1))
                  AND B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
                  AND B.DATA_FISCAL BETWEEN :DATA_INICIAL AND :DATA_FINAL
                ORDER BY 1
        
             )
        INTO :CONT1
        DO BEGIN
           CONTADOR = CONTADOR + 1;
           CONTEUDO = CONT1;
           SUSPEND;
           END

     /* GRUPOS / FAMILIAS */
          FOR
            SELECT
            'GRP'||
            '|'||FN_LPAD(CODIGO,8,'0')||
            '|'||DESCRICAO||
            '|'||IIF( SIT_SPED = '00' , '1'  ,
                 IIF( SIT_SPED = '01' , '2'  ,
                 IIF( SIT_SPED = '02' , '5'  ,
                 IIF( SIT_SPED = '03' , '3'  ,
                 IIF( SIT_SPED = '04' , '4'  ,
                 IIF( SIT_SPED = '05' , '7'  ,
                 IIF( SIT_SPED = '06' , '7'  ,
                 IIF( SIT_SPED = '07' , '7'  ,
                 IIF( SIT_SPED = '08' , '7'  ,
                 IIF( SIT_SPED = '09' , '7'  ,
                 IIF( SIT_SPED = '10' , '7'  ,
                 IIF( SIT_SPED = '99' , '7'  , '')))))))))))) ||
            '|'||SIT_SPED||
            '|'
            FROM (
                    SELECT DISTINCT
                           F.CODIGO,
                           F.DESCRICAO,
                           COALESCE((SELECT FIRST 1 E.NG_SITUACAO FROM TBFAMILIA_FICHA E
                            WHERE C.FAMILIA_CODIGO = E.FAMILIA_CODIGO
                              AND E.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO),'99') SIT_SPED
                    FROM TBNFE_ITEM A, TBNFE B, TBPRODUTO C, TBFAMILIA F
                    WHERE A.NFE_CONTROLE = B.CONTROLE
                      AND C.CODIGO = A.PRODUTO_CODIGO
                      AND B.SPED = '1'
                      AND ((B.NATUREZA = 1 AND B.SITUACAO = 2) OR
                           (B.NATUREZA = 2 AND B.SITUACAO = 1 AND B.EMPRESA_UF <> 'EX'))
                      AND B.ESPECIE IN('01','1B','04','55')
                      AND C.FAMILIA_INVENTARIO = F.CODIGO
                      AND B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
                      AND B.DATA_FISCAL BETWEEN :DATA_INICIAL AND :DATA_FINAL
                 )
        INTO :CONT1 
        DO BEGIN
           CONTADOR = CONTADOR + 1;
           CONTEUDO = CONT1;
           SUSPEND;
           END


     /* UNIDADES DE MEDIDA */
          FOR
            SELECT
            'UND'||
            '|'||UM||
            '|'||FN_RPAD(DESCRICAO,60,' ')
            FROM (
                    SELECT DISTINCT
                           C.UNIDADEMEDIDA_SIGLA2 AS UM,
                           U.DESCRICAO
                    FROM TBNFE_ITEM A, TBNFE B, TBPRODUTO C, TbUnidadeMedida U
                    WHERE A.NFE_CONTROLE = B.CONTROLE
                      AND C.CODIGO = A.PRODUTO_CODIGO
                      AND C.UNIDADEMEDIDA_SIGLA2 = U.SIGLA
                      AND B.SPED = '1'
                      AND ((B.NATUREZA = 1 AND B.SITUACAO = 2) OR
                           (B.NATUREZA = 2 AND B.SITUACAO = 1 AND B.EMPRESA_UF <> 'EX'))
                      AND B.ESPECIE IN('01','1B','04','55')
                      AND B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
                      AND B.DATA_FISCAL BETWEEN :DATA_INICIAL AND :DATA_FINAL
                 )
        INTO :CONT1
        DO BEGIN
           CONTADOR = CONTADOR + 1;
           CONTEUDO = CONT1;
           SUSPEND;
           END




     /* PRODUTO */
          FOR
            SELECT
            'PRO'||
            '|'||FN_LPAD(CODIGO,8,'0')||
            '|'||DESCRICAO||
            '|'||FN_LPAD(CODIGO,8,'0')||
            '|'||NCM||
            '|'||UM||
            '|'||UNID_DIEF||
            '|'||
            '|'||
            '|'||FN_LPAD(FAMILIA,8,'0')||
            '|'||
            '|'||
            '|'||
            '|'||
            '|'||CST_ORIGEM_PADRAO||CST_ICMS_PADRAO||
            '|'||'49'||
            '|'||CST_PISCOFINS_PADRAO||
            '|'||CST_PISCOFINS_PADRAO||
            '|'||
            '|'||
            '|'||
            '|'||
            '|'||
            '|'||'N'||
            '|'  AS PRO,

            'OUM'||
            '|'||FN_LPAD(CODIGO,8,'0')||
            '|'||UM||
            '|'||'1.000'||
            '|' -- COD BARRAS
                   AS OUM

            FROM (
                    SELECT DISTINCT
                           C.CODIGO,
                           C.DESCRICAO,
                           C.UNIDADEMEDIDA_SIGLA2 AS UM,
                           C.NCM_CODIGO AS NCM,
                           C.FAMILIA_INVENTARIO AS FAMILIA,

                          COALESCE((SELECT FIRST 1 E.UNID_DIEF FROM TBFAMILIA_FICHA E
                            WHERE C.FAMILIA_CODIGO = E.FAMILIA_CODIGO
                              AND E.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO),'8') UNID_DIEF,
                          COALESCE((SELECT FIRST 1 E.CST_ORIGEM FROM TBFAMILIA_FICHA E
                            WHERE C.FAMILIA_CODIGO = E.FAMILIA_CODIGO
                              AND E.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO),'0') CST_ORIGEM_PADRAO,
                          COALESCE((SELECT FIRST 1 E.CST FROM TBFAMILIA_FICHA E
                            WHERE C.FAMILIA_CODIGO = E.FAMILIA_CODIGO
                              AND E.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO),'90') CST_ICMS_PADRAO,
                          COALESCE((SELECT FIRST 1 E.CST_PISCOF FROM TBFAMILIA_FICHA E
                            WHERE C.FAMILIA_CODIGO = E.FAMILIA_CODIGO
                              AND E.ESTABELECIMENTO_CODIGO = B.ESTABELECIMENTO_CODIGO),'98') CST_PISCOFINS_PADRAO

                    FROM TBNFE_ITEM A, TBNFE B, TBPRODUTO C
                    WHERE A.NFE_CONTROLE = B.CONTROLE
                      AND C.CODIGO = A.PRODUTO_CODIGO
                      AND B.SPED = '1'
                      AND ((B.NATUREZA = 1 AND B.SITUACAO = 2) OR
                           (B.NATUREZA = 2 AND B.SITUACAO = 1 AND B.EMPRESA_UF <> 'EX'))
                      AND B.ESPECIE IN('01','1B','04','55')
                      AND B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
                      AND B.DATA_FISCAL BETWEEN :DATA_INICIAL AND :DATA_FINAL
                    ORDER BY 1
                 )
        INTO :CONT1, :CONT2
        DO BEGIN
           CONTADOR = CONTADOR + 1;
           CONTEUDO = CONT1;
           SUSPEND;

           CONTADOR = CONTADOR + 1;
           CONTEUDO = CONT2;
           SUSPEND;
           END


        /* NOTAS DE ENTRADA */
            FOR
                SELECT
                'NFM'||
                '|'||LPAD(ESTABELECIMENTO_ID,4,'0')||
                '|'||'E'||
                '|'||DESCRICAO_ESPECIE||
                '|'||IIF(NATUREZA=1,'S','N')||
                '|'|| --AIDF
                '|'||SERIE||
                '|'||
                '|'||LPAD(NUMERO_NOTAFISCAL,9,'0')||
                '|'||
                '|'||
                '|'||EXTRACT(YEAR FROM DATA_EMISSAO)||LPAD(EXTRACT(MONTH FROM DATA_EMISSAO),2,'0')||LPAD(EXTRACT(DAY FROM DATA_EMISSAO),2,'0')||
                '|'||-- situação do documento, informado só pra saída   IIF(SITUACAO=3,'1','0')||
                '|'||EXTRACT(YEAR FROM DATA_FISCAL)||LPAD(EXTRACT(MONTH FROM DATA_FISCAL),2,'0')||LPAD(EXTRACT(DAY FROM DATA_FISCAL),2,'0')||
                '|'||EMPRESA_ID||
                '|'||'N'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||

                '|'||CAST(VALOR_PRODUTOS AS NUMERIC(15,2))||
                '|'||CAST(VALOR_FRETE AS NUMERIC(15,2))||
                '|'||CAST(VALOR_SEGURO AS NUMERIC(15,2))||
                '|'||CAST(VALOR_OUTROSCUSTOS AS NUMERIC(15,2))||
                '|'||0.00|| /* icms importação */
                '|'||0.00|| /* icms diferido */
                '|'||CAST(VALOR_IPI AS NUMERIC(15,2))||
                '|'||0.00||/* icms subst retido */
                '|'||CAST(VALOR_ISSQN AS NUMERIC(15,2))||
                '|'||CAST(VALOR_DESCONTO AS NUMERIC(15,2))||
                '|'||CAST(VALOR_TOTAL_NF AS NUMERIC(15,2))||
                '|'||LPAD(ITENS,10,'0')||
                '|'||'N'||
                '|'||'N'||
                '|'||'N'||
                '|'||
                '|'||
                '|'||
                '|'||'N'||
                '|'||
                '|'||
                '|'||

                '|'||'N'||--FRETE||
                '|'||'N'||--PAGAMENTO||
                '|'||
                '|'||

                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||CAST(RETENCAO_VALOR_COFINS AS NUMERIC(15,2))||
                '|'||CAST(RETENCAO_VALOR_PIS AS NUMERIC(15,2))||
                '|'||CAST(RETENCAO_VALOR_CSLL AS NUMERIC(15,2))||
                '|'||
                '|'||'N'||
                '|'||
                '|'||
                '|'||CHAVE_ACESSO||
                '|'||
                '|'||

                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'

                ,NFE_ID
                
                FROM (
                        SELECT B.CONTROLE NFE_ID,
                               B.ESTABELECIMENTO_CODIGO AS ESTABELECIMENTO_ID,
                               B.EMPRESA_CODIGO AS EMPRESA_ID,
                               B.ESPECIE,
                               B.MODELO,
                               B.SERIE,
                               B.NUMERO_NOTAFISCAL,
                               B.CHAVE_ACESSO,
                               B.DATA_EMISSAO,
                               B.DATA_FISCAL,
                               B.NATUREZA,
                               B.SITUACAO,
                               MAX((SELECT MAX(E.XML) FROM TBNF_LOTE E WHERE B.CONTROLE = E.NFE_CONTROLE AND E.NFS_CONTROLE = 0 AND B.ESTABELECIMENTO_CODIGO = E.ESTABELECIMENTO_CODIGO)) XML,
                              (SELECT FIRST 1 D.FRETE FROM TBNFE_TRANSPORTADORA D WHERE  D.NFE_CONTROLE = B.CONTROLE) AS FRETE,
                              (SELECT FIRST 1 G.DESCRICAO_RESUMIDA FROM TBFISCAL_ESPECIE G WHERE B.MODELO = G.CODIGO_DIEF AND B.ESPECIE = G.CODIGO_SPED) DESCRICAO_ESPECIE,
                               COALESCE(IIF((SELECT CAST(COUNT(P.PARCELA) AS INTEGER) FROM TBNFE_PARCELAMENTO P WHERE B.CONTROLE = P.NFE_CONTROLE) > 0, '1' /*PRAZO*/, '2'/*OUTROS*/),'2') AS PAGAMENTO,
                        
                               COUNT(A.CONTROLE) AS ITENS,
                               SUM(A.VALOR_DESCONTO) AS VALOR_DESCONTO,
                               SUM(A.VALOR_PEDAGIO) AS VALOR_PEDAGIO,
                               SUM(A.VALOR_FRETE) AS VALOR_FRETE,
                               SUM(A.VALOR_SEGURO) AS VALOR_SEGURO,
                               SUM(A.FISCAL_BASECALCULO_ICMS_ST) basecalculo_icms_subst,
                               SUM(A.FISCAL_VALOR_ICMS_ST) valor_icms_subst,
                               SUM(A.VALOR_TOTAL) VALOR_PRODUTOS,
                               SUM(A.VALOR_CONTABIL) VALOR_CONTABIL,
                               SUM(A.VALOR_BASECALCULO_ICMS) BASECALCULO_ICMS,
                               SUM(A.FISCAL_VALOR_ICMS) VALOR_ICMS,
                               SUM(A.FISCAL_VALOR_IPI) VALOR_IPI,
                               SUM(A.FISCAL_VALOR_PIS) VALOR_PIS,
                               SUM(A.FISCAL_VALOR_COFINS) VALOR_COFINS,
                               SUM(A.FISCAL_BASECALCULO_IPI) AS BASECALCULO_IPI,
                               SUM(A.VALOR_ACRESCIMO) AS VALOR_ACRESCIMO,
                        
                               C.VALOR_OUTROSCUSTOS,
                               C.VALOR_TOTAL_NF,
                               C.VALOR_ISSQN,
                               C.RETENCAO_VALOR_ISSQN,
                               C.RETENCAO_VALOR_COFINS,
                               C.RETENCAO_VALOR_PIS,
                               C.RETENCAO_VALOR_CSLL,
                               C.RETENCAO_VALOR_IRRF,
                               C.RETENCAO_VALOR_INSS
                        
                        FROM TBNFE_ITEM A, TBNFE B, TBNFE_TOTAIS C
                        WHERE  A.NFE_CONTROLE = B.CONTROLE
                          AND  C.NFE_CONTROLE = B.CONTROLE
                          AND  B.SPED = '1'
                          AND ((B.NATUREZA = 1 AND B.SITUACAO > 1) OR (B.NATUREZA = 2 AND B.SITUACAO = 1))
                          AND  B.ESPECIE IN('01','1B','55')
                          AND  B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
                          AND  B.DATA_FISCAL BETWEEN :DATA_INICIAL AND :DATA_FINAL

                        GROUP BY
                        B.CONTROLE, B.ESTABELECIMENTO_CODIGO, B.EMPRESA_CODIGO, B.ESPECIE,
                        B.SERIE, B.NUMERO_NOTAFISCAL, B.CHAVE_ACESSO, B.DATA_EMISSAO,
                        B.DATA_FISCAL, B.NATUREZA, B.SITUACAO, C.VALOR_OUTROSCUSTOS,
                        C.VALOR_TOTAL_NF, C.VALOR_ISSQN, B.MODELO, C.RETENCAO_VALOR_ISSQN,
                        C.RETENCAO_VALOR_COFINS, C.RETENCAO_VALOR_PIS, C.RETENCAO_VALOR_CSLL,
                        C.RETENCAO_VALOR_IRRF, C.RETENCAO_VALOR_INSS
                )
        INTO :CONT1, :NFE_ID
        DO BEGIN
           CONTADOR = CONTADOR + 1;
           CONTEUDO = CONT1;
           SUSPEND;







       /* ITENS DAS NOTAS FISCAIS DE ENTRADA */
             FOR
                SELECT
                'PNM'||
                '|'||LPAD(PRODUTO_CODIGO,8,'0')||
                '|'||REPLACE(FISCAL_CFOP_CODIGO,'.','')||
                '|'||
                '|'||FISCAL_TRIBUTACAO_ORIGEM||
                '|'||LPAD(FISCAL_TRIBUTACAO_ICMS,2,'0')||
                '|'||PRODUTO_UNIDADEMEDIDA2||
                '|'||CAST(QUANTIDADE AS NUMERIC(15,2))||
                '|'||CAST(VALOR_TOTAL AS NUMERIC(15,2))||
                '|'||CAST(FISCAL_VALOR_IPI AS NUMERIC(15,2))||
                '|'||IIF(FISCAL_TRIBUTACAO_ICMS =  0, '1',
                     IIF(FISCAL_TRIBUTACAO_ICMS = 20, '1',
                     IIF(FISCAL_TRIBUTACAO_ICMS = 30, '2',
                     IIF(FISCAL_TRIBUTACAO_ICMS = 40, '2',
                     IIF(FISCAL_TRIBUTACAO_ICMS = 41, '2','3')))))||
                '|'||CAST(BASECALCULO_ICMS_R AS NUMERIC(15,2))||
                '|'||CAST(FISCAL_PERCENTUAL_ICMS AS NUMERIC(15,2))||
                '|'||
                '|'||
                '|'||'0'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||

                '|'||IIF(FISCAL_TRIBUTACAO_IPI ='00','1',
                     IIF(FISCAL_TRIBUTACAO_IPI ='01','1',
                     IIF(FISCAL_TRIBUTACAO_IPI ='02','2',
                     IIF(FISCAL_TRIBUTACAO_IPI ='03','2',
                     IIF(FISCAL_TRIBUTACAO_IPI ='04','3',
                     IIF(FISCAL_TRIBUTACAO_IPI ='05','3',
                     IIF(FISCAL_TRIBUTACAO_IPI ='49','3','3')))))))||
                '|'||CAST(FISCAL_BASECALCULO_IPI AS NUMERIC(15,2))||
                '|'||CAST(FISCAL_PERCENTUAL_IPI AS NUMERIC(15,2))||
                '|'||CAST(FISCAL_VALOR_IPI AS NUMERIC(15,2))||
                '|'||FISCAL_TRIBUTACAO_IPI||

                '|'|| -- FISCAL_TRIBUTACAO_COFINS||
                '|'|| -- FISCAL_TRIBUTACAO_PIS||

                '|'||CAST(FISCAL_BASECALCULO_COFINS AS NUMERIC(15,2))||
                '|'||CAST(FISCAL_BASECALCULO_PIS AS NUMERIC(15,2))||

                '|'||CAST(VALOR_FRETE AS NUMERIC(15,2))||
                '|'||CAST(VALOR_SEGURO AS NUMERIC(15,2))||
                '|'||CAST(VALOR_DESCONTO AS NUMERIC(15,2))||
                '|'||CAST(VALOR_TOTAL+VALOR_FRETE+VALOR_SEGURO-VALOR_DESCONTO AS NUMERIC(15,2))||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||'1'||
                '|'||
                '|'||
                '|'||
                '|'||'1'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||'0'
                FROM (
                        SELECT B.SEQUENCIA,
                               B.PRODUTO_CODIGO,
                               B.FISCAL_CFOP_CODIGO,
                               B.FISCAL_TRIBUTACAO_ORIGEM, 
                               B.PRODUTO_UNIDADEMEDIDA2,
                               B.QUANTIDADE,
                               B.VALOR_TOTAL, 
                               B.FISCAL_TRIBUTACAO_ICMS,
                               B.VALOR_BASECALCULO_ICMS AS BASECALCULO_ICMS_R,
                               B.FISCAL_PERCENTUAL_ICMS,
                               B.FISCAL_TRIBUTACAO_IPI,
                               B.FISCAL_BASECALCULO_IPI,
                               B.FISCAL_PERCENTUAL_IPI,
                               B.FISCAL_VALOR_IPI, 
                               B.FISCAL_TRIBUTACAO_COFINS,
                               B.FISCAL_BASECALCULO_COFINS,
                               B.FISCAL_TRIBUTACAO_PIS,
                               B.FISCAL_BASECALCULO_PIS,
                               B.VALOR_FRETE,
                               B.VALOR_SEGURO,
                               B.VALOR_DESCONTO,
                               B.VALOR_CONTABIL 
                        
                        FROM TBNFE_ITEM B
                        WHERE B.NFE_CONTROLE = :NFE_ID
                        ORDER BY 1
                 )
                INTO :CONT1
                DO BEGIN
                   CONTADOR = CONTADOR + 1;
                   CONTEUDO = CONT1;
                   SUSPEND;
                   END


                 /* TOTALIZADORES DA NF POR CFOP */
                  FOR
                    SELECT
                    'INM'||
                    '|'||CAST(VALOR AS NUMERIC(15,2))||
                    '|'||EMPRESA_UF||
                    '|'||REPLACE(FISCAL_CFOP_CODIGO,'.','')||
                    '|'||
                    '|'||CAST(BASECALCULO_ICMS_R AS NUMERIC(15,2))||
                    '|'||CAST(FISCAL_PERCENTUAL_ICMS AS NUMERIC(15,2))||
                    '|'||CAST(VALOR_ICMS AS NUMERIC(15,2))||
                    '|'||CAST(iICMS AS NUMERIC(15,2))||
                    '|'||CAST(oICMS AS NUMERIC(15,2))||
                    
                    '|'||CAST(BcIPI AS NUMERIC(15,2))||
                    '|'||CAST(VALOR_IPI AS NUMERIC(15,2))||
                    '|'||CAST(IIPI AS NUMERIC(15,2))||
                    '|'||CAST(oIPI AS NUMERIC(15,2))||
                    '|'||
                    '|'||
                    '|'||
                    '|'
                    
                    FROM (
                            SELECT 
                            A.FISCAL_CFOP_CODIGO,
                            E.EMPRESA_UF,
                            A.FISCAL_Percentual_Icms,
                            A.FISCAL_Percentual_Ipi,
                            A.FISCAL_Tributacao_Icms,
                            A.FISCAL_Tributacao_Ipi,
                            SUM(A.VALOR_TOTAL) VALOR,
                            SUM(A.FISCAL_VALOR_IPI) VALOR_IPI,
                            SUM(A.FISCAL_VALOR_ICMS) VALOR_ICMS,
                            SUM(A.FISCAL_BASECALCULO_ICMS) BCICMS,
                            SUM(A.FISCAL_BASECALCULO_IPI) BcIPI, 
                            SUM(A.FISCAL_ISENTAS_ICMS) IICMS,
                            SUM(A.FISCAL_ISENTAS_IPI) IIPI, 
                            SUM(A.FISCAL_OUTRAS_ICMS) OICMS,
                            SUM(A.FISCAL_OUTRAS_IPI) OIPI,
                            SUM(A.VALOR_BASECALCULO_ICMS) BASECALCULO_ICMS_R
                            
                            FROM TBNFE_ITEM A, TBNFE E
                            WHERE A.NFE_CONTROLE = E.CONTROLE
                              AND A.NFE_CONTROLE = :NFE_ID
                            
                            Group By 
                            A.FISCAL_CFOP_CODIGO,
                            E.EMPRESA_UF,
                            A.FISCAL_PERCENTUAL_ICMS,
                            A.FISCAL_PERCENTUAL_IPI, 
                            A.FISCAL_TRIBUTACAO_ICMS,
                            A.FISCAL_TRIBUTACAO_IPI
                    )
                INTO :CONT1
                DO BEGIN
                   CONTADOR = CONTADOR + 1;
                   CONTEUDO = CONT1;
                   SUSPEND;
                   END

       END


           /* FRETES */
             FOR
                SELECT
                'CTC'||
                '|'||LPAD(ESTABELECIMENTO_ID,4,'0')||
                '|'||'E'||
                '|'||DESCRICAO_ESPECIE||
                '|'||  
                '|'||SERIE||
                '|'||
                '|'||LPAD(NUMERO_NOTAFISCAL,9,'0')||
                '|'||
                '|'||EXTRACT(YEAR FROM DATA_EMISSAO)||LPAD(EXTRACT(MONTH FROM DATA_EMISSAO),2,'0')||LPAD(EXTRACT(DAY FROM DATA_EMISSAO),2,'0')||

                '|'||'0'|| -- Situação do Documento
                '|'||EXTRACT(YEAR FROM DATA_FISCAL)||LPAD(EXTRACT(MONTH FROM DATA_FISCAL),2,'0')||LPAD(EXTRACT(DAY FROM DATA_FISCAL),2,'0')||
                '|'||IIF(FRETE = 0, 'C',
                     IIF(FRETE = 1, 'F',
                     IIF(FRETE = 2, 'S',
                     IIF(FRETE = 3, 'S',
                     IIF(FRETE = 4, 'S',
                     IIF(FRETE = 9, 'S','S'))))))||
                '|'||EMPRESA_ID||
                '|'||
                '|'||REPLACE(FISCAL_CFOP_CODIGO,'.','')||
                '|'||CAST(VALOR_TOTAL_NF AS NUMERIC(15,2))||
                '|'||CAST(VALOR_BASECALCULO_ICMS AS NUMERIC(15,2))||
                '|'||CAST(FISCAL_PERCENTUAL_ICMS AS NUMERIC(15,2))||
                '|'||CAST(VALOR_ICMS AS NUMERIC(15,2))||

                '|'||CAST(VALOR_ISENTAS_ICMS AS NUMERIC(15,2))||
                '|'||CAST(VALOR_OUTRAS_ICMS  AS NUMERIC(15,2))||
                '|'||(SELECT UF FROM TBUF WHERE CODIGO_IBGE = SUBSTRING(CMUNINI FROM 1 FOR 2))||
                '|'||SUBSTRING(CMUNINI FROM 3 FOR 5)||
                '|'||(SELECT UF FROM TBUF WHERE CODIGO_IBGE = SUBSTRING(CMUNFIM FROM 1 FOR 2))||
                '|'||SUBSTRING(CMUNFIM FROM 3 FOR 5)||
                '|'||   -- DISTANCIA
                '|'||   -- QUANT. MERCADORIAS
                '|'||   -- UNID MEDIDA
                '|'||   -- FRETE CALCULADO

                '|'||   -- PLACA DO VEICULO
                '|'||   -- UF VEICULO
                '|'||   -- AIDF DO RMD
                '|'||   -- SERIE DO RMD
                '|'||   -- SUBSERIE DO RMD
                '|'||   -- NUMERO DO RMD
                '|'||'N'|| -- DIF ALIQUOTA (S/N)
                '|'||   -- BS CALC DIF ALIQUOTA
                '|'||   -- ALIQ ORIGEM
                '|'||   -- ALIQ INTERNA

                '|'||   -- RECEITA TRIBUTAVEL COFINS
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'||

                '|'||  -- CSL RETIDO NA FONTE
                '|'||
                '|'||
                '|'||'N'||
                '|'||FN_LPAD(FISCAL_TRIBUTACAO_ICMS,2,'0')|| -- CSTb ICMS
                '|'||IIF(DESCRICAO_ESPECIE='CTE',CHAVE_ACESSO,'')||
                '|'|| -- COD INF COMPLEMENTAR
                '|'||FISCAL_TRIBUTACAO_PIS||
                '|'||FISCAL_TRIBUTACAO_COFINS||
                '|'||

                '|'||IND_NAT_FRETE||
                '|'||
                '|'||
                '|'||
                '|'||
                '|'

                FROM (
                        SELECT B.CONTROLE NFE_ID,
                               B.ESTABELECIMENTO_CODIGO AS ESTABELECIMENTO_ID,
                               B.EMPRESA_CODIGO AS EMPRESA_ID,
                               B.ESPECIE,
                               B.MODELO,
                               B.SERIE,
                               B.NUMERO_NOTAFISCAL,
                               B.CHAVE_ACESSO,
                               B.DATA_EMISSAO,
                               B.DATA_FISCAL,
                               B.NATUREZA,
                               B.SITUACAO,
                               D.FRETE,
                               D.CMUNINI,
                               D.CMUNFIM,
                               D.IND_NAT_FRETE,
                              (SELECT FIRST 1 G.DESCRICAO_RESUMIDA FROM TBFISCAL_ESPECIE G WHERE B.MODELO = G.CODIGO_DIEF AND B.ESPECIE = G.CODIGO_SPED) DESCRICAO_ESPECIE,
                
                               A.FISCAL_CFOP_CODIGO,
                               A.FISCAL_PERCENTUAL_ICMS,
                               SUM(A.VALOR_DESCONTO) AS VALOR_DESCONTO,
                               SUM(A.VALOR_PEDAGIO) AS VALOR_PEDAGIO,
                               SUM(A.VALOR_FRETE) AS VALOR_FRETE,
                               SUM(A.VALOR_SEGURO) AS VALOR_SEGURO,
                               SUM(A.VALOR_TOTAL) VALOR_PRODUTOS,
                               SUM(A.VALOR_CONTABIL) VALOR_CONTABIL,
                               SUM(A.VALOR_BASECALCULO_ICMS) VALOR_BASECALCULO_ICMS,
                               SUM(A.FISCAL_VALOR_ICMS) VALOR_ICMS,
                               SUM(A.FISCAL_ISENTAS_ICMS) VALOR_ISENTAS_ICMS,
                               SUM(A.FISCAL_OUTRAS_ICMS) VALOR_OUTRAS_ICMS,
                               SUM(A.FISCAL_VALOR_IPI) VALOR_IPI,
                               SUM(A.FISCAL_VALOR_PIS) VALOR_PIS,
                               SUM(A.FISCAL_VALOR_COFINS) VALOR_COFINS,
                               SUM(A.VALOR_ACRESCIMO) AS VALOR_ACRESCIMO,
                               C.VALOR_TOTAL_NF,
                               A.FISCAL_TRIBUTACAO_ICMS,
                               A.FISCAL_TRIBUTACAO_PIS,
                               A.FISCAL_TRIBUTACAO_COFINS
                
                        FROM TBNFE_ITEM A, TBNFE B, TBNFE_TOTAIS C, TBNFE_TRANSPORTADORA D 
                        WHERE  A.NFE_CONTROLE = B.CONTROLE
                          AND  C.NFE_CONTROLE = B.CONTROLE
                          AND  D.NFE_CONTROLE = B.CONTROLE
                          AND  B.SPED = '1'
                          AND  B.ESPECIE IN('07','08','8B','09','10','11','26','27','57')
                          AND  B.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
                          AND B.DATA_FISCAL BETWEEN :DATA_INICIAL AND :DATA_FINAL

                        GROUP BY
                        B.CONTROLE, B.ESTABELECIMENTO_CODIGO, B.EMPRESA_CODIGO, B.ESPECIE,
                        B.SERIE, B.NUMERO_NOTAFISCAL, B.CHAVE_ACESSO, B.DATA_EMISSAO,
                        B.DATA_FISCAL, B.NATUREZA, B.SITUACAO, C.VALOR_OUTROSCUSTOS,
                        C.VALOR_TOTAL_NF, B.MODELO, A.FISCAL_CFOP_CODIGO, A.FISCAL_PERCENTUAL_ICMS,
                        D.FRETE, D.CMUNINI, D.CMUNFIM, D.IND_NAT_FRETE, A.FISCAL_TRIBUTACAO_PIS,
                        A.FISCAL_TRIBUTACAO_COFINS,A.FISCAL_TRIBUTACAO_ICMS
                )
                INTO :CONT1
                DO BEGIN
                   CONTADOR = CONTADOR + 1;
                   CONTEUDO = CONT1;
                   SUSPEND;
                   END

    CONTEUDO = 'TRA'||
               '|'||FN_LPAD(CONTADOR+1,10,'0');
    SUSPEND;

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFE_ITEM10 (
    CONTROLE_1 integer)
returns (
    NFE_CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    GRADE_CODIGO integer,
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    LOCALIZACAO_DESCRICAO varchar(20),
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    NFS integer,
    NFS_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    OC integer,
    OC_ITEM_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_ENTRADA date,
    SITUACAO integer,
    CONTROLE integer,
    VALOR_CUSTO numeric(10,5),
    PRODUTO_GRADE_CODIGO integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    DI varchar(12),
    DI_DATA_REGISTRO date,
    DI_DATA_DESEMBARACO date,
    DI_LOCAL_DESEMBARACO varchar(60),
    DI_UF_DESEMBARACO char(2),
    DI_CODIGO_EXPORTADOR varchar(60),
    DI_ADICAO integer,
    DI_SEQUENCIAL integer,
    DI_CODIGO_FABRICANTE varchar(60),
    DI_DESCONTO_ADICAO numeric(10,2),
    DI_BASE_CALCULO numeric(10,2),
    DI_DESPESAS_ADUANEIRAS numeric(10,2),
    DI_VALOR_II numeric(10,2),
    DI_VALOR_IOF numeric(10,2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    VALOR_PEDAGIO numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    DESCONTO_BASECALCULO_ICMS numeric(10,2),
    BASECALCULO_FCI numeric(15,4),
    CODIGO_FCI varchar(50),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    INFORMACOES_COMPLEMENTARES varchar(200),
    DI_NVE varchar(60),
    DI_TIPO_VIA_TRANSP integer,
    DI_TIPO_VIA_TRANSP_DESCRICAO varchar(30),
    DI_VALOR_AFRMM numeric(15,2),
    DI_TIPO_INTERMEDIO varchar(1),
    DI_TIPO_INTERMEDIO_DESCRICAO varchar(30),
    DI_CNPJ_INTERMEDIO varchar(14),
    DI_UF_INTERMEDIO varchar(2),
    DI_NUMERO_DRAWBACK varchar(11),
    CONTA_CONTABIL varchar(11),
    CCUSTO varchar(8),
    CCUSTO_DESCRICAO varchar(130),
    ENQUADRAMENTO_IPI varchar(3),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1))
as
begin
for select
A.NFe_CONTROLE      ,A.SEQUENCIA        ,A.OPERACAO_CODIGO      ,A.CFOP_CODIGO ,
A.PRODUTO_CODIGO    ,A.PRODUTO_DESCRICAO,A.PRODUTO_UNIDADEMEDIDA2,A.GRADE_CODIGO,
A.NCM_CODIGO        ,A.TRIBUTACAO_ICMS  ,A.TRIBUTACAO_IPI       ,A.TRIBUTACAO_ORIGEM,
A.LOCALIZACAO_CODIGO,(Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo),
A.QUANTIDADE        ,A.VALOR_UNITARIO       ,A.VALOR_TOTAL      ,
A.BASECALCULO_ICMS  ,A.PERCENTUAL_ICMS  ,A.PERCENTUAL_IPI       ,A.VALOR_IPI   ,
A.PERCENTUAL_PIS    ,A.VALOR_PIS        ,A.PERCENTUAL_COFINS    ,A.VALOR_COFINS,
A.VALOR_FRETE, A.VALOR_SEGURO, A.NFs, A.NFs_ITEM_CONTROLE,A.NF_EXTERNO ,
A.NF_EXTERNO_ITEM_CONTROLE, A.OC,A.OC_ITEM_CONTROLE,
A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
A.ESTABELECIMENTO_CODIGO,A.EMPRESA_CODIGO,A.NUMERO_NOTAFISCAL,A.DATA_ENTRADA,
A.SITUACAO,A.CONTROLE,A.VALOR_CUSTO,
(Select First 1 B.GRADE_CODIGO From TbProduto B Where A.Produto_Codigo = B.Codigo),
A.tributacao_PIS, A.tributacao_cofins,A.DI,A.DI_DATA_REGISTRO,A.DI_DATA_DESEMBARACO,
A.DI_LOCAL_DESEMBARACO,A.DI_UF_DESEMBARACO,A.DI_CODIGO_EXPORTADOR,A.DI_ADICAO,
A.DI_SEQUENCIAL,A.DI_CODIGO_FABRICANTE,A.DI_DESCONTO_ADICAO,
A.di_base_calculo,A.di_despesas_aduaneiras,A.di_valor_ii,A.di_valor_iof,
A.VALOR_ICMS,A.BASECALCULO_IPI,A.BASECALCULO_PIS,A.BASECALCULO_COFINS,
A.VALOR_ACRESCIMO,A.VALOR_DESCONTO,A.FISCAL_ISENTAS_IPI,A.FISCAL_ISENTAS_ICMS,
A.FISCAL_OUTRAS_IPI,A.FISCAL_OUTRAS_ICMS,A.FISCAL_VALOR_ICMS,A.FISCAL_VALOR_IPI,
A.FISCAL_VALOR_PIS,A.FISCAL_VALOR_COFINS,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_BASECALCULO_IPI,A.FISCAL_BASECALCULO_PIS,A.FISCAL_BASECALCULO_COFINS,
A.VALOR_CONTABIL, A.valor_basecalculo_icms, A.VALOR_PEDAGIO, A.FISCAL_CFOP_CODIGO,A.FISCAL_TRIBUTACAO_ORIGEM,
A.FISCAL_TRIBUTACAO_ICMS,A.FISCAL_TRIBUTACAO_IPI,A.FISCAL_TRIBUTACAO_PIS,
A.FISCAL_TRIBUTACAO_COFINS, A.DESCONTO_BASECALCULO_ICMS, A.BASECALCULO_FCI, A.Codigo_Fci,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST, A.REDUCAO_ICMS_ST,
A.BASECALCULO_ICMS_ST, A.ALIQUOTA_ICMS_ST, A.VALOR_ICMS_ST,A.FISCAL_REDUCAO_ICMS_ST,
A.FISCAL_BASECALCULO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST, A.FISCAL_VALOR_ICMS_ST,

A.INFORMACOES_COMPLEMENTARES, A.DI_NVE,
A.DI_TIPO_VIA_TRANSP, IIF(A.DI_TIPO_VIA_TRANSP=1,'Maritima',
                      IIF(A.DI_TIPO_VIA_TRANSP=2,'Fluvial',
                      IIF(A.DI_TIPO_VIA_TRANSP=3,'Lacustre',
                      IIF(A.DI_TIPO_VIA_TRANSP=4,'Aerea',
                      IIF(A.DI_TIPO_VIA_TRANSP=5,'Postal',
                      IIF(A.DI_TIPO_VIA_TRANSP=6,'Ferroviaria',
                      IIF(A.DI_TIPO_VIA_TRANSP=7,'Rodoviaria',
                      IIF(A.DI_TIPO_VIA_TRANSP=8,'Conduto/Rd.Trnsm',
                      IIF(A.DI_TIPO_VIA_TRANSP=9,'Meios Proprios',
                      IIF(A.DI_TIPO_VIA_TRANSP=10,'Entr/Saida ficta','')))))))))),
A.DI_VALOR_AFRMM,
A.DI_TIPO_INTERMEDIO, IIF(A.DI_TIPO_INTERMEDIO='1','Imp.Conta Propria',
                      IIF(A.DI_TIPO_INTERMEDIO='2','Imp.Conta e Ordem',
                      IIF(A.DI_TIPO_INTERMEDIO='3','Imp.por Encomenda',''))),
A.DI_CNPJ_INTERMEDIO, A.DI_UF_INTERMEDIO, A.DI_NUMERO_DRAWBACK, A.Conta_Contabil, A.CCusto,

IIF(char_length(A.CCusto)=2,
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 2)),
IIF(char_length(A.CCusto)=5,
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 2))||' - '||
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 5)),
IIF(char_length(A.CCusto)=8,
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 5))||' - '||
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 8)),''))) CCUSTO_DESCRICAO,

A.ENQUADRAMENTO_IPI,
A.QUANTIDADE_ALTERNATIVA, A.UM_ALTERNATIVA, A.VALOR_ALTERNATIVO, A.REDUCAO_BASE_PISCOF

From TbNfE_Item A
Where (A.NFE_CONTROLE = :CONTROLE_1)
order by A.SEQUENCIA
into
    :NFE_CONTROLE      ,:SEQUENCIA        , :OPERACAO_CODIGO, :CFOP_CODIGO,
    :PRODUTO_CODIGO    ,:PRODUTO_DESCRICAO, :PRODUTO_UNIDADEMEDIDA,:GRADE_CODIGO,
    :NCM_CODIGO        ,:TRIBUTACAO_ICMS  , :TRIBUTACAO_IPI, :TRIBUTACAO_ORIGEM,
    :LOCALIZACAO_CODIGO,:LOCALIZACAO_DESCRICAO,
    :QUANTIDADE       , :VALOR_UNITARIO, :VALOR_TOTAL,
    :BASECALCULO_ICMS, :PERCENTUAL_ICMS   , :PERCENTUAL_IPI, :VALOR_IPI,
    :PERCENTUAL_PIS, :VALOR_PIS, :PERCENTUAL_COFINS ,:VALOR_COFINS,
    :VALOR_FRETE, :VALOR_SEGURO, :NFS,
    :NFS_ITEM_CONTROLE,:NF_EXTERNO, :NF_EXTERNO_ITEM_CONTROLE, :OC,:OC_ITEM_CONTROLE,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,:DATA_ENTRADA,
    :SITUACAO,:CONTROLE,:VALOR_CUSTO,:PRODUTO_GRADE_CODIGO,:tributacao_PIS,
    :tributacao_cofins, :DI, :DI_DATA_REGISTRO, :DI_DATA_DESEMBARACO,
    :DI_LOCAL_DESEMBARACO, :DI_UF_DESEMBARACO, :DI_CODIGO_EXPORTADOR,
    :DI_ADICAO, :DI_SEQUENCIAL, :DI_CODIGO_FABRICANTE, :DI_DESCONTO_ADICAO,
    :di_base_calculo,:di_despesas_aduaneiras,:di_valor_ii,:Di_valor_iof,
    :VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
    :VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
    :FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
    :FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
    :FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
    :FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
    :VALOR_CONTABIL,:valor_basecalculo_icms, :VALOR_PEDAGIO,:FISCAL_CFOP_CODIGO,
    :FISCAL_TRIBUTACAO_ORIGEM, :FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,
    :FISCAL_TRIBUTACAO_PIS, :FISCAL_TRIBUTACAO_COFINS , :DESCONTO_BASECALCULO_ICMS,
    :BASECALCULO_FCI, :Codigo_Fci,

    :MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
    :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,:FISCAL_REDUCAO_ICMS_ST,
    :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
    :INFORMACOES_COMPLEMENTARES, :DI_NVE, :DI_TIPO_VIA_TRANSP,
    :DI_TIPO_VIA_TRANSP_DESCRICAO, :DI_VALOR_AFRMM, :DI_TIPO_INTERMEDIO,
    :DI_TIPO_INTERMEDIO_DESCRICAO, :DI_CNPJ_INTERMEDIO, :DI_UF_INTERMEDIO,
    :DI_NUMERO_DRAWBACK, :Conta_Contabil, :CCusto, :CCUSTO_DESCRICAO, :ENQUADRAMENTO_IPI,
    :QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO,:REDUCAO_BASE_PISCOF


do suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFE_ITEM11 (
    CONTROLE_1 integer)
returns (
    NFE_CONTROLE integer,
    SEQUENCIA integer,
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(3),
    GRADE_CODIGO integer,
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    LOCALIZACAO_CODIGO integer,
    LOCALIZACAO_DESCRICAO varchar(20),
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(10,5),
    VALOR_TOTAL numeric(10,5),
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    VALOR_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    VALOR_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO numeric(10,2),
    NFS integer,
    NFS_ITEM_CONTROLE integer,
    NF_EXTERNO integer,
    NF_EXTERNO_ITEM_CONTROLE integer,
    OC integer,
    OC_ITEM_CONTROLE integer,
    T01 numeric(10,5),
    T02 numeric(10,5),
    T03 numeric(10,5),
    T04 numeric(10,5),
    T05 numeric(10,5),
    T06 numeric(10,5),
    T07 numeric(10,5),
    T08 numeric(10,5),
    T09 numeric(10,5),
    T10 numeric(10,5),
    T11 numeric(10,5),
    T12 numeric(10,5),
    T13 numeric(10,5),
    T14 numeric(10,5),
    T15 numeric(10,5),
    T16 numeric(10,5),
    T17 numeric(10,5),
    T18 numeric(10,5),
    T19 numeric(10,5),
    T20 numeric(10,5),
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_ENTRADA date,
    SITUACAO integer,
    CONTROLE integer,
    VALOR_CUSTO numeric(10,5),
    PRODUTO_GRADE_CODIGO integer,
    TRIBUTACAO_PIS varchar(2),
    TRIBUTACAO_COFINS varchar(2),
    DI varchar(12),
    DI_DATA_REGISTRO date,
    DI_DATA_DESEMBARACO date,
    DI_LOCAL_DESEMBARACO varchar(60),
    DI_UF_DESEMBARACO char(2),
    DI_CODIGO_EXPORTADOR varchar(60),
    DI_ADICAO integer,
    DI_SEQUENCIAL integer,
    DI_CODIGO_FABRICANTE varchar(60),
    DI_DESCONTO_ADICAO numeric(10,2),
    DI_BASE_CALCULO numeric(10,2),
    DI_DESPESAS_ADUANEIRAS numeric(10,2),
    DI_VALOR_II numeric(10,2),
    DI_VALOR_IOF numeric(10,2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_DESCONTO numeric(10,2),
    FISCAL_ISENTAS_IPI numeric(10,2),
    FISCAL_ISENTAS_ICMS numeric(10,2),
    FISCAL_OUTRAS_IPI numeric(10,2),
    FISCAL_OUTRAS_ICMS numeric(10,2),
    FISCAL_VALOR_ICMS numeric(10,2),
    FISCAL_VALOR_IPI numeric(10,2),
    FISCAL_VALOR_PIS numeric(10,2),
    FISCAL_VALOR_COFINS numeric(10,2),
    FISCAL_PERCENTUAL_ICMS numeric(10,2),
    FISCAL_PERCENTUAL_IPI numeric(10,2),
    FISCAL_PERCENTUAL_PIS numeric(10,2),
    FISCAL_PERCENTUAL_COFINS numeric(10,2),
    FISCAL_BASECALCULO_ICMS numeric(10,5),
    FISCAL_BASECALCULO_IPI numeric(10,2),
    FISCAL_BASECALCULO_PIS numeric(10,2),
    FISCAL_BASECALCULO_COFINS numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    VALOR_PEDAGIO numeric(10,2),
    FISCAL_CFOP_CODIGO varchar(5),
    FISCAL_TRIBUTACAO_ORIGEM integer,
    FISCAL_TRIBUTACAO_ICMS integer,
    FISCAL_TRIBUTACAO_IPI char(2),
    FISCAL_TRIBUTACAO_PIS char(2),
    FISCAL_TRIBUTACAO_COFINS char(2),
    DESCONTO_BASECALCULO_ICMS numeric(10,2),
    BASECALCULO_FCI numeric(15,4),
    CODIGO_FCI varchar(50),
    MODALIDADE_ICMS char(1),
    MODALIDADE_ICMS_ST char(1),
    MARGEM_ICMS_ST numeric(15,4),
    REDUCAO_ICMS_ST numeric(15,4),
    BASECALCULO_ICMS_ST numeric(15,4),
    ALIQUOTA_ICMS_ST numeric(15,4),
    VALOR_ICMS_ST numeric(15,4),
    FISCAL_REDUCAO_ICMS_ST numeric(10,2),
    FISCAL_BASECALCULO_ICMS_ST numeric(10,2),
    FISCAL_ALIQUOTA_ICMS_ST numeric(10,2),
    FISCAL_VALOR_ICMS_ST numeric(10,2),
    INFORMACOES_COMPLEMENTARES varchar(500),
    DI_NVE varchar(60),
    DI_TIPO_VIA_TRANSP integer,
    DI_TIPO_VIA_TRANSP_DESCRICAO varchar(30),
    DI_VALOR_AFRMM numeric(15,2),
    DI_TIPO_INTERMEDIO varchar(1),
    DI_TIPO_INTERMEDIO_DESCRICAO varchar(30),
    DI_CNPJ_INTERMEDIO varchar(14),
    DI_UF_INTERMEDIO varchar(2),
    DI_NUMERO_DRAWBACK varchar(11),
    CONTA_CONTABIL varchar(11),
    CCUSTO varchar(8),
    CCUSTO_DESCRICAO varchar(130),
    ENQUADRAMENTO_IPI varchar(3),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(3),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1))
as
begin
for select
A.NFe_CONTROLE      ,A.SEQUENCIA        ,A.OPERACAO_CODIGO      ,A.CFOP_CODIGO ,
A.PRODUTO_CODIGO    ,A.PRODUTO_DESCRICAO,A.PRODUTO_UNIDADEMEDIDA2,A.GRADE_CODIGO,
A.NCM_CODIGO        ,A.TRIBUTACAO_ICMS  ,A.TRIBUTACAO_IPI       ,A.TRIBUTACAO_ORIGEM,
A.LOCALIZACAO_CODIGO,(Select First 1 L.Descricao From TbLocalizacao L Where A.Localizacao_Codigo = L.Codigo),
A.QUANTIDADE        ,A.VALOR_UNITARIO       ,A.VALOR_TOTAL      ,
A.BASECALCULO_ICMS  ,A.PERCENTUAL_ICMS  ,A.PERCENTUAL_IPI       ,A.VALOR_IPI   ,
A.PERCENTUAL_PIS    ,A.VALOR_PIS        ,A.PERCENTUAL_COFINS    ,A.VALOR_COFINS,
A.VALOR_FRETE, A.VALOR_SEGURO, A.NFs, A.NFs_ITEM_CONTROLE,A.NF_EXTERNO ,
A.NF_EXTERNO_ITEM_CONTROLE, A.OC,A.OC_ITEM_CONTROLE,
A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
A.ESTABELECIMENTO_CODIGO,A.EMPRESA_CODIGO,A.NUMERO_NOTAFISCAL,A.DATA_ENTRADA,
A.SITUACAO,A.CONTROLE,A.VALOR_CUSTO,
(Select First 1 B.GRADE_CODIGO From TbProduto B Where A.Produto_Codigo = B.Codigo),
A.tributacao_PIS, A.tributacao_cofins,A.DI,A.DI_DATA_REGISTRO,A.DI_DATA_DESEMBARACO,
A.DI_LOCAL_DESEMBARACO,A.DI_UF_DESEMBARACO,A.DI_CODIGO_EXPORTADOR,A.DI_ADICAO,
A.DI_SEQUENCIAL,A.DI_CODIGO_FABRICANTE,A.DI_DESCONTO_ADICAO,
A.di_base_calculo,A.di_despesas_aduaneiras,A.di_valor_ii,A.di_valor_iof,
A.VALOR_ICMS,A.BASECALCULO_IPI,A.BASECALCULO_PIS,A.BASECALCULO_COFINS,
A.VALOR_ACRESCIMO,A.VALOR_DESCONTO,A.FISCAL_ISENTAS_IPI,A.FISCAL_ISENTAS_ICMS,
A.FISCAL_OUTRAS_IPI,A.FISCAL_OUTRAS_ICMS,A.FISCAL_VALOR_ICMS,A.FISCAL_VALOR_IPI,
A.FISCAL_VALOR_PIS,A.FISCAL_VALOR_COFINS,A.FISCAL_PERCENTUAL_ICMS,A.FISCAL_PERCENTUAL_IPI,
A.FISCAL_PERCENTUAL_PIS,A.FISCAL_PERCENTUAL_COFINS,A.FISCAL_BASECALCULO_ICMS,
A.FISCAL_BASECALCULO_IPI,A.FISCAL_BASECALCULO_PIS,A.FISCAL_BASECALCULO_COFINS,
A.VALOR_CONTABIL, A.valor_basecalculo_icms, A.VALOR_PEDAGIO, A.FISCAL_CFOP_CODIGO,A.FISCAL_TRIBUTACAO_ORIGEM,
A.FISCAL_TRIBUTACAO_ICMS,A.FISCAL_TRIBUTACAO_IPI,A.FISCAL_TRIBUTACAO_PIS,
A.FISCAL_TRIBUTACAO_COFINS, A.DESCONTO_BASECALCULO_ICMS, A.BASECALCULO_FCI, A.Codigo_Fci,

A.MODALIDADE_ICMS, A.MODALIDADE_ICMS_ST, A.MARGEM_ICMS_ST, A.REDUCAO_ICMS_ST,
A.BASECALCULO_ICMS_ST, A.ALIQUOTA_ICMS_ST, A.VALOR_ICMS_ST,A.FISCAL_REDUCAO_ICMS_ST,
A.FISCAL_BASECALCULO_ICMS_ST, A.FISCAL_ALIQUOTA_ICMS_ST, A.FISCAL_VALOR_ICMS_ST,

A.INFORMACOES_COMPLEMENTARES, A.DI_NVE,
A.DI_TIPO_VIA_TRANSP, IIF(A.DI_TIPO_VIA_TRANSP=1,'Maritima',
                      IIF(A.DI_TIPO_VIA_TRANSP=2,'Fluvial',
                      IIF(A.DI_TIPO_VIA_TRANSP=3,'Lacustre',
                      IIF(A.DI_TIPO_VIA_TRANSP=4,'Aerea',
                      IIF(A.DI_TIPO_VIA_TRANSP=5,'Postal',
                      IIF(A.DI_TIPO_VIA_TRANSP=6,'Ferroviaria',
                      IIF(A.DI_TIPO_VIA_TRANSP=7,'Rodoviaria',
                      IIF(A.DI_TIPO_VIA_TRANSP=8,'Conduto/Rd.Trnsm',
                      IIF(A.DI_TIPO_VIA_TRANSP=9,'Meios Proprios',
                      IIF(A.DI_TIPO_VIA_TRANSP=10,'Entr/Saida ficta','')))))))))),
A.DI_VALOR_AFRMM,
A.DI_TIPO_INTERMEDIO, IIF(A.DI_TIPO_INTERMEDIO='1','Imp.Conta Propria',
                      IIF(A.DI_TIPO_INTERMEDIO='2','Imp.Conta e Ordem',
                      IIF(A.DI_TIPO_INTERMEDIO='3','Imp.por Encomenda',''))),
A.DI_CNPJ_INTERMEDIO, A.DI_UF_INTERMEDIO, A.DI_NUMERO_DRAWBACK, A.Conta_Contabil, A.CCusto,

IIF(char_length(A.CCusto)=2,
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 2)),
IIF(char_length(A.CCusto)=5,
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 2))||' - '||
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 5)),
IIF(char_length(A.CCusto)=8,
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 5))||' - '||
(Select First 1 C.Descricao From TbCentro_de_Custo C Where C.CODIGO = SUBSTRING(A.CCusto FROM 1 FOR 8)),''))) CCUSTO_DESCRICAO,

A.ENQUADRAMENTO_IPI,
A.QUANTIDADE_ALTERNATIVA, A.UM_ALTERNATIVA, A.VALOR_ALTERNATIVO, A.REDUCAO_BASE_PISCOF

From TbNfE_Item A
Where (A.NFE_CONTROLE = :CONTROLE_1)
order by A.SEQUENCIA
into
    :NFE_CONTROLE      ,:SEQUENCIA        , :OPERACAO_CODIGO, :CFOP_CODIGO,
    :PRODUTO_CODIGO    ,:PRODUTO_DESCRICAO, :PRODUTO_UNIDADEMEDIDA,:GRADE_CODIGO,
    :NCM_CODIGO        ,:TRIBUTACAO_ICMS  , :TRIBUTACAO_IPI, :TRIBUTACAO_ORIGEM,
    :LOCALIZACAO_CODIGO,:LOCALIZACAO_DESCRICAO,
    :QUANTIDADE       , :VALOR_UNITARIO, :VALOR_TOTAL,
    :BASECALCULO_ICMS, :PERCENTUAL_ICMS   , :PERCENTUAL_IPI, :VALOR_IPI,
    :PERCENTUAL_PIS, :VALOR_PIS, :PERCENTUAL_COFINS ,:VALOR_COFINS,
    :VALOR_FRETE, :VALOR_SEGURO, :NFS,
    :NFS_ITEM_CONTROLE,:NF_EXTERNO, :NF_EXTERNO_ITEM_CONTROLE, :OC,:OC_ITEM_CONTROLE,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,:DATA_ENTRADA,
    :SITUACAO,:CONTROLE,:VALOR_CUSTO,:PRODUTO_GRADE_CODIGO,:tributacao_PIS,
    :tributacao_cofins, :DI, :DI_DATA_REGISTRO, :DI_DATA_DESEMBARACO,
    :DI_LOCAL_DESEMBARACO, :DI_UF_DESEMBARACO, :DI_CODIGO_EXPORTADOR,
    :DI_ADICAO, :DI_SEQUENCIAL, :DI_CODIGO_FABRICANTE, :DI_DESCONTO_ADICAO,
    :di_base_calculo,:di_despesas_aduaneiras,:di_valor_ii,:Di_valor_iof,
    :VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
    :VALOR_ACRESCIMO,:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
    :FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
    :FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
    :FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
    :FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
    :VALOR_CONTABIL,:valor_basecalculo_icms, :VALOR_PEDAGIO,:FISCAL_CFOP_CODIGO,
    :FISCAL_TRIBUTACAO_ORIGEM, :FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,
    :FISCAL_TRIBUTACAO_PIS, :FISCAL_TRIBUTACAO_COFINS , :DESCONTO_BASECALCULO_ICMS,
    :BASECALCULO_FCI, :Codigo_Fci,

    :MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
    :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,:FISCAL_REDUCAO_ICMS_ST,
    :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
    :INFORMACOES_COMPLEMENTARES, :DI_NVE, :DI_TIPO_VIA_TRANSP,
    :DI_TIPO_VIA_TRANSP_DESCRICAO, :DI_VALOR_AFRMM, :DI_TIPO_INTERMEDIO,
    :DI_TIPO_INTERMEDIO_DESCRICAO, :DI_CNPJ_INTERMEDIO, :DI_UF_INTERMEDIO,
    :DI_NUMERO_DRAWBACK, :Conta_Contabil, :CCusto, :CCUSTO_DESCRICAO, :ENQUADRAMENTO_IPI,
    :QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO,:REDUCAO_BASE_PISCOF


do suspend;
end
^

