SET TERM ^ ;

ALTER TABLE TBPEDIDO ADD FORMA_COMISSAO VARCHAR(1) DEFAULT ''^

ALTER TABLE TBNFS    ADD FORMA_COMISSAO VARCHAR(1) DEFAULT ''^

CREATE OR ALTER trigger ttbpedido_b18u for tbpedido
active before update position 1
AS 
DECLARE VARIABLE NFS_ID                INTEGER;
DECLARE VARIABLE PDV_CFE_ID            INTEGER;
DECLARE VARIABLE CANAL_VENDAS_ID       INTEGER;
DECLARE VARIABLE CORRETOR_ID           INTEGER;
DECLARE VARIABLE REPRESENTANTE_ID      INTEGER;
DECLARE VARIABLE VENDEDOR_ID           INTEGER;
declare variable MSG_ERRO        VARCHAR(5000);
BEGIN

    /*IF(NEW.PRE_PEDIDO_ID > 0
       AND (NEW.CANAL_VENDAS_ID      IS DISTINCT FROM OLD.CANAL_VENDAS_ID
         OR NEW.CORRETOR_ID          IS DISTINCT FROM OLD.CORRETOR_ID
         OR NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM OLD.REPRESENTANTE_CODIGO
         OR NEW.VENDEDOR_ID          IS DISTINCT FROM OLD.VENDEDOR_ID)
       AND COALESCE(NEW.ALTERANDO_PRE_PEDIDO, 0) <> 1) THEN
       BEGIN
           MSG_ERRO = '';
           FOR SELECT
                A.CANAL_VENDAS_ID,
                A.CORRETOR_ID,
                A.REPRESENTANTE_ID,
                A.VENDEDOR_ID
           FROM TBPDV_CONFERENCIA A
           WHERE A.ID = NEW.PRE_PEDIDO_ID
           INTO :CANAL_VENDAS_ID, :CORRETOR_ID, :REPRESENTANTE_ID, :VENDEDOR_ID DO
           BEGIN
              IF( NEW.CANAL_VENDAS_ID      IS DISTINCT FROM :CANAL_VENDAS_ID
               OR NEW.CORRETOR_ID          IS DISTINCT FROM :CORRETOR_ID
               OR NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM :REPRESENTANTE_ID
               OR NEW.VENDEDOR_ID          IS DISTINCT FROM :VENDEDOR_ID)THEN
                BEGIN
                   :MSG_ERRO = :MSG_ERRO||iif(NEW.CANAL_VENDAS_ID      IS DISTINCT FROM :CANAL_VENDAS_ID ,'<h4>Troca de canal de vendas nao permitida.</h4>','');
                   :MSG_ERRO = :MSG_ERRO||iif(NEW.CORRETOR_ID          IS DISTINCT FROM :CORRETOR_ID     ,'<h4>Troca de corretor nao permitida.</h4>'       ,'');
                   :MSG_ERRO = :MSG_ERRO||iif(NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM :REPRESENTANTE_ID,'<h4>Troca de representante nao permitida.</h4>'  ,'');
                   :MSG_ERRO = :MSG_ERRO||iif(NEW.VENDEDOR_ID          IS DISTINCT FROM :VENDEDOR_ID     ,'<h4>Troca de vendedor nao permitida.</h4>'       ,'');
                   EXCEPTION "..." '<h4>ATENCAO</h4><strong>PEDIDO POSSUI VINCULO COM PRE-PEDIDO</strong>'||:MSG_ERRO;
                END
           END
       END*/

    IF(COALESCE(NEW.ALTERANDO_PRE_PEDIDO, 0) = 0)THEN
    BEGIN
        IF(NEW.CANAL_VENDAS_ID IS DISTINCT FROM OLD.CANAL_VENDAS_ID) THEN
        BEGIN
    
            -- ATUALIZACAO NAS NF'S PARA TROCA DE CANAL DE VENDAS
            FOR SELECT DISTINCT
                    T.NFS_CONTROLE
                   FROM TBNFS_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.NFS_CONTROLE
            INTO :NFS_ID
            DO BEGIN
                UPDATE TBNFS X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
            END
    
            -- ATUALIZACAO NOS CF'S PARA TROCA DE CANAL DE VENDAS
            FOR SELECT DISTINCT
                    T.PDV_CFE_ID
                   FROM TBPDV_CFE_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_ID = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.PDV_CFE_ID
            INTO :PDV_CFE_ID
            DO BEGIN
                UPDATE TBPDV_CFE X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
            END

            -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE CANAL DE VENDAS
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.CANAL_VENDAS_ID = NEW.CANAL_VENDAS_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_ID;
            END
        END
    
        
        IF(NEW.CORRETOR_ID IS DISTINCT FROM OLD.CORRETOR_ID) THEN
        BEGIN
    
            -- ATUALIZACAO NAS NF'S PARA TROCA DE CORRETOR
            FOR SELECT DISTINCT
                    T.NFS_CONTROLE
                   FROM TBNFS_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.NFS_CONTROLE
            INTO :NFS_ID
            DO BEGIN
                UPDATE TBNFS X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
            END
    
            -- ATUALIZACAO NOS CF'S PARA TROCA DE CORRETOR
            FOR SELECT DISTINCT
                    T.PDV_CFE_ID
                   FROM TBPDV_CFE_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_ID = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.PDV_CFE_ID
            INTO :PDV_CFE_ID
            DO BEGIN
                UPDATE TBPDV_CFE X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
            END
            -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE CORRETOR
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.CORRETOR_ID = NEW.CORRETOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_ID;
            END
        END
    
        IF(NEW.REPRESENTANTE_CODIGO IS DISTINCT FROM OLD.REPRESENTANTE_CODIGO) THEN
        BEGIN
    
            -- ATUALIZACAO NAS NF'S PARA TROCA DE REPRESENTANTE
            FOR SELECT DISTINCT
                    T.NFS_CONTROLE
                   FROM TBNFS_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.NFS_CONTROLE
            INTO :NFS_ID
            DO BEGIN
                UPDATE TBNFS X SET X.REPRESENTANTE_CODIGO = NEW.REPRESENTANTE_CODIGO, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
            END
    
            -- ATUALIZACAO NOS CF'S PARA TROCA DE REPRESENTANTE
            FOR SELECT DISTINCT
                    T.PDV_CFE_ID
                   FROM TBPDV_CFE_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_ID = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.PDV_CFE_ID
            INTO :PDV_CFE_ID
            DO BEGIN
                UPDATE TBPDV_CFE X SET X.REPRESENTANTE_ID = NEW.REPRESENTANTE_CODIGO, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
            END

             -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE REPRESENTANTE
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.REPRESENTANTE_ID = NEW.REPRESENTANTE_CODIGO, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_ID;
            END
        END     
    
        IF(NEW.VENDEDOR_ID IS DISTINCT FROM OLD.VENDEDOR_ID) THEN
        BEGIN
    
            -- ATUALIZACAO NAS NF'S PARA TROCA DE VENDEDOR
            FOR SELECT DISTINCT
                    T.NFS_CONTROLE
                   FROM TBNFS_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.NFS_CONTROLE
            INTO :NFS_ID
            DO BEGIN
                UPDATE TBNFS X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
            END
    
            -- ATUALIZACAO NOS CF'S PARA TROCA DE VENDEDOR
            FOR SELECT DISTINCT
                    T.PDV_CFE_ID
                   FROM TBPDV_CFE_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_ID = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.PDV_CFE_ID
            INTO :PDV_CFE_ID
            DO BEGIN
                UPDATE TBPDV_CFE X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
            END
             -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE VENDEDOR
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_ID;
            END
        END   
    
        IF(NEW.FORMA_COMISSAO IS DISTINCT FROM OLD.FORMA_COMISSAO) THEN
        BEGIN
    
            -- ATUALIZACAO NAS NF'S PARA TROCA DE VENDEDOR
            FOR SELECT DISTINCT
                    T.NFS_CONTROLE
                   FROM TBNFS_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_PE_CONTROLE = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.NFS_CONTROLE
            INTO :NFS_ID
            DO BEGIN
                UPDATE TBNFS X SET X.FORMA_COMISSAO = NEW.FORMA_COMISSAO, X.ALTERANDO_PEDIDO = 1 WHERE X.CONTROLE = :NFS_ID;
            END
    
            -- ATUALIZACAO NOS CF'S PARA TROCA DE VENDEDOR
            /*FOR SELECT DISTINCT
                    T.PDV_CFE_ID
                   FROM TBPDV_CFE_ITEM T, TBPEDIDO_ITEM IT
                WHERE T.PEDIDO_ITEM_ID = IT.CONTROLE
                AND IT.PEDIDO = NEW.PEDIDO
                GROUP BY T.PDV_CFE_ID
            INTO :PDV_CFE_ID
            DO BEGIN
                UPDATE TBPDV_CFE X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = :PDV_CFE_ID;
            END
             -- ATUALIZACAO NOS PRE-PEDIDO PARA TROCA DE VENDEDOR
            IF(NEW.PRE_PEDIDO_ID > 0)THEN
            BEGIN
                UPDATE TBPDV_CONFERENCIA X SET X.VENDEDOR_ID = NEW.VENDEDOR_ID, X.ALTERANDO_PEDIDO = 1 WHERE X.ID = NEW.PRE_PEDIDO_ID;
            END*/
        END
    END

    if(new.alterando_pre_pedido = 1)THEN
    BEGIN
       NEW.ALTERANDO_PRE_PEDIDO = 0;
    END
END^
CREATE OR ALTER procedure SPI_NFS (
    ESTABELECIMENTO_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    SERIE varchar(3),
    EMPRESA_CODIGO integer,
    NATUREZA integer,
    DATA_SAIDA date,
    DATA_EMISSAO date,
    HORA_EMISSAO varchar(5),
    HORA_SAIDA varchar(5),
    IND_FINAL char(1),
    IND_PRESENCA char(1),
    ID_ESTRANGEIRO varchar(20),
    CONTROLE integer,
    SITUACAO integer,
    CFOP_CODIGO varchar(5),
    CFOP_DESCRICAO varchar(60),
    USUARIO_CODIGO integer,
    USUARIO_DATA date,
    EMPRESA_RAZAOSOCIAL varchar(50),
    EMPRESA_CNPJ varchar(14),
    EMPRESA_IE varchar(20),
    EMPRESA_ENDERECO varchar(200),
    EMPRESA_NUMERO varchar(20),
    EMPRESA_BAIRRO varchar(20),
    EMPRESA_CIDADE varchar(40),
    EMPRESA_CEP varchar(8),
    EMPRESA_UF varchar(2),
    REPRESENTANTE_CODIGO integer,
    REPRESENTANTE_COMISSAO numeric(10,5),
    SUFRAMA varchar(9),
    CHAVE_ACESSO varchar(44),
    TIPO char(1),
    CLASSIFICACAO varchar(10),
    XML char(2),
    DANFE char(1),
    PAGAMENTO char(1),
    UF_EMBARQUE char(2),
    LOCAL_EMBARQUE varchar(60),
    PROTOCOLO_CANCELAMENTO varchar(20),
    MOTIVO_CANCELAMENTO varchar(50),
    SPED char(1),
    MODELO char(2),
    ESPECIE1 varchar(5),
    FISCAL_CFOP_CODIGO varchar(5),
    BASECALCULO_ICMS numeric(10,5),
    BASECALCULO_ICMS_SUBST numeric(10,5),
    VALOR_ICMS numeric(10,5),
    VALOR_ICMS_SUBST numeric(10,5),
    VALOR_IPI numeric(10,5),
    VALOR_ISSQN numeric(10,5),
    VALOR_FRETE numeric(10,5),
    VALOR_SEGURO numeric(10,5),
    VALOR_PIS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    VALOR_CSLL numeric(10,5),
    VALOR_DESCONTO numeric(10,5),
    VALOR_ACRESCIMO numeric(10,5),
    VALOR_OUTROSCUSTOS numeric(10,5),
    VALOR_TOTAL_PRODUTO numeric(10,5),
    VALOR_TOTAL_NF numeric(10,5),
    RETENCAO_VALOR_PIS numeric(10,5),
    RETENCAO_VALOR_COFINS numeric(10,5),
    RETENCAO_VALOR_INSS numeric(10,5),
    RETENCAO_VALOR_ISSQN numeric(10,5),
    RETENCAO_VALOR_IRRF numeric(10,5),
    RETENCAO_VALOR_CSLL numeric(10,5),
    RETENCAO_BASE_CALCULO_IRRF numeric(10,2),
    RETENCAO_BASE_CALCULO_INSS numeric(10,2),
    VALOR_PARCELAS numeric(10,5),
    VALOR_CONTABIL numeric(10,2),
    VALOR_ESTORNO numeric(10,2),
    VENCIMENTO_DAE_DIFAL date,
    TRANSPORTADORA_CODIGO integer,
    FRETE integer,
    PLACA varchar(8),
    PLACA_UF varchar(2),
    VOLUMES integer,
    ESPECIE varchar(30),
    MARCA varchar(10),
    PESO_BRUTO numeric(10,5),
    PESO_LIQUIDO numeric(10,5),
    CUBAGEM numeric(10,4),
    MODALIDADE char(1),
    NUMERO varchar(10),
    OBSERVACAO01 varchar(130),
    OBSERVACAO02 varchar(130),
    OBSERVACAO03 varchar(130),
    OBSERVACAO04 varchar(130),
    OBSERVACAO05 varchar(130),
    OBSERVACAO06 varchar(130),
    OBSERVACAO07 varchar(130),
    OBSERVACAO08 varchar(130),
    OBSERVACAO09 varchar(130),
    OBSERVACAO10 varchar(130),
    OBSERVACAO11 varchar(130),
    OBSERVACAO12 varchar(130),
    OBSERVACAO13 varchar(130),
    OBSERVACAO14 varchar(130),
    OBSERVACAO15 varchar(130),
    ACUMULA_ITEM char(1),
    OCULTA_GRADE char(1),
    TIPO_DOC char(1),
    SPED_PISCOF char(1),
    GC_WEB integer,
    VENDEDOR_ID integer,
    VENDEDOR_COMISSAO numeric(10,5),
    PDV_CAIXA_ID integer = 0,
    COTACAO_FRETE_ID integer = 0,
    CANAL_VENDAS_ID integer = 0,
    CORRETOR_ID integer = 0,
    PDV_DEVOLUCAO_ID integer = 0,
    FORMA_COMISSAO varchar(1) = '')
as
BEGIN
INSERT INTO TBNFS (
ESTABELECIMENTO_CODIGO,NUMERO_NOTAFISCAL,SERIE,EMPRESA_CODIGO,NATUREZA,
DATA_SAIDA,DATA_EMISSAO,
HORA_EMISSAO,HORA_SAIDA,IND_FINAL,IND_PRESENCA,ID_ESTRANGEIRO,
CONTROLE,SITUACAO,CFOP_CODIGO,CFOP_DESCRICAO,
USUARIO_CODIGO,USUARIO_DATA,EMPRESA_RAZAOSOCIAL,EMPRESA_CNPJ,EMPRESA_IE,EMPRESA_ENDERECO,
EMPRESA_NUMERO,EMPRESA_BAIRRO,EMPRESA_CIDADE,EMPRESA_CEP,EMPRESA_UF,REPRESENTANTE_CODIGO,
REPRESENTANTE_COMISSAO,SUFRAMA,CHAVE_ACESSO,TIPO,XML,DANFE,PAGAMENTO,
UF_EMBARQUE,LOCAL_EMBARQUE,PROTOCOLO_CANCELAMENTO,MOTIVO_CANCELAMENTO,
SPED,MODELO,ESPECIE,FISCAL_CFOP_CODIGO,ACUMULA_ITEM, OCULTA_GRADE, TIPO_DOC,
CLASSIFICACAO,SPED_PISCOF, GC_WEB, VENDEDOR_ID, VENDEDOR_COMISSAO, PDV_CAIXA_ID, 
CANAL_VENDAS_ID, CORRETOR_ID, PDV_DEVOLUCAO_ID, FORMA_COMISSAO) VALUES (

:ESTABELECIMENTO_CODIGO,:NUMERO_NOTAFISCAL,:SERIE,:EMPRESA_CODIGO,:NATUREZA,
:DATA_SAIDA,:DATA_EMISSAO,
:HORA_EMISSAO,:HORA_SAIDA,:IND_FINAL,:IND_PRESENCA,:ID_ESTRANGEIRO,
:CONTROLE,:SITUACAO,:CFOP_CODIGO,:CFOP_DESCRICAO,
:USUARIO_CODIGO,:USUARIO_DATA,:EMPRESA_RAZAOSOCIAL,:EMPRESA_CNPJ,:EMPRESA_IE,:EMPRESA_ENDERECO,
:EMPRESA_NUMERO,:EMPRESA_BAIRRO,:EMPRESA_CIDADE,:EMPRESA_CEP,:EMPRESA_UF,:REPRESENTANTE_CODIGO,
:REPRESENTANTE_COMISSAO,:SUFRAMA,:CHAVE_ACESSO,:TIPO,:XML,:DANFE,:PAGAMENTO,
:UF_EMBARQUE,:LOCAL_EMBARQUE,:PROTOCOLO_CANCELAMENTO,:MOTIVO_CANCELAMENTO,
:SPED,:MODELO,:ESPECIE1,:FISCAL_CFOP_CODIGO,
:ACUMULA_ITEM, :OCULTA_GRADE, :TIPO_DOC,:CLASSIFICACAO,:SPED_PISCOF, :GC_WEB, :VENDEDOR_ID, :VENDEDOR_COMISSAO, 
:PDV_CAIXA_ID, :CANAL_VENDAS_ID, :CORRETOR_ID, :PDV_DEVOLUCAO_ID, :FORMA_COMISSAO);

INSERT INTO TBNFS_TOTAIS (
NFS_CONTROLE,BASECALCULO_ICMS,BASECALCULO_ICMS_SUBST,VALOR_ICMS,VALOR_ICMS_SUBST,
VALOR_IPI,VALOR_ISSQN,VALOR_FRETE,VALOR_SEGURO,VALOR_PIS,VALOR_COFINS,VALOR_DESCONTO,
VALOR_PARCELAS,VALOR_ACRESCIMO,VALOR_OUTROSCUSTOS,VALOR_TOTAL_PRODUTO,VALOR_TOTAL_NF,
RETENCAO_VALOR_PIS,RETENCAO_VALOR_COFINS,RETENCAO_VALOR_INSS,RETENCAO_VALOR_ISSQN,
RETENCAO_VALOR_IRRF,VALOR_CSLL,RETENCAO_VALOR_CSLL,
RETENCAO_BASE_CALCULO_IRRF,RETENCAO_BASE_CALCULO_INSS,VALOR_CONTABIL,VALOR_ESTORNO,VENCIMENTO_DAE_DIFAL, GC_WEB) VALUES(

:CONTROLE,:BASECALCULO_ICMS,:BASECALCULO_ICMS_SUBST,:VALOR_ICMS,:VALOR_ICMS_SUBST,
:VALOR_IPI,:VALOR_ISSQN,:VALOR_FRETE,:VALOR_SEGURO,:VALOR_PIS,:VALOR_COFINS,:VALOR_DESCONTO,
:VALOR_PARCELAS,:VALOR_ACRESCIMO,:VALOR_OUTROSCUSTOS,:VALOR_TOTAL_PRODUTO,:VALOR_TOTAL_NF,
:RETENCAO_VALOR_PIS,:RETENCAO_VALOR_COFINS,:RETENCAO_VALOR_INSS,:RETENCAO_VALOR_ISSQN,
:RETENCAO_VALOR_IRRF,:VALOR_CSLL,:RETENCAO_VALOR_CSLL,
:RETENCAO_BASE_CALCULO_IRRF,:RETENCAO_BASE_CALCULO_INSS,:VALOR_CONTABIL,:VALOR_ESTORNO,:VENCIMENTO_DAE_DIFAL, :GC_WEB);

INSERT INTO TBNFS_TRANSPORTADORA( 
NFS_CONTROLE,TRANSPORTADORA_CODIGO,FRETE,VOLUMES,ESPECIE,
PESO_BRUTO,PESO_LIQUIDO,CUBAGEM,MARCA,NUMERO,PLACA,PLACA_UF,MODALIDADE, GC_WEB, COTACAO_FRETE_ID) VALUES(
:CONTROLE,:TRANSPORTADORA_CODIGO,:FRETE,:VOLUMES,:ESPECIE,
:PESO_BRUTO,:PESO_LIQUIDO,:CUBAGEM,:MARCA,:NUMERO,:PLACA,:PLACA_UF,:MODALIDADE, :GC_WEB, :COTACAO_FRETE_ID);

INSERT INTO TBNFS_OBSERVACAO( 
NFS_CONTROLE,OBSERVACAO01,OBSERVACAO02,OBSERVACAO03,OBSERVACAO04,OBSERVACAO05,
OBSERVACAO06,OBSERVACAO07,OBSERVACAO08,OBSERVACAO09,OBSERVACAO10,OBSERVACAO11,
OBSERVACAO12,OBSERVACAO13,OBSERVACAO14,OBSERVACAO15) VALUES  ( 
:CONTROLE,:OBSERVACAO01,:OBSERVACAO02,:OBSERVACAO03,:OBSERVACAO04,:OBSERVACAO05,
:OBSERVACAO06,:OBSERVACAO07,:OBSERVACAO08,:OBSERVACAO09,:OBSERVACAO10,:OBSERVACAO11,
:OBSERVACAO12,:OBSERVACAO13,:OBSERVACAO14,:OBSERVACAO15);


IF(:NATUREZA = 1) THEN
BEGIN
    EXECUTE PROCEDURE SPU_NF_OBSERVACAO(:ESTABELECIMENTO_CODIGO, :CONTROLE, 'NFS');
END


END^

CREATE OR ALTER procedure SPU_NFS (
    ESTABELECIMENTO_CODIGO integer,
    IND_FINAL char(1),
    NUMERO_NOTAFISCAL integer,
    SERIE varchar(3),
    EMPRESA_CODIGO integer,
    NATUREZA integer,
    DATA_SAIDA date,
    HORA_SAIDA varchar(5),
    DATA_EMISSAO date,
    HORA_EMISSAO varchar(5),
    CONTROLE integer,
    SITUACAO integer,
    CFOP_CODIGO varchar(5),
    CFOP_DESCRICAO varchar(60),
    CFOP_OPCIONAL varchar(5),
    USUARIO_CODIGO integer,
    USUARIO_DATA date,
    STATUSEXCLUSAO char(1),
    EMPRESA_RAZAOSOCIAL varchar(50),
    EMPRESA_CNPJ varchar(14),
    EMPRESA_IE varchar(20),
    EMPRESA_ENDERECO varchar(200),
    EMPRESA_NUMERO varchar(20),
    EMPRESA_BAIRRO varchar(20),
    EMPRESA_CIDADE varchar(40),
    EMPRESA_CEP varchar(8),
    EMPRESA_UF varchar(2),
    REPRESENTANTE_CODIGO integer,
    REPRESENTANTE_COMISSAO numeric(10,5),
    SUFRAMA varchar(9),
    CHAVE_ACESSO varchar(44),
    TIPO char(1),
    CLASSIFICACAO varchar(10),
    XML char(2),
    DANFE char(1),
    PAGAMENTO char(1),
    UF_EMBARQUE char(2),
    LOCAL_EMBARQUE varchar(60),
    RECIBO varchar(20),
    PROTOCOLO varchar(20),
    PROTOCOLO_CANCELAMENTO varchar(20),
    MOTIVO_CANCELAMENTO varchar(50),
    MODELO char(2),
    ESPECIE1 varchar(5),
    FORMULARIO_INICIAL integer,
    FORMULARIO_FINAL integer,
    SPED char(1),
    FISCAL_CFOP_CODIGO varchar(5),
    BASECALCULO_ICMS numeric(10,5),
    BASECALCULO_ICMS_SUBST numeric(10,5),
    VALOR_ICMS numeric(10,5),
    VALOR_ICMS_SUBST numeric(10,5),
    VALOR_IPI numeric(10,5),
    VALOR_ISSQN numeric(10,5),
    VALOR_FRETE numeric(10,5),
    VALOR_SEGURO numeric(10,5),
    VALOR_PIS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    VALOR_CSLL numeric(10,5),
    RETENCAO_BASE_CALCULO_IRRF numeric(10,2),
    RETENCAO_BASE_CALCULO_INSS numeric(10,2),
    VALOR_DESCONTO numeric(10,5),
    VALOR_ACRESCIMO numeric(10,5),
    VALOR_OUTROSCUSTOS numeric(10,5),
    VALOR_TOTAL_PRODUTO numeric(10,5),
    VALOR_TOTAL_NF numeric(10,5),
    RETENCAO_VALOR_PIS numeric(10,5),
    RETENCAO_VALOR_COFINS numeric(10,5),
    RETENCAO_VALOR_INSS numeric(10,5),
    RETENCAO_VALOR_ISSQN numeric(10,5),
    RETENCAO_VALOR_IRRF numeric(10,5),
    RETENCAO_VALOR_CSLL numeric(10,5),
    VALOR_PARCELAS numeric(10,5),
    VALOR_CONTABIL numeric(10,2),
    VALOR_ESTORNO numeric(15,2),
    VENCIMENTO_DAE_DIFAL date,
    TRANSPORTADORA_CODIGO integer,
    FRETE integer,
    PLACA varchar(8),
    PLACA_UF varchar(2),
    VOLUMES integer,
    ESPECIE varchar(30),
    MARCA varchar(10),
    PESO_BRUTO numeric(10,5),
    PESO_LIQUIDO numeric(10,5),
    CUBAGEM numeric(10,4),
    NUMERO varchar(10),
    OBSERVACAO01 varchar(130),
    OBSERVACAO02 varchar(130),
    OBSERVACAO03 varchar(130),
    OBSERVACAO04 varchar(130),
    OBSERVACAO05 varchar(130),
    OBSERVACAO06 varchar(130),
    OBSERVACAO07 varchar(130),
    OBSERVACAO08 varchar(130),
    OBSERVACAO09 varchar(130),
    OBSERVACAO10 varchar(130),
    OBSERVACAO11 varchar(130),
    OBSERVACAO12 varchar(130),
    OBSERVACAO13 varchar(130),
    OBSERVACAO14 varchar(130),
    OBSERVACAO15 varchar(130),
    ACUMULA_ITEM char(1),
    TIPO_DOC char(1),
    SPED_PISCOF char(1),
    GC_WEB integer,
    PDV_CAIXA_ID integer = 0,
    CANAL_VENDAS_ID integer = 0,
    CORRETOR_ID integer = 0,
    FORMA_COMISSAO varchar(1) = '')
as
BEGIN
UPDATE TBNFS SET
ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO,
IND_FINAL              = :IND_FINAL,
NUMERO_NOTAFISCAL      = :NUMERO_NOTAFISCAL,
SERIE                  = :SERIE,
EMPRESA_CODIGO         = :EMPRESA_CODIGO,
NATUREZA               = :NATUREZA,
DATA_SAIDA             = :DATA_SAIDA,
HORA_SAIDA             = :HORA_SAIDA,
DATA_EMISSAO           = :DATA_EMISSAO,
HORA_EMISSAO           = :HORA_EMISSAO,
SITUACAO               = :SITUACAO,
CFOP_CODIGO            = :CFOP_CODIGO,
CFOP_DESCRICAO         = :CFOP_DESCRICAO,
CFOP_OPCIONAL          = :CFOP_OPCIONAL,
USUARIO_CODIGO         = :USUARIO_CODIGO,
USUARIO_DATA           = :USUARIO_DATA,
STATUSEXCLUSAO         = :STATUSEXCLUSAO,
EMPRESA_RAZAOSOCIAL    = :EMPRESA_RAZAOSOCIAL,
EMPRESA_CNPJ           = :EMPRESA_CNPJ,
EMPRESA_IE             = :EMPRESA_IE,
EMPRESA_ENDERECO       = :EMPRESA_ENDERECO,
EMPRESA_NUMERO         = :EMPRESA_NUMERO,
EMPRESA_BAIRRO         = :EMPRESA_BAIRRO,
EMPRESA_CIDADE         = :EMPRESA_CIDADE,
EMPRESA_CEP            = :EMPRESA_CEP,
EMPRESA_UF             = :EMPRESA_UF,
REPRESENTANTE_CODIGO   = :REPRESENTANTE_CODIGO,
REPRESENTANTE_COMISSAO = :REPRESENTANTE_COMISSAO,
SUFRAMA       = :SUFRAMA,
CHAVE_ACESSO  = :CHAVE_ACESSO,
TIPO          = :TIPO,
XML           = :XML,
DANFE         = :DANFE,
PAGAMENTO     = :PAGAMENTO,
UF_EMBARQUE   = :UF_EMBARQUE,
LOCAL_EMBARQUE= :LOCAL_EMBARQUE,
RECIBO        = :RECIBO,
PROTOCOLO     = :PROTOCOLO,
PROTOCOLO_CANCELAMENTO = :PROTOCOLO_CANCELAMENTO,
MOTIVO_CANCELAMENTO    = :MOTIVO_CANCELAMENTO,
MODELO                 = :MODELO,
ESPECIE                = :ESPECIE1,
FORMULARIO_INICIAL     = :FORMULARIO_INICIAL,
FORMULARIO_FINAL       = :FORMULARIO_FINAL,
SPED                   = :SPED,
FISCAL_CFOP_CODIGO     = :FISCAL_CFOP_CODIGO,
ACUMULA_ITEM = :ACUMULA_ITEM,
TIPO_DOC = :TIPO_DOC,
CLASSIFICACAO = :CLASSIFICACAO,
SPED_PISCOF = :SPED_PISCOF,
PDV_CAIXA_ID            = :PDV_CAIXA_ID,
CANAL_VENDAS_ID         = :CANAL_VENDAS_ID,
CORRETOR_ID             = :CORRETOR_ID,
FORMA_COMISSAO             = :FORMA_COMISSAO
WHERE CONTROLE= :CONTROLE;

UPDATE TBNFS_TOTAIS SET
BASECALCULO_ICMS       = :BASECALCULO_ICMS,
BASECALCULO_ICMS_SUBST = :BASECALCULO_ICMS_SUBST,
VALOR_ICMS             = :VALOR_ICMS,
VALOR_ICMS_SUBST       = :VALOR_ICMS_SUBST,
VALOR_IPI              = :VALOR_IPI,
VALOR_ISSQN            = :VALOR_ISSQN,
VALOR_FRETE            = :VALOR_FRETE,
VALOR_SEGURO           = :VALOR_SEGURO,
VALOR_PIS              = :VALOR_PIS,
VALOR_COFINS           = :VALOR_COFINS,
VALOR_DESCONTO         = :VALOR_DESCONTO,
VALOR_PARCELAS         = :VALOR_PARCELAS,
VALOR_ACRESCIMO        = :VALOR_ACRESCIMO,
VALOR_OUTROSCUSTOS     = :VALOR_OUTROSCUSTOS,
VALOR_TOTAL_PRODUTO    = :VALOR_TOTAL_PRODUTO,
VALOR_TOTAL_NF         = :VALOR_TOTAL_NF,
RETENCAO_VALOR_PIS     = :RETENCAO_VALOR_PIS,
RETENCAO_VALOR_COFINS  = :RETENCAO_VALOR_COFINS,
RETENCAO_VALOR_INSS    = :RETENCAO_VALOR_INSS,
RETENCAO_VALOR_ISSQN   = :RETENCAO_VALOR_ISSQN,
RETENCAO_VALOR_IRRF    = :RETENCAO_VALOR_IRRF,
VALOR_CSLL             = :VALOR_CSLL,
RETENCAO_VALOR_CSLL    = :RETENCAO_VALOR_CSLL,
RETENCAO_BASE_CALCULO_IRRF = :RETENCAO_BASE_CALCULO_IRRF,
RETENCAO_BASE_CALCULO_INSS = :RETENCAO_BASE_CALCULO_INSS,
VALOR_CONTABIL         = :VALOR_CONTABIL,
VALOR_ESTORNO          = :VALOR_ESTORNO,
VENCIMENTO_DAE_DIFAL   = :VENCIMENTO_DAE_DIFAL
WHERE NFS_CONTROLE     = :CONTROLE;

UPDATE TBNFS_TRANSPORTADORA SET
TRANSPORTADORA_CODIGO  = :TRANSPORTADORA_CODIGO,
CUBAGEM                = :CUBAGEM,
FRETE                  = :FRETE,
VOLUMES                = :VOLUMES,
ESPECIE                = :ESPECIE,
PESO_BRUTO             = :PESO_BRUTO,
PESO_LIQUIDO           = :PESO_LIQUIDO,
MARCA                  = :MARCA,
NUMERO                 = :NUMERO,
PLACA                  = :PLACA,
PLACA_UF               = :PLACA_UF
WHERE NFS_CONTROLE     = :CONTROLE;

UPDATE TBNFS_OBSERVACAO SET
OBSERVACAO01           = :OBSERVACAO01,
OBSERVACAO02           = :OBSERVACAO02,
OBSERVACAO03           = :OBSERVACAO03,
OBSERVACAO04           = :OBSERVACAO04,
OBSERVACAO05           = :OBSERVACAO05,
OBSERVACAO06           = :OBSERVACAO06,
OBSERVACAO07           = :OBSERVACAO07,
OBSERVACAO08           = :OBSERVACAO08,
OBSERVACAO09           = :OBSERVACAO09,
OBSERVACAO10           = :OBSERVACAO10,
OBSERVACAO11           = :OBSERVACAO11,
OBSERVACAO12           = :OBSERVACAO12,
OBSERVACAO13           = :OBSERVACAO13,
OBSERVACAO14           = :OBSERVACAO14,
OBSERVACAO15           = :OBSERVACAO15
WHERE NFS_CONTROLE = :CONTROLE;

END^

CREATE OR ALTER procedure SPI_NFS_PARCELAMENTO (
    NFS_CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    DATA_VENCIMENTO date,
    PARCELA integer,
    VALOR numeric(10,5),
    VALOR_SALDO numeric(10,5),
    CONTA_RECEBER_OPERACAO integer,
    CONTROLE integer,
    ACEITE varchar(1),
    VALOR_DESCONTO numeric(10,5),
    CONTA_RECEBER_BANCO integer,
    CONTA_RECEBER_MODALIDADE integer,
    CONTA_RECEBER_POSICAO integer,
    CONTA_RECEBER_COBRANCA integer,
    SERIE varchar(3),
    PAGAMENTO_FORMA integer,
    CLASSIFICACAO_CONTABIL varchar(6),
    CCUSTO varchar(8),
    OBSERVACAO varchar(100),
    CODIGO_AUTORIZACAO varchar(50),
    NSU varchar(50),
    GC_WEB integer,
    NF_SITUACAO integer,
    NF_NATUREZA integer,
    REPRESENTANTE_ID integer,
    REPRESENTANTE_COMISSAO numeric(10,5),
    VENDEDOR_ID integer,
    VENDEDOR_COMISSAO numeric(10,5),
    PARCELA_NF integer = 1,
    PDV_DEVOLUCAO_TROCA_ID integer = 0,
    PDV_CAIXA_ID integer = 0,
    FORMA_COMISSAO varchar(1) = '')
as
BEGIN
INSERT INTO TBNFS_PARCELAMENTO(
NFS_CONTROLE,ESTABELECIMENTO_CODIGO,EMPRESA_CODIGO,NUMERO_NOTAFISCAL,
DATA_EMISSAO,DATA_VENCIMENTO,PARCELA,VALOR,VALOR_SALDO,CONTA_RECEBER_OPERACAO,
CONTROLE,ACEITE,VALOR_DESCONTO,CONTA_RECEBER_BANCO,CONTA_RECEBER_MODALIDADE,
CONTA_RECEBER_POSICAO ,CONTA_RECEBER_COBRANCA,SERIE,PAGAMENTO_FORMA, CLASSIFICACAO_CONTABIL,
CCUSTO, OBSERVACAO, CODIGO_AUTORIZACAO, NSU, GC_WEB, NF_SITUACAO, NF_NATUREZA, REPRESENTANTE_ID,
REPRESENTANTE_COMISSAO, VENDEDOR_ID, VENDEDOR_COMISSAO, PARCELA_NF, PDV_DEVOLUCAO_TROCA_ID, CAIXA_ID, FORMA_COMISSAO) VALUES (
:NFS_CONTROLE,:ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,
:DATA_EMISSAO,:DATA_VENCIMENTO,:PARCELA,:VALOR,:VALOR_SALDO,
:CONTA_RECEBER_OPERACAO,:CONTROLE,:ACEITE,:VALOR_DESCONTO,:CONTA_RECEBER_BANCO,
:CONTA_RECEBER_MODALIDADE,:CONTA_RECEBER_POSICAO,:CONTA_RECEBER_COBRANCA,:SERIE,:PAGAMENTO_FORMA,
:CLASSIFICACAO_CONTABIL, :CCUSTO, :OBSERVACAO, :CODIGO_AUTORIZACAO, :NSU, :GC_WEB, :NF_SITUACAO, :NF_NATUREZA,
:representante_id, :REPRESENTANTE_COMISSAO, :VENDEDOR_ID, :VENDEDOR_COMISSAO, :PARCELA_NF, :PDV_DEVOLUCAO_TROCA_ID, :PDV_CAIXA_ID, :FORMA_COMISSAO);
END^

CREATE OR ALTER trigger ttbnfs_b9u for tbnfs
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ESTAB '||OLD.ESTABELECIMENTO_CODIGO||'->'||NEW.ESTABELECIMENTO_CODIGO; END
   if (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) THEN BEGIN HISTORICO = HISTORICO||' PERFIL '||OLD.CLASSIFICACAO||'->'||NEW.CLASSIFICACAO; END

   if (OLD.NUMERO_NOTAFISCAL <> NEW.NUMERO_NOTAFISCAL) THEN BEGIN HISTORICO = HISTORICO||' NR.NF.'||OLD.NUMERO_NOTAFISCAL||'->'||NEW.NUMERO_NOTAFISCAL; END
   if (OLD.SERIE <> NEW.SERIE) THEN BEGIN HISTORICO = HISTORICO||' SERIE '||OLD.SERIE||'->'||NEW.SERIE; END
   if (OLD.CHAVE_ACESSO <> NEW.CHAVE_ACESSO) THEN BEGIN HISTORICO = HISTORICO||' CHAVE '||OLD.CHAVE_ACESSO||'->'||NEW.CHAVE_ACESSO; END

   if (OLD.NATUREZA <> NEW.NATUREZA) THEN BEGIN HISTORICO = HISTORICO||' NAT '||OLD.NATUREZA||'->'||NEW.NATUREZA; END
   if (OLD.SITUACAO <> NEW.SITUACAO) THEN BEGIN HISTORICO = HISTORICO||' SIT '||OLD.SITUACAO||'->'||NEW.SITUACAO; END

   if (OLD.CFOP_CODIGO <> NEW.CFOP_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' CFOP '||OLD.CFOP_CODIGO||'->'||NEW.CFOP_CODIGO; END
   if (OLD.CFOP_DESCRICAO <> NEW.CFOP_DESCRICAO) THEN BEGIN HISTORICO = HISTORICO||' DESC.CFOP '||OLD.CFOP_DESCRICAO||'->'||NEW.CFOP_DESCRICAO; END
   if (OLD.FISCAL_CFOP_CODIGO <> NEW.FISCAL_CFOP_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' FISC.CFOP '||OLD.FISCAL_CFOP_CODIGO||'->'||NEW.FISCAL_CFOP_CODIGO; END

   if (OLD.DATA_EMISSAO <> NEW.DATA_EMISSAO) THEN BEGIN HISTORICO = HISTORICO||' DT.EMISS.'||OLD.DATA_EMISSAO||'->'||NEW.DATA_EMISSAO; END
   if (OLD.HORA_EMISSAO <> NEW.HORA_EMISSAO) THEN BEGIN HISTORICO = HISTORICO||' HR.EMISS.'||OLD.HORA_EMISSAO||'->'||NEW.HORA_EMISSAO; END
   if (OLD.DATA_SAIDA <> NEW.DATA_SAIDA) THEN BEGIN HISTORICO = HISTORICO||' DT.SAIDA '||OLD.DATA_SAIDA||'->'||NEW.DATA_SAIDA; END
   if (OLD.HORA_SAIDA <> NEW.HORA_SAIDA) THEN BEGIN HISTORICO = HISTORICO||' HR.SAIDA '||OLD.HORA_SAIDA||'->'||NEW.HORA_SAIDA; END
 -- if (OLD.DATA_ATUALIZACAO <> NEW.DATA_ATUALIZACAO) THEN BEGIN HISTORICO = HISTORICO||' DT.ATUAL.'||OLD.DATA_ATUALIZACAO||'->'||NEW.DATA_ATUALIZACAO; END

   if (OLD.EMPRESA_CODIGO <> NEW.EMPRESA_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ID DEST '||OLD.EMPRESA_CODIGO||'->'||NEW.EMPRESA_CODIGO; END
   if (OLD.EMPRESA_RAZAOSOCIAL <> NEW.EMPRESA_RAZAOSOCIAL) THEN BEGIN HISTORICO = HISTORICO||' NOME DEST '||OLD.EMPRESA_RAZAOSOCIAL||'->'||NEW.EMPRESA_RAZAOSOCIAL; END
   if (OLD.EMPRESA_UF <> NEW.EMPRESA_UF) THEN BEGIN HISTORICO = HISTORICO||' UF DEST '||OLD.EMPRESA_UF||'->'||NEW.EMPRESA_UF; END
   if (OLD.EMPRESA_CNPJ <> NEW.EMPRESA_CNPJ) THEN BEGIN HISTORICO = HISTORICO||' CNPJ DEST '||OLD.EMPRESA_CNPJ||'->'||NEW.EMPRESA_CNPJ; END
   if (OLD.ID_ESTRANGEIRO <> NEW.ID_ESTRANGEIRO) THEN BEGIN HISTORICO = HISTORICO||' ID ESTRANG '||OLD.ID_ESTRANGEIRO||'->'||NEW.ID_ESTRANGEIRO; END
   if (OLD.SUFRAMA <> NEW.SUFRAMA) THEN BEGIN HISTORICO = HISTORICO||' SUFRAMA '||OLD.SUFRAMA||'->'||NEW.SUFRAMA; END
   if (OLD.UF_EMBARQUE <> NEW.UF_EMBARQUE) THEN BEGIN HISTORICO = HISTORICO||' UF EMB '||OLD.UF_EMBARQUE||'->'||NEW.UF_EMBARQUE; END
   if (OLD.LOCAL_EMBARQUE <> NEW.LOCAL_EMBARQUE) THEN BEGIN HISTORICO = HISTORICO||' LOC EMB '||OLD.LOCAL_EMBARQUE||'->'||NEW.LOCAL_EMBARQUE; END

   if (OLD.ESPECIE <> NEW.ESPECIE) THEN BEGIN HISTORICO = HISTORICO||' ESPEC '||OLD.ESPECIE||'->'||NEW.ESPECIE; END
   if (OLD.MODELO <> NEW.MODELO) THEN BEGIN HISTORICO = HISTORICO||' MOD '||OLD.MODELO||'->'||NEW.MODELO; END
   if (OLD.IND_FINAL <> NEW.IND_FINAL) THEN BEGIN HISTORICO = HISTORICO||' IND FIN '||OLD.IND_FINAL||'->'||NEW.IND_FINAL; END
   if (OLD.IND_PRESENCA <> NEW.IND_PRESENCA) THEN BEGIN HISTORICO = HISTORICO||' IND PRES '||OLD.IND_PRESENCA||'->'||NEW.IND_PRESENCA; END
   if (OLD.TIPO <> NEW.TIPO) THEN BEGIN HISTORICO = HISTORICO||' TIPO '||OLD.TIPO||'->'||NEW.TIPO; END
   if (OLD.TIPO_DOC <> NEW.TIPO_DOC) THEN BEGIN HISTORICO = HISTORICO||' TP.DOC '||OLD.TIPO_DOC||'->'||NEW.TIPO_DOC; END
   if (OLD.DANFE <> NEW.DANFE) THEN BEGIN HISTORICO = HISTORICO||' DANFE '||OLD.DANFE||'->'||NEW.DANFE; END
   --if (OLD.XML <> NEW.XML) THEN BEGIN HISTORICO = HISTORICO||' XML '||OLD.XML||'->'||NEW.XML; END
   if (OLD.PAGAMENTO <> NEW.PAGAMENTO) THEN BEGIN HISTORICO = HISTORICO||' PAG '||OLD.PAGAMENTO||'->'||NEW.PAGAMENTO; END
   if (OLD.SPED <> NEW.SPED) THEN BEGIN HISTORICO = HISTORICO||' SPED FIS '||OLD.SPED||'->'||NEW.SPED; END
   if (OLD.SPED_PISCOF <> NEW.SPED_PISCOF) THEN BEGIN HISTORICO = HISTORICO||' SPED CONTR '||OLD.SPED_PISCOF||'->'||NEW.SPED_PISCOF; END

   if (OLD.GC_WEB <> NEW.GC_WEB) THEN BEGIN HISTORICO = HISTORICO||' GCWEB '||OLD.GC_WEB||'->'||NEW.GC_WEB; END
   if (OLD.OCULTA_GRADE <> NEW.OCULTA_GRADE) THEN BEGIN HISTORICO = HISTORICO||' OCULT.GRD '||OLD.OCULTA_GRADE||'->'||NEW.OCULTA_GRADE; END
   if (OLD.ACUMULA_ITEM <> NEW.ACUMULA_ITEM) THEN BEGIN HISTORICO = HISTORICO||' ACUM.ITEM '||OLD.ACUMULA_ITEM||'->'||NEW.ACUMULA_ITEM; END

   if (OLD.MOTIVO_CANCELAMENTO <> NEW.MOTIVO_CANCELAMENTO) THEN BEGIN HISTORICO = HISTORICO||' MOT.CANC '||OLD.MOTIVO_CANCELAMENTO||'->'||NEW.MOTIVO_CANCELAMENTO; END
   if (OLD.PROTOCOLO_CANCELAMENTO <> NEW.PROTOCOLO_CANCELAMENTO) THEN BEGIN HISTORICO = HISTORICO||' PROT.CANC '||OLD.PROTOCOLO_CANCELAMENTO||'->'||NEW.PROTOCOLO_CANCELAMENTO; END

   if (OLD.REPRESENTANTE_CODIGO <> NEW.REPRESENTANTE_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ID REPR '||OLD.REPRESENTANTE_CODIGO||'->'||NEW.REPRESENTANTE_CODIGO; END
   if (OLD.REPRESENTANTE_COMISSAO <> NEW.REPRESENTANTE_COMISSAO) THEN BEGIN HISTORICO = HISTORICO||' %COM.REPR '||OLD.REPRESENTANTE_COMISSAO||'->'||NEW.REPRESENTANTE_COMISSAO; END
   if (OLD.forma_comissao IS DISTINCT FROM NEW.forma_comissao) THEN BEGIN HISTORICO = HISTORICO||' FORM.COM:'||COALESCE(OLD.forma_comissao, '')||'->'||COALESCE(NEW.forma_comissao, ''); END
   if (OLD.VENDEDOR_ID <> NEW.VENDEDOR_ID) THEN BEGIN HISTORICO = HISTORICO||' ID VEND '||OLD.VENDEDOR_ID||'->'||NEW.VENDEDOR_ID; END
   if (OLD.VENDEDOR_COMISSAO <> NEW.VENDEDOR_COMISSAO) THEN BEGIN HISTORICO = HISTORICO||' %COM.VEND '||OLD.VENDEDOR_COMISSAO||'->'||NEW.VENDEDOR_COMISSAO; END
   if (OLD.CANAL_VENDAS_ID IS DISTINCT FROM NEW.CANAL_VENDAS_ID) THEN BEGIN HISTORICO = HISTORICO||' CANAL VENDAS:'||COALESCE(OLD.CANAL_VENDAS_ID, 0)||'->'||COALESCE(NEW.CANAL_VENDAS_ID, 0); END

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

CREATE OR ALTER trigger ttbpedido_b9u for tbpedido
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(8000);
DECLARE VARIABLE HIST_DESC_FIXO VARCHAR(8000);
DECLARE VARIABLE USUARIO VARCHAR(20);
BEGIN

   HISTORICO = '';
   HIST_DESC_FIXO = '';

   IF (OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' ESTAB:'||OLD.ESTABELECIMENTO_CODIGO||'->'||NEW.ESTABELECIMENTO_CODIGO;
       END
   IF (OLD.CLIENTE_CODIGO <> NEW.CLIENTE_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CLIENTE:'||OLD.CLIENTE_CODIGO||'->'||NEW.CLIENTE_CODIGO;
       END
   IF (OLD.REPRESENTANTE_CODIGO <> NEW.REPRESENTANTE_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' REP:'||OLD.REPRESENTANTE_CODIGO||'->'||NEW.REPRESENTANTE_CODIGO;
       END
   IF (COALESCE(OLD.forma_comissao,'') <> COALESCE(NEW.forma_comissao,'')) THEN
       BEGIN
       HISTORICO = HISTORICO||' FORM.COM:'||OLD.forma_comissao||'->'||NEW.forma_comissao;
       END
   IF (OLD.CLIENTE_ID_AMOSTRA <> NEW.CLIENTE_ID_AMOSTRA) THEN
       BEGIN
       HISTORICO = HISTORICO||' CLI.AMOSTRA:'||OLD.CLIENTE_ID_AMOSTRA||'->'||NEW.CLIENTE_ID_AMOSTRA;
       END
   IF (OLD.DATA <> NEW.DATA) THEN
       BEGIN
       HISTORICO = HISTORICO||' DT.EMISS.'||OLD.DATA||'->'||NEW.DATA;
       END
   IF (OLD.DATA_CLIENTE <> NEW.DATA_CLIENTE) THEN
       BEGIN
       HISTORICO = HISTORICO||' DT.CLI.'||OLD.DATA_CLIENTE||'->'||NEW.DATA_CLIENTE;
       END
   IF (OLD.PROGRAMADO<> NEW.PROGRAMADO) THEN
       BEGIN
       HISTORICO = HISTORICO||' PROG.'||OLD.PROGRAMADO||'->'||NEW.PROGRAMADO;
       END
   IF (OLD.DATA_ENTREGA <> NEW.DATA_ENTREGA) THEN
       BEGIN
       HISTORICO = HISTORICO||' PREV.FAT.'||OLD.DATA_ENTREGA||'->'||NEW.DATA_ENTREGA;
       END
   IF (OLD.PEDIDO_CLIENTE <> NEW.PEDIDO_CLIENTE) THEN
       BEGIN
       HISTORICO = HISTORICO||' PED.CLI.'||OLD.PEDIDO_CLIENTE||'->'||NEW.PEDIDO_CLIENTE;
       END
   IF (OLD.TRANSPORTADORA_CODIGO<> NEW.TRANSPORTADORA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TRANSP.'||OLD.TRANSPORTADORA_CODIGO||'->'||NEW.TRANSPORTADORA_CODIGO;
       END
   IF (OLD.PRIORIDADE<> NEW.PRIORIDADE) THEN
       BEGIN
       HISTORICO = HISTORICO||' PRIOR.'||OLD.PRIORIDADE||'->'||NEW.PRIORIDADE;
       END
   IF (OLD.FRETE<> NEW.FRETE) THEN
       BEGIN
       HISTORICO = HISTORICO||' FRETE.'||OLD.FRETE||'->'||NEW.FRETE;
       END
   IF (OLD.PAGAMENTO_FORMA<> NEW.PAGAMENTO_FORMA) THEN
       BEGIN
       HISTORICO = HISTORICO||' FORM.PG.'||OLD.PAGAMENTO_FORMA||'->'||NEW.PAGAMENTO_FORMA;
       END
   IF (OLD.PAGAMENTO_CONDICAO<> NEW.PAGAMENTO_CONDICAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COND.PG.'||OLD.PAGAMENTO_CONDICAO||'->'||NEW.PAGAMENTO_CONDICAO;
       END

   IF (OLD.VALOR_FRETE <> NEW.VALOR_FRETE) THEN
       BEGIN
       HISTORICO = HISTORICO||' VR.FRT.'||OLD.VALOR_FRETE||'->'||NEW.VALOR_FRETE;
       END
   IF (OLD.PESO <> NEW.PESO) THEN
       BEGIN
       HISTORICO = HISTORICO||' PESO:'||OLD.PESO||'->'||NEW.PESO;
       END
   IF (OLD.TIPO_PEDIDO <> NEW.TIPO_PEDIDO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TP.PED.'||OLD.TIPO_PEDIDO||'->'||NEW.TIPO_PEDIDO;
       END
   IF (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' PERF.'||OLD.CLASSIFICACAO||'->'||NEW.CLASSIFICACAO;
       END
   IF (OLD.CLASSIFICACAO_FINANCEIRA <> NEW.CLASSIFICACAO_FINANCEIRA) THEN
       BEGIN
       HISTORICO = HISTORICO||' CLASS.FIN.'||OLD.CLASSIFICACAO_FINANCEIRA||'->'||NEW.CLASSIFICACAO_FINANCEIRA;
       END
   IF (OLD.CCUSTO <> NEW.CCUSTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' C.CUSTO:'||OLD.CCUSTO||'->'||NEW.CCUSTO;
       END
   IF (OLD.TABELA_UF <> NEW.TABELA_UF) THEN
       BEGIN
       HISTORICO = HISTORICO||' TAB.UF:'||OLD.TABELA_UF||'->'||NEW.TABELA_UF;
       END
   IF (OLD.CODIGO_RASTREIO <> NEW.CODIGO_RASTREIO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COD.RASTREIO:'||OLD.CODIGO_RASTREIO||'->'||NEW.CODIGO_RASTREIO;
       END
   IF (OLD.EMBALAGEM <> NEW.EMBALAGEM) THEN
       BEGIN
       HISTORICO = HISTORICO||' EMB.'||OLD.EMBALAGEM||'->'||NEW.EMBALAGEM;
       END
   IF (OLD.TABELA_PRECO_ID <> NEW.TABELA_PRECO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' TAB.PRECO:'||OLD.TABELA_PRECO_ID||'->'||NEW.TABELA_PRECO_ID;
       END
   IF (OLD.DESCONTO1 <> NEW.DESCONTO1) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.1:'||OLD.DESCONTO1||'->'||NEW.DESCONTO1;
       END
   IF (OLD.DESCONTO2 <> NEW.DESCONTO2) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.2:'||OLD.DESCONTO2||'->'||NEW.DESCONTO2;
       END


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

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

   IF (OLD.representante_comissao<> NEW.representante_comissao) THEN
       BEGIN
       HISTORICO = HISTORICO||' %REP.COM.'||OLD.representante_comissao||'->'||NEW.representante_comissao;
       END

   IF (OLD.STATUS <> NEW.STATUS) THEN
       BEGIN
       IF (NEW.STATUS = '0') THEN
           HISTORICO = HISTORICO||' STATUS INATIVADO';
       IF (NEW.STATUS = '1') THEN
           HISTORICO = HISTORICO||' STATUS ATIVADO';
       END 

   IF (OLD.desconto_fixo       is distinct from NEW.desconto_fixo
   or  OLD.VALOR_DESCONTO_FIXO is distinct from NEW.VALOR_DESCONTO_FIXO) THEN
       BEGIN
       IF (NEW.desconto_fixo = '1') THEN
           HIST_DESC_FIXO = HIST_DESC_FIXO||' DESCONTO FIXO APLICADO: '||COALESCE(NEW.VALOR_DESCONTO_FIXO, 0)||'%';
       IF (COALESCE(NEW.desconto_fixo, 0) = '0') THEN
           HIST_DESC_FIXO = HIST_DESC_FIXO||' DESCONTO FIXO REMOVIDO ';
       END
 
   IF (OLD.SITUACAO <> NEW.SITUACAO) THEN
       BEGIN
       IF (NEW.SITUACAO = '0') THEN
           HISTORICO = HISTORICO||' PEDIDO DESCONFIRMADO';
           NEW.STATUS_ECOMMERCE = 2;
       IF (NEW.SITUACAO = '1') THEN
           HISTORICO = HISTORICO||' PEDIDO CONFIRMADO';
           NEW.STATUS_ECOMMERCE = 3;
       END

   IF (OLD.FORMA_ANALISE <> NEW.FORMA_ANALISE) THEN
       BEGIN
       HISTORICO = HISTORICO||' F.ANALISE:'||OLD.FORMA_ANALISE ||'->'||NEW.FORMA_ANALISE;
       END
    
   IF (OLD.CHAVE_LIBERACAO <> NEW.CHAVE_LIBERACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CHAVE:'||OLD.CHAVE_LIBERACAO||'->'||NEW.CHAVE_LIBERACAO;
       END

   IF (OLD.CANAL_VENDAS_ID IS DISTINCT FROM NEW.CANAL_VENDAS_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' CANAL VENDAS:'||COALESCE(OLD.CANAL_VENDAS_ID, 0)||'->'||COALESCE(NEW.CANAL_VENDAS_ID, 0);
       END

   IF (OLD.CORRETOR_ID IS DISTINCT FROM NEW.CORRETOR_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' CORRETOR:'||COALESCE(OLD.CORRETOR_ID, 0)||'->'||COALESCE(NEW.CORRETOR_ID, 0);
       END       

   IF (OLD.CODIGO_AUTORIZACAO IS DISTINCT FROM NEW.CODIGO_AUTORIZACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COD.AUTORIZACAO:'||COALESCE(OLD.CODIGO_AUTORIZACAO, '')||'->'||COALESCE(NEW.CODIGO_AUTORIZACAO, '');
       END        

   IF (OLD.NSU IS DISTINCT FROM NEW.NSU) THEN
       BEGIN
       HISTORICO = HISTORICO||' NSU:'||COALESCE(OLD.NSU, '')||'->'||COALESCE(NEW.NSU, '');
       END

   IF (OLD.tipo_embalagem_id IS DISTINCT FROM NEW.tipo_embalagem_id) THEN
       BEGIN
       HISTORICO = HISTORICO||' TIPO EMB:'||COALESCE(OLD.tipo_embalagem_id, 0)||'->'||COALESCE(NEW.tipo_embalagem_id, 0);
       END
 
   IF (HISTORICO <> '') THEN
       BEGIN
       USUARIO = (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION);

       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBPEDIDO', OLD.PEDIDO, :USUARIO,
      (SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
       FN_ELIPSES(:HISTORICO,500));

       IF (OLD.DATA_CLIENTE <> NEW.DATA_CLIENTE) THEN
           BEGIN

               UPDATE TBPEDIDO_HISTORICO_DATA SET ULTIMA_ALTERACAO = '0'
               WHERE PEDIDO = OLD.PEDIDO AND DATA_CAMPO = 'DATA_CLIENTE' AND ULTIMA_ALTERACAO = '1';
    
               INSERT INTO TBPEDIDO_HISTORICO_DATA (
               PEDIDO, DATA_CAMPO, DATA_ORIGEM, DATA_DESTINO, USUARIO) VALUES (
               OLD.PEDIDO, 'DATA_CLIENTE', OLD.DATA_CLIENTE, NEW.DATA_CLIENTE, :USUARIO);

           END

       IF (OLD.DATA_ENTREGA <> NEW.DATA_ENTREGA) THEN
           BEGIN

               UPDATE TBPEDIDO_HISTORICO_DATA SET ULTIMA_ALTERACAO = '0'
               WHERE PEDIDO = OLD.PEDIDO AND DATA_CAMPO = 'DATA_ENTREGA' AND ULTIMA_ALTERACAO = '1';

               INSERT INTO TBPEDIDO_HISTORICO_DATA (
               PEDIDO, DATA_CAMPO, DATA_ORIGEM, DATA_DESTINO, USUARIO) VALUES (
               OLD.PEDIDO, 'DATA_ENTREGA', OLD.DATA_ENTREGA, NEW.DATA_ENTREGA, :USUARIO);

           END

       END

   IF(HIST_DESC_FIXO <> '')THEN
   BEGIN
       USUARIO = (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION);

       INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO)
       VALUES ('TBPEDIDO', OLD.PEDIDO, :USUARIO,
      (SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
       FN_ELIPSES(:HIST_DESC_FIXO,500));
   END
END^

CREATE OR ALTER trigger ttbnfs_b8u for tbnfs
active before update position 8
AS
DECLARE VARIABLE VENDEDOR_COMISSAO NUMERIC(15,2);
DECLARE VARIABLE CORRETOR_COMISSAO NUMERIC(15,2);
BEGIN

   IF(COALESCE(NEW.REPRESENTANTE_CODIGO,0)      <> COALESCE(OLD.REPRESENTANTE_CODIGO,0)      OR
      COALESCE(NEW.VENDEDOR_ID ,0)              <> COALESCE(OLD.VENDEDOR_ID ,0)              OR
      COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) <> COALESCE(OLD.REPRESENTANTE_COMISSAO,0.00) OR
      COALESCE(NEW.VENDEDOR_COMISSAO,0.00)      <> COALESCE(OLD.VENDEDOR_COMISSAO,0.00) OR
      COALESCE(NEW.CORRETOR_ID,0.00)            <> COALESCE(OLD.CORRETOR_ID,0.00)            OR
      COALESCE(NEW.FORMA_COMISSAO,'')           <> COALESCE(OLD.forma_comissao,'')) THEN
      BEGIN
        UPDATE TBNFS_PARCELAMENTO P SET
            P.REPRESENTANTE_ID       = NEW.REPRESENTANTE_CODIGO,
            P.REPRESENTANTE_COMISSAO = NEW.REPRESENTANTE_COMISSAO,
            P.forma_comissao         = NEW.FORMA_COMISSAO,
            P.CORRETOR_ID            = NEW.CORRETOR_ID,
            P.VENDEDOR_ID            = NEW.VENDEDOR_ID,
            P.VENDEDOR_COMISSAO      = NEW.VENDEDOR_COMISSAO
        WHERE P.NFS_CONTROLE = NEW.CONTROLE;

        IF(COALESCE(NEW.REPRESENTANTE_CODIGO,0)      <> COALESCE(OLD.REPRESENTANTE_CODIGO,0)
        OR COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) <> COALESCE(OLD.REPRESENTANTE_COMISSAO,0.00))THEN
        BEGIN
          IF(COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) > 0 AND COALESCE(NEW.REPRESENTANTE_CODIGO,0) > 0)THEN
          BEGIN
            EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',1);
          END
          ELSE
          BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID        = NEW.CONTROLE
                   AND A.ORIGEM           = 'NFS'
                   AND A.REPRESENTANTE_ID > 0;
          END
        END

        IF(COALESCE(NEW.VENDEDOR_ID,0) <> COALESCE(OLD.VENDEDOR_ID,0))THEN
        BEGIN
           :VENDEDOR_COMISSAO = COALESCE((SELECT FIRST 1 B.COMISSAO FROM TBREPRESENTANTE_VENDEDOR B WHERE B.CODIGO = NEW.VENDEDOR_ID AND B.GERAR_COMISSAO = 1),0);
           IF(:VENDEDOR_COMISSAO > 0)THEN
           BEGIN
               EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',2);
           END
           ELSE
           BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID     = NEW.CONTROLE
                   AND A.ORIGEM        = 'NFS'
                   AND A.VENDEDOR_ID   > 0;
           END
        END

        IF(COALESCE(NEW.CORRETOR_ID,0) <> COALESCE(OLD.CORRETOR_ID,0))THEN
        BEGIN
           :CORRETOR_COMISSAO = COALESCE((SELECT FIRST 1 B.COMISSAO FROM TBCORRETOR B WHERE B.ID = NEW.CORRETOR_ID AND B.GERAR_COMISSAO = 1),0);
           IF(:CORRETOR_COMISSAO > 0)THEN
           BEGIN
               EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',3);
           END
           ELSE
           BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID     = NEW.CONTROLE
                   AND A.ORIGEM        = 'NFS'
                   AND A.CORRETOR_ID   > 0;
           END
        END

      END

END^

CREATE OR ALTER trigger ttbnfs_b9u for tbnfs
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ESTAB '||OLD.ESTABELECIMENTO_CODIGO||'->'||NEW.ESTABELECIMENTO_CODIGO; END
   if (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) THEN BEGIN HISTORICO = HISTORICO||' PERFIL '||OLD.CLASSIFICACAO||'->'||NEW.CLASSIFICACAO; END

   if (OLD.NUMERO_NOTAFISCAL <> NEW.NUMERO_NOTAFISCAL) THEN BEGIN HISTORICO = HISTORICO||' NR.NF.'||OLD.NUMERO_NOTAFISCAL||'->'||NEW.NUMERO_NOTAFISCAL; END
   if (OLD.SERIE <> NEW.SERIE) THEN BEGIN HISTORICO = HISTORICO||' SERIE '||OLD.SERIE||'->'||NEW.SERIE; END
   if (OLD.CHAVE_ACESSO <> NEW.CHAVE_ACESSO) THEN BEGIN HISTORICO = HISTORICO||' CHAVE '||OLD.CHAVE_ACESSO||'->'||NEW.CHAVE_ACESSO; END

   if (OLD.NATUREZA <> NEW.NATUREZA) THEN BEGIN HISTORICO = HISTORICO||' NAT '||OLD.NATUREZA||'->'||NEW.NATUREZA; END
   if (OLD.SITUACAO <> NEW.SITUACAO) THEN BEGIN HISTORICO = HISTORICO||' SIT '||OLD.SITUACAO||'->'||NEW.SITUACAO; END

   if (OLD.CFOP_CODIGO <> NEW.CFOP_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' CFOP '||OLD.CFOP_CODIGO||'->'||NEW.CFOP_CODIGO; END
   if (OLD.CFOP_DESCRICAO <> NEW.CFOP_DESCRICAO) THEN BEGIN HISTORICO = HISTORICO||' DESC.CFOP '||OLD.CFOP_DESCRICAO||'->'||NEW.CFOP_DESCRICAO; END
   if (OLD.FISCAL_CFOP_CODIGO <> NEW.FISCAL_CFOP_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' FISC.CFOP '||OLD.FISCAL_CFOP_CODIGO||'->'||NEW.FISCAL_CFOP_CODIGO; END

   if (OLD.DATA_EMISSAO <> NEW.DATA_EMISSAO) THEN BEGIN HISTORICO = HISTORICO||' DT.EMISS.'||OLD.DATA_EMISSAO||'->'||NEW.DATA_EMISSAO; END
   if (OLD.HORA_EMISSAO <> NEW.HORA_EMISSAO) THEN BEGIN HISTORICO = HISTORICO||' HR.EMISS.'||OLD.HORA_EMISSAO||'->'||NEW.HORA_EMISSAO; END
   if (OLD.DATA_SAIDA <> NEW.DATA_SAIDA) THEN BEGIN HISTORICO = HISTORICO||' DT.SAIDA '||OLD.DATA_SAIDA||'->'||NEW.DATA_SAIDA; END
   if (OLD.HORA_SAIDA <> NEW.HORA_SAIDA) THEN BEGIN HISTORICO = HISTORICO||' HR.SAIDA '||OLD.HORA_SAIDA||'->'||NEW.HORA_SAIDA; END
 -- if (OLD.DATA_ATUALIZACAO <> NEW.DATA_ATUALIZACAO) THEN BEGIN HISTORICO = HISTORICO||' DT.ATUAL.'||OLD.DATA_ATUALIZACAO||'->'||NEW.DATA_ATUALIZACAO; END

   if (OLD.EMPRESA_CODIGO <> NEW.EMPRESA_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ID DEST '||OLD.EMPRESA_CODIGO||'->'||NEW.EMPRESA_CODIGO; END
   if (OLD.EMPRESA_RAZAOSOCIAL <> NEW.EMPRESA_RAZAOSOCIAL) THEN BEGIN HISTORICO = HISTORICO||' NOME DEST '||OLD.EMPRESA_RAZAOSOCIAL||'->'||NEW.EMPRESA_RAZAOSOCIAL; END
   if (OLD.EMPRESA_UF <> NEW.EMPRESA_UF) THEN BEGIN HISTORICO = HISTORICO||' UF DEST '||OLD.EMPRESA_UF||'->'||NEW.EMPRESA_UF; END
   if (OLD.EMPRESA_CNPJ <> NEW.EMPRESA_CNPJ) THEN BEGIN HISTORICO = HISTORICO||' CNPJ DEST '||OLD.EMPRESA_CNPJ||'->'||NEW.EMPRESA_CNPJ; END
   if (OLD.ID_ESTRANGEIRO <> NEW.ID_ESTRANGEIRO) THEN BEGIN HISTORICO = HISTORICO||' ID ESTRANG '||OLD.ID_ESTRANGEIRO||'->'||NEW.ID_ESTRANGEIRO; END
   if (OLD.SUFRAMA <> NEW.SUFRAMA) THEN BEGIN HISTORICO = HISTORICO||' SUFRAMA '||OLD.SUFRAMA||'->'||NEW.SUFRAMA; END
   if (OLD.UF_EMBARQUE <> NEW.UF_EMBARQUE) THEN BEGIN HISTORICO = HISTORICO||' UF EMB '||OLD.UF_EMBARQUE||'->'||NEW.UF_EMBARQUE; END
   if (OLD.LOCAL_EMBARQUE <> NEW.LOCAL_EMBARQUE) THEN BEGIN HISTORICO = HISTORICO||' LOC EMB '||OLD.LOCAL_EMBARQUE||'->'||NEW.LOCAL_EMBARQUE; END

   if (OLD.ESPECIE <> NEW.ESPECIE) THEN BEGIN HISTORICO = HISTORICO||' ESPEC '||OLD.ESPECIE||'->'||NEW.ESPECIE; END
   if (OLD.MODELO <> NEW.MODELO) THEN BEGIN HISTORICO = HISTORICO||' MOD '||OLD.MODELO||'->'||NEW.MODELO; END
   if (OLD.IND_FINAL <> NEW.IND_FINAL) THEN BEGIN HISTORICO = HISTORICO||' IND FIN '||OLD.IND_FINAL||'->'||NEW.IND_FINAL; END
   if (OLD.IND_PRESENCA <> NEW.IND_PRESENCA) THEN BEGIN HISTORICO = HISTORICO||' IND PRES '||OLD.IND_PRESENCA||'->'||NEW.IND_PRESENCA; END
   if (OLD.TIPO <> NEW.TIPO) THEN BEGIN HISTORICO = HISTORICO||' TIPO '||OLD.TIPO||'->'||NEW.TIPO; END
   if (OLD.TIPO_DOC <> NEW.TIPO_DOC) THEN BEGIN HISTORICO = HISTORICO||' TP.DOC '||OLD.TIPO_DOC||'->'||NEW.TIPO_DOC; END
   if (OLD.DANFE <> NEW.DANFE) THEN BEGIN HISTORICO = HISTORICO||' DANFE '||OLD.DANFE||'->'||NEW.DANFE; END
   --if (OLD.XML <> NEW.XML) THEN BEGIN HISTORICO = HISTORICO||' XML '||OLD.XML||'->'||NEW.XML; END
   if (OLD.PAGAMENTO <> NEW.PAGAMENTO) THEN BEGIN HISTORICO = HISTORICO||' PAG '||OLD.PAGAMENTO||'->'||NEW.PAGAMENTO; END
   if (OLD.SPED <> NEW.SPED) THEN BEGIN HISTORICO = HISTORICO||' SPED FIS '||OLD.SPED||'->'||NEW.SPED; END
   if (OLD.SPED_PISCOF <> NEW.SPED_PISCOF) THEN BEGIN HISTORICO = HISTORICO||' SPED CONTR '||OLD.SPED_PISCOF||'->'||NEW.SPED_PISCOF; END

   if (OLD.GC_WEB <> NEW.GC_WEB) THEN BEGIN HISTORICO = HISTORICO||' GCWEB '||OLD.GC_WEB||'->'||NEW.GC_WEB; END
   if (OLD.OCULTA_GRADE <> NEW.OCULTA_GRADE) THEN BEGIN HISTORICO = HISTORICO||' OCULT.GRD '||OLD.OCULTA_GRADE||'->'||NEW.OCULTA_GRADE; END
   if (OLD.ACUMULA_ITEM <> NEW.ACUMULA_ITEM) THEN BEGIN HISTORICO = HISTORICO||' ACUM.ITEM '||OLD.ACUMULA_ITEM||'->'||NEW.ACUMULA_ITEM; END

   if (OLD.MOTIVO_CANCELAMENTO <> NEW.MOTIVO_CANCELAMENTO) THEN BEGIN HISTORICO = HISTORICO||' MOT.CANC '||OLD.MOTIVO_CANCELAMENTO||'->'||NEW.MOTIVO_CANCELAMENTO; END
   if (OLD.PROTOCOLO_CANCELAMENTO <> NEW.PROTOCOLO_CANCELAMENTO) THEN BEGIN HISTORICO = HISTORICO||' PROT.CANC '||OLD.PROTOCOLO_CANCELAMENTO||'->'||NEW.PROTOCOLO_CANCELAMENTO; END

   if (OLD.REPRESENTANTE_CODIGO <> NEW.REPRESENTANTE_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ID REPR '||OLD.REPRESENTANTE_CODIGO||'->'||NEW.REPRESENTANTE_CODIGO; END
   if (OLD.REPRESENTANTE_COMISSAO <> NEW.REPRESENTANTE_COMISSAO) THEN BEGIN HISTORICO = HISTORICO||' %COM.REPR '||OLD.REPRESENTANTE_COMISSAO||'->'||NEW.REPRESENTANTE_COMISSAO; END
   if (OLD.forma_comissao IS DISTINCT FROM NEW.forma_comissao) THEN BEGIN HISTORICO = HISTORICO||' FORM.COM:'||COALESCE(OLD.forma_comissao, '')||'->'||COALESCE(NEW.forma_comissao, ''); END
   if (OLD.VENDEDOR_ID <> NEW.VENDEDOR_ID) THEN BEGIN HISTORICO = HISTORICO||' ID VEND '||OLD.VENDEDOR_ID||'->'||NEW.VENDEDOR_ID; END
   if (OLD.VENDEDOR_COMISSAO <> NEW.VENDEDOR_COMISSAO) THEN BEGIN HISTORICO = HISTORICO||' %COM.VEND '||OLD.VENDEDOR_COMISSAO||'->'||NEW.VENDEDOR_COMISSAO; END
   if (OLD.CANAL_VENDAS_ID IS DISTINCT FROM NEW.CANAL_VENDAS_ID) THEN BEGIN HISTORICO = HISTORICO||' CANAL VENDAS:'||COALESCE(OLD.CANAL_VENDAS_ID, 0)||'->'||COALESCE(NEW.CANAL_VENDAS_ID, 0); END

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

CREATE OR ALTER trigger ttbnfs_parcelamento_b2i for tbnfs_parcelamento
active before insert position 2
AS
declare variable Representante_Id Integer;
declare variable Representante_Comissao Numeric(15,2);
declare variable Vendedor_Id Integer;
declare variable Vendedor_Comissao Numeric(15,2);
declare variable Forma_Comissao Char(1);
declare variable DescricaoOperacao varchar(100);
Begin

  if (New.Avulso = '0') then
      Begin
        For Select First 1 N.Representante_Codigo, N.Representante_Comissao,
                       N.Vendedor_Id, N.Vendedor_Comissao, R.Forma_Comissao
          From TbNfs N, TbRepresentante R
         Where N.Controle = New.Nfs_Controle
           and N.Representante_Codigo = R.Codigo
          Into :Representante_Id, :Representante_Comissao, :Vendedor_Id, :Vendedor_Comissao, :Forma_Comissao
            Do Begin
                   New.Representante_Id = Coalesce(:Representante_Id,0);
                   New.Representante_Comissao = Coalesce(:Representante_Comissao,0.00);
                   New.Vendedor_Id = Coalesce(:Vendedor_Id,0);
                   New.Vendedor_Comissao = Coalesce(:Vendedor_Comissao,0.00);
                   IF(COALESCE(New.Forma_Comissao,'') = '')THEN
                   BEGIN
                     New.Forma_Comissao = Coalesce(:Forma_Comissao,'F');
                   END

               End
      End else
  if (New.Avulso = '1') then
      Begin
        For Select First 1 C.Representante_Codigo,
                       IIF(Coalesce(C.Representante_Comissao,0.00)>0.00,C.Representante_Comissao,R.Comissao),
                       C.Vendedor_Codigo, C.Vendedor_Comissao,
                       R.Forma_Comissao
          From TbCliente C, TbRepresentante R
         Where C.Codigo = New.Empresa_Codigo
           and C.Representante_Codigo = R.Codigo
          Into :Representante_Id, :Representante_Comissao, :Vendedor_Id, :Vendedor_Comissao, :Forma_Comissao
            Do Begin
               if(coalesce(New.Representante_Id,0) = 0)then
               begin
                 New.Representante_Id = Coalesce(:Representante_Id,0);
                 New.Representante_Comissao = Coalesce(:Representante_Comissao,0.00);

                 New.Forma_Comissao = Coalesce(:Forma_Comissao,'F');
               end

               New.Vendedor_Id = Coalesce(:Vendedor_Id,0);
               New.Vendedor_Comissao = Coalesce(:Vendedor_Comissao,0.00);

               End
      End

   if (coalesce(New.Representante_Id, 0) = 0) then
       Begin
       Exception "..." 'Representante invalido ou nao informado, inclusao cancelada!';
       End

   if (Coalesce(New.Forma_Comissao,  '') = '') then
       Begin
       Exception "..." 'Forma de Comissao (Liquidez ou Faturamento) invalida ou nao informada, inclusao cancelada!';
       End

   if (coalesce(new.CONTA_RECEBER_OPERACAO, 0) = 0) then
       Begin
           DescricaoOperacao = coalesce((SELECT FIRST 1 FN_ELIPSES(A.DESCRICAO,100) FROM TBCONTA_RECEBER_OPERACAO A WHERE A.CODIGO = new.CONTA_RECEBER_OPERACAO AND A.STATUS = '1'),'');
           IF(DescricaoOperacao = '')THEN
           BEGIN
              Exception "..." 'Operacao do contas a receber invalida ou nao informada na forma de pagamento, inclusao cancelada!';
           END
       
       End

End^

CREATE OR ALTER trigger ttbnfs_b8u for tbnfs
active before update position 8
AS
DECLARE VARIABLE VENDEDOR_COMISSAO NUMERIC(15,2);
DECLARE VARIABLE CORRETOR_COMISSAO NUMERIC(15,2);
BEGIN

   IF(COALESCE(NEW.REPRESENTANTE_CODIGO,0)      <> COALESCE(OLD.REPRESENTANTE_CODIGO,0)      OR
      COALESCE(NEW.VENDEDOR_ID ,0)              <> COALESCE(OLD.VENDEDOR_ID ,0)              OR
      COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) <> COALESCE(OLD.REPRESENTANTE_COMISSAO,0.00) OR
      COALESCE(NEW.VENDEDOR_COMISSAO,0.00)      <> COALESCE(OLD.VENDEDOR_COMISSAO,0.00) OR
      COALESCE(NEW.CORRETOR_ID,0.00)            <> COALESCE(OLD.CORRETOR_ID,0.00)            OR
      COALESCE(NEW.FORMA_COMISSAO,'')           <> COALESCE(OLD.forma_comissao,'')) THEN
      BEGIN
        UPDATE TBNFS_PARCELAMENTO P SET
            P.REPRESENTANTE_ID       = NEW.REPRESENTANTE_CODIGO,
            P.REPRESENTANTE_COMISSAO = NEW.REPRESENTANTE_COMISSAO,
            P.forma_comissao         = NEW.FORMA_COMISSAO,
            P.CORRETOR_ID            = NEW.CORRETOR_ID,
            P.VENDEDOR_ID            = NEW.VENDEDOR_ID,
            P.VENDEDOR_COMISSAO      = NEW.VENDEDOR_COMISSAO
        WHERE P.NFS_CONTROLE = NEW.CONTROLE;

        IF(COALESCE(NEW.REPRESENTANTE_CODIGO,0)      <> COALESCE(OLD.REPRESENTANTE_CODIGO,0)
        OR COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) <> COALESCE(OLD.REPRESENTANTE_COMISSAO,0.00))THEN
        BEGIN
          IF(COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) > 0 AND COALESCE(NEW.REPRESENTANTE_CODIGO,0) > 0)THEN
          BEGIN
            EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',1);
          END
          ELSE
          BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID        = NEW.CONTROLE
                   AND A.ORIGEM           = 'NFS'
                   AND A.REPRESENTANTE_ID > 0;
          END
        END

        IF(COALESCE(NEW.VENDEDOR_ID,0) <> COALESCE(OLD.VENDEDOR_ID,0))THEN
        BEGIN
           :VENDEDOR_COMISSAO = COALESCE((SELECT FIRST 1 B.COMISSAO FROM TBREPRESENTANTE_VENDEDOR B WHERE B.CODIGO = NEW.VENDEDOR_ID AND B.GERAR_COMISSAO = 1),0);
           IF(:VENDEDOR_COMISSAO > 0)THEN
           BEGIN
               EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',2);
           END
           ELSE
           BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID     = NEW.CONTROLE
                   AND A.ORIGEM        = 'NFS'
                   AND A.VENDEDOR_ID   > 0;
           END
        END

        IF(COALESCE(NEW.CORRETOR_ID,0) <> COALESCE(OLD.CORRETOR_ID,0))THEN
        BEGIN
           :CORRETOR_COMISSAO = COALESCE((SELECT FIRST 1 B.COMISSAO FROM TBCORRETOR B WHERE B.ID = NEW.CORRETOR_ID AND B.GERAR_COMISSAO = 1),0);
           IF(:CORRETOR_COMISSAO > 0)THEN
           BEGIN
               EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',3);
           END
           ELSE
           BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID     = NEW.CONTROLE
                   AND A.ORIGEM        = 'NFS'
                   AND A.CORRETOR_ID   > 0;
           END
        END

      END

END^

CREATE OR ALTER procedure SPI_NFS (
    ESTABELECIMENTO_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    SERIE varchar(3),
    EMPRESA_CODIGO integer,
    NATUREZA integer,
    DATA_SAIDA date,
    DATA_EMISSAO date,
    HORA_EMISSAO varchar(5),
    HORA_SAIDA varchar(5),
    IND_FINAL char(1),
    IND_PRESENCA char(1),
    ID_ESTRANGEIRO varchar(20),
    CONTROLE integer,
    SITUACAO integer,
    CFOP_CODIGO varchar(5),
    CFOP_DESCRICAO varchar(60),
    USUARIO_CODIGO integer,
    USUARIO_DATA date,
    EMPRESA_RAZAOSOCIAL varchar(50),
    EMPRESA_CNPJ varchar(14),
    EMPRESA_IE varchar(20),
    EMPRESA_ENDERECO varchar(200),
    EMPRESA_NUMERO varchar(20),
    EMPRESA_BAIRRO varchar(20),
    EMPRESA_CIDADE varchar(40),
    EMPRESA_CEP varchar(8),
    EMPRESA_UF varchar(2),
    REPRESENTANTE_CODIGO integer,
    REPRESENTANTE_COMISSAO numeric(10,5),
    SUFRAMA varchar(9),
    CHAVE_ACESSO varchar(44),
    TIPO char(1),
    CLASSIFICACAO varchar(10),
    XML char(2),
    DANFE char(1),
    PAGAMENTO char(1),
    UF_EMBARQUE char(2),
    LOCAL_EMBARQUE varchar(60),
    PROTOCOLO_CANCELAMENTO varchar(20),
    MOTIVO_CANCELAMENTO varchar(50),
    SPED char(1),
    MODELO char(2),
    ESPECIE1 varchar(5),
    FISCAL_CFOP_CODIGO varchar(5),
    BASECALCULO_ICMS numeric(10,5),
    BASECALCULO_ICMS_SUBST numeric(10,5),
    VALOR_ICMS numeric(10,5),
    VALOR_ICMS_SUBST numeric(10,5),
    VALOR_IPI numeric(10,5),
    VALOR_ISSQN numeric(10,5),
    VALOR_FRETE numeric(10,5),
    VALOR_SEGURO numeric(10,5),
    VALOR_PIS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    VALOR_CSLL numeric(10,5),
    VALOR_DESCONTO numeric(10,5),
    VALOR_ACRESCIMO numeric(10,5),
    VALOR_OUTROSCUSTOS numeric(10,5),
    VALOR_TOTAL_PRODUTO numeric(10,5),
    VALOR_TOTAL_NF numeric(10,5),
    RETENCAO_VALOR_PIS numeric(10,5),
    RETENCAO_VALOR_COFINS numeric(10,5),
    RETENCAO_VALOR_INSS numeric(10,5),
    RETENCAO_VALOR_ISSQN numeric(10,5),
    RETENCAO_VALOR_IRRF numeric(10,5),
    RETENCAO_VALOR_CSLL numeric(10,5),
    RETENCAO_BASE_CALCULO_IRRF numeric(10,2),
    RETENCAO_BASE_CALCULO_INSS numeric(10,2),
    VALOR_PARCELAS numeric(10,5),
    VALOR_CONTABIL numeric(10,2),
    VALOR_ESTORNO numeric(10,2),
    VENCIMENTO_DAE_DIFAL date,
    TRANSPORTADORA_CODIGO integer,
    FRETE integer,
    PLACA varchar(8),
    PLACA_UF varchar(2),
    VOLUMES integer,
    ESPECIE varchar(30),
    MARCA varchar(10),
    PESO_BRUTO numeric(10,5),
    PESO_LIQUIDO numeric(10,5),
    CUBAGEM numeric(10,4),
    MODALIDADE char(1),
    NUMERO varchar(10),
    OBSERVACAO01 varchar(130),
    OBSERVACAO02 varchar(130),
    OBSERVACAO03 varchar(130),
    OBSERVACAO04 varchar(130),
    OBSERVACAO05 varchar(130),
    OBSERVACAO06 varchar(130),
    OBSERVACAO07 varchar(130),
    OBSERVACAO08 varchar(130),
    OBSERVACAO09 varchar(130),
    OBSERVACAO10 varchar(130),
    OBSERVACAO11 varchar(130),
    OBSERVACAO12 varchar(130),
    OBSERVACAO13 varchar(130),
    OBSERVACAO14 varchar(130),
    OBSERVACAO15 varchar(130),
    ACUMULA_ITEM char(1),
    OCULTA_GRADE char(1),
    TIPO_DOC char(1),
    SPED_PISCOF char(1),
    GC_WEB integer,
    VENDEDOR_ID integer,
    VENDEDOR_COMISSAO numeric(10,5),
    PDV_CAIXA_ID integer = 0,
    COTACAO_FRETE_ID integer = 0,
    CANAL_VENDAS_ID integer = 0,
    CORRETOR_ID integer = 0,
    PDV_DEVOLUCAO_ID integer = 0,
    FORMA_COMISSAO varchar(1) = '')
as
BEGIN
INSERT INTO TBNFS (
ESTABELECIMENTO_CODIGO,NUMERO_NOTAFISCAL,SERIE,EMPRESA_CODIGO,NATUREZA,
DATA_SAIDA,DATA_EMISSAO,
HORA_EMISSAO,HORA_SAIDA,IND_FINAL,IND_PRESENCA,ID_ESTRANGEIRO,
CONTROLE,SITUACAO,CFOP_CODIGO,CFOP_DESCRICAO,
USUARIO_CODIGO,USUARIO_DATA,EMPRESA_RAZAOSOCIAL,EMPRESA_CNPJ,EMPRESA_IE,EMPRESA_ENDERECO,
EMPRESA_NUMERO,EMPRESA_BAIRRO,EMPRESA_CIDADE,EMPRESA_CEP,EMPRESA_UF,REPRESENTANTE_CODIGO,
REPRESENTANTE_COMISSAO,SUFRAMA,CHAVE_ACESSO,TIPO,XML,DANFE,PAGAMENTO,
UF_EMBARQUE,LOCAL_EMBARQUE,PROTOCOLO_CANCELAMENTO,MOTIVO_CANCELAMENTO,
SPED,MODELO,ESPECIE,FISCAL_CFOP_CODIGO,ACUMULA_ITEM, OCULTA_GRADE, TIPO_DOC,
CLASSIFICACAO,SPED_PISCOF, GC_WEB, VENDEDOR_ID, VENDEDOR_COMISSAO, PDV_CAIXA_ID, 
CANAL_VENDAS_ID, CORRETOR_ID, PDV_DEVOLUCAO_ID, FORMA_COMISSAO) VALUES (

:ESTABELECIMENTO_CODIGO,:NUMERO_NOTAFISCAL,:SERIE,:EMPRESA_CODIGO,:NATUREZA,
:DATA_SAIDA,:DATA_EMISSAO,
:HORA_EMISSAO,:HORA_SAIDA,:IND_FINAL,:IND_PRESENCA,:ID_ESTRANGEIRO,
:CONTROLE,:SITUACAO,:CFOP_CODIGO,:CFOP_DESCRICAO,
:USUARIO_CODIGO,:USUARIO_DATA,:EMPRESA_RAZAOSOCIAL,:EMPRESA_CNPJ,:EMPRESA_IE,:EMPRESA_ENDERECO,
:EMPRESA_NUMERO,:EMPRESA_BAIRRO,:EMPRESA_CIDADE,:EMPRESA_CEP,:EMPRESA_UF,:REPRESENTANTE_CODIGO,
:REPRESENTANTE_COMISSAO,:SUFRAMA,:CHAVE_ACESSO,:TIPO,:XML,:DANFE,:PAGAMENTO,
:UF_EMBARQUE,:LOCAL_EMBARQUE,:PROTOCOLO_CANCELAMENTO,:MOTIVO_CANCELAMENTO,
:SPED,:MODELO,:ESPECIE1,:FISCAL_CFOP_CODIGO,
:ACUMULA_ITEM, :OCULTA_GRADE, :TIPO_DOC,:CLASSIFICACAO,:SPED_PISCOF, :GC_WEB, :VENDEDOR_ID, :VENDEDOR_COMISSAO, 
:PDV_CAIXA_ID, :CANAL_VENDAS_ID, :CORRETOR_ID, :PDV_DEVOLUCAO_ID, :FORMA_COMISSAO);

INSERT INTO TBNFS_TOTAIS (
NFS_CONTROLE,BASECALCULO_ICMS,BASECALCULO_ICMS_SUBST,VALOR_ICMS,VALOR_ICMS_SUBST,
VALOR_IPI,VALOR_ISSQN,VALOR_FRETE,VALOR_SEGURO,VALOR_PIS,VALOR_COFINS,VALOR_DESCONTO,
VALOR_PARCELAS,VALOR_ACRESCIMO,VALOR_OUTROSCUSTOS,VALOR_TOTAL_PRODUTO,VALOR_TOTAL_NF,
RETENCAO_VALOR_PIS,RETENCAO_VALOR_COFINS,RETENCAO_VALOR_INSS,RETENCAO_VALOR_ISSQN,
RETENCAO_VALOR_IRRF,VALOR_CSLL,RETENCAO_VALOR_CSLL,
RETENCAO_BASE_CALCULO_IRRF,RETENCAO_BASE_CALCULO_INSS,VALOR_CONTABIL,VALOR_ESTORNO,VENCIMENTO_DAE_DIFAL, GC_WEB) VALUES(

:CONTROLE,:BASECALCULO_ICMS,:BASECALCULO_ICMS_SUBST,:VALOR_ICMS,:VALOR_ICMS_SUBST,
:VALOR_IPI,:VALOR_ISSQN,:VALOR_FRETE,:VALOR_SEGURO,:VALOR_PIS,:VALOR_COFINS,:VALOR_DESCONTO,
:VALOR_PARCELAS,:VALOR_ACRESCIMO,:VALOR_OUTROSCUSTOS,:VALOR_TOTAL_PRODUTO,:VALOR_TOTAL_NF,
:RETENCAO_VALOR_PIS,:RETENCAO_VALOR_COFINS,:RETENCAO_VALOR_INSS,:RETENCAO_VALOR_ISSQN,
:RETENCAO_VALOR_IRRF,:VALOR_CSLL,:RETENCAO_VALOR_CSLL,
:RETENCAO_BASE_CALCULO_IRRF,:RETENCAO_BASE_CALCULO_INSS,:VALOR_CONTABIL,:VALOR_ESTORNO,:VENCIMENTO_DAE_DIFAL, :GC_WEB);

INSERT INTO TBNFS_TRANSPORTADORA( 
NFS_CONTROLE,TRANSPORTADORA_CODIGO,FRETE,VOLUMES,ESPECIE,
PESO_BRUTO,PESO_LIQUIDO,CUBAGEM,MARCA,NUMERO,PLACA,PLACA_UF,MODALIDADE, GC_WEB, COTACAO_FRETE_ID) VALUES(
:CONTROLE,:TRANSPORTADORA_CODIGO,:FRETE,:VOLUMES,:ESPECIE,
:PESO_BRUTO,:PESO_LIQUIDO,:CUBAGEM,:MARCA,:NUMERO,:PLACA,:PLACA_UF,:MODALIDADE, :GC_WEB, :COTACAO_FRETE_ID);

INSERT INTO TBNFS_OBSERVACAO( 
NFS_CONTROLE,OBSERVACAO01,OBSERVACAO02,OBSERVACAO03,OBSERVACAO04,OBSERVACAO05,
OBSERVACAO06,OBSERVACAO07,OBSERVACAO08,OBSERVACAO09,OBSERVACAO10,OBSERVACAO11,
OBSERVACAO12,OBSERVACAO13,OBSERVACAO14,OBSERVACAO15) VALUES  ( 
:CONTROLE,:OBSERVACAO01,:OBSERVACAO02,:OBSERVACAO03,:OBSERVACAO04,:OBSERVACAO05,
:OBSERVACAO06,:OBSERVACAO07,:OBSERVACAO08,:OBSERVACAO09,:OBSERVACAO10,:OBSERVACAO11,
:OBSERVACAO12,:OBSERVACAO13,:OBSERVACAO14,:OBSERVACAO15);


IF(:NATUREZA = 1) THEN
BEGIN
    EXECUTE PROCEDURE SPU_NF_OBSERVACAO(:ESTABELECIMENTO_CODIGO, :CONTROLE, 'NFS');
END


END^

CREATE OR ALTER procedure SPU_NFS (
    ESTABELECIMENTO_CODIGO integer,
    IND_FINAL char(1),
    NUMERO_NOTAFISCAL integer,
    SERIE varchar(3),
    EMPRESA_CODIGO integer,
    NATUREZA integer,
    DATA_SAIDA date,
    HORA_SAIDA varchar(5),
    DATA_EMISSAO date,
    HORA_EMISSAO varchar(5),
    CONTROLE integer,
    SITUACAO integer,
    CFOP_CODIGO varchar(5),
    CFOP_DESCRICAO varchar(60),
    CFOP_OPCIONAL varchar(5),
    USUARIO_CODIGO integer,
    USUARIO_DATA date,
    STATUSEXCLUSAO char(1),
    EMPRESA_RAZAOSOCIAL varchar(50),
    EMPRESA_CNPJ varchar(14),
    EMPRESA_IE varchar(20),
    EMPRESA_ENDERECO varchar(200),
    EMPRESA_NUMERO varchar(20),
    EMPRESA_BAIRRO varchar(20),
    EMPRESA_CIDADE varchar(40),
    EMPRESA_CEP varchar(8),
    EMPRESA_UF varchar(2),
    REPRESENTANTE_CODIGO integer,
    REPRESENTANTE_COMISSAO numeric(10,5),
    SUFRAMA varchar(9),
    CHAVE_ACESSO varchar(44),
    TIPO char(1),
    CLASSIFICACAO varchar(10),
    XML char(2),
    DANFE char(1),
    PAGAMENTO char(1),
    UF_EMBARQUE char(2),
    LOCAL_EMBARQUE varchar(60),
    RECIBO varchar(20),
    PROTOCOLO varchar(20),
    PROTOCOLO_CANCELAMENTO varchar(20),
    MOTIVO_CANCELAMENTO varchar(50),
    MODELO char(2),
    ESPECIE1 varchar(5),
    FORMULARIO_INICIAL integer,
    FORMULARIO_FINAL integer,
    SPED char(1),
    FISCAL_CFOP_CODIGO varchar(5),
    BASECALCULO_ICMS numeric(10,5),
    BASECALCULO_ICMS_SUBST numeric(10,5),
    VALOR_ICMS numeric(10,5),
    VALOR_ICMS_SUBST numeric(10,5),
    VALOR_IPI numeric(10,5),
    VALOR_ISSQN numeric(10,5),
    VALOR_FRETE numeric(10,5),
    VALOR_SEGURO numeric(10,5),
    VALOR_PIS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    VALOR_CSLL numeric(10,5),
    RETENCAO_BASE_CALCULO_IRRF numeric(10,2),
    RETENCAO_BASE_CALCULO_INSS numeric(10,2),
    VALOR_DESCONTO numeric(10,5),
    VALOR_ACRESCIMO numeric(10,5),
    VALOR_OUTROSCUSTOS numeric(10,5),
    VALOR_TOTAL_PRODUTO numeric(10,5),
    VALOR_TOTAL_NF numeric(10,5),
    RETENCAO_VALOR_PIS numeric(10,5),
    RETENCAO_VALOR_COFINS numeric(10,5),
    RETENCAO_VALOR_INSS numeric(10,5),
    RETENCAO_VALOR_ISSQN numeric(10,5),
    RETENCAO_VALOR_IRRF numeric(10,5),
    RETENCAO_VALOR_CSLL numeric(10,5),
    VALOR_PARCELAS numeric(10,5),
    VALOR_CONTABIL numeric(10,2),
    VALOR_ESTORNO numeric(15,2),
    VENCIMENTO_DAE_DIFAL date,
    TRANSPORTADORA_CODIGO integer,
    FRETE integer,
    PLACA varchar(8),
    PLACA_UF varchar(2),
    VOLUMES integer,
    ESPECIE varchar(30),
    MARCA varchar(10),
    PESO_BRUTO numeric(10,5),
    PESO_LIQUIDO numeric(10,5),
    CUBAGEM numeric(10,4),
    NUMERO varchar(10),
    OBSERVACAO01 varchar(130),
    OBSERVACAO02 varchar(130),
    OBSERVACAO03 varchar(130),
    OBSERVACAO04 varchar(130),
    OBSERVACAO05 varchar(130),
    OBSERVACAO06 varchar(130),
    OBSERVACAO07 varchar(130),
    OBSERVACAO08 varchar(130),
    OBSERVACAO09 varchar(130),
    OBSERVACAO10 varchar(130),
    OBSERVACAO11 varchar(130),
    OBSERVACAO12 varchar(130),
    OBSERVACAO13 varchar(130),
    OBSERVACAO14 varchar(130),
    OBSERVACAO15 varchar(130),
    ACUMULA_ITEM char(1),
    TIPO_DOC char(1),
    SPED_PISCOF char(1),
    GC_WEB integer,
    PDV_CAIXA_ID integer = 0,
    CANAL_VENDAS_ID integer = 0,
    CORRETOR_ID integer = 0,
    FORMA_COMISSAO varchar(1) = '')
as
BEGIN
UPDATE TBNFS SET
ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO,
IND_FINAL              = :IND_FINAL,
NUMERO_NOTAFISCAL      = :NUMERO_NOTAFISCAL,
SERIE                  = :SERIE,
EMPRESA_CODIGO         = :EMPRESA_CODIGO,
NATUREZA               = :NATUREZA,
DATA_SAIDA             = :DATA_SAIDA,
HORA_SAIDA             = :HORA_SAIDA,
DATA_EMISSAO           = :DATA_EMISSAO,
HORA_EMISSAO           = :HORA_EMISSAO,
SITUACAO               = :SITUACAO,
CFOP_CODIGO            = :CFOP_CODIGO,
CFOP_DESCRICAO         = :CFOP_DESCRICAO,
CFOP_OPCIONAL          = :CFOP_OPCIONAL,
USUARIO_CODIGO         = :USUARIO_CODIGO,
USUARIO_DATA           = :USUARIO_DATA,
STATUSEXCLUSAO         = :STATUSEXCLUSAO,
EMPRESA_RAZAOSOCIAL    = :EMPRESA_RAZAOSOCIAL,
EMPRESA_CNPJ           = :EMPRESA_CNPJ,
EMPRESA_IE             = :EMPRESA_IE,
EMPRESA_ENDERECO       = :EMPRESA_ENDERECO,
EMPRESA_NUMERO         = :EMPRESA_NUMERO,
EMPRESA_BAIRRO         = :EMPRESA_BAIRRO,
EMPRESA_CIDADE         = :EMPRESA_CIDADE,
EMPRESA_CEP            = :EMPRESA_CEP,
EMPRESA_UF             = :EMPRESA_UF,
REPRESENTANTE_CODIGO   = :REPRESENTANTE_CODIGO,
REPRESENTANTE_COMISSAO = :REPRESENTANTE_COMISSAO,
SUFRAMA       = :SUFRAMA,
CHAVE_ACESSO  = :CHAVE_ACESSO,
TIPO          = :TIPO,
XML           = :XML,
DANFE         = :DANFE,
PAGAMENTO     = :PAGAMENTO,
UF_EMBARQUE   = :UF_EMBARQUE,
LOCAL_EMBARQUE= :LOCAL_EMBARQUE,
RECIBO        = :RECIBO,
PROTOCOLO     = :PROTOCOLO,
PROTOCOLO_CANCELAMENTO = :PROTOCOLO_CANCELAMENTO,
MOTIVO_CANCELAMENTO    = :MOTIVO_CANCELAMENTO,
MODELO                 = :MODELO,
ESPECIE                = :ESPECIE1,
FORMULARIO_INICIAL     = :FORMULARIO_INICIAL,
FORMULARIO_FINAL       = :FORMULARIO_FINAL,
SPED                   = :SPED,
FISCAL_CFOP_CODIGO     = :FISCAL_CFOP_CODIGO,
ACUMULA_ITEM = :ACUMULA_ITEM,
TIPO_DOC = :TIPO_DOC,
CLASSIFICACAO = :CLASSIFICACAO,
SPED_PISCOF = :SPED_PISCOF,
PDV_CAIXA_ID            = :PDV_CAIXA_ID,
CANAL_VENDAS_ID         = :CANAL_VENDAS_ID,
CORRETOR_ID             = :CORRETOR_ID,
FORMA_COMISSAO             = :FORMA_COMISSAO
WHERE CONTROLE= :CONTROLE;

UPDATE TBNFS_TOTAIS SET
BASECALCULO_ICMS       = :BASECALCULO_ICMS,
BASECALCULO_ICMS_SUBST = :BASECALCULO_ICMS_SUBST,
VALOR_ICMS             = :VALOR_ICMS,
VALOR_ICMS_SUBST       = :VALOR_ICMS_SUBST,
VALOR_IPI              = :VALOR_IPI,
VALOR_ISSQN            = :VALOR_ISSQN,
VALOR_FRETE            = :VALOR_FRETE,
VALOR_SEGURO           = :VALOR_SEGURO,
VALOR_PIS              = :VALOR_PIS,
VALOR_COFINS           = :VALOR_COFINS,
VALOR_DESCONTO         = :VALOR_DESCONTO,
VALOR_PARCELAS         = :VALOR_PARCELAS,
VALOR_ACRESCIMO        = :VALOR_ACRESCIMO,
VALOR_OUTROSCUSTOS     = :VALOR_OUTROSCUSTOS,
VALOR_TOTAL_PRODUTO    = :VALOR_TOTAL_PRODUTO,
VALOR_TOTAL_NF         = :VALOR_TOTAL_NF,
RETENCAO_VALOR_PIS     = :RETENCAO_VALOR_PIS,
RETENCAO_VALOR_COFINS  = :RETENCAO_VALOR_COFINS,
RETENCAO_VALOR_INSS    = :RETENCAO_VALOR_INSS,
RETENCAO_VALOR_ISSQN   = :RETENCAO_VALOR_ISSQN,
RETENCAO_VALOR_IRRF    = :RETENCAO_VALOR_IRRF,
VALOR_CSLL             = :VALOR_CSLL,
RETENCAO_VALOR_CSLL    = :RETENCAO_VALOR_CSLL,
RETENCAO_BASE_CALCULO_IRRF = :RETENCAO_BASE_CALCULO_IRRF,
RETENCAO_BASE_CALCULO_INSS = :RETENCAO_BASE_CALCULO_INSS,
VALOR_CONTABIL         = :VALOR_CONTABIL,
VALOR_ESTORNO          = :VALOR_ESTORNO,
VENCIMENTO_DAE_DIFAL   = :VENCIMENTO_DAE_DIFAL
WHERE NFS_CONTROLE     = :CONTROLE;

UPDATE TBNFS_TRANSPORTADORA SET
TRANSPORTADORA_CODIGO  = :TRANSPORTADORA_CODIGO,
CUBAGEM                = :CUBAGEM,
FRETE                  = :FRETE,
VOLUMES                = :VOLUMES,
ESPECIE                = :ESPECIE,
PESO_BRUTO             = :PESO_BRUTO,
PESO_LIQUIDO           = :PESO_LIQUIDO,
MARCA                  = :MARCA,
NUMERO                 = :NUMERO,
PLACA                  = :PLACA,
PLACA_UF               = :PLACA_UF
WHERE NFS_CONTROLE     = :CONTROLE;

UPDATE TBNFS_OBSERVACAO SET
OBSERVACAO01           = :OBSERVACAO01,
OBSERVACAO02           = :OBSERVACAO02,
OBSERVACAO03           = :OBSERVACAO03,
OBSERVACAO04           = :OBSERVACAO04,
OBSERVACAO05           = :OBSERVACAO05,
OBSERVACAO06           = :OBSERVACAO06,
OBSERVACAO07           = :OBSERVACAO07,
OBSERVACAO08           = :OBSERVACAO08,
OBSERVACAO09           = :OBSERVACAO09,
OBSERVACAO10           = :OBSERVACAO10,
OBSERVACAO11           = :OBSERVACAO11,
OBSERVACAO12           = :OBSERVACAO12,
OBSERVACAO13           = :OBSERVACAO13,
OBSERVACAO14           = :OBSERVACAO14,
OBSERVACAO15           = :OBSERVACAO15
WHERE NFS_CONTROLE = :CONTROLE;

END^

CREATE OR ALTER procedure SPI_NFS_PARCELAMENTO (
    NFS_CONTROLE integer,
    ESTABELECIMENTO_CODIGO integer,
    EMPRESA_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    DATA_EMISSAO date,
    DATA_VENCIMENTO date,
    PARCELA integer,
    VALOR numeric(10,5),
    VALOR_SALDO numeric(10,5),
    CONTA_RECEBER_OPERACAO integer,
    CONTROLE integer,
    ACEITE varchar(1),
    VALOR_DESCONTO numeric(10,5),
    CONTA_RECEBER_BANCO integer,
    CONTA_RECEBER_MODALIDADE integer,
    CONTA_RECEBER_POSICAO integer,
    CONTA_RECEBER_COBRANCA integer,
    SERIE varchar(3),
    PAGAMENTO_FORMA integer,
    CLASSIFICACAO_CONTABIL varchar(6),
    CCUSTO varchar(8),
    OBSERVACAO varchar(100),
    CODIGO_AUTORIZACAO varchar(50),
    NSU varchar(50),
    GC_WEB integer,
    NF_SITUACAO integer,
    NF_NATUREZA integer,
    REPRESENTANTE_ID integer,
    REPRESENTANTE_COMISSAO numeric(10,5),
    VENDEDOR_ID integer,
    VENDEDOR_COMISSAO numeric(10,5),
    PARCELA_NF integer = 1,
    PDV_DEVOLUCAO_TROCA_ID integer = 0,
    PDV_CAIXA_ID integer = 0,
    FORMA_COMISSAO varchar(1) = '')
as
BEGIN
INSERT INTO TBNFS_PARCELAMENTO(
NFS_CONTROLE,ESTABELECIMENTO_CODIGO,EMPRESA_CODIGO,NUMERO_NOTAFISCAL,
DATA_EMISSAO,DATA_VENCIMENTO,PARCELA,VALOR,VALOR_SALDO,CONTA_RECEBER_OPERACAO,
CONTROLE,ACEITE,VALOR_DESCONTO,CONTA_RECEBER_BANCO,CONTA_RECEBER_MODALIDADE,
CONTA_RECEBER_POSICAO ,CONTA_RECEBER_COBRANCA,SERIE,PAGAMENTO_FORMA, CLASSIFICACAO_CONTABIL,
CCUSTO, OBSERVACAO, CODIGO_AUTORIZACAO, NSU, GC_WEB, NF_SITUACAO, NF_NATUREZA, REPRESENTANTE_ID,
REPRESENTANTE_COMISSAO, VENDEDOR_ID, VENDEDOR_COMISSAO, PARCELA_NF, PDV_DEVOLUCAO_TROCA_ID, CAIXA_ID, FORMA_COMISSAO) VALUES (
:NFS_CONTROLE,:ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,
:DATA_EMISSAO,:DATA_VENCIMENTO,:PARCELA,:VALOR,:VALOR_SALDO,
:CONTA_RECEBER_OPERACAO,:CONTROLE,:ACEITE,:VALOR_DESCONTO,:CONTA_RECEBER_BANCO,
:CONTA_RECEBER_MODALIDADE,:CONTA_RECEBER_POSICAO,:CONTA_RECEBER_COBRANCA,:SERIE,:PAGAMENTO_FORMA,
:CLASSIFICACAO_CONTABIL, :CCUSTO, :OBSERVACAO, :CODIGO_AUTORIZACAO, :NSU, :GC_WEB, :NF_SITUACAO, :NF_NATUREZA,
:representante_id, :REPRESENTANTE_COMISSAO, :VENDEDOR_ID, :VENDEDOR_COMISSAO, :PARCELA_NF, :PDV_DEVOLUCAO_TROCA_ID, :PDV_CAIXA_ID, :FORMA_COMISSAO);
END^

CREATE OR ALTER trigger ttbnfs_b9u for tbnfs
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ESTAB '||OLD.ESTABELECIMENTO_CODIGO||'->'||NEW.ESTABELECIMENTO_CODIGO; END
   if (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) THEN BEGIN HISTORICO = HISTORICO||' PERFIL '||OLD.CLASSIFICACAO||'->'||NEW.CLASSIFICACAO; END

   if (OLD.NUMERO_NOTAFISCAL <> NEW.NUMERO_NOTAFISCAL) THEN BEGIN HISTORICO = HISTORICO||' NR.NF.'||OLD.NUMERO_NOTAFISCAL||'->'||NEW.NUMERO_NOTAFISCAL; END
   if (OLD.SERIE <> NEW.SERIE) THEN BEGIN HISTORICO = HISTORICO||' SERIE '||OLD.SERIE||'->'||NEW.SERIE; END
   if (OLD.CHAVE_ACESSO <> NEW.CHAVE_ACESSO) THEN BEGIN HISTORICO = HISTORICO||' CHAVE '||OLD.CHAVE_ACESSO||'->'||NEW.CHAVE_ACESSO; END

   if (OLD.NATUREZA <> NEW.NATUREZA) THEN BEGIN HISTORICO = HISTORICO||' NAT '||OLD.NATUREZA||'->'||NEW.NATUREZA; END
   if (OLD.SITUACAO <> NEW.SITUACAO) THEN BEGIN HISTORICO = HISTORICO||' SIT '||OLD.SITUACAO||'->'||NEW.SITUACAO; END

   if (OLD.CFOP_CODIGO <> NEW.CFOP_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' CFOP '||OLD.CFOP_CODIGO||'->'||NEW.CFOP_CODIGO; END
   if (OLD.CFOP_DESCRICAO <> NEW.CFOP_DESCRICAO) THEN BEGIN HISTORICO = HISTORICO||' DESC.CFOP '||OLD.CFOP_DESCRICAO||'->'||NEW.CFOP_DESCRICAO; END
   if (OLD.FISCAL_CFOP_CODIGO <> NEW.FISCAL_CFOP_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' FISC.CFOP '||OLD.FISCAL_CFOP_CODIGO||'->'||NEW.FISCAL_CFOP_CODIGO; END

   if (OLD.DATA_EMISSAO <> NEW.DATA_EMISSAO) THEN BEGIN HISTORICO = HISTORICO||' DT.EMISS.'||OLD.DATA_EMISSAO||'->'||NEW.DATA_EMISSAO; END
   if (OLD.HORA_EMISSAO <> NEW.HORA_EMISSAO) THEN BEGIN HISTORICO = HISTORICO||' HR.EMISS.'||OLD.HORA_EMISSAO||'->'||NEW.HORA_EMISSAO; END
   if (OLD.DATA_SAIDA <> NEW.DATA_SAIDA) THEN BEGIN HISTORICO = HISTORICO||' DT.SAIDA '||OLD.DATA_SAIDA||'->'||NEW.DATA_SAIDA; END
   if (OLD.HORA_SAIDA <> NEW.HORA_SAIDA) THEN BEGIN HISTORICO = HISTORICO||' HR.SAIDA '||OLD.HORA_SAIDA||'->'||NEW.HORA_SAIDA; END
 -- if (OLD.DATA_ATUALIZACAO <> NEW.DATA_ATUALIZACAO) THEN BEGIN HISTORICO = HISTORICO||' DT.ATUAL.'||OLD.DATA_ATUALIZACAO||'->'||NEW.DATA_ATUALIZACAO; END

   if (OLD.EMPRESA_CODIGO <> NEW.EMPRESA_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ID DEST '||OLD.EMPRESA_CODIGO||'->'||NEW.EMPRESA_CODIGO; END
   if (OLD.EMPRESA_RAZAOSOCIAL <> NEW.EMPRESA_RAZAOSOCIAL) THEN BEGIN HISTORICO = HISTORICO||' NOME DEST '||OLD.EMPRESA_RAZAOSOCIAL||'->'||NEW.EMPRESA_RAZAOSOCIAL; END
   if (OLD.EMPRESA_UF <> NEW.EMPRESA_UF) THEN BEGIN HISTORICO = HISTORICO||' UF DEST '||OLD.EMPRESA_UF||'->'||NEW.EMPRESA_UF; END
   if (OLD.EMPRESA_CNPJ <> NEW.EMPRESA_CNPJ) THEN BEGIN HISTORICO = HISTORICO||' CNPJ DEST '||OLD.EMPRESA_CNPJ||'->'||NEW.EMPRESA_CNPJ; END
   if (OLD.ID_ESTRANGEIRO <> NEW.ID_ESTRANGEIRO) THEN BEGIN HISTORICO = HISTORICO||' ID ESTRANG '||OLD.ID_ESTRANGEIRO||'->'||NEW.ID_ESTRANGEIRO; END
   if (OLD.SUFRAMA <> NEW.SUFRAMA) THEN BEGIN HISTORICO = HISTORICO||' SUFRAMA '||OLD.SUFRAMA||'->'||NEW.SUFRAMA; END
   if (OLD.UF_EMBARQUE <> NEW.UF_EMBARQUE) THEN BEGIN HISTORICO = HISTORICO||' UF EMB '||OLD.UF_EMBARQUE||'->'||NEW.UF_EMBARQUE; END
   if (OLD.LOCAL_EMBARQUE <> NEW.LOCAL_EMBARQUE) THEN BEGIN HISTORICO = HISTORICO||' LOC EMB '||OLD.LOCAL_EMBARQUE||'->'||NEW.LOCAL_EMBARQUE; END

   if (OLD.ESPECIE <> NEW.ESPECIE) THEN BEGIN HISTORICO = HISTORICO||' ESPEC '||OLD.ESPECIE||'->'||NEW.ESPECIE; END
   if (OLD.MODELO <> NEW.MODELO) THEN BEGIN HISTORICO = HISTORICO||' MOD '||OLD.MODELO||'->'||NEW.MODELO; END
   if (OLD.IND_FINAL <> NEW.IND_FINAL) THEN BEGIN HISTORICO = HISTORICO||' IND FIN '||OLD.IND_FINAL||'->'||NEW.IND_FINAL; END
   if (OLD.IND_PRESENCA <> NEW.IND_PRESENCA) THEN BEGIN HISTORICO = HISTORICO||' IND PRES '||OLD.IND_PRESENCA||'->'||NEW.IND_PRESENCA; END
   if (OLD.TIPO <> NEW.TIPO) THEN BEGIN HISTORICO = HISTORICO||' TIPO '||OLD.TIPO||'->'||NEW.TIPO; END
   if (OLD.TIPO_DOC <> NEW.TIPO_DOC) THEN BEGIN HISTORICO = HISTORICO||' TP.DOC '||OLD.TIPO_DOC||'->'||NEW.TIPO_DOC; END
   if (OLD.DANFE <> NEW.DANFE) THEN BEGIN HISTORICO = HISTORICO||' DANFE '||OLD.DANFE||'->'||NEW.DANFE; END
   --if (OLD.XML <> NEW.XML) THEN BEGIN HISTORICO = HISTORICO||' XML '||OLD.XML||'->'||NEW.XML; END
   if (OLD.PAGAMENTO <> NEW.PAGAMENTO) THEN BEGIN HISTORICO = HISTORICO||' PAG '||OLD.PAGAMENTO||'->'||NEW.PAGAMENTO; END
   if (OLD.SPED <> NEW.SPED) THEN BEGIN HISTORICO = HISTORICO||' SPED FIS '||OLD.SPED||'->'||NEW.SPED; END
   if (OLD.SPED_PISCOF <> NEW.SPED_PISCOF) THEN BEGIN HISTORICO = HISTORICO||' SPED CONTR '||OLD.SPED_PISCOF||'->'||NEW.SPED_PISCOF; END

   if (OLD.GC_WEB <> NEW.GC_WEB) THEN BEGIN HISTORICO = HISTORICO||' GCWEB '||OLD.GC_WEB||'->'||NEW.GC_WEB; END
   if (OLD.OCULTA_GRADE <> NEW.OCULTA_GRADE) THEN BEGIN HISTORICO = HISTORICO||' OCULT.GRD '||OLD.OCULTA_GRADE||'->'||NEW.OCULTA_GRADE; END
   if (OLD.ACUMULA_ITEM <> NEW.ACUMULA_ITEM) THEN BEGIN HISTORICO = HISTORICO||' ACUM.ITEM '||OLD.ACUMULA_ITEM||'->'||NEW.ACUMULA_ITEM; END

   if (OLD.MOTIVO_CANCELAMENTO <> NEW.MOTIVO_CANCELAMENTO) THEN BEGIN HISTORICO = HISTORICO||' MOT.CANC '||OLD.MOTIVO_CANCELAMENTO||'->'||NEW.MOTIVO_CANCELAMENTO; END
   if (OLD.PROTOCOLO_CANCELAMENTO <> NEW.PROTOCOLO_CANCELAMENTO) THEN BEGIN HISTORICO = HISTORICO||' PROT.CANC '||OLD.PROTOCOLO_CANCELAMENTO||'->'||NEW.PROTOCOLO_CANCELAMENTO; END

   if (OLD.REPRESENTANTE_CODIGO <> NEW.REPRESENTANTE_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ID REPR '||OLD.REPRESENTANTE_CODIGO||'->'||NEW.REPRESENTANTE_CODIGO; END
   if (OLD.REPRESENTANTE_COMISSAO <> NEW.REPRESENTANTE_COMISSAO) THEN BEGIN HISTORICO = HISTORICO||' %COM.REPR '||OLD.REPRESENTANTE_COMISSAO||'->'||NEW.REPRESENTANTE_COMISSAO; END
   if (OLD.forma_comissao IS DISTINCT FROM NEW.forma_comissao) THEN BEGIN HISTORICO = HISTORICO||' FORM.COM:'||COALESCE(OLD.forma_comissao, '')||'->'||COALESCE(NEW.forma_comissao, ''); END
   if (OLD.VENDEDOR_ID <> NEW.VENDEDOR_ID) THEN BEGIN HISTORICO = HISTORICO||' ID VEND '||OLD.VENDEDOR_ID||'->'||NEW.VENDEDOR_ID; END
   if (OLD.VENDEDOR_COMISSAO <> NEW.VENDEDOR_COMISSAO) THEN BEGIN HISTORICO = HISTORICO||' %COM.VEND '||OLD.VENDEDOR_COMISSAO||'->'||NEW.VENDEDOR_COMISSAO; END
   if (OLD.CANAL_VENDAS_ID IS DISTINCT FROM NEW.CANAL_VENDAS_ID) THEN BEGIN HISTORICO = HISTORICO||' CANAL VENDAS:'||COALESCE(OLD.CANAL_VENDAS_ID, 0)||'->'||COALESCE(NEW.CANAL_VENDAS_ID, 0); END

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

CREATE OR ALTER trigger ttbpedido_b9u for tbpedido
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(8000);
DECLARE VARIABLE HIST_DESC_FIXO VARCHAR(8000);
DECLARE VARIABLE USUARIO VARCHAR(20);
BEGIN

   HISTORICO = '';
   HIST_DESC_FIXO = '';

   IF (OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' ESTAB:'||OLD.ESTABELECIMENTO_CODIGO||'->'||NEW.ESTABELECIMENTO_CODIGO;
       END
   IF (OLD.CLIENTE_CODIGO <> NEW.CLIENTE_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CLIENTE:'||OLD.CLIENTE_CODIGO||'->'||NEW.CLIENTE_CODIGO;
       END
   IF (OLD.REPRESENTANTE_CODIGO <> NEW.REPRESENTANTE_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' REP:'||OLD.REPRESENTANTE_CODIGO||'->'||NEW.REPRESENTANTE_CODIGO;
       END
   IF (COALESCE(OLD.forma_comissao,'') <> COALESCE(NEW.forma_comissao,'')) THEN
       BEGIN
       HISTORICO = HISTORICO||' FORM.COM:'||OLD.forma_comissao||'->'||NEW.forma_comissao;
       END
   IF (OLD.CLIENTE_ID_AMOSTRA <> NEW.CLIENTE_ID_AMOSTRA) THEN
       BEGIN
       HISTORICO = HISTORICO||' CLI.AMOSTRA:'||OLD.CLIENTE_ID_AMOSTRA||'->'||NEW.CLIENTE_ID_AMOSTRA;
       END
   IF (OLD.DATA <> NEW.DATA) THEN
       BEGIN
       HISTORICO = HISTORICO||' DT.EMISS.'||OLD.DATA||'->'||NEW.DATA;
       END
   IF (OLD.DATA_CLIENTE <> NEW.DATA_CLIENTE) THEN
       BEGIN
       HISTORICO = HISTORICO||' DT.CLI.'||OLD.DATA_CLIENTE||'->'||NEW.DATA_CLIENTE;
       END
   IF (OLD.PROGRAMADO<> NEW.PROGRAMADO) THEN
       BEGIN
       HISTORICO = HISTORICO||' PROG.'||OLD.PROGRAMADO||'->'||NEW.PROGRAMADO;
       END
   IF (OLD.DATA_ENTREGA <> NEW.DATA_ENTREGA) THEN
       BEGIN
       HISTORICO = HISTORICO||' PREV.FAT.'||OLD.DATA_ENTREGA||'->'||NEW.DATA_ENTREGA;
       END
   IF (OLD.PEDIDO_CLIENTE <> NEW.PEDIDO_CLIENTE) THEN
       BEGIN
       HISTORICO = HISTORICO||' PED.CLI.'||OLD.PEDIDO_CLIENTE||'->'||NEW.PEDIDO_CLIENTE;
       END
   IF (OLD.TRANSPORTADORA_CODIGO<> NEW.TRANSPORTADORA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TRANSP.'||OLD.TRANSPORTADORA_CODIGO||'->'||NEW.TRANSPORTADORA_CODIGO;
       END
   IF (OLD.PRIORIDADE<> NEW.PRIORIDADE) THEN
       BEGIN
       HISTORICO = HISTORICO||' PRIOR.'||OLD.PRIORIDADE||'->'||NEW.PRIORIDADE;
       END
   IF (OLD.FRETE<> NEW.FRETE) THEN
       BEGIN
       HISTORICO = HISTORICO||' FRETE.'||OLD.FRETE||'->'||NEW.FRETE;
       END
   IF (OLD.PAGAMENTO_FORMA<> NEW.PAGAMENTO_FORMA) THEN
       BEGIN
       HISTORICO = HISTORICO||' FORM.PG.'||OLD.PAGAMENTO_FORMA||'->'||NEW.PAGAMENTO_FORMA;
       END
   IF (OLD.PAGAMENTO_CONDICAO<> NEW.PAGAMENTO_CONDICAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COND.PG.'||OLD.PAGAMENTO_CONDICAO||'->'||NEW.PAGAMENTO_CONDICAO;
       END

   IF (OLD.VALOR_FRETE <> NEW.VALOR_FRETE) THEN
       BEGIN
       HISTORICO = HISTORICO||' VR.FRT.'||OLD.VALOR_FRETE||'->'||NEW.VALOR_FRETE;
       END
   IF (OLD.PESO <> NEW.PESO) THEN
       BEGIN
       HISTORICO = HISTORICO||' PESO:'||OLD.PESO||'->'||NEW.PESO;
       END
   IF (OLD.TIPO_PEDIDO <> NEW.TIPO_PEDIDO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TP.PED.'||OLD.TIPO_PEDIDO||'->'||NEW.TIPO_PEDIDO;
       END
   IF (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' PERF.'||OLD.CLASSIFICACAO||'->'||NEW.CLASSIFICACAO;
       END
   IF (OLD.CLASSIFICACAO_FINANCEIRA <> NEW.CLASSIFICACAO_FINANCEIRA) THEN
       BEGIN
       HISTORICO = HISTORICO||' CLASS.FIN.'||OLD.CLASSIFICACAO_FINANCEIRA||'->'||NEW.CLASSIFICACAO_FINANCEIRA;
       END
   IF (OLD.CCUSTO <> NEW.CCUSTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' C.CUSTO:'||OLD.CCUSTO||'->'||NEW.CCUSTO;
       END
   IF (OLD.TABELA_UF <> NEW.TABELA_UF) THEN
       BEGIN
       HISTORICO = HISTORICO||' TAB.UF:'||OLD.TABELA_UF||'->'||NEW.TABELA_UF;
       END
   IF (OLD.CODIGO_RASTREIO <> NEW.CODIGO_RASTREIO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COD.RASTREIO:'||OLD.CODIGO_RASTREIO||'->'||NEW.CODIGO_RASTREIO;
       END
   IF (OLD.EMBALAGEM <> NEW.EMBALAGEM) THEN
       BEGIN
       HISTORICO = HISTORICO||' EMB.'||OLD.EMBALAGEM||'->'||NEW.EMBALAGEM;
       END
   IF (OLD.TABELA_PRECO_ID <> NEW.TABELA_PRECO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' TAB.PRECO:'||OLD.TABELA_PRECO_ID||'->'||NEW.TABELA_PRECO_ID;
       END
   IF (OLD.DESCONTO1 <> NEW.DESCONTO1) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.1:'||OLD.DESCONTO1||'->'||NEW.DESCONTO1;
       END
   IF (OLD.DESCONTO2 <> NEW.DESCONTO2) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.2:'||OLD.DESCONTO2||'->'||NEW.DESCONTO2;
       END


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

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

   IF (OLD.representante_comissao<> NEW.representante_comissao) THEN
       BEGIN
       HISTORICO = HISTORICO||' %REP.COM.'||OLD.representante_comissao||'->'||NEW.representante_comissao;
       END

   IF (OLD.STATUS <> NEW.STATUS) THEN
       BEGIN
       IF (NEW.STATUS = '0') THEN
           HISTORICO = HISTORICO||' STATUS INATIVADO';
       IF (NEW.STATUS = '1') THEN
           HISTORICO = HISTORICO||' STATUS ATIVADO';
       END 

   IF (OLD.desconto_fixo       is distinct from NEW.desconto_fixo
   or  OLD.VALOR_DESCONTO_FIXO is distinct from NEW.VALOR_DESCONTO_FIXO) THEN
       BEGIN
       IF (NEW.desconto_fixo = '1') THEN
           HIST_DESC_FIXO = HIST_DESC_FIXO||' DESCONTO FIXO APLICADO: '||COALESCE(NEW.VALOR_DESCONTO_FIXO, 0)||'%';
       IF (COALESCE(NEW.desconto_fixo, 0) = '0') THEN
           HIST_DESC_FIXO = HIST_DESC_FIXO||' DESCONTO FIXO REMOVIDO ';
       END
 
   IF (OLD.SITUACAO <> NEW.SITUACAO) THEN
       BEGIN
       IF (NEW.SITUACAO = '0') THEN
           HISTORICO = HISTORICO||' PEDIDO DESCONFIRMADO';
           NEW.STATUS_ECOMMERCE = 2;
       IF (NEW.SITUACAO = '1') THEN
           HISTORICO = HISTORICO||' PEDIDO CONFIRMADO';
           NEW.STATUS_ECOMMERCE = 3;
       END

   IF (OLD.FORMA_ANALISE <> NEW.FORMA_ANALISE) THEN
       BEGIN
       HISTORICO = HISTORICO||' F.ANALISE:'||OLD.FORMA_ANALISE ||'->'||NEW.FORMA_ANALISE;
       END
    
   IF (OLD.CHAVE_LIBERACAO <> NEW.CHAVE_LIBERACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' CHAVE:'||OLD.CHAVE_LIBERACAO||'->'||NEW.CHAVE_LIBERACAO;
       END

   IF (OLD.CANAL_VENDAS_ID IS DISTINCT FROM NEW.CANAL_VENDAS_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' CANAL VENDAS:'||COALESCE(OLD.CANAL_VENDAS_ID, 0)||'->'||COALESCE(NEW.CANAL_VENDAS_ID, 0);
       END

   IF (OLD.CORRETOR_ID IS DISTINCT FROM NEW.CORRETOR_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' CORRETOR:'||COALESCE(OLD.CORRETOR_ID, 0)||'->'||COALESCE(NEW.CORRETOR_ID, 0);
       END       

   IF (OLD.CODIGO_AUTORIZACAO IS DISTINCT FROM NEW.CODIGO_AUTORIZACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COD.AUTORIZACAO:'||COALESCE(OLD.CODIGO_AUTORIZACAO, '')||'->'||COALESCE(NEW.CODIGO_AUTORIZACAO, '');
       END        

   IF (OLD.NSU IS DISTINCT FROM NEW.NSU) THEN
       BEGIN
       HISTORICO = HISTORICO||' NSU:'||COALESCE(OLD.NSU, '')||'->'||COALESCE(NEW.NSU, '');
       END

   IF (OLD.tipo_embalagem_id IS DISTINCT FROM NEW.tipo_embalagem_id) THEN
       BEGIN
       HISTORICO = HISTORICO||' TIPO EMB:'||COALESCE(OLD.tipo_embalagem_id, 0)||'->'||COALESCE(NEW.tipo_embalagem_id, 0);
       END
 
   IF (HISTORICO <> '') THEN
       BEGIN
       USUARIO = (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION);

       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBPEDIDO', OLD.PEDIDO, :USUARIO,
      (SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
       FN_ELIPSES(:HISTORICO,500));

       IF (OLD.DATA_CLIENTE <> NEW.DATA_CLIENTE) THEN
           BEGIN

               UPDATE TBPEDIDO_HISTORICO_DATA SET ULTIMA_ALTERACAO = '0'
               WHERE PEDIDO = OLD.PEDIDO AND DATA_CAMPO = 'DATA_CLIENTE' AND ULTIMA_ALTERACAO = '1';
    
               INSERT INTO TBPEDIDO_HISTORICO_DATA (
               PEDIDO, DATA_CAMPO, DATA_ORIGEM, DATA_DESTINO, USUARIO) VALUES (
               OLD.PEDIDO, 'DATA_CLIENTE', OLD.DATA_CLIENTE, NEW.DATA_CLIENTE, :USUARIO);

           END

       IF (OLD.DATA_ENTREGA <> NEW.DATA_ENTREGA) THEN
           BEGIN

               UPDATE TBPEDIDO_HISTORICO_DATA SET ULTIMA_ALTERACAO = '0'
               WHERE PEDIDO = OLD.PEDIDO AND DATA_CAMPO = 'DATA_ENTREGA' AND ULTIMA_ALTERACAO = '1';

               INSERT INTO TBPEDIDO_HISTORICO_DATA (
               PEDIDO, DATA_CAMPO, DATA_ORIGEM, DATA_DESTINO, USUARIO) VALUES (
               OLD.PEDIDO, 'DATA_ENTREGA', OLD.DATA_ENTREGA, NEW.DATA_ENTREGA, :USUARIO);

           END

       END

   IF(HIST_DESC_FIXO <> '')THEN
   BEGIN
       USUARIO = (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION);

       INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO)
       VALUES ('TBPEDIDO', OLD.PEDIDO, :USUARIO,
      (SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
       FN_ELIPSES(:HIST_DESC_FIXO,500));
   END
END^

CREATE OR ALTER trigger ttbnfs_b8u for tbnfs
active before update position 8
AS
DECLARE VARIABLE VENDEDOR_COMISSAO NUMERIC(15,2);
DECLARE VARIABLE CORRETOR_COMISSAO NUMERIC(15,2);
BEGIN

   IF(COALESCE(NEW.REPRESENTANTE_CODIGO,0)      <> COALESCE(OLD.REPRESENTANTE_CODIGO,0)      OR
      COALESCE(NEW.VENDEDOR_ID ,0)              <> COALESCE(OLD.VENDEDOR_ID ,0)              OR
      COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) <> COALESCE(OLD.REPRESENTANTE_COMISSAO,0.00) OR
      COALESCE(NEW.VENDEDOR_COMISSAO,0.00)      <> COALESCE(OLD.VENDEDOR_COMISSAO,0.00) OR
      COALESCE(NEW.CORRETOR_ID,0.00)            <> COALESCE(OLD.CORRETOR_ID,0.00)            OR
      COALESCE(NEW.FORMA_COMISSAO,'')           <> COALESCE(OLD.forma_comissao,'')) THEN
      BEGIN
        UPDATE TBNFS_PARCELAMENTO P SET
            P.REPRESENTANTE_ID       = NEW.REPRESENTANTE_CODIGO,
            P.REPRESENTANTE_COMISSAO = NEW.REPRESENTANTE_COMISSAO,
            P.forma_comissao         = NEW.FORMA_COMISSAO,
            P.CORRETOR_ID            = NEW.CORRETOR_ID,
            P.VENDEDOR_ID            = NEW.VENDEDOR_ID,
            P.VENDEDOR_COMISSAO      = NEW.VENDEDOR_COMISSAO
        WHERE P.NFS_CONTROLE = NEW.CONTROLE;

        IF(COALESCE(NEW.REPRESENTANTE_CODIGO,0)      <> COALESCE(OLD.REPRESENTANTE_CODIGO,0)
        OR COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) <> COALESCE(OLD.REPRESENTANTE_COMISSAO,0.00))THEN
        BEGIN
          IF(COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) > 0 AND COALESCE(NEW.REPRESENTANTE_CODIGO,0) > 0)THEN
          BEGIN
            EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',1);
          END
          ELSE
          BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID        = NEW.CONTROLE
                   AND A.ORIGEM           = 'NFS'
                   AND A.REPRESENTANTE_ID > 0;
          END
        END

        IF(COALESCE(NEW.VENDEDOR_ID,0) <> COALESCE(OLD.VENDEDOR_ID,0))THEN
        BEGIN
           :VENDEDOR_COMISSAO = COALESCE((SELECT FIRST 1 B.COMISSAO FROM TBREPRESENTANTE_VENDEDOR B WHERE B.CODIGO = NEW.VENDEDOR_ID AND B.GERAR_COMISSAO = 1),0);
           IF(:VENDEDOR_COMISSAO > 0)THEN
           BEGIN
               EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',2);
           END
           ELSE
           BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID     = NEW.CONTROLE
                   AND A.ORIGEM        = 'NFS'
                   AND A.VENDEDOR_ID   > 0;
           END
        END

        IF(COALESCE(NEW.CORRETOR_ID,0) <> COALESCE(OLD.CORRETOR_ID,0))THEN
        BEGIN
           :CORRETOR_COMISSAO = COALESCE((SELECT FIRST 1 B.COMISSAO FROM TBCORRETOR B WHERE B.ID = NEW.CORRETOR_ID AND B.GERAR_COMISSAO = 1),0);
           IF(:CORRETOR_COMISSAO > 0)THEN
           BEGIN
               EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',3);
           END
           ELSE
           BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID     = NEW.CONTROLE
                   AND A.ORIGEM        = 'NFS'
                   AND A.CORRETOR_ID   > 0;
           END
        END

      END

END^

CREATE OR ALTER trigger ttbnfs_b9u for tbnfs
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ESTAB '||OLD.ESTABELECIMENTO_CODIGO||'->'||NEW.ESTABELECIMENTO_CODIGO; END
   if (OLD.CLASSIFICACAO <> NEW.CLASSIFICACAO) THEN BEGIN HISTORICO = HISTORICO||' PERFIL '||OLD.CLASSIFICACAO||'->'||NEW.CLASSIFICACAO; END

   if (OLD.NUMERO_NOTAFISCAL <> NEW.NUMERO_NOTAFISCAL) THEN BEGIN HISTORICO = HISTORICO||' NR.NF.'||OLD.NUMERO_NOTAFISCAL||'->'||NEW.NUMERO_NOTAFISCAL; END
   if (OLD.SERIE <> NEW.SERIE) THEN BEGIN HISTORICO = HISTORICO||' SERIE '||OLD.SERIE||'->'||NEW.SERIE; END
   if (OLD.CHAVE_ACESSO <> NEW.CHAVE_ACESSO) THEN BEGIN HISTORICO = HISTORICO||' CHAVE '||OLD.CHAVE_ACESSO||'->'||NEW.CHAVE_ACESSO; END

   if (OLD.NATUREZA <> NEW.NATUREZA) THEN BEGIN HISTORICO = HISTORICO||' NAT '||OLD.NATUREZA||'->'||NEW.NATUREZA; END
   if (OLD.SITUACAO <> NEW.SITUACAO) THEN BEGIN HISTORICO = HISTORICO||' SIT '||OLD.SITUACAO||'->'||NEW.SITUACAO; END

   if (OLD.CFOP_CODIGO <> NEW.CFOP_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' CFOP '||OLD.CFOP_CODIGO||'->'||NEW.CFOP_CODIGO; END
   if (OLD.CFOP_DESCRICAO <> NEW.CFOP_DESCRICAO) THEN BEGIN HISTORICO = HISTORICO||' DESC.CFOP '||OLD.CFOP_DESCRICAO||'->'||NEW.CFOP_DESCRICAO; END
   if (OLD.FISCAL_CFOP_CODIGO <> NEW.FISCAL_CFOP_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' FISC.CFOP '||OLD.FISCAL_CFOP_CODIGO||'->'||NEW.FISCAL_CFOP_CODIGO; END

   if (OLD.DATA_EMISSAO <> NEW.DATA_EMISSAO) THEN BEGIN HISTORICO = HISTORICO||' DT.EMISS.'||OLD.DATA_EMISSAO||'->'||NEW.DATA_EMISSAO; END
   if (OLD.HORA_EMISSAO <> NEW.HORA_EMISSAO) THEN BEGIN HISTORICO = HISTORICO||' HR.EMISS.'||OLD.HORA_EMISSAO||'->'||NEW.HORA_EMISSAO; END
   if (OLD.DATA_SAIDA <> NEW.DATA_SAIDA) THEN BEGIN HISTORICO = HISTORICO||' DT.SAIDA '||OLD.DATA_SAIDA||'->'||NEW.DATA_SAIDA; END
   if (OLD.HORA_SAIDA <> NEW.HORA_SAIDA) THEN BEGIN HISTORICO = HISTORICO||' HR.SAIDA '||OLD.HORA_SAIDA||'->'||NEW.HORA_SAIDA; END
 -- if (OLD.DATA_ATUALIZACAO <> NEW.DATA_ATUALIZACAO) THEN BEGIN HISTORICO = HISTORICO||' DT.ATUAL.'||OLD.DATA_ATUALIZACAO||'->'||NEW.DATA_ATUALIZACAO; END

   if (OLD.EMPRESA_CODIGO <> NEW.EMPRESA_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ID DEST '||OLD.EMPRESA_CODIGO||'->'||NEW.EMPRESA_CODIGO; END
   if (OLD.EMPRESA_RAZAOSOCIAL <> NEW.EMPRESA_RAZAOSOCIAL) THEN BEGIN HISTORICO = HISTORICO||' NOME DEST '||OLD.EMPRESA_RAZAOSOCIAL||'->'||NEW.EMPRESA_RAZAOSOCIAL; END
   if (OLD.EMPRESA_UF <> NEW.EMPRESA_UF) THEN BEGIN HISTORICO = HISTORICO||' UF DEST '||OLD.EMPRESA_UF||'->'||NEW.EMPRESA_UF; END
   if (OLD.EMPRESA_CNPJ <> NEW.EMPRESA_CNPJ) THEN BEGIN HISTORICO = HISTORICO||' CNPJ DEST '||OLD.EMPRESA_CNPJ||'->'||NEW.EMPRESA_CNPJ; END
   if (OLD.ID_ESTRANGEIRO <> NEW.ID_ESTRANGEIRO) THEN BEGIN HISTORICO = HISTORICO||' ID ESTRANG '||OLD.ID_ESTRANGEIRO||'->'||NEW.ID_ESTRANGEIRO; END
   if (OLD.SUFRAMA <> NEW.SUFRAMA) THEN BEGIN HISTORICO = HISTORICO||' SUFRAMA '||OLD.SUFRAMA||'->'||NEW.SUFRAMA; END
   if (OLD.UF_EMBARQUE <> NEW.UF_EMBARQUE) THEN BEGIN HISTORICO = HISTORICO||' UF EMB '||OLD.UF_EMBARQUE||'->'||NEW.UF_EMBARQUE; END
   if (OLD.LOCAL_EMBARQUE <> NEW.LOCAL_EMBARQUE) THEN BEGIN HISTORICO = HISTORICO||' LOC EMB '||OLD.LOCAL_EMBARQUE||'->'||NEW.LOCAL_EMBARQUE; END

   if (OLD.ESPECIE <> NEW.ESPECIE) THEN BEGIN HISTORICO = HISTORICO||' ESPEC '||OLD.ESPECIE||'->'||NEW.ESPECIE; END
   if (OLD.MODELO <> NEW.MODELO) THEN BEGIN HISTORICO = HISTORICO||' MOD '||OLD.MODELO||'->'||NEW.MODELO; END
   if (OLD.IND_FINAL <> NEW.IND_FINAL) THEN BEGIN HISTORICO = HISTORICO||' IND FIN '||OLD.IND_FINAL||'->'||NEW.IND_FINAL; END
   if (OLD.IND_PRESENCA <> NEW.IND_PRESENCA) THEN BEGIN HISTORICO = HISTORICO||' IND PRES '||OLD.IND_PRESENCA||'->'||NEW.IND_PRESENCA; END
   if (OLD.TIPO <> NEW.TIPO) THEN BEGIN HISTORICO = HISTORICO||' TIPO '||OLD.TIPO||'->'||NEW.TIPO; END
   if (OLD.TIPO_DOC <> NEW.TIPO_DOC) THEN BEGIN HISTORICO = HISTORICO||' TP.DOC '||OLD.TIPO_DOC||'->'||NEW.TIPO_DOC; END
   if (OLD.DANFE <> NEW.DANFE) THEN BEGIN HISTORICO = HISTORICO||' DANFE '||OLD.DANFE||'->'||NEW.DANFE; END
   --if (OLD.XML <> NEW.XML) THEN BEGIN HISTORICO = HISTORICO||' XML '||OLD.XML||'->'||NEW.XML; END
   if (OLD.PAGAMENTO <> NEW.PAGAMENTO) THEN BEGIN HISTORICO = HISTORICO||' PAG '||OLD.PAGAMENTO||'->'||NEW.PAGAMENTO; END
   if (OLD.SPED <> NEW.SPED) THEN BEGIN HISTORICO = HISTORICO||' SPED FIS '||OLD.SPED||'->'||NEW.SPED; END
   if (OLD.SPED_PISCOF <> NEW.SPED_PISCOF) THEN BEGIN HISTORICO = HISTORICO||' SPED CONTR '||OLD.SPED_PISCOF||'->'||NEW.SPED_PISCOF; END

   if (OLD.GC_WEB <> NEW.GC_WEB) THEN BEGIN HISTORICO = HISTORICO||' GCWEB '||OLD.GC_WEB||'->'||NEW.GC_WEB; END
   if (OLD.OCULTA_GRADE <> NEW.OCULTA_GRADE) THEN BEGIN HISTORICO = HISTORICO||' OCULT.GRD '||OLD.OCULTA_GRADE||'->'||NEW.OCULTA_GRADE; END
   if (OLD.ACUMULA_ITEM <> NEW.ACUMULA_ITEM) THEN BEGIN HISTORICO = HISTORICO||' ACUM.ITEM '||OLD.ACUMULA_ITEM||'->'||NEW.ACUMULA_ITEM; END

   if (OLD.MOTIVO_CANCELAMENTO <> NEW.MOTIVO_CANCELAMENTO) THEN BEGIN HISTORICO = HISTORICO||' MOT.CANC '||OLD.MOTIVO_CANCELAMENTO||'->'||NEW.MOTIVO_CANCELAMENTO; END
   if (OLD.PROTOCOLO_CANCELAMENTO <> NEW.PROTOCOLO_CANCELAMENTO) THEN BEGIN HISTORICO = HISTORICO||' PROT.CANC '||OLD.PROTOCOLO_CANCELAMENTO||'->'||NEW.PROTOCOLO_CANCELAMENTO; END

   if (OLD.REPRESENTANTE_CODIGO <> NEW.REPRESENTANTE_CODIGO) THEN BEGIN HISTORICO = HISTORICO||' ID REPR '||OLD.REPRESENTANTE_CODIGO||'->'||NEW.REPRESENTANTE_CODIGO; END
   if (OLD.REPRESENTANTE_COMISSAO <> NEW.REPRESENTANTE_COMISSAO) THEN BEGIN HISTORICO = HISTORICO||' %COM.REPR '||OLD.REPRESENTANTE_COMISSAO||'->'||NEW.REPRESENTANTE_COMISSAO; END
   if (OLD.forma_comissao IS DISTINCT FROM NEW.forma_comissao) THEN BEGIN HISTORICO = HISTORICO||' FORM.COM:'||COALESCE(OLD.forma_comissao, '')||'->'||COALESCE(NEW.forma_comissao, ''); END
   if (OLD.VENDEDOR_ID <> NEW.VENDEDOR_ID) THEN BEGIN HISTORICO = HISTORICO||' ID VEND '||OLD.VENDEDOR_ID||'->'||NEW.VENDEDOR_ID; END
   if (OLD.VENDEDOR_COMISSAO <> NEW.VENDEDOR_COMISSAO) THEN BEGIN HISTORICO = HISTORICO||' %COM.VEND '||OLD.VENDEDOR_COMISSAO||'->'||NEW.VENDEDOR_COMISSAO; END
   if (OLD.CANAL_VENDAS_ID IS DISTINCT FROM NEW.CANAL_VENDAS_ID) THEN BEGIN HISTORICO = HISTORICO||' CANAL VENDAS:'||COALESCE(OLD.CANAL_VENDAS_ID, 0)||'->'||COALESCE(NEW.CANAL_VENDAS_ID, 0); END

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

CREATE OR ALTER trigger ttbnfs_parcelamento_b2i for tbnfs_parcelamento
active before insert position 2
AS
declare variable Representante_Id Integer;
declare variable Representante_Comissao Numeric(15,2);
declare variable Vendedor_Id Integer;
declare variable Vendedor_Comissao Numeric(15,2);
declare variable Forma_Comissao Char(1);
declare variable DescricaoOperacao varchar(100);
Begin

  if (New.Avulso = '0') then
      Begin
        For Select First 1 N.Representante_Codigo, N.Representante_Comissao,
                       N.Vendedor_Id, N.Vendedor_Comissao, R.Forma_Comissao
          From TbNfs N, TbRepresentante R
         Where N.Controle = New.Nfs_Controle
           and N.Representante_Codigo = R.Codigo
          Into :Representante_Id, :Representante_Comissao, :Vendedor_Id, :Vendedor_Comissao, :Forma_Comissao
            Do Begin
                   New.Representante_Id = Coalesce(:Representante_Id,0);
                   New.Representante_Comissao = Coalesce(:Representante_Comissao,0.00);
                   New.Vendedor_Id = Coalesce(:Vendedor_Id,0);
                   New.Vendedor_Comissao = Coalesce(:Vendedor_Comissao,0.00);
                   IF(COALESCE(New.Forma_Comissao,'') = '')THEN
                   BEGIN
                     New.Forma_Comissao = Coalesce(:Forma_Comissao,'F');
                   END

               End
      End else
  if (New.Avulso = '1') then
      Begin
        For Select First 1 C.Representante_Codigo,
                       IIF(Coalesce(C.Representante_Comissao,0.00)>0.00,C.Representante_Comissao,R.Comissao),
                       C.Vendedor_Codigo, C.Vendedor_Comissao,
                       R.Forma_Comissao
          From TbCliente C, TbRepresentante R
         Where C.Codigo = New.Empresa_Codigo
           and C.Representante_Codigo = R.Codigo
          Into :Representante_Id, :Representante_Comissao, :Vendedor_Id, :Vendedor_Comissao, :Forma_Comissao
            Do Begin
               if(coalesce(New.Representante_Id,0) = 0)then
               begin
                 New.Representante_Id = Coalesce(:Representante_Id,0);
                 New.Representante_Comissao = Coalesce(:Representante_Comissao,0.00);

                 New.Forma_Comissao = Coalesce(:Forma_Comissao,'F');
               end

               New.Vendedor_Id = Coalesce(:Vendedor_Id,0);
               New.Vendedor_Comissao = Coalesce(:Vendedor_Comissao,0.00);

               End
      End

   if (coalesce(New.Representante_Id, 0) = 0) then
       Begin
       Exception "..." 'Representante invalido ou nao informado, inclusao cancelada!';
       End

   if (Coalesce(New.Forma_Comissao,  '') = '') then
       Begin
       Exception "..." 'Forma de Comissao (Liquidez ou Faturamento) invalida ou nao informada, inclusao cancelada!';
       End

   if (coalesce(new.CONTA_RECEBER_OPERACAO, 0) = 0) then
       Begin
           DescricaoOperacao = coalesce((SELECT FIRST 1 FN_ELIPSES(A.DESCRICAO,100) FROM TBCONTA_RECEBER_OPERACAO A WHERE A.CODIGO = new.CONTA_RECEBER_OPERACAO AND A.STATUS = '1'),'');
           IF(DescricaoOperacao = '')THEN
           BEGIN
              Exception "..." 'Operacao do contas a receber invalida ou nao informada na forma de pagamento, inclusao cancelada!';
           END
       
       End

End^

CREATE OR ALTER trigger ttbnfs_b8u for tbnfs
active before update position 8
AS
DECLARE VARIABLE VENDEDOR_COMISSAO NUMERIC(15,2);
DECLARE VARIABLE CORRETOR_COMISSAO NUMERIC(15,2);
BEGIN

   IF(COALESCE(NEW.REPRESENTANTE_CODIGO,0)      <> COALESCE(OLD.REPRESENTANTE_CODIGO,0)      OR
      COALESCE(NEW.VENDEDOR_ID ,0)              <> COALESCE(OLD.VENDEDOR_ID ,0)              OR
      COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) <> COALESCE(OLD.REPRESENTANTE_COMISSAO,0.00) OR
      COALESCE(NEW.VENDEDOR_COMISSAO,0.00)      <> COALESCE(OLD.VENDEDOR_COMISSAO,0.00) OR
      COALESCE(NEW.CORRETOR_ID,0.00)            <> COALESCE(OLD.CORRETOR_ID,0.00)            OR
      COALESCE(NEW.FORMA_COMISSAO,'')           <> COALESCE(OLD.forma_comissao,'')) THEN
      BEGIN
        UPDATE TBNFS_PARCELAMENTO P SET
            P.REPRESENTANTE_ID       = NEW.REPRESENTANTE_CODIGO,
            P.REPRESENTANTE_COMISSAO = NEW.REPRESENTANTE_COMISSAO,
            P.forma_comissao         = NEW.FORMA_COMISSAO,
            P.CORRETOR_ID            = NEW.CORRETOR_ID,
            P.VENDEDOR_ID            = NEW.VENDEDOR_ID,
            P.VENDEDOR_COMISSAO      = NEW.VENDEDOR_COMISSAO
        WHERE P.NFS_CONTROLE = NEW.CONTROLE;

        IF(COALESCE(NEW.REPRESENTANTE_CODIGO,0)      <> COALESCE(OLD.REPRESENTANTE_CODIGO,0)
        OR COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) <> COALESCE(OLD.REPRESENTANTE_COMISSAO,0.00))THEN
        BEGIN
          IF(COALESCE(NEW.REPRESENTANTE_COMISSAO,0.00) > 0 AND COALESCE(NEW.REPRESENTANTE_CODIGO,0) > 0)THEN
          BEGIN
            EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',1);
          END
          ELSE
          BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID        = NEW.CONTROLE
                   AND A.ORIGEM           = 'NFS'
                   AND A.REPRESENTANTE_ID > 0;
          END
        END

        IF(COALESCE(NEW.VENDEDOR_ID,0) <> COALESCE(OLD.VENDEDOR_ID,0))THEN
        BEGIN
           :VENDEDOR_COMISSAO = COALESCE((SELECT FIRST 1 B.COMISSAO FROM TBREPRESENTANTE_VENDEDOR B WHERE B.CODIGO = NEW.VENDEDOR_ID AND B.GERAR_COMISSAO = 1),0);
           IF(:VENDEDOR_COMISSAO > 0)THEN
           BEGIN
               EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',2);
           END
           ELSE
           BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID     = NEW.CONTROLE
                   AND A.ORIGEM        = 'NFS'
                   AND A.VENDEDOR_ID   > 0;
           END
        END

        IF(COALESCE(NEW.CORRETOR_ID,0) <> COALESCE(OLD.CORRETOR_ID,0))THEN
        BEGIN
           :CORRETOR_COMISSAO = COALESCE((SELECT FIRST 1 B.COMISSAO FROM TBCORRETOR B WHERE B.ID = NEW.CORRETOR_ID AND B.GERAR_COMISSAO = 1),0);
           IF(:CORRETOR_COMISSAO > 0)THEN
           BEGIN
               EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.CONTROLE,'NFS',3);
           END
           ELSE
           BEGIN
               DELETE FROM TBCOMISSAO A
                 WHERE A.TABELA_ID     = NEW.CONTROLE
                   AND A.ORIGEM        = 'NFS'
                   AND A.CORRETOR_ID   > 0;
           END
        END

      END

END^

^ SET TERM ; ^