SET TERM ^ ;

CREATE OR ALTER procedure SPC_CLIENTE_SEM_FATURAMENTO (
    DATA_INICIAL date,
    DATA_FINAL date,
    CONT integer)
returns (
    REPRESENTANTE_ID integer,
    CLIENTE varchar(100),
    MESES varchar(200))
as
declare variable CLIENTE_ID integer;
declare variable DATA_INI date;
declare variable DATA_FIM date;
declare variable MES varchar(3);
declare variable ANO integer;
declare variable VALOR numeric(18,8);
declare variable TEM_VENDA char(1);
declare variable CONTADOR integer;
declare variable XMESES varchar(200);
BEGIN

  FOR SELECT E.CODIGO,
             LPAD(E.CODIGO,5,'0')||' - '||E.RAZAOSOCIAL||' ('||E.UF||')' CLIENTE,
             C.REPRESENTANTE_CODIGO
        FROM TBEMPRESA E, TBCLIENTE C
       WHERE E.HABILITA_CLIENTE = '1'
         AND E.STATUS = '1'
         AND C.CODIGO = E.CODIGO
         ORDER BY E.RAZAOSOCIAL
        INTO :CLIENTE_ID, :CLIENTE, :REPRESENTANTE_ID
          DO BEGIN

              xMESES = '';
              contador = 0;
              FOR SELECT X.DATA_INICIO, X.DATA_FIM, ANO,
                         IIF(MES=01,'JAN',IIF(MES=02,'FEV',
                         IIF(MES=03,'MAR',IIF(MES=04,'ABR',
                         IIF(MES=05,'MAI',IIF(MES=06,'JUN',
                         IIF(MES=07,'JUL',IIF(MES=08,'AGO',
                         IIF(MES=09,'SET',IIF(MES=10,'OUT',
                         IIF(MES=11,'NOV',IIF(MES=12,'DEZ',''))))))))))))
                    FROM TBDATA_ANO_MES X
                   WHERE X.DATA_FIM > :DATA_INICIAL
                     AND X.DATA_INICIO <= :DATA_FINAL
                    ORDER BY X.ANO, X.MES
                    INTO :DATA_INI , :DATA_FIM, :ANO, :MES
                      Do Begin

                            TEM_VENDA = '0';
                            FOR SELECT CAST(SUM(A.QUANTIDADE*(A.VALOR_UNITARIO+COALESCE(A.MARGEM,0.00))) AS NUMERIC(15,2)) VALOR
                                  FROM TBNFS_ITEM A, TBOPERACAO D, TBNFS B
                                 WHERE A.NFS_CONTROLE = B.CONTROLE
                                   AND A.OPERACAO_CODIGO = D.CODIGO
                                   AND D.CONTROLE_FATURAMENTO = '1'
                                   AND ((B.SITUACAO = 2) OR (B.SITUACAO = 1 AND B.NATUREZA = 2))
                                   AND (B.DATA_EMISSAO BETWEEN :DATA_INI AND :DATA_FIM)
                                   AND B.EMPRESA_CODIGO = :CLIENTE_ID
                                INTO :VALOR
                                  DO BEGIN
                                     if (:VALOR > 0) then
                                         TEM_VENDA = '1';
                                     END

                                 IF (TEM_VENDA = '0') then
                                     begin
                                     CONTADOR = CONTADOR + 1;
                                     xMESES = xMESES || '  ' || MES||'/'||SUBSTRING(ANO FROM 3 FOR 2);
                                     end
                         End

                 if (Cont = Contador) then
                     Begin
                      MESES = :xMESES;
                      SUSPEND;
                     End

              End

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_FRETE (
    I_ORIGEM varchar(50) = null,
    I_ORIGEM_ID varchar(50) = null,
    I_TRANSPORTADORA_ID integer = null,
    I_ESTABELECIMENTO_ID integer = null,
    I_ERRO integer = null,
    DATA date = null)
returns (
    FRETE_ID integer,
    EXPRESSAO varchar(3000),
    ORIGEM varchar(200),
    ORIGEM_ID varchar(50),
    ESTABELECIMENTO_ID integer,
    ESTABELECIMENTO_RAZAOSOCIAL varchar(800),
    ESTABELECIMENTO_UF varchar(200),
    TRANSPORTADORA_ID integer,
    TRANSPORTADORA_RAZAOSOCIAL varchar(800),
    TRANSPORTADORA_CLASSIFICACAO varchar(200),
    FRETE_TRANSPORTADORA_ID integer,
    CLIENTE_ID integer,
    CLIENTE_RAZAOSOCIAL varchar(800),
    CIDADE_ID integer,
    CIDADE_DESCRICAO varchar(800),
    CIDADE_PRAZO_ENTREGA numeric(15,4),
    UF varchar(200),
    FRETE_CIDADE_AGRUPAMENTO_ID integer,
    VALOR_TOTAL numeric(18,6),
    QUANTIDADE_TOTAL numeric(18,6),
    QUANTIDADE_VOLUME numeric(18,6),
    CUBAGEM numeric(18,6),
    PESO_LIQUIDO numeric(18,6),
    PESO_BRUTO numeric(18,6),
    PESO_CUBADO numeric(16,6),
    VALOR_FINAL numeric(16,6),
    DATAHORA timestamp,
    USUARIO_ID integer)
as
declare variable MODELO_ID integer;
declare variable COR_ID integer;
declare variable TAMANHO integer;
declare variable PRODUTO_ID integer;
declare variable QUANTIDADE numeric(17,6);
declare variable VALOR_UNITARIO numeric(18,8);
declare variable CTE_TRANSPORTADORA_ID integer;
declare variable CTE_NFS integer;
declare variable CTE_NFS_SERIE integer;
declare variable T_VARIAVEL varchar(3000);
declare variable T_VALOR varchar(3000);
declare variable T_VARIAVEL_CALC varchar(3000);
declare variable FRETE_DETALHE_ID integer;
declare variable NF_ID integer;
declare variable NF_ITEM_ID integer;
declare variable V_PERIODO_ID integer;

declare function SFN_MODELO_COTA_EMBALAGEM(MODELO_ID integer, TAMANHO integer) returns numeric(15,4) as begin --

return(
    select first 1
                   case :TAMANHO
                     when 01 then PC.T01
                     when 02 then PC.T02
                     when 03 then PC.T03
                     when 04 then PC.T04
                     when 05 then PC.T05
                     when 06 then PC.T06
                     when 07 then PC.T07
                     when 08 then PC.T08
                     when 09 then PC.T09
                     when 10 then PC.T10
                     when 11 then PC.T11
                     when 12 then PC.T12
                     when 13 then PC.T13
                     when 14 then PC.T14
                     when 15 then PC.T15
                     when 16 then PC.T16
                     when 17 then PC.T17
                     when 18 then PC.T18
                     when 19 then PC.T19
                     when 20 then PC.T20
                     else 99999999999
                   end
    from TBMODELO_EMBALAGEM PC
    where PC.MODELO_CODIGO = :MODELO_ID);

end
BEGIN

    DELETE FROM TBFRETE FF WHERE FF.ORIGEM =  :I_ORIGEM AND FF.ORIGEM_ID = :I_ORIGEM_ID;


--    I_ORIGEM    = 'NF';
--    I_ORIGEM_ID = 174219;

--    I_ORIGEM            = 'SIMULADOR';
--    I_ORIGEM_ID         = 2826; -- ID DO CLIENTE
--    I_TRANSPORTADORA_ID = 4776; -- ID DA TRANSPORTADORA



    /* INICIO - TRATAMENTO DA ORIGEM DOS DADOS */
    I_ERRO = COALESCE(I_ERRO,1);

    FRETE_TRANSPORTADORA_ID = I_TRANSPORTADORA_ID;

    TRANSPORTADORA_ID = (SELECT FIRST 1 T.TRANSPORTADORA_ID FROM TBFRETE_TRANSPORTADORA T WHERE T.ID = :I_TRANSPORTADORA_ID);

    I_ESTABELECIMENTO_ID = IIF(COALESCE(I_ESTABELECIMENTO_ID,0) = 0,1,I_ESTABELECIMENTO_ID);

    FRETE_ID = GEN_ID(GTBFRETE,1);

    IF (I_ORIGEM = 'SIMULADOR_CIDADE' ) THEN
    BEGIN    

        IF ( I_ORIGEM_ID IS NULL ) THEN
        BEGIN
            EXCEPTION "..." 'INFORME O ID DA CIDADE PARA A SIMULACAO DE FRETE.';
        END

        CIDADE_ID = I_ORIGEM_ID;

        FOR
            SELECT
                F.NF_ID,
                F.NF_ITEM_ID,
                F.MODELO_ID,
                F.COR_ID,
                F.TAMANHO,
                F.QUANTIDADE,
                F.VALOR_UNITARIO
            FROM TMPFRETE F
        INTO
            NF_ID,
            NF_ITEM_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( NF_ID,  NF_ITEM_ID,  FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:NF_ID, :NF_ITEM_ID, :FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END


    END
    ELSE
    IF (I_ORIGEM = 'SIMULADOR' ) THEN
    BEGIN    

        IF ( I_ORIGEM_ID IS NULL ) THEN
        BEGIN
            EXCEPTION "..." 'INFORME O ID DO CLIENTE PARA A SIMULACAO DE FRETE.';
        END

        CLIENTE_ID = I_ORIGEM_ID;

        FOR
            SELECT
                F.NF_ID,
                F.NF_ITEM_ID,
                F.MODELO_ID,
                F.COR_ID,
                F.TAMANHO,
                F.QUANTIDADE,
                F.VALOR_UNITARIO
            FROM TMPFRETE F
        INTO
            NF_ID,
            NF_ITEM_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( NF_ID,  NF_ITEM_ID,  FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:NF_ID, :NF_ITEM_ID, :FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END


    END
    ELSE
    IF (I_ORIGEM = 'NF' ) THEN
    BEGIN
        CLIENTE_ID = (SELECT s.EMPRESA_CODIGO
                        FROM TBNFS S
                       WHERE S.NUMERO_NOTAFISCAL = :I_ORIGEM_ID);


        DATA = (SELECT s.DATA_EMISSAO
                        FROM TBNFS S
                       WHERE S.NUMERO_NOTAFISCAL = :I_ORIGEM_ID);

        TRANSPORTADORA_ID = IIF(TRANSPORTADORA_ID IS NULL,
                                (SELECT ST.TRANSPORTADORA_CODIGO
                                   FROM TBNFS S, TBNFS_TRANSPORTADORA ST
                                  WHERE S.NUMERO_NOTAFISCAL = :I_ORIGEM_ID
                                    AND ST.NFS_CONTROLE = S.CONTROLE),TRANSPORTADORA_ID);

        FOR
            SELECT
                I.PRODUTO_CODIGO,
                P.MODELO_CODIGO,
                P.COR_CODIGO,
                I.TAMANHO,
                I.QUANTIDADE,
                I.VALOR_UNITARIO + I.VALOR_ACRESCIMO + I.VALOR_SEGURO - I.VALOR_DESCONTO + I.VALOR_ICMS_ST
            FROM
                TBNFS S,
                TBNFS_ITEM I,
                TBPRODUTO P
            WHERE
                S.NUMERO_NOTAFISCAL = :I_ORIGEM_ID
            AND S.CONTROLE = I.NFS_CONTROLE
            AND P.CODIGO = I.PRODUTO_CODIGO
        INTO
            PRODUTO_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END

    END
    IF (I_ORIGEM = 'CTE' ) THEN
    BEGIN

        CTE_TRANSPORTADORA_ID = SUBSTRING(CAST(:I_ORIGEM_ID AS VARCHAR(100))  FROM 1 FOR POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)))-1 );
        CTE_NFS               = SUBSTRING(CAST(:I_ORIGEM_ID AS VARCHAR(100))  FROM POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)))+1 FOR POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)),POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)))+1) - POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100))) - 1 );
        CTE_NFS_SERIE         = SUBSTRING(CAST(:I_ORIGEM_ID AS VARCHAR(100))  FROM POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)),POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)))+1)+1);


        CLIENTE_ID = (
            SELECT FIRST 1 S.EMPRESA_CODIGO
             FROM TBNFE E,
                  TBNF_REFERENCIADA R,
                  TBNFS S
            WHERE E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
              AND E.NUMERO_NOTAFISCAL = :CTE_NFS
              AND E.SERIE             = :CTE_NFS_SERIE
              AND R.ID                = E.CONTROLE
              AND S.CONTROLE          = R.NFS_ID);

        TRANSPORTADORA_ID = IIF(TRANSPORTADORA_ID IS NULL,
                                (SELECT E.EMPRESA_CODIGO
                                   FROM TBNFE E
                                  WHERE E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
                                    AND E.NUMERO_NOTAFISCAL = :CTE_NFS
                                    AND E.SERIE             = :CTE_NFS_SERIE
                                   ),TRANSPORTADORA_ID);


        IF ( COALESCE(FRETE_TRANSPORTADORA_ID,0) = 0 ) THEN
        BEGIN
            FRETE_TRANSPORTADORA_ID = COALESCE((
                SELECT T.ID
                  FROM TBNFE_TRANSPORTADORA NT,
                       TBFRETE_TRANSPORTADORA T,
                       TBNFE E
                 WHERE E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
                   AND E.NUMERO_NOTAFISCAL = :CTE_NFS
                   AND E.SERIE             = :CTE_NFS_SERIE
                   AND NT.TRANSPORTADORA_CODIGO = T.TRANSPORTADORA_ID
                   AND NT.MODALIDADE = T.MODAL
                   AND NT.NFE_CONTROLE = E.CONTROLE
                ),0);
        END
        

        DATA = (SELECT E.DATA_EMISSAO
                  FROM TBNFE E
                 WHERE E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
                   AND E.NUMERO_NOTAFISCAL = :CTE_NFS
                   AND E.SERIE             = :CTE_NFS_SERIE);

        FOR
            SELECT
                S.CONTROLE,
                I.CONTROLE,
                I.PRODUTO_CODIGO,
                P.MODELO_CODIGO,
                P.COR_CODIGO,
                I.TAMANHO,
                I.QUANTIDADE,
                I.VALOR_UNITARIO + I.VALOR_ACRESCIMO + I.VALOR_SEGURO - I.VALOR_DESCONTO + I.VALOR_ICMS_ST
            
            FROM
                TBNFE E,
                TBNF_REFERENCIADA R,
                TBNFS S,
                TBNFS_ITEM I,
                TBPRODUTO P
            
            WHERE TRUE
            AND E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
            AND E.NUMERO_NOTAFISCAL = :CTE_NFS
            AND E.SERIE             = :CTE_NFS_SERIE
            AND R.ID = E.CONTROLE
            AND R.NFS_ID = S.CONTROLE
            AND I.NFS_CONTROLE = S.CONTROLE
            AND P.CODIGO = I.PRODUTO_CODIGO
        INTO
            NF_ID,
            NF_ITEM_ID,
            PRODUTO_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( NF_ID,  NF_ITEM_ID,  FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:NF_ID, :NF_ITEM_ID, :FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END

    END
    ELSE
    IF (I_ORIGEM = 'PEDIDO' ) THEN
    BEGIN


        CLIENTE_ID = (
            SELECT FIRST 1 P.CLIENTE_CODIGO
             FROM TBPEDIDO P
            WHERE P.PEDIDO = :I_ORIGEM_ID);

        DATA = (
            SELECT FIRST 1 P.DATA_CLIENTE
             FROM TBPEDIDO P
            WHERE P.PEDIDO = :I_ORIGEM_ID);

        TRANSPORTADORA_ID = IIF(TRANSPORTADORA_ID IS NULL, (
                                SELECT FIRST 1 P.TRANSPORTADORA_CODIGO
                                  FROM TBPEDIDO P
                                 WHERE P.PEDIDO = :I_ORIGEM_ID
                                   ),TRANSPORTADORA_ID);

        FOR
            SELECT
                I.PRODUTO_CODIGO,
                FN_DESCRICAO('TBPRODUTO',I.PRODUTO_CODIGO,'MODELO_CODIGO') MODELO_ID,
                FN_DESCRICAO('TBPRODUTO',I.PRODUTO_CODIGO,'COR_CODIGO') COR_ID,
                I.TAMANHO,
                I.QUANTIDADE,
                I.VALOR
            
            FROM
                TBPEDIDO_ITEM I
            WHERE
                I.PEDIDO = :I_ORIGEM_ID
        INTO
            PRODUTO_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END

    END


    IF ( CIDADE_ID IS NULL ) THEN
    BEGIN
        CIDADE_ID = (
            SELECT
                (SELECT FIRST 1 C.ID
                   FROM TBCIDADE C
                  WHERE C.UF = E.UF
                    AND C.DESCRICAO = E.CIDADE)
              FROM TBEMPRESA E
             WHERE E.CODIGO = :CLIENTE_ID);
    END


    IF ( TRANSPORTADORA_ID IS NULL ) THEN
    BEGIN
        EXCEPTION "..." 'INFORME O ID DA TRANSPORTADORA.';
    END

    IF ( CIDADE_ID IS NULL ) THEN
    BEGIN
        EXCEPTION "..." 'CIDADE NAO INFORMADA';
    END

    IF ( COALESCE(FRETE_TRANSPORTADORA_ID,0) = 0 ) THEN
    BEGIN
        FRETE_TRANSPORTADORA_ID = (SELECT FIRST 1 X.ID FROM TBFRETE_TRANSPORTADORA X WHERE X.TRANSPORTADORA_ID = :TRANSPORTADORA_ID);
    END

    IF ( COALESCE(FRETE_TRANSPORTADORA_ID,0) = 0 AND I_ERRO <> 2 ) THEN
    BEGIN
        EXCEPTION "..." 'NAO HA REGRAS DE CALCULO DE FRETE PARA TRANSPORTADORA: ' || FN_LPAD(TRANSPORTADORA_ID,4,0) || ' - ' || COALESCE(FN_DESCRICAO('TBTRANSPORTADORA',:TRANSPORTADORA_ID,'RAZAOSOCIAL'),'');
    END


    DATA = COALESCE(DATA,CURRENT_DATE);

    V_PERIODO_ID =
        (SELECT FIRST 1 ID
           FROM TBFRETE_TRANSPORTADORA_PERIODO P
          WHERE :DATA BETWEEN P.DATA_1 AND P.DATA_2
            AND P.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID);

    IF ( (COALESCE(V_PERIODO_ID,0) = 0 AND I_ERRO <> 2) ) THEN
    BEGIN
        EXCEPTION "..." 'NAO HA FONTE DE DADOS PARA A DATA: ' || FN_DATE(DATA) || ' NA TRANSPORTADORA: ' || FN_LPAD(TRANSPORTADORA_ID,4,0) || ' - ' || COALESCE(FN_DESCRICAO('TBFRETE_TRANSPORTADORA',:FRETE_TRANSPORTADORA_ID,'RAZAOSOCIAL'),'') || ' - ' || COALESCE(FN_DESCRICAO('TBFRETE_TRANSPORTADORA',:FRETE_TRANSPORTADORA_ID,'CLASSIFICACAO'),'');
    END

    FRETE_CIDADE_AGRUPAMENTO_ID =
        (SELECT A.ID
           FROM TBFRETE_CIDADE C, TBFRETE_CIDADE_AGRUPAMENTO A
          WHERE A.ID                      = C.FRETE_CIDADE_AGRUPAMENTO_ID
            AND C.CIDADE_ID               = :CIDADE_ID
            AND A.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
            AND A.PERIODO_ID              = :V_PERIODO_ID);

    IF ( COALESCE(FRETE_CIDADE_AGRUPAMENTO_ID,0) = 0 AND I_ERRO <> 2 ) THEN
    BEGIN
        EXCEPTION "..." 'CIDADE DE DESTINO: ' || FN_LPAD(CIDADE_ID,4,0) || ' - ' || COALESCE(FN_DESCRICAO('TBCIDADE',CIDADE_ID),'') || ' NAO ESTA EM UM AGRUPAMENTO DE CIDADE PARA TRANSPORTADORA : ' || FN_LPAD(TRANSPORTADORA_ID,4,0) || ' - ' || COALESCE(FN_DESCRICAO('TBFRETE_TRANSPORTADORA',:FRETE_TRANSPORTADORA_ID,'RAZAOSOCIAL'),'') || ' - ' || COALESCE(FN_DESCRICAO('TBFRETE_TRANSPORTADORA',:FRETE_TRANSPORTADORA_ID,'CLASSIFICACAO'),'') || ' PARA A DATA: ' || FN_DATE_TO_STRING(DATA) || ' PERIODO: (' || V_PERIODO_ID || ')';
    END


    UPDATE TBFRETE_TRANSPORTADORA_VARIAVEL
       SET RESULTADO = NULL
     WHERE FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
       AND PERIODO_ID = :V_PERIODO_ID;

    /* FIM - TRATAMENTO DA ORIGEM DOS DADOS */


    UPDATE TBFRETE_DETALHE D
       SET D.PRODUTO_ID = (SELECT FIRST 1 P.CODIGO
                             FROM TBPRODUTO P
                            WHERE P.MODELO_CODIGO = D.MODELO_ID
                              AND P.COR_CODIGO = D.COR_ID)
     WHERE COALESCE(PRODUTO_ID,0) = 0
       AND MODELO_ID              > 0
       AND FRETE_ID               = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.PRODUTO_DESCRICAO  = FN_DESCRICAO('TBPRODUTO',D.PRODUTO_ID),
           D.TAMANHO_DESCRICAO  = FN_TAMANHO_PRODUTO(D.PRODUTO_ID,D.TAMANHO),
           D.UM                 = FN_DESCRICAO('TBPRODUTO',D.PRODUTO_ID,'UNIDADEMEDIDA_SIGLA'),
           D.VALOR_TOTAL        = D.VALOR_UNITARIO * D.QUANTIDADE,
           D.COTA_EMBALAGEM     = COALESCE(SFN_MODELO_COTA_EMBALAGEM(MODELO_ID,TAMANHO),QUANTIDADE)
     WHERE FRETE_ID             = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.QUANTIDADE_VOLUME  = COALESCE(FN_ARRENDONDAR_PARA_CIMA(QUANTIDADE / NULLIF(D.COTA_EMBALAGEM,0)),0)
     WHERE FRETE_ID             = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.PESO_LIQUIDO = COALESCE((
        SELECT E.VALOR
          FROM VWMODELO_FICHA_TECNICA E
         WHERE E.MODELO_ID = D.MODELO_ID
           AND E.TAMANHO = D.TAMANHO
           AND E.TIPO_ID = FN_DESCRICAO('TBCONTROLE_N',101,'VALOR_EXT') ),0) / 1000
     WHERE FRETE_ID = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.PESO_LIQUIDO = COALESCE(
        IIF(NOT (D.PESO_LIQUIDO > 0),(
            SELECT FIRST 1 COALESCE(PF.PESOLIQUIDO,0)/1000
              FROM TBPRODUTO_FICHA PF
             WHERE PF.PRODUTO_CODIGO = D.PRODUTO_ID),D.PESO_LIQUIDO),0)
     WHERE FRETE_ID = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.PESO_LIQUIDO_TOTAL = D.PESO_LIQUIDO * D.QUANTIDADE
     WHERE FRETE_ID = :FRETE_ID;



    /* INICIO - CAPTURA OS PRODUTOS DE CONSUMO QUE COMPOEM A CUBAGEM E O PESO */
    FOR
        SELECT D.ID,
               D.MODELO_ID,
               D.COR_ID,
               D.TAMANHO,
               D.QUANTIDADE,
               D.QUANTIDADE_VOLUME
          FROM TBFRETE_DETALHE D
         WHERE D.FRETE_ID = :FRETE_ID
            
    INTO
        FRETE_DETALHE_ID,
        MODELO_ID,
        COR_ID,
        TAMANHO,
        QUANTIDADE,
        QUANTIDADE_VOLUME
    DO
    BEGIN
        /* CUBAGEM */
        INSERT INTO TBFRETE_DETALHE_CUBAGEM (
            FRETE_DETALHE_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            CUBAGEM_PRODUTO_ID,
            CUBAGEM_PRODUTO_DESCRICAO,
            CUBAGEM_ALTURA,
            CUBAGEM_LARGURA,
            CUBAGEM_COMPRIMENTO
        )
        SELECT
            :FRETE_DETALHE_ID,
            :MODELO_ID,
            :COR_ID,
            :TAMANHO,
            C.CONSUMO_PRODUTO_ID,
            C.CONSUMO_PRODUTO_DESCRICAO,
            COALESCE(F.CUBAGEM_ALTURA,0)/1000 ALTURA,
            COALESCE(F.CUBAGEM_LARGURA,0)/1000 LARGURA,
            COALESCE(F.CUBAGEM_COMPRIMENTO,0)/1000 COMPRIMENTO
        FROM
            VWMODELO_FICHA_CONSUMO C,
            TBPRODUTO_FICHA F
        WHERE
            C.MODELO_ID = :MODELO_ID
        AND C.TAMANHO = :TAMANHO
        AND (C.COR_ID = :COR_ID OR COR_ID IS NULL)
        AND F.PRODUTO_CODIGO = C.CONSUMO_PRODUTO_ID
        AND F.CUBAGEM_ALTURA > 0
        AND C.TIPO = '2';

        /* PESO */
        INSERT INTO TBFRETE_DETALHE_PESO (
            FRETE_DETALHE_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            PESO_PRODUTO_ID,
            PESO_PRODUTO_DESCRICAO,
            PESO,
            PESO_FATOR_CALCULO,
            PESO_FATOR_CALCULO_TIPO,
            PESO_TOTAL
        )
        SELECT
            :FRETE_DETALHE_ID,
            :MODELO_ID,
            :COR_ID,
            :TAMANHO,
            P.CODIGO,
            P.DESCRICAO,
            C.PESOLIQUIDO / 1000 PESO,
            D.CONSUMO_FATOR_DIVISOR,
            NULL CONSUMO_FATOR_CALCULO_TIPO,
            CAST( CAST( CAST( D.CONSUMO_QUANTIDADE/D.CONSUMO_FATOR_DIVISOR AS NUMERIC(15,8)) * :QUANTIDADE AS NUMERIC(15,8)) * C.PESOLIQUIDO AS NUMERIC(15,12)) / 1000 PESO_EMBALAGEM
        
        FROM TBMODELO B, TBPRODUTO_FICHA C, VWMODELO_FICHA_CONSUMO D, TBPRODUTO P
        
        WHERE C.PRODUTO_CODIGO = D.CONSUMO_PRODUTO_ID
        
        AND D.MODELO_ID = :MODELO_ID
        AND D.TAMANHO = :TAMANHO
        AND (D.COR_ID = :COR_ID OR D.COR_ID IS NULL)
        AND D.TIPO = '2'
        AND B.CODIGO = D.MODELO_ID
        AND C.PRODUTO_CODIGO = P.CODIGO
        AND C.PESOLIQUIDO > 0;

    END
    
    UPDATE TBFRETE_DETALHE D
       SET D.CUBAGEM =
        COALESCE((
            SELECT SUM(CUBAGEM_TOTAL)
              FROM TBFRETE_DETALHE_CUBAGEM C
              WHERE C.FRETE_DETALHE_ID = D.ID),0)
     WHERE D.FRETE_ID = :FRETE_ID;
                   
    UPDATE TBFRETE_DETALHE D
       SET D.PESO_EMBALAGEM =
        COALESCE((
         SELECT SUM(PESO_TOTAL)
           FROM TBFRETE_DETALHE_PESO C
          WHERE C.FRETE_DETALHE_ID = D.ID),0)
     WHERE D.FRETE_ID = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.CUBAGEM_TOTAL = D.CUBAGEM * D.QUANTIDADE_VOLUME,
           D.PESO_BRUTO = D.PESO_LIQUIDO_TOTAL + D.PESO_EMBALAGEM
     WHERE D.FRETE_ID = :FRETE_ID;


    /* FIM - CAPTURA OS PRODUTOS DE CONSUMO QUE COMPOEM A CUBAGEM E O PESO */


    INSERT INTO TBFRETE (
        ID,
        ORIGEM,
        ORIGEM_ID,
        ESTABELECIMENTO_ID,
        ESTABELECIMENTO_RAZAOSOCIAL,
        ESTABELECIMENTO_UF,
        TRANSPORTADORA_ID, 
        TRANSPORTADORA_RAZAOSOCIAL,
        TRANSPORTADORA_CLASSIFICACAO,
        FRETE_TRANSPORTADORA_ID,
        CLIENTE_ID,
        CLIENTE_RAZAOSOCIAL,
        CIDADE_ID,
        CIDADE_DESCRICAO,
        CIDADE_PRAZO_ENTREGA,
        UF,             
        FRETE_CIDADE_AGRUPAMENTO_ID,
        VALOR_TOTAL,
        QUANTIDADE_TOTAL,
        QUANTIDADE_VOLUME,
        CUBAGEM,
        PESO_LIQUIDO,
        PESO_BRUTO,
        CTE_TRANSPORTADORA_ID,
        CTE_NF,
        CTE_SERIE,
        PERIODO_ID
    ) VALUES (
        :FRETE_ID,
        :I_ORIGEM,
        :I_ORIGEM_ID,     
        :I_ESTABELECIMENTO_ID,
        FN_DESCRICAO('TBESTABELECIMENTO',:I_ESTABELECIMENTO_ID,'RAZAOSOCIAL'),
        FN_DESCRICAO('TBESTABELECIMENTO',:I_ESTABELECIMENTO_ID,'UF'),
        :TRANSPORTADORA_ID,
        FN_DESCRICAO('TBTRANSPORTADORA',:TRANSPORTADORA_ID,'RAZAOSOCIAL'),
        (SELECT FIRST 1 CLASSIFICACAO FROM TBFRETE_TRANSPORTADORA FT WHERE FT.ID = :FRETE_TRANSPORTADORA_ID),
        :FRETE_TRANSPORTADORA_ID,
        :CLIENTE_ID,
        FN_DESCRICAO('TBCLIENTE',:CLIENTE_ID,'RAZAOSOCIAL'),
        :CIDADE_ID,
        FN_DESCRICAO('TBCIDADE',:CIDADE_ID),
        (SELECT FIRST 1 FC.PRAZO_TOTAL FROM TBFRETE_CIDADE FC WHERE FC.FRETE_CIDADE_AGRUPAMENTO_ID = :FRETE_CIDADE_AGRUPAMENTO_ID AND FC.CIDADE_ID = :CIDADE_ID),
        FN_DESCRICAO('TBCIDADE',:CIDADE_ID,'UF'),
        :FRETE_CIDADE_AGRUPAMENTO_ID,
        (SELECT SUM(D.VALOR_TOTAL)        FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.QUANTIDADE)         FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.QUANTIDADE_VOLUME)  FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.CUBAGEM_TOTAL)      FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.PESO_LIQUIDO_TOTAL) FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.PESO_BRUTO)         FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        :CTE_TRANSPORTADORA_ID,
        :CTE_NFS,
        :CTE_NFS_SERIE,
        :V_PERIODO_ID
    );

    UPDATE TBFRETE
       SET PESO_CUBADO = FN_EXECUTE_CALC_V2(FN_FRETE_VARIAVEL(:FRETE_ID,'#PESO_CUBADO#'))
     WHERE ID = :FRETE_ID;

    FOR
        SELECT V.VALOR, V.VARIAVEL
          FROM TBFRETE_TRANSPORTADORA_VARIAVEL V
         WHERE V.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
           AND V.PERIODO_ID = :V_PERIODO_ID
           AND V.VARIAVEL <> '#FRETE_FINAL#'
           and v.valor not like '''%'',%'
         ORDER BY V.SEQUENCIA
    INTO
        T_VALOR,
        T_VARIAVEL
    DO
    BEGIN

        T_VARIAVEL_CALC = FN_NUMBER_TRIM( FN_EXECUTE_CALC_V2(FN_FRETE_VARIAVEL(:FRETE_ID,:T_VARIAVEL)) );

        IF ( COALESCE(T_VARIAVEL_CALC,'') = '' ) THEN
        BEGIN
            T_VARIAVEL_CALC = T_VALOR;

        END


        UPDATE TBFRETE_TRANSPORTADORA_VARIAVEL V
           SET V.RESULTADO = :T_VARIAVEL_CALC
         WHERE V.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
           AND V.VARIAVEL = :T_VARIAVEL
           AND V.PERIODO_ID = :V_PERIODO_ID;

    END

    EXPRESSAO = FN_FRETE_VARIAVEL(:FRETE_ID);

    UPDATE TBFRETE
       SET VALOR_FINAL = FN_EXECUTE_CALC_V2(:EXPRESSAO)
     WHERE ID = :FRETE_ID;



        INSERT INTO TBFRETE_COMPOSICAO_VALOR  (
            FRETE_ID,
            SEQUENCIA,
            DESCRICAO,
            VARIAVEL,
            CAMPO_XML,
            OBSERVACAO,
            EXPRESSAO,
            EXPRESSAO_VALOR,
            VALOR,
            VALOR_DOC
        )
        SELECT
            :FRETE_ID,
            C.SEQUENCIA,
            C.DESCRICAO,
            C.VARIAVEL,
            C.CAMPO_XML,
            C.OBSERVACAO,
            FN_STRING_TO_HTML(IIF(POSITION('$',C.VARIAVEL) > 0,NULL,
                FN_FRETE_VARIAVEL(:FRETE_ID,(
                    SELECT FIRST 1 V.VALOR
                      FROM TBFRETE_TRANSPORTADORA_VARIAVEL V
                     WHERE V.FRETE_TRANSPORTADORA_ID = C.FRETE_TRANSPORTADORA_ID
                       AND V.VARIAVEL = C.VARIAVEL
                       AND V.PERIODO_ID = :V_PERIODO_ID),'EXPRESSAO'))) EXPRESSAO,

            FN_STRING_TO_HTML(IIF(POSITION('$',C.VARIAVEL) > 0,NULL,
                FN_FRETE_VARIAVEL(:FRETE_ID,(
                    SELECT FIRST 1 V.VALOR
                      FROM TBFRETE_TRANSPORTADORA_VARIAVEL V
                     WHERE V.FRETE_TRANSPORTADORA_ID = C.FRETE_TRANSPORTADORA_ID
                       AND V.VARIAVEL = C.VARIAVEL
                       AND V.PERIODO_ID = :V_PERIODO_ID)))) EXPRESSAO_VALOR,

            FN_EXECUTE_CALC_V2(FN_FRETE_VARIAVEL(:FRETE_ID,C.VARIAVEL)) VALOR,

            (SELECT FIRST 1 CT.VALOR
              FROM TBNFE N,
                   TBFRETE F,
                   TBNFE_CTE CT
             WHERE TRUE
               AND F.ID = :FRETE_ID
               AND N.EMPRESA_CODIGO = F.CTE_TRANSPORTADORA_ID
               AND N.NUMERO_NOTAFISCAL = F.CTE_NF
               AND N.SERIE = FN_LPAD(F.CTE_SERIE,3,0)
               AND CT.NFE_ID = N.CONTROLE
               AND CT.DESCRICAO IN (SELECT OSPLIT FROM SPLIT(C.CAMPO_XML,'|'))
               ) VALOR_DOC

        FROM TBFRETE_COMPOSICAO C
        WHERE C.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
          AND C.PERIODO_ID              = :V_PERIODO_ID
        ORDER BY SEQUENCIA;


    SELECT FIRST 1
        ORIGEM,
        ORIGEM_ID,
        ESTABELECIMENTO_ID,
        ESTABELECIMENTO_RAZAOSOCIAL,
        ESTABELECIMENTO_UF,
        TRANSPORTADORA_ID,
        TRANSPORTADORA_RAZAOSOCIAL,
        TRANSPORTADORA_CLASSIFICACAO,
        FRETE_TRANSPORTADORA_ID,
        CLIENTE_ID,
        CLIENTE_RAZAOSOCIAL,
        CIDADE_ID,
        CIDADE_DESCRICAO,
        CIDADE_PRAZO_ENTREGA,
        UF,
        FRETE_CIDADE_AGRUPAMENTO_ID,
        VALOR_TOTAL,
        QUANTIDADE_TOTAL,
        QUANTIDADE_VOLUME,
        CUBAGEM,
        PESO_LIQUIDO,
        PESO_BRUTO,
        PESO_CUBADO,
        VALOR_FINAL,
        DATAHORA,
        USUARIO_ID
    FROM
        TBFRETE
    WHERE
        ID = :FRETE_ID
    INTO
        ORIGEM,
        ORIGEM_ID,
        ESTABELECIMENTO_ID,
        ESTABELECIMENTO_RAZAOSOCIAL,
        ESTABELECIMENTO_UF,
        TRANSPORTADORA_ID,
        TRANSPORTADORA_RAZAOSOCIAL,
        TRANSPORTADORA_CLASSIFICACAO,
        FRETE_TRANSPORTADORA_ID,
        CLIENTE_ID,
        CLIENTE_RAZAOSOCIAL,
        CIDADE_ID,
        CIDADE_DESCRICAO,
        CIDADE_PRAZO_ENTREGA,
        UF,
        FRETE_CIDADE_AGRUPAMENTO_ID,
        VALOR_TOTAL,
        QUANTIDADE_TOTAL,
        QUANTIDADE_VOLUME,
        CUBAGEM,
        PESO_LIQUIDO,
        PESO_BRUTO,
        PESO_CUBADO,
        VALOR_FINAL,
        DATAHORA,
        USUARIO_ID;
    SUSPEND;

      WHEN ANY DO
      BEGIN
        DELETE FROM TBFRETE_DETALHE WHERE FRETE_ID = :FRETE_ID;
        IF ( I_ERRO <> 0 ) THEN
        BEGIN
            EXCEPTION;
        END
        SUSPEND;
    
      END


END
^

SET TERM ; ^

COMMENT ON PARAMETER SPC_FRETE.I_ORIGEM IS
'ORIGEM DOS DADOS. ''PEDIDO'', ''NF'', ''CTE'', ''SIMULADOR'' (TMPFRETE), ''SIMULADOR_CIDADE'' (TMPFRETE)';

COMMENT ON PARAMETER SPC_FRETE.I_ORIGEM_ID IS
'PEDIDO: NumeroPedido; NF: Nfs; CTE: TransportadoraId|Nfe|Serie ou NfeId; SIMULADOR: ClienteId; SIMULADOR_CIDADE: CidadeId';

COMMENT ON PARAMETER SPC_FRETE.I_TRANSPORTADORA_ID IS
'OBRIGATORIO SOMENTE SE ORIGEM IGUAL A ''SIMULADOR'' OU ''SIMULADOR_CIDADE''';

COMMENT ON PARAMETER SPC_FRETE.I_ESTABELECIMENTO_ID IS
'Id do estabelecimento de origem. Por padrao: 1 = MATRIZ';

COMMENT ON PARAMETER SPC_FRETE.DATA IS
'Se informado, o sistema tentara buscar as informacoes referentes a data informada';


SET TERM ^ ;

CREATE OR ALTER procedure SPC_FRETE_CORREIOS (
    I_ORIGEM varchar(50) = null,
    I_ORIGEM_ID varchar(50) = null,
    I_TRANSPORTADORA_ID integer = null,
    I_ESTABELECIMENTO_ID integer = null,
    I_ERRO integer = null,
    DATA date = null)
returns (
    FRETE_ID integer,
    EXPRESSAO varchar(3000),
    ORIGEM varchar(200),
    ORIGEM_ID varchar(50),
    ESTABELECIMENTO_ID integer,
    ESTABELECIMENTO_RAZAOSOCIAL varchar(800),
    ESTABELECIMENTO_UF varchar(200),
    TRANSPORTADORA_ID integer,
    TRANSPORTADORA_RAZAOSOCIAL varchar(800),
    TRANSPORTADORA_CLASSIFICACAO varchar(200),
    FRETE_TRANSPORTADORA_ID integer,
    CLIENTE_ID integer,
    CLIENTE_RAZAOSOCIAL varchar(800),
    CIDADE_ID integer,
    CIDADE_DESCRICAO varchar(800),
    CIDADE_PRAZO_ENTREGA numeric(15,4),
    UF varchar(200),
    FRETE_CIDADE_AGRUPAMENTO_ID integer,
    VALOR_TOTAL numeric(18,6),
    QUANTIDADE_TOTAL numeric(18,6),
    QUANTIDADE_VOLUME numeric(18,6),
    CUBAGEM numeric(18,6),
    PESO_LIQUIDO numeric(18,6),
    PESO_BRUTO numeric(18,6),
    PESO_CUBADO numeric(16,6),
    VALOR_FINAL numeric(16,6),
    DATAHORA timestamp,
    USUARIO_ID integer)
as
declare variable MODELO_ID integer;
declare variable COR_ID integer;
declare variable TAMANHO integer;
declare variable PRODUTO_ID integer;
declare variable QUANTIDADE numeric(17,6);
declare variable VALOR_UNITARIO numeric(18,8);
declare variable CTE_TRANSPORTADORA_ID integer;
declare variable CTE_NFS integer;
declare variable CTE_NFS_SERIE integer;
declare variable T_VARIAVEL varchar(3000);
declare variable T_VALOR varchar(3000);
declare variable T_VARIAVEL_CALC varchar(3000);
declare variable FRETE_DETALHE_ID integer;
declare variable NF_ID integer;
declare variable NF_ITEM_ID integer;
declare variable V_PERIODO_ID integer;

declare function SFN_MODELO_COTA_EMBALAGEM(MODELO_ID integer, TAMANHO integer) returns numeric(15,4) as begin --

return(
    select first 1
                   case :TAMANHO
                     when 01 then PC.T01
                     when 02 then PC.T02
                     when 03 then PC.T03
                     when 04 then PC.T04
                     when 05 then PC.T05
                     when 06 then PC.T06
                     when 07 then PC.T07
                     when 08 then PC.T08
                     when 09 then PC.T09
                     when 10 then PC.T10
                     when 11 then PC.T11
                     when 12 then PC.T12
                     when 13 then PC.T13
                     when 14 then PC.T14
                     when 15 then PC.T15
                     when 16 then PC.T16
                     when 17 then PC.T17
                     when 18 then PC.T18
                     when 19 then PC.T19
                     when 20 then PC.T20
                     else 99999999999
                   end
    from TBMODELO_EMBALAGEM PC
    where PC.MODELO_CODIGO = :MODELO_ID);

end
BEGIN

    DELETE FROM TBFRETE FF WHERE FF.ORIGEM =  :I_ORIGEM AND FF.ORIGEM_ID = :I_ORIGEM_ID;

    I_ESTABELECIMENTO_ID = coalesce(I_ESTABELECIMENTO_ID,0);
    if(I_ESTABELECIMENTO_ID = 0)then
    begin
       I_ESTABELECIMENTO_ID = 1;
    end


--    I_ORIGEM    = 'NF';
--    I_ORIGEM_ID = 174219;

--    I_ORIGEM            = 'SIMULADOR';
--    I_ORIGEM_ID         = 2826; -- ID DO CLIENTE
--    I_TRANSPORTADORA_ID = 4776; -- ID DA TRANSPORTADORA



    /* INICIO - TRATAMENTO DA ORIGEM DOS DADOS */
    I_ERRO = COALESCE(I_ERRO,1);

    FRETE_TRANSPORTADORA_ID = I_TRANSPORTADORA_ID;

    TRANSPORTADORA_ID = (SELECT FIRST 1 T.TRANSPORTADORA_ID FROM TBFRETE_TRANSPORTADORA T WHERE T.ID = :I_TRANSPORTADORA_ID);

    I_ESTABELECIMENTO_ID = IIF(COALESCE(I_ESTABELECIMENTO_ID,0) = 0,1,I_ESTABELECIMENTO_ID);

    FRETE_ID = GEN_ID(GTBFRETE,1);

    IF (I_ORIGEM = 'SIMULADOR_CIDADE' ) THEN
    BEGIN    

        IF ( I_ORIGEM_ID IS NULL ) THEN
        BEGIN
            EXCEPTION "..." 'INFORME O ID DA CIDADE PARA A SIMULACAO DE FRETE.';
        END

        CIDADE_ID = I_ORIGEM_ID;

        FOR
            SELECT
                F.NF_ID,
                F.NF_ITEM_ID,
                F.MODELO_ID,
                F.COR_ID,
                F.TAMANHO,
                F.QUANTIDADE,
                F.VALOR_UNITARIO
            FROM TMPFRETE F
        INTO
            NF_ID,
            NF_ITEM_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( NF_ID,  NF_ITEM_ID,  FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:NF_ID, :NF_ITEM_ID, :FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END


    END
    ELSE
    IF (I_ORIGEM = 'SIMULADOR' ) THEN
    BEGIN    

        IF ( I_ORIGEM_ID IS NULL ) THEN
        BEGIN
            EXCEPTION "..." 'INFORME O ID DO CLIENTE PARA A SIMULACAO DE FRETE.';
        END

        CLIENTE_ID = I_ORIGEM_ID;

        FOR
            SELECT
                F.NF_ID,
                F.NF_ITEM_ID,
                F.MODELO_ID,
                F.COR_ID,
                F.TAMANHO,
                F.QUANTIDADE,
                F.VALOR_UNITARIO
            FROM TMPFRETE F
        INTO
            NF_ID,
            NF_ITEM_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( NF_ID,  NF_ITEM_ID,  FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:NF_ID, :NF_ITEM_ID, :FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END


    END
    ELSE
    IF (I_ORIGEM = 'NF' ) THEN
    BEGIN
        CLIENTE_ID = (SELECT s.EMPRESA_CODIGO
                        FROM TBNFS S
                       WHERE S.NUMERO_NOTAFISCAL = :I_ORIGEM_ID);


        DATA = (SELECT s.DATA_EMISSAO
                        FROM TBNFS S
                       WHERE S.NUMERO_NOTAFISCAL = :I_ORIGEM_ID);

        TRANSPORTADORA_ID = IIF(TRANSPORTADORA_ID IS NULL,
                                (SELECT ST.TRANSPORTADORA_CODIGO
                                   FROM TBNFS S, TBNFS_TRANSPORTADORA ST
                                  WHERE S.NUMERO_NOTAFISCAL = :I_ORIGEM_ID
                                    AND ST.NFS_CONTROLE = S.CONTROLE),TRANSPORTADORA_ID);

        FOR
            SELECT
                I.PRODUTO_CODIGO,
                P.MODELO_CODIGO,
                P.COR_CODIGO,
                I.TAMANHO,
                I.QUANTIDADE,
                I.VALOR_UNITARIO + I.VALOR_ACRESCIMO + I.VALOR_SEGURO - I.VALOR_DESCONTO + I.VALOR_ICMS_ST
            FROM
                TBNFS S,
                TBNFS_ITEM I,
                TBPRODUTO P
            WHERE
                S.NUMERO_NOTAFISCAL = :I_ORIGEM_ID
            AND S.CONTROLE = I.NFS_CONTROLE
            AND P.CODIGO = I.PRODUTO_CODIGO
        INTO
            PRODUTO_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END

    END
    IF (I_ORIGEM = 'CTE' ) THEN
    BEGIN

        CTE_TRANSPORTADORA_ID = SUBSTRING(CAST(:I_ORIGEM_ID AS VARCHAR(100))  FROM 1 FOR POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)))-1 );
        CTE_NFS               = SUBSTRING(CAST(:I_ORIGEM_ID AS VARCHAR(100))  FROM POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)))+1 FOR POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)),POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)))+1) - POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100))) - 1 );
        CTE_NFS_SERIE         = SUBSTRING(CAST(:I_ORIGEM_ID AS VARCHAR(100))  FROM POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)),POSITION('|',CAST(:I_ORIGEM_ID AS VARCHAR(100)))+1)+1);


        CLIENTE_ID = (
            SELECT FIRST 1 S.EMPRESA_CODIGO
             FROM TBNFE E,
                  TBNF_REFERENCIADA R,
                  TBNFS S
            WHERE E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
              AND E.NUMERO_NOTAFISCAL = :CTE_NFS
              AND E.SERIE             = :CTE_NFS_SERIE
              AND R.ID                = E.CONTROLE
              AND S.CONTROLE          = R.NFS_ID);

        TRANSPORTADORA_ID = IIF(TRANSPORTADORA_ID IS NULL,
                                (SELECT E.EMPRESA_CODIGO
                                   FROM TBNFE E
                                  WHERE E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
                                    AND E.NUMERO_NOTAFISCAL = :CTE_NFS
                                    AND E.SERIE             = :CTE_NFS_SERIE
                                   ),TRANSPORTADORA_ID);


        IF ( COALESCE(FRETE_TRANSPORTADORA_ID,0) = 0 ) THEN
        BEGIN
            FRETE_TRANSPORTADORA_ID = COALESCE((
                SELECT T.ID
                  FROM TBNFE_TRANSPORTADORA NT,
                       TBFRETE_TRANSPORTADORA T,
                       TBNFE E
                 WHERE E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
                   AND E.NUMERO_NOTAFISCAL = :CTE_NFS
                   AND E.SERIE             = :CTE_NFS_SERIE
                   AND NT.TRANSPORTADORA_CODIGO = T.TRANSPORTADORA_ID
                   AND NT.MODALIDADE = T.MODAL
                   AND NT.NFE_CONTROLE = E.CONTROLE
                ),0);
        END
        

        DATA = (SELECT E.DATA_EMISSAO
                  FROM TBNFE E
                 WHERE E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
                   AND E.NUMERO_NOTAFISCAL = :CTE_NFS
                   AND E.SERIE             = :CTE_NFS_SERIE);

        FOR
            SELECT
                S.CONTROLE,
                I.CONTROLE,
                I.PRODUTO_CODIGO,
                P.MODELO_CODIGO,
                P.COR_CODIGO,
                I.TAMANHO,
                I.QUANTIDADE,
                I.VALOR_UNITARIO + I.VALOR_ACRESCIMO + I.VALOR_SEGURO - I.VALOR_DESCONTO + I.VALOR_ICMS_ST
            
            FROM
                TBNFE E,
                TBNF_REFERENCIADA R,
                TBNFS S,
                TBNFS_ITEM I,
                TBPRODUTO P
            
            WHERE TRUE
            AND E.EMPRESA_CODIGO    = :CTE_TRANSPORTADORA_ID
            AND E.NUMERO_NOTAFISCAL = :CTE_NFS
            AND E.SERIE             = :CTE_NFS_SERIE
            AND R.ID = E.CONTROLE
            AND R.NFS_ID = S.CONTROLE
            AND I.NFS_CONTROLE = S.CONTROLE
            AND P.CODIGO = I.PRODUTO_CODIGO
        INTO
            NF_ID,
            NF_ITEM_ID,
            PRODUTO_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( NF_ID,  NF_ITEM_ID,  FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:NF_ID, :NF_ITEM_ID, :FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END

    END
    ELSE
    IF (I_ORIGEM = 'PEDIDO' ) THEN
    BEGIN


        CLIENTE_ID = (
            SELECT FIRST 1 P.CLIENTE_CODIGO
             FROM TBPEDIDO P
            WHERE P.PEDIDO = :I_ORIGEM_ID);

        DATA = (
            SELECT FIRST 1 P.DATA_CLIENTE
             FROM TBPEDIDO P
            WHERE P.PEDIDO = :I_ORIGEM_ID);

        TRANSPORTADORA_ID = IIF(TRANSPORTADORA_ID IS NULL, (
                                SELECT FIRST 1 P.TRANSPORTADORA_CODIGO
                                  FROM TBPEDIDO P
                                 WHERE P.PEDIDO = :I_ORIGEM_ID
                                   ),TRANSPORTADORA_ID);

        FOR
            SELECT
                I.PRODUTO_CODIGO,
                FN_DESCRICAO('TBPRODUTO',I.PRODUTO_CODIGO,'MODELO_CODIGO') MODELO_ID,
                FN_DESCRICAO('TBPRODUTO',I.PRODUTO_CODIGO,'COR_CODIGO') COR_ID,
                I.TAMANHO,
                I.QUANTIDADE,
                I.VALOR
            
            FROM
                TBPEDIDO_ITEM I
            WHERE
                I.PEDIDO = :I_ORIGEM_ID
        INTO
            PRODUTO_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            QUANTIDADE,
            VALOR_UNITARIO
        DO
        BEGIN
            INSERT INTO TBFRETE_DETALHE ( FRETE_ID, MODELO_ID,  COR_ID,  TAMANHO,  PRODUTO_ID,  QUANTIDADE,  VALOR_UNITARIO)
                                 VALUES (:FRETE_ID,:MODELO_ID, :COR_ID, :TAMANHO, :PRODUTO_ID, :QUANTIDADE, :VALOR_UNITARIO);
        END

    END


    IF ( CIDADE_ID IS NULL ) THEN
    BEGIN
        CIDADE_ID = (
            SELECT
                (SELECT FIRST 1 C.ID
                   FROM TBCIDADE C
                  WHERE C.UF = E.UF
                    AND C.DESCRICAO = E.CIDADE)
              FROM TBEMPRESA E
             WHERE E.CODIGO = :CLIENTE_ID);
    END


    IF ( TRANSPORTADORA_ID IS NULL ) THEN
    BEGIN
        EXCEPTION "..." 'INFORME O ID DA TRANSPORTADORA.';
    END

    IF ( CIDADE_ID IS NULL ) THEN
    BEGIN
        EXCEPTION "..." 'CIDADE NAO INFORMADA';
    END

    IF ( COALESCE(FRETE_TRANSPORTADORA_ID,0) = 0 ) THEN
    BEGIN
        FRETE_TRANSPORTADORA_ID = (SELECT FIRST 1 X.ID FROM TBFRETE_TRANSPORTADORA X WHERE X.TRANSPORTADORA_ID = :TRANSPORTADORA_ID);
    END

    --IF ( COALESCE(FRETE_TRANSPORTADORA_ID,0) = 0 AND I_ERRO <> 2 ) THEN
    --BEGIN
    --    EXCEPTION "..." 'NAO HA REGRAS DE CALCULO DE FRETE PARA TRANSPORTADORA: ' || FN_LPAD(TRANSPORTADORA_ID,4,0) || ' - ' || COALESCE(FN_DESCRICAO('TBTRANSPORTADORA',:TRANSPORTADORA_ID,'RAZAOSOCIAL'),'');
    --END


    DATA = COALESCE(DATA,CURRENT_DATE);

    /*
    V_PERIODO_ID =
        (SELECT FIRST 1 ID
           FROM TBFRETE_TRANSPORTADORA_PERIODO P
          WHERE :DATA BETWEEN P.DATA_1 AND P.DATA_2
            AND P.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID);

    IF ( (COALESCE(V_PERIODO_ID,0) = 0 AND I_ERRO <> 2) ) THEN
    BEGIN
        EXCEPTION "..." 'NAO HA FONTE DE DADOS PARA A DATA: ' || FN_DATE(DATA) || ' NA TRANSPORTADORA: ' || FN_LPAD(TRANSPORTADORA_ID,4,0) || ' - ' || COALESCE(FN_DESCRICAO('TBFRETE_TRANSPORTADORA',:FRETE_TRANSPORTADORA_ID,'RAZAOSOCIAL'),'') || ' - ' || COALESCE(FN_DESCRICAO('TBFRETE_TRANSPORTADORA',:FRETE_TRANSPORTADORA_ID,'CLASSIFICACAO'),'');
    END

    FRETE_CIDADE_AGRUPAMENTO_ID =
        (SELECT A.ID
           FROM TBFRETE_CIDADE C, TBFRETE_CIDADE_AGRUPAMENTO A
          WHERE A.ID                      = C.FRETE_CIDADE_AGRUPAMENTO_ID
            AND C.CIDADE_ID               = :CIDADE_ID
            AND A.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
            AND A.PERIODO_ID              = :V_PERIODO_ID);

    IF ( COALESCE(FRETE_CIDADE_AGRUPAMENTO_ID,0) = 0 AND I_ERRO <> 2 ) THEN
    BEGIN
        EXCEPTION "..." 'CIDADE DE DESTINO: ' || FN_LPAD(CIDADE_ID,4,0) || ' - ' || COALESCE(FN_DESCRICAO('TBCIDADE',CIDADE_ID),'') || ' NAO ESTA EM UM AGRUPAMENTO DE CIDADE PARA TRANSPORTADORA : ' || FN_LPAD(TRANSPORTADORA_ID,4,0) || ' - ' || COALESCE(FN_DESCRICAO('TBFRETE_TRANSPORTADORA',:FRETE_TRANSPORTADORA_ID,'RAZAOSOCIAL'),'') || ' - ' || COALESCE(FN_DESCRICAO('TBFRETE_TRANSPORTADORA',:FRETE_TRANSPORTADORA_ID,'CLASSIFICACAO'),'') || ' PARA A DATA: ' || FN_DATE_TO_STRING(DATA) || ' PERIODO: (' || V_PERIODO_ID || ')';
    END


    UPDATE TBFRETE_TRANSPORTADORA_VARIAVEL
       SET RESULTADO = NULL
     WHERE FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
       AND PERIODO_ID = :V_PERIODO_ID;
    */

    /* FIM - TRATAMENTO DA ORIGEM DOS DADOS */

    UPDATE TBFRETE_DETALHE D
       SET D.PRODUTO_ID = (SELECT FIRST 1 P.CODIGO
                             FROM TBPRODUTO P
                            WHERE P.MODELO_CODIGO = D.MODELO_ID
                              AND P.COR_CODIGO = D.COR_ID)
     WHERE COALESCE(PRODUTO_ID,0) = 0
       AND MODELO_ID              > 0
       AND FRETE_ID               = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.PRODUTO_DESCRICAO  = FN_DESCRICAO('TBPRODUTO',D.PRODUTO_ID),
           D.TAMANHO_DESCRICAO  = FN_TAMANHO_PRODUTO(D.PRODUTO_ID,D.TAMANHO),
           D.UM                 = FN_DESCRICAO('TBPRODUTO',D.PRODUTO_ID,'UNIDADEMEDIDA_SIGLA'),
           D.VALOR_TOTAL        = D.VALOR_UNITARIO * D.QUANTIDADE,
           D.COTA_EMBALAGEM     = COALESCE(SFN_MODELO_COTA_EMBALAGEM(MODELO_ID,TAMANHO),QUANTIDADE)
     WHERE FRETE_ID             = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.QUANTIDADE_VOLUME  = COALESCE(FN_ARRENDONDAR_PARA_CIMA(QUANTIDADE / NULLIF(D.COTA_EMBALAGEM,0)),0)
     WHERE FRETE_ID             = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.PESO_LIQUIDO = COALESCE((
        SELECT E.VALOR
          FROM VWMODELO_FICHA_TECNICA E
         WHERE E.MODELO_ID = D.MODELO_ID
           AND E.TAMANHO = D.TAMANHO
           AND E.TIPO_ID = FN_DESCRICAO('TBCONTROLE_N',101,'VALOR_EXT') ),0) / 1000
     WHERE FRETE_ID = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.PESO_LIQUIDO = COALESCE(
        IIF(NOT (D.PESO_LIQUIDO > 0),(
            SELECT FIRST 1 COALESCE(PF.PESOLIQUIDO,0)/1000
              FROM TBPRODUTO_FICHA PF
             WHERE PF.PRODUTO_CODIGO = D.PRODUTO_ID),D.PESO_LIQUIDO),0)
     WHERE FRETE_ID = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.PESO_LIQUIDO_TOTAL = D.PESO_LIQUIDO * D.QUANTIDADE
     WHERE FRETE_ID = :FRETE_ID;



    /* INICIO - CAPTURA OS PRODUTOS DE CONSUMO QUE COMPOEM A CUBAGEM E O PESO */
    FOR
        SELECT D.ID,
               D.MODELO_ID,
               D.COR_ID,
               D.TAMANHO,
               D.QUANTIDADE,
               D.QUANTIDADE_VOLUME
          FROM TBFRETE_DETALHE D
         WHERE D.FRETE_ID = :FRETE_ID
            
    INTO
        FRETE_DETALHE_ID,
        MODELO_ID,
        COR_ID,
        TAMANHO,
        QUANTIDADE,
        QUANTIDADE_VOLUME
    DO
    BEGIN
        /* CUBAGEM */
        INSERT INTO TBFRETE_DETALHE_CUBAGEM (
            FRETE_DETALHE_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            CUBAGEM_PRODUTO_ID,
            CUBAGEM_PRODUTO_DESCRICAO,
            CUBAGEM_ALTURA,
            CUBAGEM_LARGURA,
            CUBAGEM_COMPRIMENTO
        )
        SELECT
            :FRETE_DETALHE_ID,
            :MODELO_ID,
            :COR_ID,
            :TAMANHO,
            C.CONSUMO_PRODUTO_ID,
            C.CONSUMO_PRODUTO_DESCRICAO,
            COALESCE(F.CUBAGEM_ALTURA,0)/1000 ALTURA,
            COALESCE(F.CUBAGEM_LARGURA,0)/1000 LARGURA,
            COALESCE(F.CUBAGEM_COMPRIMENTO,0)/1000 COMPRIMENTO
        FROM
            VWMODELO_FICHA_CONSUMO C,
            TBPRODUTO_FICHA F
        WHERE
            C.MODELO_ID = :MODELO_ID
        AND C.TAMANHO = :TAMANHO
        AND (C.COR_ID = :COR_ID OR COR_ID IS NULL)
        AND F.PRODUTO_CODIGO = C.CONSUMO_PRODUTO_ID
        AND F.CUBAGEM_ALTURA > 0
        AND C.TIPO = '2';

        /* PESO */
        INSERT INTO TBFRETE_DETALHE_PESO (
            FRETE_DETALHE_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            PESO_PRODUTO_ID,
            PESO_PRODUTO_DESCRICAO,
            PESO,
            PESO_FATOR_CALCULO,
            PESO_FATOR_CALCULO_TIPO,
            PESO_TOTAL
        )
        SELECT
            :FRETE_DETALHE_ID,
            :MODELO_ID,
            :COR_ID,
            :TAMANHO,
            P.CODIGO,
            P.DESCRICAO,
            C.PESOLIQUIDO / 1000 PESO,
            D.CONSUMO_FATOR_DIVISOR,
            NULL CONSUMO_FATOR_CALCULO_TIPO,
            CAST( CAST( CAST( D.CONSUMO_QUANTIDADE/D.CONSUMO_FATOR_DIVISOR AS NUMERIC(15,8)) * :QUANTIDADE AS NUMERIC(15,8)) * C.PESOLIQUIDO AS NUMERIC(15,12)) / 1000 PESO_EMBALAGEM
        
        FROM TBMODELO B, TBPRODUTO_FICHA C, VWMODELO_FICHA_CONSUMO D, TBPRODUTO P
        
        WHERE C.PRODUTO_CODIGO = D.CONSUMO_PRODUTO_ID
        
        AND D.MODELO_ID = :MODELO_ID
        AND D.TAMANHO = :TAMANHO
        AND (D.COR_ID = :COR_ID OR D.COR_ID IS NULL)
        AND D.TIPO = '2'
        AND B.CODIGO = D.MODELO_ID
        AND C.PRODUTO_CODIGO = P.CODIGO
        AND C.PESOLIQUIDO > 0;

    END
    
    UPDATE TBFRETE_DETALHE D
       SET D.CUBAGEM =
        COALESCE((
            SELECT SUM(CUBAGEM_TOTAL)
              FROM TBFRETE_DETALHE_CUBAGEM C
              WHERE C.FRETE_DETALHE_ID = D.ID),0)
     WHERE D.FRETE_ID = :FRETE_ID;
                   
    UPDATE TBFRETE_DETALHE D
       SET D.PESO_EMBALAGEM =
        COALESCE((
         SELECT SUM(PESO_TOTAL)
           FROM TBFRETE_DETALHE_PESO C
          WHERE C.FRETE_DETALHE_ID = D.ID),0)
     WHERE D.FRETE_ID = :FRETE_ID;

    UPDATE TBFRETE_DETALHE D
       SET D.CUBAGEM_TOTAL = D.CUBAGEM * D.QUANTIDADE_VOLUME,
           D.PESO_BRUTO = D.PESO_LIQUIDO_TOTAL + D.PESO_EMBALAGEM
     WHERE D.FRETE_ID = :FRETE_ID;


    /* FIM - CAPTURA OS PRODUTOS DE CONSUMO QUE COMPOEM A CUBAGEM E O PESO */


    INSERT INTO TBFRETE (
        ID,
        ORIGEM,
        ORIGEM_ID,
        ESTABELECIMENTO_ID,
        ESTABELECIMENTO_RAZAOSOCIAL,
        ESTABELECIMENTO_UF,
        TRANSPORTADORA_ID, 
        TRANSPORTADORA_RAZAOSOCIAL,
        TRANSPORTADORA_CLASSIFICACAO,
        FRETE_TRANSPORTADORA_ID,
        CLIENTE_ID,
        CLIENTE_RAZAOSOCIAL,
        CIDADE_ID,
        CIDADE_DESCRICAO,
        CIDADE_PRAZO_ENTREGA,
        UF,             
        FRETE_CIDADE_AGRUPAMENTO_ID,
        VALOR_TOTAL,
        QUANTIDADE_TOTAL,
        QUANTIDADE_VOLUME,
        CUBAGEM,
        PESO_LIQUIDO,
        PESO_BRUTO,
        CTE_TRANSPORTADORA_ID,
        CTE_NF,
        CTE_SERIE,
        PERIODO_ID
    ) VALUES (
        :FRETE_ID,
        :I_ORIGEM,
        :I_ORIGEM_ID,     
        :I_ESTABELECIMENTO_ID,
        FN_DESCRICAO('TBESTABELECIMENTO',:I_ESTABELECIMENTO_ID,'RAZAOSOCIAL'),
        FN_DESCRICAO('TBESTABELECIMENTO',:I_ESTABELECIMENTO_ID,'UF'),
        :TRANSPORTADORA_ID,
        FN_DESCRICAO('TBTRANSPORTADORA',:TRANSPORTADORA_ID,'RAZAOSOCIAL'),
        (SELECT FIRST 1 CLASSIFICACAO FROM TBFRETE_TRANSPORTADORA FT WHERE FT.ID = :FRETE_TRANSPORTADORA_ID),
        :FRETE_TRANSPORTADORA_ID,
        :CLIENTE_ID,
        FN_DESCRICAO('TBCLIENTE',:CLIENTE_ID,'RAZAOSOCIAL'),
        :CIDADE_ID,
        FN_DESCRICAO('TBCIDADE',:CIDADE_ID),
        (SELECT FIRST 1 FC.PRAZO_TOTAL FROM TBFRETE_CIDADE FC WHERE FC.FRETE_CIDADE_AGRUPAMENTO_ID = :FRETE_CIDADE_AGRUPAMENTO_ID AND FC.CIDADE_ID = :CIDADE_ID),
        FN_DESCRICAO('TBCIDADE',:CIDADE_ID,'UF'),
        :FRETE_CIDADE_AGRUPAMENTO_ID,
        (SELECT SUM(D.VALOR_TOTAL)        FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.QUANTIDADE)         FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.QUANTIDADE_VOLUME)  FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.CUBAGEM_TOTAL)      FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.PESO_LIQUIDO_TOTAL) FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        (SELECT SUM(D.PESO_BRUTO)         FROM TBFRETE_DETALHE D WHERE FRETE_ID = :FRETE_ID),
        :CTE_TRANSPORTADORA_ID,
        :CTE_NFS,
        :CTE_NFS_SERIE,
        :V_PERIODO_ID
    );

    UPDATE TBFRETE
       SET PESO_CUBADO = FN_EXECUTE_CALC_V3(FN_FRETE_VARIAVEL(:FRETE_ID,'#PESO_CUBADO#'))
     WHERE ID = :FRETE_ID;



    FOR
        SELECT V.VALOR, V.VARIAVEL
          FROM TBFRETE_TRANSPORTADORA_VARIAVEL V
         WHERE V.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
           AND V.PERIODO_ID = :V_PERIODO_ID
           AND V.VARIAVEL <> '#FRETE_FINAL#'
         ORDER BY V.SEQUENCIA
    INTO
        T_VALOR,
        T_VARIAVEL
    DO
    BEGIN
        T_VARIAVEL_CALC = FN_NUMBER_TRIM(FN_EXECUTE_CALC(FN_FRETE_VARIAVEL(:FRETE_ID,:T_VARIAVEL)));

        IF ( COALESCE(T_VARIAVEL_CALC,'') = '' ) THEN
        BEGIN
            T_VARIAVEL_CALC = T_VALOR;

        END


        UPDATE TBFRETE_TRANSPORTADORA_VARIAVEL V
           SET V.RESULTADO = :T_VARIAVEL_CALC
         WHERE V.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
           AND V.VARIAVEL = :T_VARIAVEL
           AND V.PERIODO_ID = :V_PERIODO_ID;

    END


                


    EXPRESSAO = FN_FRETE_VARIAVEL(:FRETE_ID);

    UPDATE TBFRETE
       SET VALOR_FINAL = FN_EXECUTE_CALC_V3(:EXPRESSAO)
     WHERE ID = :FRETE_ID;



        INSERT INTO TBFRETE_COMPOSICAO_VALOR  (
            FRETE_ID,
            SEQUENCIA,
            DESCRICAO,
            VARIAVEL,
            CAMPO_XML,
            OBSERVACAO,
            EXPRESSAO,
            EXPRESSAO_VALOR,
            VALOR,
            VALOR_DOC
        )
        SELECT
            :FRETE_ID,
            C.SEQUENCIA,
            C.DESCRICAO,
            C.VARIAVEL,
            C.CAMPO_XML,
            C.OBSERVACAO,
            FN_STRING_TO_HTML(IIF(POSITION('$',C.VARIAVEL) > 0,NULL,
                FN_FRETE_VARIAVEL(:FRETE_ID,(
                    SELECT FIRST 1 V.VALOR
                      FROM TBFRETE_TRANSPORTADORA_VARIAVEL V
                     WHERE V.FRETE_TRANSPORTADORA_ID = C.FRETE_TRANSPORTADORA_ID
                       AND V.VARIAVEL = C.VARIAVEL
                       AND V.PERIODO_ID = :V_PERIODO_ID),'EXPRESSAO'))) EXPRESSAO,

            FN_STRING_TO_HTML(IIF(POSITION('$',C.VARIAVEL) > 0,NULL,
                FN_FRETE_VARIAVEL(:FRETE_ID,(
                    SELECT FIRST 1 V.VALOR
                      FROM TBFRETE_TRANSPORTADORA_VARIAVEL V
                     WHERE V.FRETE_TRANSPORTADORA_ID = C.FRETE_TRANSPORTADORA_ID
                       AND V.VARIAVEL = C.VARIAVEL
                       AND V.PERIODO_ID = :V_PERIODO_ID)))) EXPRESSAO_VALOR,

            FN_EXECUTE_CALC(FN_FRETE_VARIAVEL(:FRETE_ID,C.VARIAVEL)) VALOR,

            (SELECT FIRST 1 CT.VALOR
              FROM TBNFE N,
                   TBFRETE F,
                   TBNFE_CTE CT
             WHERE TRUE
               AND F.ID = :FRETE_ID
               AND N.EMPRESA_CODIGO = F.CTE_TRANSPORTADORA_ID
               AND N.NUMERO_NOTAFISCAL = F.CTE_NF
               AND N.SERIE = FN_LPAD(F.CTE_SERIE,3,0)
               AND CT.NFE_ID = N.CONTROLE
               AND CT.DESCRICAO IN (SELECT OSPLIT FROM SPLIT(C.CAMPO_XML,'|'))
               ) VALOR_DOC

        FROM TBFRETE_COMPOSICAO C
        WHERE C.FRETE_TRANSPORTADORA_ID = :FRETE_TRANSPORTADORA_ID
          AND C.PERIODO_ID              = :V_PERIODO_ID
        ORDER BY SEQUENCIA;


    SELECT FIRST 1
        ORIGEM,
        ORIGEM_ID,
        ESTABELECIMENTO_ID,
        ESTABELECIMENTO_RAZAOSOCIAL,
        ESTABELECIMENTO_UF,
        TRANSPORTADORA_ID,
        TRANSPORTADORA_RAZAOSOCIAL,
        TRANSPORTADORA_CLASSIFICACAO,
        FRETE_TRANSPORTADORA_ID,
        CLIENTE_ID,
        CLIENTE_RAZAOSOCIAL,
        CIDADE_ID,
        CIDADE_DESCRICAO,
        CIDADE_PRAZO_ENTREGA,
        UF,
        FRETE_CIDADE_AGRUPAMENTO_ID,
        VALOR_TOTAL,
        QUANTIDADE_TOTAL,
        QUANTIDADE_VOLUME,
        CUBAGEM,
        PESO_LIQUIDO,
        PESO_BRUTO,
        PESO_CUBADO,
        VALOR_FINAL,
        DATAHORA,
        USUARIO_ID
    FROM
        TBFRETE
    WHERE
        ID = :FRETE_ID
    INTO
        ORIGEM,
        ORIGEM_ID,
        ESTABELECIMENTO_ID,
        ESTABELECIMENTO_RAZAOSOCIAL,
        ESTABELECIMENTO_UF,
        TRANSPORTADORA_ID,
        TRANSPORTADORA_RAZAOSOCIAL,
        TRANSPORTADORA_CLASSIFICACAO,
        FRETE_TRANSPORTADORA_ID,
        CLIENTE_ID,
        CLIENTE_RAZAOSOCIAL,
        CIDADE_ID,
        CIDADE_DESCRICAO,
        CIDADE_PRAZO_ENTREGA,
        UF,
        FRETE_CIDADE_AGRUPAMENTO_ID,
        VALOR_TOTAL,
        QUANTIDADE_TOTAL,
        QUANTIDADE_VOLUME,
        CUBAGEM,
        PESO_LIQUIDO,
        PESO_BRUTO,
        PESO_CUBADO,
        VALOR_FINAL,
        DATAHORA,
        USUARIO_ID;
    SUSPEND;

      WHEN ANY DO
      BEGIN
        DELETE FROM TBFRETE_DETALHE WHERE FRETE_ID = :FRETE_ID;
        IF ( I_ERRO <> 0 ) THEN
        BEGIN
            EXCEPTION;
        END
        SUSPEND;
    
      END


END
^

SET TERM ; ^

COMMENT ON PARAMETER SPC_FRETE_CORREIOS.I_ORIGEM IS
'ORIGEM DOS DADOS. ''PEDIDO'', ''NF'', ''CTE'', ''SIMULADOR'' (TMPFRETE), ''SIMULADOR_CIDADE'' (TMPFRETE)';

COMMENT ON PARAMETER SPC_FRETE_CORREIOS.I_ORIGEM_ID IS
'PEDIDO: NumeroPedido; NF: Nfs; CTE: TransportadoraId|Nfe|Serie ou NfeId; SIMULADOR: ClienteId; SIMULADOR_CIDADE: CidadeId';

COMMENT ON PARAMETER SPC_FRETE_CORREIOS.I_TRANSPORTADORA_ID IS
'OBRIGATORIO SOMENTE SE ORIGEM IGUAL A ''SIMULADOR'' OU ''SIMULADOR_CIDADE''';

COMMENT ON PARAMETER SPC_FRETE_CORREIOS.I_ESTABELECIMENTO_ID IS
'Id do estabelecimento de origem. Por padrao: 1 = MATRIZ';

COMMENT ON PARAMETER SPC_FRETE_CORREIOS.DATA IS
'Se informado, o sistema tentara buscar as informacoes referentes a data informada';


SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFE_BENEF_RETORNO2 (
    ESTABELECIMENTO_1 integer,
    EMPRESA_1 integer,
    CONTROLE_1 integer)
returns (
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    OPERACAO_CODIGO varchar(3),
    GRADE_CODIGO integer,
    VALOR_UNITARIO numeric(18,8),
    QUANTIDADE 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))
as
BEGIN
FOR Select Distinct(B.Numero_NotaFiscal), B.Data_Emissao, B.Operacao_Codigo,
       B.Grade_Codigo, B.Valor_Unitario,
       B.QUANTIDADE, B.t01,B.t02,B.t03,B.t04,B.t05,B.t06,B.t07,B.t08,B.t09,B.t10,
                     B.t11,B.t12,B.t13,B.t14,B.t15,B.t16,B.t17,B.t18,B.t19,B.t20
From TbNfs A, TbNfs_Item B
WHERE A.Controle = B.Nfs_Controle
  and ((A.Situacao = 1 and A.Natureza = 2)
   or  (A.Situacao = 2 and A.Natureza = 1))
  and A.Estabelecimento_Codigo   = :ESTABELECIMENTO_1
  and B.Nf_Externo_Item_Controle = :CONTROLE_1

Order By B.Numero_NotaFiscal

INTO
    :Numero_NotaFiscal,
    :Data_Emissao,
    :Operacao_Codigo,
    :Grade_Codigo,
    :Valor_Unitario,
    :quantidade,
    :t01, :t02, :t03, :t04, :t05, :t06, :t07, :t08, :t09, :t10,
    :t11, :t12, :t13, :t14, :t15, :t16, :t17, :t18, :t19, :t20
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(10),
    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(18,8),
    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(10),
    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_UNIDADEMEDIDA, 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_UNIDADEMEDIDA, 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(10),
    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(18,8),
    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(10),
    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_UNIDADEMEDIDA, 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_UNIDADEMEDIDA, 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 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(10),
    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(18,8),
    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(10),
    VALOR_ALTERNATIVO numeric(18,10),
    REDUCAO_BASE_PISCOF char(1),
    OPERACAO_TIPO_DESCONTO varchar(1),
    GC_WEB integer,
    MARGEM numeric(18,4) = 0,
    PDV_CONFERENCIA_ITEM_ID integer = 0,
    PDV_CONFERENCIA_ID integer = 0,
    PERCENTUAL_SUFRAMA numeric(15,2) = 0,
    VALOR_SUFRAMA numeric(15,2) = 0,
    PERCENTUAL_ICMS_OPERACAO numeric(15,2) = 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_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, TIPO_DESCONTO, GC_WEB, MARGEM, PDV_CONFERENCIA_ITEM_ID,
PDV_CONFERENCIA_ID, PERCENTUAL_SUFRAMA, VALOR_SUFRAMA, PERCENTUAL_ICMS_OPERACAO)
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,  :PERCENTUAL_SUFRAMA, :VALOR_SUFRAMA, :PERCENTUAL_ICMS_OPERACAO);

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 SPU_NFS_ITEM (
    NFS_CONTROLE integer,
    CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    LOCALIZACAO_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    SITUACAO integer,
    NF_NATUREZA integer,
    CFOP_CODIGO varchar(5),
    NCM_CODIGO varchar(10),
    TRIBUTACAO_ORIGEM integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_PIS char(2),
    TRIBUTACAO_COFINS char(2),
    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_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),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO 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),
    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),
    VALOR_UNITARIO numeric(18,8),
    VALOR_TOTAL numeric(10,5),
    VALOR_BASECALCULO_ICMS numeric(10,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),
    GC_WEB integer,
    QUANTIDADE numeric(10,5),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(10),
    VALOR_ALTERNATIVO numeric(18,10),
    INFORMACOES_COMPLEMENTARES varchar(500),
    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),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11),
    MARGEM numeric(10,2) = 0,
    PDV_CONFERENCIA_ITEM_ID integer = 0,
    PDV_CONFERENCIA_ID integer = 0,
    PERCENTUAL_SUFRAMA numeric(15,2) = 0,
    VALOR_SUFRAMA numeric(15,2) = 0,
    PERCENTUAL_ICMS_OPERACAO numeric(15,2) = 0)
as
BEGIN

-- UPDATE TBNFS_ITEM
UPDATE TBNFS_ITEM SET
ESTABELECIMENTO_CODIGO              = :ESTABELECIMENTO_CODIGO,
EMPRESA_CODIGO                      = :EMPRESA_CODIGO,
PRODUTO_DESCRICAO                   = :PRODUTO_DESCRICAO,
LOCALIZACAO_CODIGO                  = :LOCALIZACAO_CODIGO,
NUMERO_NOTAFISCAL                   = :NUMERO_NOTAFISCAL,
DATA_EMISSAO                        = :DATA_EMISSAO,
NF_SITUACAO                         = :SITUACAO,
NF_NATUREZA                         = :NF_NATUREZA,
CFOP_CODIGO                         = :CFOP_CODIGO,
NCM_CODIGO                          = :NCM_CODIGO,
TRIBUTACAO_ORIGEM                   = :TRIBUTACAO_ORIGEM,
TRIBUTACAO_IPI                      = :TRIBUTACAO_IPI,
TRIBUTACAO_ICMS                     = :TRIBUTACAO_ICMS,
TRIBUTACAO_PIS                      = :TRIBUTACAO_PIS,
TRIBUTACAO_COFINS                   = :TRIBUTACAO_COFINS,
BASECALCULO_ICMS                    = :BASECALCULO_ICMS,
PERCENTUAL_ICMS                     = :PERCENTUAL_ICMS ,
PERCENTUAL_IPI                      = :PERCENTUAL_IPI,
VALOR_IPI                           = :VALOR_IPI,
PERCENTUAL_PIS                      = :PERCENTUAL_PIS,
VALOR_PIS                           = :VALOR_PIS,
PERCENTUAL_COFINS                   = :PERCENTUAL_COFINS,
VALOR_COFINS                        = :VALOR_COFINS,
VALOR_ICMS                          = :VALOR_ICMS           ,
BASECALCULO_IPI                     = :BASECALCULO_IPI      ,
BASECALCULO_PIS                     = :BASECALCULO_PIS      ,
BASECALCULO_COFINS                  = :BASECALCULO_COFINS   ,
VALOR_ACRESCIMO                     = :VALOR_ACRESCIMO      ,
VALOR_DESCONTO                      = :VALOR_DESCONTO       ,
VALOR_FRETE                         = :VALOR_FRETE,
VALOR_SEGURO                        = :VALOR_SEGURO,
FISCAL_ISENTAS_IPI                  = :FISCAL_ISENTAS_IPI   ,
FISCAL_ISENTAS_ICMS                 = :FISCAL_ISENTAS_ICMS  ,
FISCAL_OUTRAS_IPI                   = :FISCAL_OUTRAS_IPI    ,
FISCAL_OUTRAS_ICMS                  = :FISCAL_OUTRAS_ICMS   ,
FISCAL_VALOR_ICMS                   = :FISCAL_VALOR_ICMS    ,
FISCAL_VALOR_IPI                    = :FISCAL_VALOR_IPI     ,
FISCAL_VALOR_PIS                    = :FISCAL_VALOR_PIS     ,
FISCAL_VALOR_COFINS                 = :FISCAL_VALOR_COFINS  ,
FISCAL_PERCENTUAL_ICMS              = :FISCAL_PERCENTUAL_ICMS,
FISCAL_PERCENTUAL_IPI               = :FISCAL_PERCENTUAL_IPI ,
FISCAL_PERCENTUAL_PIS               = :FISCAL_PERCENTUAL_PIS ,
FISCAL_PERCENTUAL_COFINS            = :FISCAL_PERCENTUAL_COFINS,
FISCAL_BASECALCULO_ICMS             = :FISCAL_BASECALCULO_ICMS ,
FISCAL_BASECALCULO_IPI              = :FISCAL_BASECALCULO_IPI  ,
FISCAL_BASECALCULO_PIS              = :FISCAL_BASECALCULO_PIS  ,
FISCAL_BASECALCULO_COFINS           = :FISCAL_BASECALCULO_COFINS,
VALOR_CONTABIL                      = :VALOR_CONTABIL,
FISCAL_CFOP_CODIGO                  = :FISCAL_CFOP_CODIGO,
FISCAL_TRIBUTACAO_ORIGEM            = :FISCAL_TRIBUTACAO_ORIGEM,
FISCAL_TRIBUTACAO_ICMS              = :FISCAL_TRIBUTACAO_ICMS,
FISCAL_TRIBUTACAO_IPI               = :FISCAL_TRIBUTACAO_IPI,
FISCAL_TRIBUTACAO_PIS               = :FISCAL_TRIBUTACAO_PIS,
FISCAL_TRIBUTACAO_COFINS            = :FISCAL_TRIBUTACAO_COFINS,
VALOR_UNITARIO                      = :VALOR_UNITARIO,
VALOR_TOTAL                         = :VALOR_TOTAL,
VALOR_BASECALCULO_ICMS              = :VALOR_BASECALCULO_ICMS,
MODALIDADE_ICMS                     = :MODALIDADE_ICMS,
MODALIDADE_ICMS_ST                  = :MODALIDADE_ICMS_ST,
MARGEM_ICMS_ST                      = :MARGEM_ICMS_ST,
REDUCAO_ICMS_ST                     = :REDUCAO_ICMS_ST,
BASECALCULO_ICMS_ST                 = :BASECALCULO_ICMS_ST,
ALIQUOTA_ICMS_ST                    = :ALIQUOTA_ICMS_ST,
VALOR_ICMS_ST                       = :VALOR_ICMS_ST,
FISCAL_REDUCAO_ICMS_ST              = :FISCAL_REDUCAO_ICMS_ST,
FISCAL_BASECALCULO_ICMS_ST          = :FISCAL_BASECALCULO_ICMS_ST,
FISCAL_ALIQUOTA_ICMS_ST             = :FISCAL_ALIQUOTA_ICMS_ST,
FISCAL_VALOR_ICMS_ST                = :FISCAL_VALOR_ICMS_ST,
GC_WEB                              = :GC_WEB,
QUANTIDADE                          = :QUANTIDADE,
QUANTIDADE_ALTERNATIVA              = :QUANTIDADE_ALTERNATIVA,
UM_ALTERNATIVA                      = :UM_ALTERNATIVA,
VALOR_ALTERNATIVO                   = :VALOR_ALTERNATIVO,
INFORMACOES_COMPLEMENTARES          = :INFORMACOES_COMPLEMENTARES,
MARGEM                              = :MARGEM,
PDV_CONFERENCIA_ITEM_ID             = :PDV_CONFERENCIA_ITEM_ID,
PDV_CONFERENCIA_ID                  = :PDV_CONFERENCIA_ID,
PERCENTUAL_SUFRAMA                  = :PERCENTUAL_SUFRAMA,
VALOR_SUFRAMA                       = :VALOR_SUFRAMA,
PERCENTUAL_ICMS_OPERACAO            = :PERCENTUAL_ICMS_OPERACAO,

T01 = :T01, T02 = :T02, T03 = :T03, T04 = :T04,
T05 = :T05, T06 = :T06, T07 = :T07, T08 = :T08,
T09 = :T09, T10 = :T10, T11 = :T11, T12 = :T12,
T13 = :T13, T14 = :T14, T15 = :T15, T16 = :T16,
T17 = :T17, T18 = :T18, T19 = :T19, T20 = :T20,
CCUSTO                              = :CCUSTO,
CONTA_CONTABIL                      = :CONTA_CONTABIL


WHERE NFS_CONTROLE = :NFS_CONTROLE
  AND CONTROLE = :CONTROLE;

UPDATE  TBNFS_ITEM_SALDO SET
QUANTIDADE = :QUANTIDADE,
T01 = :T01, T02 = :T02, T03 = :T03, T04 = :T04,
   T05 = :T05, T06 = :T06, T07 = :T07, T08 = :T08,
   T09 = :T09, T10 = :T10, T11 = :T11, T12 = :T12,
   T13 = :T13, T14 = :T14, T15 = :T15, T16 = :T16,
   T17 = :T17, T18 = :T18, T19 = :T19, T20 = :T20
WHERE NFS_ITEM_CONTROLE = :CONTROLE AND NFS_CONTROLE = :NFS_CONTROLE;
END
^

SET TERM ; ^





