ALTER TABLE TBOC_ITEM
ALTER COLUMN VALOR TYPE NUMERIC(18,8);


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

CREATE OR ALTER procedure SPC_NFE_ITEM_VINCULO (
    ESTABELECIMENTO_CODIGO_1 integer,
    EMPRESA_CODIGO_1 integer,
    NUMERO_NOTAFISCAL_T integer,
    NUMERO_NOTAFISCAL_1 integer,
    NUMERO_NOTAFISCAL_2 integer,
    NUMERO_NOTAFISCAL_3 integer,
    NUMERO_NOTAFISCAL_4 integer,
    NUMERO_NOTAFISCAL_5 integer,
    NUMERO_NOTAFISCAL_6 integer,
    NUMERO_NOTAFISCAL_7 integer,
    NUMERO_NOTAFISCAL_8 integer)
returns (
    NUMERO_NOTAFISCAL integer,
    SEQUENCIA integer,
    CONTROLE integer,
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(10),
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(18,8),
    VALOR_TOTAL numeric(10,5),
    VALOR_CUSTO numeric(10,5),
    OPERACAO_CODIGO varchar(3))
as
BEGIN
For Select Numero_NotaFiscal,Sequencia,Controle,Produto_Codigo,
Produto_Descricao,PRODUTO_UNIDADEMEDIDA,
Quantidade,Valor_Unitario,Valor_Total,Valor_Custo,Operacao_Codigo
From TbNfe_Item

Where  Estabelecimento_Codigo = :ESTABELECIMENTO_CODIGO_1
  and  Empresa_Codigo         = :EMPRESA_CODIGO_1

  and (Numero_NotaFiscal  <>:Numero_NotaFiscal_T or
       Numero_NotaFiscal  = :Numero_NotaFiscal_1 or
       Numero_NotaFiscal  = :Numero_NotaFiscal_2 or
       Numero_NotaFiscal  = :Numero_NotaFiscal_3 or
       Numero_NotaFiscal  = :Numero_NotaFiscal_4 or
       Numero_NotaFiscal  = :Numero_NotaFiscal_5 or
       Numero_NotaFiscal  = :Numero_NotaFiscal_6 or
       Numero_NotaFiscal  = :Numero_NotaFiscal_7 or
       Numero_NotaFiscal  = :Numero_NotaFiscal_8)

Order By Numero_NotaFiscal,Sequencia

INTO
   :Numero_NotaFiscal,
   :Sequencia,
   :Controle,
   :Produto_Codigo,
   :Produto_Descricao,
   :Produto_UnidadeMedida,
   :Quantidade,
   :Valor_Unitario,
   :Valor_Total,
   :Valor_Custo,
   :Operacao_Codigo
DO SUSPEND;
END;

CREATE OR ALTER procedure SPC_NFS_NFE2 (
    ESTABELECIMENTO_1 integer,
    EMPRESA_1 integer)
returns (
    CONTROLE integer,
    PRODUTO_CODIGO integer,
    DESCRICAO varchar(100),
    UNIDADEMEDIDA_SIGLA varchar(10),
    LOCALIZACAO_CODIGO integer,
    NCM_CODIGO varchar(10),
    GRADE_CODIGO integer,
    NOTAFISCAL_NUMERO integer,
    PRODUTO_VALOR_UNITARIO numeric(18,8),
    QUANTIDADE numeric(10,5),
    QUANTIDADE_SALDO 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),
    TRIBUTACAO_ICMS integer,
    TRIBUTACAO_IPI varchar(2),
    TRIBUTACAO_ORIGEM integer,
    BASECALCULO_ICMS numeric(10,5),
    PERCENTUAL_ICMS numeric(10,5),
    PERCENTUAL_IPI numeric(10,5),
    PERCENTUAL_PIS numeric(10,5),
    PERCENTUAL_COFINS numeric(10,5),
    SEQUENCIA integer,
    DATA_ENTRADA date,
    CFOP_CODIGO varchar(5),
    OPERACAO_CODIGO varchar(3),
    TRIBUTACAO_PIS char(2),
    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),
    SALDO_REVISAO numeric(15,4))
as
BEGIN
FOR
Select B.CONTROLE, B.PRODUTO_CODIGO, B.PRODUTO_DESCRICAO, B.PRODUTO_UNIDADEMEDIDA,
       B.LOCALIZACAO_CODIGO, B.NCM_CODIGO, C.GRADE_CODIGO, B.NUMERO_NOTAFISCAL,
       B.VALOR_UNITARIO, B.QUANTIDADE, A.QUANTIDADE,
       A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
       A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
       B.TRIBUTACAO_ICMS, B.TRIBUTACAO_IPI, B.TRIBUTACAO_ORIGEM, B.BASECALCULO_ICMS,
       B.PERCENTUAL_ICMS, B.PERCENTUAL_IPI, B.PERCENTUAL_PIS, B.PERCENTUAL_COFINS,
       B.SEQUENCIA, B.DATA_ENTRADA, B.CFOP_CODIGO, B.OPERACAO_CODIGO,
       B.TRIBUTACAO_PIS, B.TRIBUTACAO_COFINS,
       B.MODALIDADE_ICMS, B.MODALIDADE_ICMS_ST, B.MARGEM_ICMS_ST, B.REDUCAO_ICMS_ST,
       B.BASECALCULO_ICMS_ST, B.ALIQUOTA_ICMS_ST, B.VALOR_ICMS_ST, A.SALDO_REVISAO
From TbNfe_Item B, TbNfe_Item_Saldo A, TbOperacao D, TbProduto C
Where A.Nfe_Item_Controle =  B.Controle
  AND B.Operacao_Codigo = D.Codigo
  and B.Produto_Codigo = C.Codigo
  and B.Situacao < 3 and B.Numero_NotaFiscal > 0 and A.Quantidade > 0
  and B.Estabelecimento_Codigo   = :ESTABELECIMENTO_1
  and B.Empresa_Codigo           = :EMPRESA_1
  and D.Controle_Estoque_Externo = '0'
  and D.Exige_Nf_Referencia      = '0'
Order By B.Numero_NotaFiscal, B.Sequencia
INTO
    :CONTROLE, :PRODUTO_CODIGO, :DESCRICAO, :UNIDADEMEDIDA_SIGLA,
    :LOCALIZACAO_CODIGO, :NCM_CODIGO, GRADE_CODIGO, :NOTAFISCAL_NUMERO,
    :PRODUTO_VALOR_UNITARIO, :QUANTIDADE, :QUANTIDADE_SALDO,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :TRIBUTACAO_ICMS, :TRIBUTACAO_IPI, :TRIBUTACAO_ORIGEM, :BASECALCULO_ICMS,
    :PERCENTUAL_ICMS, :PERCENTUAL_IPI, :PERCENTUAL_PIS, :PERCENTUAL_COFINS,
    :SEQUENCIA, :DATA_ENTRADA, :CFOP_CODIGO, :OPERACAO_CODIGO,
    :TRIBUTACAO_PIS, :TRIBUTACAO_COFINS,
    :MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
    :BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST, :SALDO_REVISAO
DO SUSPEND;
END;

CREATE OR ALTER procedure SPC_NFS_NFEXTERNO2 (
    ESTABELECIMENTO_1 integer,
    EMPRESA_1 integer)
returns (
    CONTROLE integer,
    PRODUTO_CODIGO integer,
    DESCRICAO varchar(100),
    UNIDADEMEDIDA_SIGLA varchar(10),
    LOCALIZACAO_CODIGO integer,
    NCM_CODIGO varchar(10),
    GRADE_CODIGO integer,
    NOTAFISCAL_NUMERO integer,
    PRODUTO_VALOR_UNITARIO numeric(18,8),
    QUANTIDADE numeric(10,5),
    QUANTIDADE_SALDO 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),
    NOTAFISCAL_DATA_ENTRADA date,
    OPERACAO_CODIGO varchar(3))
as
BEGIN
FOR
Select B.CONTROLE, B.PRODUTO_CODIGO, B.PRODUTO_DESCRICAO, B.PRODUTO_UNIDADEMEDIDA,
       B.LOCALIZACAO_CODIGO, B.NCM_CODIGO, C.GRADE_CODIGO, B.NUMERO_NOTAFISCAL,
       B.VALOR_UNITARIO, B.QUANTIDADE, A.QUANTIDADE,
       A.T01,A.T02,A.T03,A.T04,A.T05,A.T06,A.T07,A.T08,A.T09,A.T10,
       A.T11,A.T12,A.T13,A.T14,A.T15,A.T16,A.T17,A.T18,A.T19,A.T20,
       B.DATA_ENTRADA, B.OPERACAO_CODIGO
From TbNfe_Item B, TbNfe_Item_Saldo A, TbOperacao D, TbProduto C
WHERE A.Nfe_Item_Controle = B.Controle
  AND B.produto_codigo    = C.Codigo
  AND B.Operacao_Codigo   = D.Codigo
  and B.Situacao < 3 and B.Numero_NotaFiscal > 0 and A.Quantidade > 0
  and B.Estabelecimento_Codigo   = :ESTABELECIMENTO_1
  and B.Empresa_Codigo           = :EMPRESA_1
  and D.Controle_Estoque_Externo = '1'
  and D.Exige_Nf_Referencia      = '0'
Order By B.Numero_NotaFiscal 
INTO
    :CONTROLE, :PRODUTO_CODIGO, :DESCRICAO, :UNIDADEMEDIDA_SIGLA,
    :LOCALIZACAO_CODIGO, :NCM_CODIGO, GRADE_CODIGO, :NOTAFISCAL_NUMERO,
    :PRODUTO_VALOR_UNITARIO, :QUANTIDADE, :QUANTIDADE_SALDO,
    :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
    :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
    :NOTAFISCAL_DATA_ENTRADA, :OPERACAO_CODIGO
DO SUSPEND;
END;

CREATE OR ALTER procedure SPC_REL_NFE_EMPRESA_ITEM (
    CONTROLE_1 integer,
    CFOP_CODIGO_T varchar(5),
    CFOP_CODIGO_1 varchar(5),
    CFOP_CODIGO_2 varchar(5),
    CFOP_CODIGO_3 varchar(5),
    CFOP_CODIGO_4 varchar(5),
    CFOP_CODIGO_5 varchar(5),
    CFOP_CODIGO_6 varchar(5),
    CFOP_CODIGO_7 varchar(5),
    CFOP_CODIGO_8 varchar(5),
    CFOP_CODIGO_9 varchar(5),
    CFOP_CODIGO_10 varchar(5))
returns (
    OPERACAO_CODIGO varchar(3),
    CFOP_CODIGO varchar(5),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(10),
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(18,8),
    VALOR_TOTAL 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),
    SEQUENCIA integer,
    GRADE_CODIGO integer)
as
BEGIN
FOR Select B.OPERACAO_CODIGO, B.CFOP_CODIGO, B.PRODUTO_CODIGO, B.PRODUTO_DESCRICAO,
       B.PRODUTO_UNIDADEMEDIDA, B.QUANTIDADE, B.VALOR_UNITARIO, B.VALOR_TOTAL,
       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,
       B.SEQUENCIA,(Select C.GRADE_CODIGO From Tbproduto C Where B.Produto_Codigo = C.Codigo)

From TbNfe_Item     B
Inner Join TbNfe     A On B.Nfe_Controle   = A.Controle
Where  B.Nfe_Controle = :CONTROLE_1
  and (B.Cfop_Codigo <>:CFOP_CODIGO_T or
       B.Cfop_Codigo = :CFOP_CODIGO_1 or
       B.Cfop_Codigo = :CFOP_CODIGO_2 or
       B.Cfop_Codigo = :CFOP_CODIGO_3 or
       B.Cfop_Codigo = :CFOP_CODIGO_4 or
       B.Cfop_Codigo = :CFOP_CODIGO_5 or
       B.Cfop_Codigo = :CFOP_CODIGO_6 or
       B.Cfop_Codigo = :CFOP_CODIGO_7 or
       B.Cfop_Codigo = :CFOP_CODIGO_8 or
       B.Cfop_Codigo = :CFOP_CODIGO_9 or
       B.Cfop_Codigo = :CFOP_CODIGO_10)
Order By B.SEQUENCIA

INTO
   :OPERACAO_CODIGO,
   :CFOP_CODIGO,
   :PRODUTO_CODIGO,
   :PRODUTO_DESCRICAO,
   :PRODUTO_UNIDADEMEDIDA,
   :QUANTIDADE,
   :VALOR_UNITARIO,
   :VALOR_TOTAL,
   :T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
   :T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,
   :SEQUENCIA,
   :GRADE_CODIGO
DO SUSPEND;
END;

CREATE OR ALTER procedure SPC_REL_NFE_PRODUTO_NF (
    ESTABELECIMENTO_CODIGO_1 integer,
    EMPRESA_CODIGO_T integer,
    EMPRESA_CODIGO_1 integer,
    DATA_1 date,
    DATA_2 date,
    DATA_3 date,
    DATA_4 date,
    NOTAFISCAL_1 integer,
    NOTAFISCAL_2 integer,
    PRODUTO_1 integer,
    PRODUTO_DESCRICAO_1 varchar(100),
    NATUREZA_1 integer,
    SITUACAO_1 integer,
    CFOP_CODIGO_T varchar(5),
    CFOP_CODIGO_1 varchar(5),
    CFOP_CODIGO_2 varchar(5),
    CFOP_CODIGO_3 varchar(5),
    CFOP_CODIGO_4 varchar(5),
    CFOP_CODIGO_5 varchar(5),
    CFOP_CODIGO_6 varchar(5),
    CFOP_CODIGO_7 varchar(5),
    CFOP_CODIGO_8 varchar(5),
    CFOP_CODIGO_9 varchar(5),
    CFOP_CODIGO_10 varchar(5),
    OPERACAO_CODIGO_T varchar(3),
    OPERACAO_CODIGO_1 varchar(3),
    OPERACAO_CODIGO_2 varchar(3),
    OPERACAO_CODIGO_3 varchar(3),
    OPERACAO_CODIGO_4 varchar(3),
    OPERACAO_CODIGO_5 varchar(3),
    OPERACAO_CODIGO_6 varchar(3),
    OPERACAO_CODIGO_7 varchar(3),
    OPERACAO_CODIGO_8 varchar(3),
    OPERACAO_CODIGO_9 varchar(3),
    OPERACAO_CODIGO_10 varchar(3))
returns (
    NUMERO_NOTAFISCAL integer,
    SERIE varchar(3),
    CFOP_CODIGO varchar(5),
    OPERACAO_CODIGO varchar(3),
    DATA_EMISSAO date,
    DATA_ENTRADA date,
    EMPRESA_CODIGO integer,
    EMPRESA_RAZAOSOCIAL varchar(50),
    EMPRESA_UF varchar(2),
    QUANTIDADE numeric(10,5),
    VALOR_UNITARIO numeric(18,8),
    VALOR_TOTAL 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 A.numero_notafiscal, B.Serie,A.cfop_codigo,A.operacao_codigo,
B.data_emissao, B.data_entrada, A.empresa_codigo,B.empresa_razaosocial,
B.empresa_uf,A.quantidade,A.valor_unitario,A.valor_total,
A.t01,A.t02,A.t03,A.t04,A.t05,A.t06,A.t07,A.t08,A.t09,A.t10,
A.t11,A.t12,A.t13,A.t14,A.t15,A.t16,A.t17,A.t18,A.t19,A.t20

From TbNfe_Item A
Inner Join TbNfE B On A.nfe_controle = B.Controle

Where  A.Estabelecimento_Codigo = :ESTABELECIMENTO_CODIGO_1

  and (A.Empresa_Codigo      > :EMPRESA_CODIGO_T or
       A.Empresa_Codigo      = :EMPRESA_CODIGO_1)

  and (B.Data_Emissao between :DATA_1 and :DATA_2)
  and (A.Data_Entrada between :DATA_3 and :DATA_4)

  and (A.Numero_NotaFiscal between :NOTAFISCAL_1 and :NOTAFISCAL_2)

  and (A.Produto_Codigo = :PRODUTO_1 and
       A.Produto_Descricao = :PRODUTO_DESCRICAO_1)

  and (B.Natureza = :NATUREZA_1)
  and (B.Situacao = :SITUACAO_1)

  and (A.Cfop_Codigo <>:CFOP_CODIGO_T or
       A.Cfop_Codigo = :CFOP_CODIGO_1 or
       A.Cfop_Codigo = :CFOP_CODIGO_2 or
       A.Cfop_Codigo = :CFOP_CODIGO_3 or
       A.Cfop_Codigo = :CFOP_CODIGO_4 or
       A.Cfop_Codigo = :CFOP_CODIGO_5 or
       A.Cfop_Codigo = :CFOP_CODIGO_6 or
       A.Cfop_Codigo = :CFOP_CODIGO_7 or
       A.Cfop_Codigo = :CFOP_CODIGO_8 or
       A.Cfop_Codigo = :CFOP_CODIGO_9 or
       A.Cfop_Codigo = :CFOP_CODIGO_10)

  and (A.Operacao_Codigo <>:OPERACAO_CODIGO_T or
       A.Operacao_Codigo = :OPERACAO_CODIGO_1 or
       A.Operacao_Codigo = :OPERACAO_CODIGO_2 or
       A.Operacao_Codigo = :OPERACAO_CODIGO_3 or
       A.Operacao_Codigo = :OPERACAO_CODIGO_4 or
       A.Operacao_Codigo = :OPERACAO_CODIGO_5 or
       A.Operacao_Codigo = :OPERACAO_CODIGO_6 or
       A.Operacao_Codigo = :OPERACAO_CODIGO_7 or
       A.Operacao_Codigo = :OPERACAO_CODIGO_8 or
       A.Operacao_Codigo = :OPERACAO_CODIGO_9 or
       A.Operacao_Codigo = :OPERACAO_CODIGO_10)

Order By A.Data_Entrada,A.Numero_NotaFiscal

INTO
   :numero_notafiscal,
   :serie,
   :cfop_codigo,
   :operacao_codigo,
   :data_emissao,
   :data_entrada,
   :empresa_codigo,
   :empresa_razaosocial,
   :empresa_uf,
   :quantidade,
   :valor_unitario,
   :valor_total,
   :t01,:t02,:t03,:t04,:t05,:t06,:t07,:t08,:t09,:t10,
   :t11,:t12,:t13,:t14,:t15,:t16,:t17,:t18,:t19,:t20
DO SUSPEND;
END;

CREATE OR ALTER procedure SPI_NFE_ITEM (
    NFE_CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_ENTRADA date,
    SITUACAO integer,
    NF_NATUREZA integer,
    NFS integer,
    NFS_ITEM_CONTROLE integer,
    PDV_CFE_ID integer,
    PDV_CFE_ITEM_ID integer,
    OC integer,
    OC_ITEM_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_CUSTO numeric(10,5),
    OUTROS_CUSTOS numeric(15,2),
    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),
    DI varchar(12),
    DI_DATA_REGISTRO date,
    DI_DATA_DESEMBARACO date,
    DI_LOCAL_DESEMBARACO varchar(60),
    DI_UF_DESEMBARACO char(2),
    DI_CODIGO_EXPORTADOR varchar(60),
    DI_ADICAO integer,
    DI_SEQUENCIAL integer,
    DI_CODIGO_FABRICANTE varchar(60),
    DI_DESCONTO_ADICAO numeric(10,2),
    DI_BASE_CALCULO numeric(10,2),
    DI_DESPESAS_ADUANEIRAS numeric(10,2),
    DI_VALOR_II numeric(10,2),
    DI_VALOR_IOF numeric(10,2),
    VALOR_ICMS numeric(10,2),
    BASECALCULO_IPI numeric(10,2),
    BASECALCULO_PIS numeric(10,2),
    BASECALCULO_COFINS numeric(10,2),
    VALOR_ACRESCIMO numeric(10,2),
    VALOR_FRETE numeric(10,2),
    VALOR_SEGURO 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_PEDAGIO numeric(10,2),
    VALOR_CONTABIL numeric(10,2),
    VALOR_BASECALCULO_ICMS numeric(10,2),
    BASECALCULO_FCI numeric(15,4),
    CODIGO_FCI varchar(50),
    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),
    INFORMACOES_COMPLEMENTARES varchar(500),
    DI_NVE varchar(60),
    DI_TIPO_VIA_TRANSP integer,
    DI_VALOR_AFRMM numeric(15,2),
    DI_TIPO_INTERMEDIO varchar(1),
    DI_CNPJ_INTERMEDIO varchar(14),
    DI_UF_INTERMEDIO varchar(2),
    DI_NUMERO_DRAWBACK varchar(11),
    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 smallint,
    MARGEM numeric(18,2) = 0,
    MARGEM_DESCONTO numeric(18,2) = 0)
as
BEGIN
INSERT INTO TBNFE_ITEM  (
NFE_CONTROLE,ESTABELECIMENTO_CODIGO,EMPRESA_CODIGO,NUMERO_NOTAFISCAL,DATA_ENTRADA,NF_SITUACAO, NF_NATUREZA,
NFS,NFS_ITEM_CONTROLE,PDV_CFE_ID, PDV_CFE_ITEM_ID, OC,OC_ITEM_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_CUSTO,OUTROS_CUSTOS,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,
DI,DI_DATA_REGISTRO,DI_DATA_DESEMBARACO,DI_LOCAL_DESEMBARACO,DI_UF_DESEMBARACO,
DI_CODIGO_EXPORTADOR,DI_ADICAO,DI_SEQUENCIAL,DI_CODIGO_FABRICANTE,DI_DESCONTO_ADICAO,
DI_BASE_CALCULO,DI_DESPESAS_ADUANEIRAS,DI_VALOR_II,DI_VALOR_IOF,
VALOR_ICMS,BASECALCULO_IPI,BASECALCULO_PIS,BASECALCULO_COFINS,
VALOR_ACRESCIMO,VALOR_FRETE,VALOR_SEGURO,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_PEDAGIO, VALOR_CONTABIL, VALOR_BASECALCULO_ICMS, BASECALCULO_FCI, CODIGO_FCI,
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,
INFORMACOES_COMPLEMENTARES, DI_NVE, DI_TIPO_VIA_TRANSP, DI_VALOR_AFRMM,
DI_TIPO_INTERMEDIO, DI_CNPJ_INTERMEDIO, DI_UF_INTERMEDIO, DI_NUMERO_DRAWBACK,
CCUSTO, CONTA_CONTABIL, ENQUADRAMENTO_IPI,
QUANTIDADE_ALTERNATIVA, UM_ALTERNATIVA, VALOR_ALTERNATIVO,
REDUCAO_BASE_PISCOF, TIPO_DESCONTO, GC_WEB, MARGEM, MARGEM_DESCONTO)
VALUES  (
:NFE_CONTROLE,:ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,
:DATA_ENTRADA,:SITUACAO,:NF_NATUREZA,:NFS,:NFS_ITEM_CONTROLE,:PDV_CFE_ID, :PDV_CFE_ITEM_ID, :OC,:OC_ITEM_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_CUSTO,:OUTROS_CUSTOS, :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,
:DI,:DI_DATA_REGISTRO,:DI_DATA_DESEMBARACO,:DI_LOCAL_DESEMBARACO,:DI_UF_DESEMBARACO,
:DI_CODIGO_EXPORTADOR,:DI_ADICAO,:DI_SEQUENCIAL,:DI_CODIGO_FABRICANTE,:DI_DESCONTO_ADICAO,
:DI_BASE_CALCULO,:DI_DESPESAS_ADUANEIRAS,:DI_VALOR_II,:DI_VALOR_IOF,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
:VALOR_ACRESCIMO,:VALOR_FRETE,:VALOR_SEGURO,: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_PEDAGIO, :VALOR_CONTABIL, :VALOR_BASECALCULO_ICMS, :BASECALCULO_FCI, :CODIGO_FCI,
: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,
:INFORMACOES_COMPLEMENTARES, :DI_NVE, :DI_TIPO_VIA_TRANSP, :DI_VALOR_AFRMM,
:DI_TIPO_INTERMEDIO, :DI_CNPJ_INTERMEDIO, :DI_UF_INTERMEDIO, :DI_NUMERO_DRAWBACK,
:CCUSTO, :CONTA_CONTABIL, :ENQUADRAMENTO_IPI,
:QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO,
:REDUCAO_BASE_PISCOF, :OPERACAO_TIPO_DESCONTO, :GC_WEB, :MARGEM, :MARGEM_DESCONTO);

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

CREATE OR ALTER procedure SPU_CTE_ITEM (
    NFE_CONTROLE integer,
    CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    OPERACAO_CODIGO varchar(3),
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    LOCALIZACAO_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_ENTRADA 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),
    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_PEDAGIO 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),
    GC_WEB integer,
    QUANTIDADE numeric(10,5),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(10),
    VALOR_ALTERNATIVO numeric(18,10),
    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),
    DI varchar(12),
    DI_DATA_REGISTRO date,
    DI_DATA_DESEMBARACO date,
    DI_LOCAL_DESEMBARACO varchar(60),
    DI_UF_DESEMBARACO char(2),
    DI_CODIGO_EXPORTADOR varchar(60),
    DI_ADICAO integer,
    DI_SEQUENCIAL integer,
    DI_CODIGO_FABRICANTE varchar(60),
    DI_DESCONTO_ADICAO numeric(10,2),
    DI_BASE_CALCULO numeric(10,2),
    DI_DESPESAS_ADUANEIRAS numeric(10,2),
    DI_VALOR_II numeric(10,2),
    DI_VALOR_IOF numeric(10,2),
    DI_NVE varchar(60),
    DI_TIPO_VIA_TRANSP integer,
    DI_VALOR_AFRMM numeric(15,2),
    DI_TIPO_INTERMEDIO varchar(1),
    DI_CNPJ_INTERMEDIO varchar(14),
    DI_UF_INTERMEDIO varchar(2),
    DI_NUMERO_DRAWBACK varchar(11),
    CCUSTO varchar(8),
    CONTA_CONTABIL varchar(11))
as
BEGIN

-- UPDATE TBNFE_ITEM
UPDATE TBNFE_ITEM SET
ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO,
EMPRESA_CODIGO = :EMPRESA_CODIGO,
OPERACAO_CODIGO     = :OPERACAO_CODIGO,
PRODUTO_CODIGO      = :PRODUTO_CODIGO,
PRODUTO_DESCRICAO   = :PRODUTO_DESCRICAO,
LOCALIZACAO_CODIGO  = :LOCALIZACAO_CODIGO,
NUMERO_NOTAFISCAL = :NUMERO_NOTAFISCAL,
DATA_ENTRADA = :DATA_ENTRADA,
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       ,
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_PEDAGIO = :VALOR_PEDAGIO,
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,
GC_WEB             = :GC_WEB,
QUANTIDADE         = :QUANTIDADE,
QUANTIDADE_ALTERNATIVA              = :QUANTIDADE_ALTERNATIVA,
UM_ALTERNATIVA                      = :UM_ALTERNATIVA,
VALOR_ALTERNATIVO                   = :VALOR_ALTERNATIVO,

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,

DI                      = :DI,
DI_DATA_REGISTRO        = :DI_DATA_REGISTRO,
DI_DATA_DESEMBARACO     = :DI_DATA_DESEMBARACO,
DI_LOCAL_DESEMBARACO    = :DI_LOCAL_DESEMBARACO,
DI_UF_DESEMBARACO       = :DI_UF_DESEMBARACO,
DI_CODIGO_EXPORTADOR    = :DI_CODIGO_EXPORTADOR,
DI_ADICAO               = :DI_ADICAO,
DI_SEQUENCIAL           = :DI_SEQUENCIAL,
DI_CODIGO_FABRICANTE    = :DI_CODIGO_FABRICANTE,
DI_DESCONTO_ADICAO      = :DI_DESCONTO_ADICAO,
DI_BASE_CALCULO         = :DI_BASE_CALCULO,
DI_DESPESAS_ADUANEIRAS  = :DI_DESPESAS_ADUANEIRAS,
DI_VALOR_II             = :DI_VALOR_II,
DI_VALOR_IOF            = :DI_VALOR_IOF,
DI_NVE                  = :DI_NVE,
DI_TIPO_VIA_TRANSP      = :DI_TIPO_VIA_TRANSP,
DI_VALOR_AFRMM          = :DI_VALOR_AFRMM,
DI_TIPO_INTERMEDIO      = :DI_TIPO_INTERMEDIO,
DI_CNPJ_INTERMEDIO      = :DI_CNPJ_INTERMEDIO,
DI_UF_INTERMEDIO        = :DI_UF_INTERMEDIO,
DI_NUMERO_DRAWBACK      = :DI_NUMERO_DRAWBACK,
CCUSTO                  = :CCUSTO,
CONTA_CONTABIL          = :CONTA_CONTABIL

WHERE NFE_CONTROLE = :NFE_CONTROLE
  AND CONTROLE = :CONTROLE;

  UPDATE  TbNfe_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 Nfe_Item_Controle = :CONTROLE AND Nfe_Controle = :NFE_CONTROLE;
END;


CREATE OR ALTER procedure SPU_NFE_ITEM (
    NFE_CONTROLE integer,
    CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    PRODUTO_CODIGO integer,
    PRODUTO_DESCRICAO varchar(100),
    PRODUTO_UNIDADEMEDIDA varchar(10),
    LOCALIZACAO_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_ENTRADA 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_PEDAGIO 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(15,4),
    GC_WEB integer,
    QUANTIDADE numeric(10,5),
    QUANTIDADE_ALTERNATIVA numeric(18,4),
    UM_ALTERNATIVA varchar(10),
    VALOR_ALTERNATIVO numeric(18,10),
    VALOR_CUSTO numeric(10,5),
    OUTROS_CUSTOS numeric(15,2),
    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),
    DI varchar(12),
    DI_DATA_REGISTRO date,
    DI_DATA_DESEMBARACO date,
    DI_LOCAL_DESEMBARACO varchar(60),
    DI_UF_DESEMBARACO char(2),
    DI_CODIGO_EXPORTADOR varchar(60),
    DI_ADICAO integer,
    DI_SEQUENCIAL integer,
    DI_CODIGO_FABRICANTE varchar(60),
    DI_DESCONTO_ADICAO numeric(10,2),
    DI_BASE_CALCULO numeric(10,2),
    DI_DESPESAS_ADUANEIRAS numeric(10,2),
    DI_VALOR_II numeric(10,2),
    DI_VALOR_IOF numeric(10,2),
    DI_NVE varchar(60),
    DI_TIPO_VIA_TRANSP integer,
    DI_VALOR_AFRMM numeric(15,2),
    DI_TIPO_INTERMEDIO varchar(1),
    DI_CNPJ_INTERMEDIO varchar(14),
    DI_UF_INTERMEDIO varchar(2),
    DI_NUMERO_DRAWBACK varchar(11))
as
BEGIN

-- UPDATE TBNFE_ITEM
UPDATE TBNFE_ITEM SET
ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO,
PRODUTO_CODIGO = :PRODUTO_CODIGO,
EMPRESA_CODIGO = :EMPRESA_CODIGO,
PRODUTO_DESCRICAO   = :PRODUTO_DESCRICAO,
PRODUTO_UNIDADEMEDIDA = :PRODUTO_UNIDADEMEDIDA,
LOCALIZACAO_CODIGO  = :LOCALIZACAO_CODIGO,
NUMERO_NOTAFISCAL = :NUMERO_NOTAFISCAL,
DATA_ENTRADA = :DATA_ENTRADA,
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_PEDAGIO = :VALOR_PEDAGIO,
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,
VALOR_CUSTO                         = :VALOR_CUSTO,
OUTROS_CUSTOS                       = :OUTROS_CUSTOS,
INFORMACOES_COMPLEMENTARES          = :INFORMACOES_COMPLEMENTARES,
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,

DI                      = :DI,
DI_DATA_REGISTRO        = :DI_DATA_REGISTRO,
DI_DATA_DESEMBARACO     = :DI_DATA_DESEMBARACO,
DI_LOCAL_DESEMBARACO    = :DI_LOCAL_DESEMBARACO,
DI_UF_DESEMBARACO       = :DI_UF_DESEMBARACO,
DI_CODIGO_EXPORTADOR    = :DI_CODIGO_EXPORTADOR,
DI_ADICAO               = :DI_ADICAO,
DI_SEQUENCIAL           = :DI_SEQUENCIAL,
DI_CODIGO_FABRICANTE    = :DI_CODIGO_FABRICANTE,
DI_DESCONTO_ADICAO      = :DI_DESCONTO_ADICAO,
DI_BASE_CALCULO         = :DI_BASE_CALCULO,
DI_DESPESAS_ADUANEIRAS  = :DI_DESPESAS_ADUANEIRAS,
DI_VALOR_II             = :DI_VALOR_II,
DI_VALOR_IOF            = :DI_VALOR_IOF,
DI_NVE                  = :DI_NVE,
DI_TIPO_VIA_TRANSP      = :DI_TIPO_VIA_TRANSP,
DI_VALOR_AFRMM          = :DI_VALOR_AFRMM,
DI_TIPO_INTERMEDIO      = :DI_TIPO_INTERMEDIO,
DI_CNPJ_INTERMEDIO      = :DI_CNPJ_INTERMEDIO,
DI_UF_INTERMEDIO        = :DI_UF_INTERMEDIO,
DI_NUMERO_DRAWBACK      = :DI_NUMERO_DRAWBACK

WHERE NFE_CONTROLE = :NFE_CONTROLE
  AND CONTROLE = :CONTROLE;

  UPDATE  TbNfe_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 Nfe_Item_Controle = :CONTROLE AND Nfe_Controle = :NFE_CONTROLE;
END;

CREATE OR ALTER procedure SP_NF_ITEM_ESTOQUE (
    ORIGEM varchar(3),
    NF_ITEM_ID integer,
    NF_ID integer,
    ACAO integer)
as
declare variable CONTROLE integer;
declare variable NUMERO_NOTAFISCAL integer;
declare variable ESTABELECIMENTO_CODIGO integer;
declare variable LOCALIZACAO_CODIGO integer;
declare variable PRODUTO_CODIGO integer;
declare variable DATA date;
declare variable TIPO char(1);
declare variable QUANTIDADE numeric(10,5);
declare variable T01 numeric(10,5);
declare variable T02 numeric(10,5);
declare variable T03 numeric(10,5);
declare variable T04 numeric(10,5);
declare variable T05 numeric(10,5);
declare variable T06 numeric(10,5);
declare variable T07 numeric(10,5);
declare variable T08 numeric(10,5);
declare variable T09 numeric(10,5);
declare variable T10 numeric(10,5);
declare variable T11 numeric(10,5);
declare variable T12 numeric(10,5);
declare variable T13 numeric(10,5);
declare variable T14 numeric(10,5);
declare variable T15 numeric(10,5);
declare variable T16 numeric(10,5);
declare variable T17 numeric(10,5);
declare variable T18 numeric(10,5);
declare variable T19 numeric(10,5);
declare variable T20 numeric(10,5);
declare variable OPERACAO_CODIGO varchar(3);
declare variable CUSTO_UNITARIO numeric(10,5);
declare variable EMPRESA_CODIGO integer;
declare variable VEMPRESA_CODIGO integer;
declare variable VALOR_UNITARIO numeric(18,8);
declare variable VCUSTO_MEDIO integer;
declare variable NF_EXTERNO integer;
declare variable NF_EXTERNO_ITEM_CONTROLE integer;
declare variable NFE integer;
declare variable NFE_ITEM_CONTROLE integer;
declare variable NFS integer;
declare variable NFS_ITEM_CONTROLE integer;
declare variable PDV_CFE_ID integer;
declare variable PDV_CFE_ITEM_ID integer;
declare variable NF_CONSIGNACAO integer;
declare variable NF_CONSIGNACAO_ITEM integer;
declare variable CONTROLE_ESTOQUE_EXTERNO char(1);
declare variable EXIGE_NF_REFERENCIA char(1);
declare variable CONTROLE_ESTOQUE char(1);
declare variable CONTROLE_CONSIGNACAO char(1);
declare variable BLOQ_MOV_EST char(1);
declare variable CONTROLE_TRANSACAO_ITEM_OLD integer;
BEGIN

  IF (ORIGEM = 'NFS') THEN
      BEGIN

      SELECT T.CONTROLE, T.NUMERO_NOTAFISCAL, T.ESTABELECIMENTO_CODIGO,
            T.LOCALIZACAO_CODIGO, T.DATA_EMISSAO, T.PRODUTO_CODIGO, T.QUANTIDADE,
            T.T01, T.T02, T.T03, T.T04, T.T05, T.T06, T.T07, T.T08, T.T09, T.T10, T.T11, T.T12,
            T.T13, T.T14, T.T15, T.T16, T.T17, T.T18, T.T19, T.T20, T.OPERACAO_CODIGO, T.EMPRESA_CODIGO,
            T.VALOR_UNITARIO, T.VALOR_CUSTO, T.NF_EXTERNO, T.NF_EXTERNO_ITEM_CONTROLE,
            T.NFE, T.NFE_ITEM_CONTROLE, T.NF_CONSIGNACAO, T.NF_CONSIGNACAO_ITEM,
            O.CONTROLE_ESTOQUE_EXTERNO, O.EXIGE_NF_REFERENCIA, O.CONTROLE_ESTOQUE, O.CONTROLE_CONSIGNACAO
            FROM TBNFS_ITEM T, TBOPERACAO O
           WHERE O.CODIGO = T.OPERACAO_CODIGO
           AND T.NFS_CONTROLE = :NF_ID
           AND T.CONTROLE = :NF_ITEM_ID
      INTO :CONTROLE, :NUMERO_NOTAFISCAL, :ESTABELECIMENTO_CODIGO, :LOCALIZACAO_CODIGO, :DATA, :PRODUTO_CODIGO, :QUANTIDADE,
           :T01, :T02, :T03, :T04, :T05, :T06, :T07, :T08, :T09, :T10, :T11, :T12, :T13, :T14, :T15, :T16, :T17, :T18, :T19, :T20,
           :OPERACAO_CODIGO, :EMPRESA_CODIGO, :VALOR_UNITARIO, :CUSTO_UNITARIO, :NF_EXTERNO, :NF_EXTERNO_ITEM_CONTROLE,
           :NFE, :NFE_ITEM_CONTROLE, :NF_CONSIGNACAO, :NF_CONSIGNACAO_ITEM,
           :CONTROLE_ESTOQUE_EXTERNO, :EXIGE_NF_REFERENCIA, :CONTROLE_ESTOQUE, :CONTROLE_CONSIGNACAO;

       IF(ACAO = 1) THEN -- INCLUSAO
       BEGIN

           IF(CONTROLE_ESTOQUE = '1' OR CONTROLE_ESTOQUE_EXTERNO = '1') THEN
           BEGIN
                VCUSTO_MEDIO     = 0;
                VEMPRESA_CODIGO  = 0;
                TIPO             = 'B';

                IF(CONTROLE_ESTOQUE = '1') THEN
                   TIPO = 'S';
    
                        /*  ATUALIZA TABELAS DE ESTOQUE DE TERCEIROS POR EMPRESA */
                        BLOQ_MOV_EST = (SELECT TRIM(FN_PARAMETRO('SISTEMA.5')) FROM RDB$DATABASE);
                        IF(BLOQ_MOV_EST = '1') THEN
                        BEGIN
                           IF(CONTROLE_ESTOQUE_EXTERNO = '1') THEN
                           BEGIN
                             IF(EXIGE_NF_REFERENCIA = '1') THEN
                                BEGIN
                                    IF(CONTROLE_CONSIGNACAO <> '1') THEN
                                       BEGIN
                                        VEMPRESA_CODIGO     = (SELECT FIRST 1 A.EMPRESA_CODIGO FROM TBNFE_ITEM A, TBNFE B WHERE A.NFE_CONTROLE = B.CONTROLE AND A.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO AND A.NUMERO_NOTAFISCAL = :NF_EXTERNO AND A.CONTROLE = :NF_EXTERNO_ITEM_CONTROLE);
                                        VCUSTO_MEDIO        = 0;
                                       END
            
                                    IF(CONTROLE_CONSIGNACAO = '1') THEN
                                       BEGIN
                                       TIPO                 = 'B';
                                       VEMPRESA_CODIGO      =  EMPRESA_CODIGO;
                                       END
                                END
                            IF(EXIGE_NF_REFERENCIA = '0') THEN
                                BEGIN
                                VEMPRESA_CODIGO  =  EMPRESA_CODIGO;
                                VCUSTO_MEDIO     = VALOR_UNITARIO;
                                END
                           END
                        END

                /* REGISTRA TRANSACAO DE ESTOQUE */
                EXECUTE PROCEDURE SPI_ESTOQUE_SALDO(
                ESTABELECIMENTO_CODIGO, LOCALIZACAO_CODIGO, PRODUTO_CODIGO, TIPO, DATA, QUANTIDADE,
                T01, T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12,
                T13, T14, T15, T16, T17, T18, T19, T20, 0, NUMERO_NOTAFISCAL, CONTROLE, 0,
                OPERACAO_CODIGO, NULL, NULL, 0, CUSTO_UNITARIO, FN_CURRENT_USER_ID(), CURRENT_DATE,
                0, '', '', 0, 0, NULL, VEMPRESA_CODIGO, VCUSTO_MEDIO);
           END

           /* BAIXAR SALDO DA PECA DO LOTE */
           IF (:CONTROLE > 0) THEN
               BEGIN
                EXECUTE PROCEDURE SPU_SALDO_PECA(:CONTROLE, 1);
               END

           IF (:NF_EXTERNO_ITEM_CONTROLE > 0 OR :NFE_ITEM_CONTROLE > 0) THEN
               BEGIN
                  UPDATE TBNFE_ITEM_SALDO SET
                  QUANTIDADE = QUANTIDADE - :QUANTIDADE,
                  T01 = T01 - :T01, T02 = T02 - :T02, T03 = T03 - :T03, T04 = T04 - :T04,
                  T05 = T05 - :T05, T06 = T06 - :T06, T07 = T07 - :T07, T08 = T08 - :T08,
                  T09 = T09 - :T09, T10 = T10 - :T10, T11 = T11 - :T11, T12 = T12 - :T12,
                  T13 = T13 - :T13, T14 = T14 - :T14, T15 = T15 - :T15, T16 = T16 - :T16,
                  T17 = T17 - :T17, T18 = T18 - :T18, T19 = T19 - :T19, T20 = T20 - :T20
                  WHERE NFE_ITEM_CONTROLE = IIF(:NF_EXTERNO_ITEM_CONTROLE>0,:NF_EXTERNO_ITEM_CONTROLE,:NFE_ITEM_CONTROLE);
               END
        
           IF (:NF_CONSIGNACAO_ITEM > 0) THEN
               BEGIN
                  UPDATE TBNFS_ITEM_SALDO SET
                  QUANTIDADE = QUANTIDADE - :QUANTIDADE,
                  T01 = T01 - :T01, T02 = T02 - :T02, T03 = T03 - :T03, T04 = T04 - :T04,
                  T05 = T05 - :T05, T06 = T06 - :T06, T07 = T07 - :T07, T08 = T08 - :T08,
                  T09 = T09 - :T09, T10 = T10 - :T10, T11 = T11 - :T11, T12 = T12 - :T12,
                  T13 = T13 - :T13, T14 = T14 - :T14, T15 = T15 - :T15, T16 = T16 - :T16,
                  T17 = T17 - :T17, T18 = T18 - :T18, T19 = T19 - :T19, T20 = T20 - :T20
                  WHERE NFS_ITEM_CONTROLE = :NF_CONSIGNACAO_ITEM;
               END

    END ELSE

    IF (ACAO = 2) THEN -- ALTERAÇÃO
        BEGIN

          /* DESFAZER BAIXAR DE SALDO DA PECA DO LOTE */
          EXECUTE PROCEDURE SPU_SALDO_PECA(CONTROLE, 2);
          /* EXCLUI TRANSACAO DE ESTOQUE */
          EXECUTE PROCEDURE SPD_ESTOQUE_TRANSACAO2(ESTABELECIMENTO_CODIGO, LOCALIZACAO_CODIGO, DATA, PRODUTO_CODIGO, NUMERO_NOTAFISCAL, 0, CONTROLE, 0, 0, 0, 0);

           IF (:NF_EXTERNO_ITEM_CONTROLE > 0 OR :NFE_ITEM_CONTROLE > 0) THEN
               BEGIN
                  UPDATE TBNFE_ITEM_SALDO SET
                  QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                  T01 = T01 + :T01, T02 = T02 + :T02, T03 = T03 + :T03, T04 = T04 + :T04,
                  T05 = T05 + :T05, T06 = T06 + :T06, T07 = T07 + :T07, T08 = T08 + :T08,
                  T09 = T09 + :T09, T10 = T10 + :T10, T11 = T11 + :T11, T12 = T12 + :T12,
                  T13 = T13 + :T13, T14 = T14 + :T14, T15 = T15 + :T15, T16 = T16 + :T16,
                  T17 = T17 + :T17, T18 = T18 + :T18, T19 = T19 + :T19, T20 = T20 + :T20
                  WHERE NFE_ITEM_CONTROLE = IIF(:NF_EXTERNO_ITEM_CONTROLE>0,:NF_EXTERNO_ITEM_CONTROLE,:NFE_ITEM_CONTROLE);
               END
        
           IF (:NF_CONSIGNACAO_ITEM > 0) THEN
               BEGIN
                  UPDATE TBNFS_ITEM_SALDO SET
                  QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                  T01 = T01 + :T01, T02 = T02 + :T02, T03 = T03 + :T03, T04 = T04 + :T04,
                  T05 = T05 + :T05, T06 = T06 + :T06, T07 = T07 + :T07, T08 = T08 + :T08,
                  T09 = T09 + :T09, T10 = T10 + :T10, T11 = T11 + :T11, T12 = T12 + :T12,
                  T13 = T13 + :T13, T14 = T14 + :T14, T15 = T15 + :T15, T16 = T16 + :T16,
                  T17 = T17 + :T17, T18 = T18 + :T18, T19 = T19 + :T19, T20 = T20 + :T20
                  WHERE NFS_ITEM_CONTROLE = :NF_CONSIGNACAO_ITEM;
               END



            -- REMOVENDO COTA DO CCUSTO
            UPDATE TBCCUSTO_COTA_DETALHE C SET C.STATUSEXCLUSAO = '1' WHERE C.TABELA = 'NFS' AND C.TABELA_ID = :CONTROLE;
        END

      END -- FIM PARA NFS



  IF (ORIGEM = 'NFE') THEN
      BEGIN

      SELECT T.CONTROLE, T.NUMERO_NOTAFISCAL, T.ESTABELECIMENTO_CODIGO,
            T.LOCALIZACAO_CODIGO, T.DATA_ENTRADA, T.PRODUTO_CODIGO, T.QUANTIDADE,
            T.T01, T.T02, T.T03, T.T04, T.T05, T.T06, T.T07, T.T08, T.T09, T.T10, T.T11, T.T12,
            T.T13, T.T14, T.T15, T.T16, T.T17, T.T18, T.T19, T.T20, T.OPERACAO_CODIGO, T.EMPRESA_CODIGO,
            T.VALOR_UNITARIO, T.VALOR_CUSTO, T.NF_EXTERNO, T.NF_EXTERNO_ITEM_CONTROLE,
            T.NFS, T.NFS_ITEM_CONTROLE, T.PDV_CFE_ID, T.PDV_CFE_ITEM_ID,
            O.CONTROLE_ESTOQUE_EXTERNO, O.EXIGE_NF_REFERENCIA, O.CONTROLE_ESTOQUE
            FROM TBNFE_ITEM T, TBOPERACAO O
           WHERE O.CODIGO = T.OPERACAO_CODIGO
           AND NFE_CONTROLE = :NF_ID
           AND CONTROLE = :NF_ITEM_ID
      INTO :CONTROLE, :NUMERO_NOTAFISCAL, :ESTABELECIMENTO_CODIGO, :LOCALIZACAO_CODIGO, :DATA, :PRODUTO_CODIGO, :QUANTIDADE,
           :T01, :T02, :T03, :T04, :T05, :T06, :T07, :T08, :T09, :T10, :T11, :T12, :T13, :T14, :T15, :T16, :T17, :T18, :T19, :T20,
           :OPERACAO_CODIGO, :EMPRESA_CODIGO, :VALOR_UNITARIO, :CUSTO_UNITARIO, :NF_EXTERNO, :NF_EXTERNO_ITEM_CONTROLE,
           :NFS, :NFS_ITEM_CONTROLE, :PDV_CFE_ID, :PDV_CFE_ITEM_ID,
           :CONTROLE_ESTOQUE_EXTERNO, :EXIGE_NF_REFERENCIA, :CONTROLE_ESTOQUE;


       IF (ACAO = 1) THEN -- INCLUSAO
           BEGIN

               IF(CONTROLE_ESTOQUE = '1' OR CONTROLE_ESTOQUE_EXTERNO = '1') THEN
               BEGIN
    
                   VCUSTO_MEDIO     = 0;
                   VEMPRESA_CODIGO  = 0;
                   TIPO    = 'B';
                   IF(CONTROLE_ESTOQUE = 1) THEN
                      TIPO = 'E';
        
                               /*  ATUALIZA TABELAS DE ESTOQUE DE TERCEIROS POR EMPRESA */
                               BLOQ_MOV_EST = (SELECT TRIM(FN_PARAMETRO('SISTEMA.5')) FROM RDB$DATABASE);
                               IF(BLOQ_MOV_EST = '1') THEN
                               BEGIN
                                   IF(CONTROLE_ESTOQUE_EXTERNO = 1) THEN
                                   BEGIN
                                     IF(EXIGE_NF_REFERENCIA = 1) THEN
                                        VEMPRESA_CODIGO     = (SELECT FIRST 1 A.EMPRESA_CODIGO FROM TBNFS_ITEM A WHERE A.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO AND A.NUMERO_NOTAFISCAL = :NF_EXTERNO AND A.CONTROLE = :NF_EXTERNO_ITEM_CONTROLE);
                                        VCUSTO_MEDIO        = 0;
                                     IF(EXIGE_NF_REFERENCIA = 0) THEN
                                        VEMPRESA_CODIGO     =  EMPRESA_CODIGO;
                                        VCUSTO_MEDIO        = VALOR_UNITARIO;
                                   END
                               END
    

                    /* CONTROLE_TRANSACAO_ITEM_OLD = COALESCE((SELECT
                                T.CONTROLE
                        FROM TBESTOQUE_TRANSACAO_ITEM T
                        WHERE NFE_ITEM_CONTROLE         = :CONTROLE
                        AND DOCUMENTO                   = :NUMERO_NOTAFISCAL
                        AND ESTABELECIMENTO_CODIGO      = :ESTABELECIMENTO_CODIGO
                        AND LOCALIZACAO_CODIGO          = :LOCALIZACAO_CODIGO
                        AND DATA                        = :DATA
                        AND PRODUTO_CODIGO              = :PRODUTO_CODIGO
                        AND TRANSACAO_CONTROLE          = -1000), 0); /*


                   /* INSERT SALDO */
                   EXECUTE PROCEDURE SPI_ESTOQUE_SALDO(
                    ESTABELECIMENTO_CODIGO, LOCALIZACAO_CODIGO, PRODUTO_CODIGO, TIPO, DATA, QUANTIDADE,
                    T01, T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, 0, NUMERO_NOTAFISCAL, 0, CONTROLE,
                    OPERACAO_CODIGO, NULL, NULL, 0, CUSTO_UNITARIO, FN_CURRENT_USER_ID(), CURRENT_DATE,
                    0, '', '', 0, 0, NULL, VEMPRESA_CODIGO, VCUSTO_MEDIO);

               END

           IF (:NF_EXTERNO_ITEM_CONTROLE > 0 OR :NFS_ITEM_CONTROLE > 0) THEN
               BEGIN
                  UPDATE TBNFS_ITEM_SALDO SET
                  QUANTIDADE = QUANTIDADE - :QUANTIDADE,
                  T01 = T01 - :T01, T02 = T02 - :T02, T03 = T03 - :T03, T04 = T04 - :T04,
                  T05 = T05 - :T05, T06 = T06 - :T06, T07 = T07 - :T07, T08 = T08 - :T08,
                  T09 = T09 - :T09, T10 = T10 - :T10, T11 = T11 - :T11, T12 = T12 - :T12,
                  T13 = T13 - :T13, T14 = T14 - :T14, T15 = T15 - :T15, T16 = T16 - :T16,
                  T17 = T17 - :T17, T18 = T18 - :T18, T19 = T19 - :T19, T20 = T20 - :T20
                  WHERE NFS_ITEM_CONTROLE = IIF(:NF_EXTERNO_ITEM_CONTROLE>0,:NF_EXTERNO_ITEM_CONTROLE,:NFS_ITEM_CONTROLE);
               END

           IF (:PDV_CFE_ID > 0) THEN
               BEGIN
                  UPDATE TBPDV_CFE_ITEM_SALDO SET
                  QUANTIDADE = QUANTIDADE - :QUANTIDADE
                  WHERE PDV_CFE_ITEM_ID = :PDV_CFE_ITEM_ID;
               END

          END ELSE
      IF (ACAO = 2) THEN -- ALTERAÇÃO
          BEGIN
            
            CONTROLE_TRANSACAO_ITEM_OLD = COALESCE((SELECT
                        T.CONTROLE
                FROM TBESTOQUE_TRANSACAO_ITEM T
                WHERE NFE_ITEM_CONTROLE         = :CONTROLE
                AND DOCUMENTO                   = :NUMERO_NOTAFISCAL
                AND ESTABELECIMENTO_CODIGO      = :ESTABELECIMENTO_CODIGO
                AND LOCALIZACAO_CODIGO          = :LOCALIZACAO_CODIGO
                AND DATA                        = :DATA
                AND PRODUTO_CODIGO              = :PRODUTO_CODIGO), 0);

            IF(CONTROLE_ESTOQUE = 1) THEN
            BEGIN
                EXECUTE PROCEDURE SPI_ESTOQUE_SALDO(
                    ESTABELECIMENTO_CODIGO, LOCALIZACAO_CODIGO, PRODUTO_CODIGO, 'E', DATA, QUANTIDADE,
                    T01, T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12,
                    T13, T14, T15, T16, T17, T18, T19, T20, 0, NUMERO_NOTAFISCAL, 0, CONTROLE,
                    OPERACAO_CODIGO, NULL, -1000, 0, 0, FN_CURRENT_USER_ID(), CURRENT_DATE,
                    0, '', '', 0, 0, NULL, 0, 0);
            END

            IF(:CONTROLE_TRANSACAO_ITEM_OLD > 0) THEN
            BEGIN
                DELETE FROM TBESTOQUE_TRANSACAO_ITEM T WHERE T.CONTROLE = :CONTROLE_TRANSACAO_ITEM_OLD;
            END


            --EXECUTE PROCEDURE SPD_ESTOQUE_TRANSACAO2(ESTABELECIMENTO_CODIGO, LOCALIZACAO_CODIGO, DATA, PRODUTO_CODIGO, NUMERO_NOTAFISCAL, CONTROLE, 0, 0, 0, 0, 0);

            IF (:NF_EXTERNO_ITEM_CONTROLE > 0 OR :NFS_ITEM_CONTROLE > 0) THEN
               BEGIN
                  UPDATE TBNFS_ITEM_SALDO SET
                  QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                  T01 = T01 + :T01, T02 = T02 + :T02, T03 = T03 + :T03, T04 = T04 + :T04,
                  T05 = T05 + :T05, T06 = T06 + :T06, T07 = T07 + :T07, T08 = T08 + :T08,
                  T09 = T09 + :T09, T10 = T10 + :T10, T11 = T11 + :T11, T12 = T12 + :T12,
                  T13 = T13 + :T13, T14 = T14 + :T14, T15 = T15 + :T15, T16 = T16 + :T16,
                  T17 = T17 + :T17, T18 = T18 + :T18, T19 = T19 + :T19, T20 = T20 + :T20
                  WHERE NFS_ITEM_CONTROLE = IIF(:NF_EXTERNO_ITEM_CONTROLE>0,:NF_EXTERNO_ITEM_CONTROLE,:NFS_ITEM_CONTROLE);
               END



            IF (:PDV_CFE_ID > 0) THEN
               BEGIN
                  UPDATE TBPDV_CFE_ITEM_SALDO SET
                  QUANTIDADE = QUANTIDADE + :QUANTIDADE
                  WHERE PDV_CFE_ITEM_ID = :PDV_CFE_ITEM_ID AND PDV_CFE_ID = :PDV_CFE_ID;
               END

          END

      END -- FIM PARA NFE

END;



ALTER TABLE TBNFE_ITEM
ALTER COLUMN VALOR_UNITARIO TYPE NUMERIC(18,8);
