ALTER TABLE TBGRUPO_PRODUTO
    ADD FEEF_PERC_DEDUCAO NUMERIC(15,2) DEFAULT 100;


UPDATE TBGRUPO_PRODUTO A
    SET A.FEEF_PERC_DEDUCAO = COALESCE((SELECT MAX(X.FEEF_PERC_DEDUCAO) FROM TBPRODUTO X WHERE X.GRUPO_PRODUTO_ID = A.ID), 0)
    WHERE A.FEEF_PERC_DEDUCAO IS NULL;

/***************************************************************************************/
/***************************************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbgrupo_produto_b02u for tbgrupo_produto
active before update position 3
AS
DECLARE VARIABLE PRODUTO_ID INTEGER; 
DECLARE VARIABLE CORES VARCHAR(500);
BEGIN

	IF (OLD.STATUS <> NEW.STATUS) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.STATUS = NEW.STATUS
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;
    END

    /* ALTERA OS PRODUTOS VINCULADOS AO GRUPO */
    IF (OLD.FAMILIA_ID <> NEW.FAMILIA_ID) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.FAMILIA_CODIGO = NEW.FAMILIA_ID,
                P.FAMILIA_ALTERNATIVA = NEW.FAMILIA_ID
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;

        IF(NEW.MODELO_CODIGO > 0) THEN
        BEGIN
            UPDATE TBMODELO M
            SET M.FAMILIA_CODIGO = NEW.FAMILIA_ID,
                M.FAMILIA_ALTERNATIVA = NEW.FAMILIA_ID
            WHERE CODIGO = OLD.MODELO_CODIGO;
        END
    END

    IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.DESCRICAO = NEW.DESCRICAO||' '||COALESCE((SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = P.COR_CODIGO),'') 
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;
    END

    IF (OLD.MODELO_CODIGO IS DISTINCT FROM NEW.MODELO_CODIGO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.MODELO_CODIGO = NEW.MODELO_CODIGO, P.LINHA_CODIGO = COALESCE((SELECT FIRST 1 M.LINHA_CODIGO FROM TBMODELO M WHERE M.CODIGO = NEW.MODELO_CODIGO),0)
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;

        UPDATE TBMODELO M
            SET M.NCM_CODIGO = NEW.NCM_CODIGO
            WHERE M.GRUPO_PRODUTO_ID = OLD.ID;

        IF(NEW.MODELO_CODIGO > 0) THEN
        BEGIN
            FOR SELECT T.COR_CODIGO FROM TBPRODUTO T WHERE T.GRUPO_PRODUTO_ID = OLD.ID INTO :CORES
            DO
            BEGIN
                UPDATE OR INSERT INTO TBMODELO_COR (MODELO_ID, COR_ID)
                VALUES (NEW.MODELO_CODIGO, :CORES)
                MATCHING (MODELO_ID, COR_ID);
            END
        END
    END

    IF (OLD.TIPOPRODUTO_ID <> NEW.TIPOPRODUTO_ID) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.TIPOPRODUTO_CODIGO = NEW.TIPOPRODUTO_ID
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;

        IF(NEW.MODELO_CODIGO > 0) THEN
        BEGIN
            UPDATE TBMODELO M
            SET M.TIPOPRODUTO_CODIGO = NEW.TIPOPRODUTO_ID
            WHERE CODIGO = OLD.MODELO_CODIGO;
        END
    END

    IF (OLD.LOCALIZACAO_ID <> NEW.LOCALIZACAO_ID) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.LOCALIZACAO_CODIGO = NEW.LOCALIZACAO_ID
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.GRADE_ID <> NEW.GRADE_ID) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.GRADE_CODIGO = NEW.GRADE_ID
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;

        IF(NEW.MODELO_CODIGO > 0) THEN
        BEGIN
            UPDATE TBMODELO M
            SET M.GRADE_CODIGO = NEW.GRADE_ID
            WHERE CODIGO = OLD.MODELO_CODIGO;
        END
    END

    IF (OLD.UNIDADEMEDIDA_SIGLA <> NEW.UNIDADEMEDIDA_SIGLA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.UNIDADEMEDIDA_SIGLA = NEW.UNIDADEMEDIDA_SIGLA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;

        IF(NEW.MODELO_CODIGO > 0) THEN
        BEGIN
            UPDATE TBMODELO M
            SET M.UNIDADEMEDIDA_SIGLA = NEW.UNIDADEMEDIDA_SIGLA
            WHERE CODIGO = OLD.MODELO_CODIGO;
        END
    END

    IF (OLD.NCM_CODIGO <> NEW.NCM_CODIGO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.NCM_CODIGO = NEW.NCM_CODIGO
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;

        IF(NEW.MODELO_CODIGO > 0) THEN
        BEGIN
            UPDATE TBMODELO M
            SET M.NCM_CODIGO = NEW.NCM_CODIGO
            WHERE CODIGO = OLD.MODELO_CODIGO;
        END
    END

    IF (OLD.COMPOSICAO IS DISTINCT FROM NEW.COMPOSICAO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.COMPOSICAO = NEW.COMPOSICAO
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.ELASTICIDADE IS DISTINCT FROM NEW.ELASTICIDADE) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.ELASTICIDADE = NEW.ELASTICIDADE
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.HABILITA_COMPRA <> NEW.HABILITA_COMPRA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.HABILITA_COMPRA = NEW.HABILITA_COMPRA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.HABILITA_VENDA <> NEW.HABILITA_VENDA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.HABILITA_VENDA = NEW.HABILITA_VENDA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.TOLERANCIA <> NEW.TOLERANCIA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.TOLERANCIA = NEW.TOLERANCIA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.SEGURANCA <> NEW.SEGURANCA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.SEGURANCA = NEW.SEGURANCA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.LARGURA <> NEW.LARGURA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.LARGURA = NEW.LARGURA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.COMPRIMENTO <> NEW.COMPRIMENTO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.COMPRIMENTO = NEW.COMPRIMENTO
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.DESCRICAO_ETIQUETA <> NEW.DESCRICAO_ETIQUETA) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.DESCRICAO_ETIQUETA = NEW.DESCRICAO_ETIQUETA
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.INVENTARIO <> NEW.INVENTARIO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.INVENTARIO = NEW.INVENTARIO
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.PROGRAMAR_SEM_ESTOQUE <> NEW.PROGRAMAR_SEM_ESTOQUE) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.PROGRAMAR_SEM_ESTOQUE = NEW.PROGRAMAR_SEM_ESTOQUE
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.GERAR_OC <> NEW.GERAR_OC) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.GERAR_OC = NEW.GERAR_OC
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID; 
    END

    IF (OLD.FEEF <>  NEW.FEEF) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.FEEF = NEW.FEEF
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;
    END

    IF (OLD.FEEF_PERC_DEDUCAO <>  NEW.FEEF_PERC_DEDUCAO) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.FEEF_PERC_DEDUCAO = NEW.FEEF_PERC_DEDUCAO
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;
    END

    IF (OLD.CONTA_CONTABIL IS DISTINCT FROM NEW.CONTA_CONTABIL) THEN
    BEGIN
        UPDATE TBPRODUTO P
            SET P.CONTA_CONTABIL = NEW.CONTA_CONTABIL
            WHERE P.GRUPO_PRODUTO_ID = OLD.ID;
     END


      /* Verifica os produtos vinculados ao grupo */
    FOR
        SELECT
            P.CODIGO
        FROM TBPRODUTO P
        WHERE P.GRUPO_PRODUTO_ID = OLD.ID
    INTO
        :PRODUTO_ID
    DO
    BEGIN
         

        IF (OLD.CUSTOUNITARIO_MEDIO <> NEW.CUSTOUNITARIO_MEDIO or
            OLD.IMPOSTO_CUSTO <> NEW.IMPOSTO_CUSTO or
            OLD.ICMS <> NEW.ICMS or
            OLD.IPI <> NEW.IPI or
            OLD.FRETE <> NEW.FRETE or
            OLD.FINANCEIRO <> NEW.FINANCEIRO or
            OLD.T01 <> NEW.T01 or OLD.T02 <> NEW.T02 or
            OLD.T03 <> NEW.T03 or OLD.T04 <> NEW.T04 or
            OLD.T05 <> NEW.T05 or OLD.T06 <> NEW.T06 or
            OLD.T07 <> NEW.T07 or OLD.T08 <> NEW.T08 or
            OLD.T09 <> NEW.T09 or OLD.T10 <> NEW.T10 or
            OLD.T11 <> NEW.T11 or OLD.T12 <> NEW.T12 or
            OLD.T13 <> NEW.T13 or OLD.T14 <> NEW.T14 or
            OLD.T15 <> NEW.T15 or OLD.T16 <> NEW.T16 or
            OLD.T17 <> NEW.T17 or OLD.T18 <> NEW.T18 or
            OLD.T19 <> NEW.T19 or OLD.T20 <> NEW.T20) THEN
        BEGIN
            UPDATE TBPRODUTO_CONTABIL C SET
            CUSTOUNITARIO_MEDIO = NEW.CUSTOUNITARIO_MEDIO,
            IMPOSTO_CUSTO = NEW.IMPOSTO_CUSTO ,
            ICMS = NEW.ICMS ,
            IPI = NEW.IPI ,
            FRETE = NEW.FRETE ,
            FINANCEIRO = NEW.FINANCEIRO ,
            T01 = NEW.T01 , T02 = NEW.T02 , T03 = NEW.T03 , T04 = NEW.T04 ,
            T05 = NEW.T05 , T06 = NEW.T06 , T07 = NEW.T07 , T08 = NEW.T08 ,
            T09 = NEW.T09 , T10 = NEW.T10 , T11 = NEW.T11 , T12 = NEW.T12 ,
            T13 = NEW.T13 , T14 = NEW.T14 , T15 = NEW.T15 , T16 = NEW.T16 ,
            T17 = NEW.T17 , T18 = NEW.T18 , T19 = NEW.T19 , T20 = NEW.T20
            WHERE C.PRODUTO_CODIGO = :PRODUTO_ID;
        END

        /*********************************************************************************/

        IF ( OLD.CUBAGEM_ALTURA <> NEW.CUBAGEM_ALTURA or OLD.CUBAGEM_LARGURA <> NEW.CUBAGEM_LARGURA or OLD.CUBAGEM_COMPRIMENTO <> NEW.CUBAGEM_COMPRIMENTO ) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.CUBAGEM_ALTURA = NEW.CUBAGEM_ALTURA,
                F.CUBAGEM_LARGURA = NEW.CUBAGEM_LARGURA ,
                F.CUBAGEM_COMPRIMENTO = NEW.CUBAGEM_COMPRIMENTO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;

        END
    
        IF (OLD.CONTROLE_BENEFICIAMENTO <> NEW.CONTROLE_BENEFICIAMENTO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.CONTROLE_BENEFICIAMENTO = NEW.CONTROLE_BENEFICIAMENTO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID; 
        END

        IF (OLD.RENDIMENTO <> NEW.RENDIMENTO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.RENDIMENTO = NEW.RENDIMENTO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
     
        END
    
        IF (OLD.LARGURA <> NEW.LARGURA) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.LARGURA = NEW.LARGURA
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
     
        END

        IF (OLD.COMPRIMENTO <> NEW.COMPRIMENTO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.COMPRIMENTO = NEW.COMPRIMENTO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
        END
        
        IF (OLD.COMPOSICAO <> NEW.COMPOSICAO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.COMPOSICAO = NEW.COMPOSICAO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
        END

        IF (OLD.PESOLIQUIDO <> NEW.PESOLIQUIDO) THEN
        BEGIN
            UPDATE TBPRODUTO_FICHA F
                SET F.PESOLIQUIDO = NEW.PESOLIQUIDO
                WHERE F.PRODUTO_CODIGO = :PRODUTO_ID;
        END

 
    END

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbgrupo_produto_b01u for tbgrupo_produto
active before update position 4
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_FAMILIA VARCHAR(500);
DECLARE VARIABLE NEW_FAMILIA VARCHAR(500);
DECLARE VARIABLE OLD_TIPOPRODUTO VARCHAR(500);
DECLARE VARIABLE NEW_TIPOPRODUTO VARCHAR(500);
DECLARE VARIABLE OLD_LOCALIZACAO VARCHAR(500);
DECLARE VARIABLE NEW_LOCALIZACAO VARCHAR(500);
DECLARE VARIABLE OLD_GRADE VARCHAR(500);
DECLARE VARIABLE NEW_GRADE VARCHAR(500);
DECLARE VARIABLE OLD_UNIDADEMEDIDA VARCHAR(500);
DECLARE VARIABLE NEW_UNIDADEMEDIDA VARCHAR(500);
BEGIN

    HISTORICO = '';

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

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

    IF (OLD.MODELO_CODIGO <> NEW.MODELO_CODIGO) THEN
    BEGIN
        HISTORICO = ' MODELO '||NEW.MODELO_CODIGO||' VINCULADO';
    END

    IF (OLD.MODELO_CODIGO IS DISTINCT FROM NEW.MODELO_CODIGO AND NEW.MODELO_CODIGO = 0) THEN
    BEGIN
        HISTORICO = ' MODELO '||OLD.MODELO_CODIGO||' DESVINCULADO';
    END

    IF (OLD.FAMILIA_ID <> NEW.FAMILIA_ID) THEN
    BEGIN
        OLD_FAMILIA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.DESCRICAO FROM TBFAMILIA A WHERE A.CODIGO = OLD.FAMILIA_ID), '');
        NEW_FAMILIA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.DESCRICAO FROM TBFAMILIA A WHERE A.CODIGO = OLD.FAMILIA_ID), '');

        HISTORICO = HISTORICO||' FAM:'||OLD_FAMILIA||'->'||NEW_FAMILIA;
    END

    IF (OLD.TIPOPRODUTO_ID <> NEW.TIPOPRODUTO_ID) THEN
    BEGIN
        OLD_TIPOPRODUTO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.DESCRICAO FROM TBTIPOPRODUTO B WHERE B.CODIGO = OLD.TIPOPRODUTO_ID), '');
        NEW_TIPOPRODUTO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.DESCRICAO FROM TBTIPOPRODUTO B WHERE B.CODIGO = NEW.TIPOPRODUTO_ID), '');

        HISTORICO = HISTORICO||' TP.PROD:'||OLD_TIPOPRODUTO||'->'||NEW_TIPOPRODUTO;
    END

    IF (OLD.LOCALIZACAO_ID <> NEW.LOCALIZACAO_ID) THEN
    BEGIN
        OLD_LOCALIZACAO = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO FROM TBLOCALIZACAO C WHERE C.CODIGO = OLD.LOCALIZACAO_ID), '');
        NEW_LOCALIZACAO = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO FROM TBLOCALIZACAO C WHERE C.CODIGO = NEW.LOCALIZACAO_ID), '');

        HISTORICO = HISTORICO||' LOC:'||OLD_LOCALIZACAO||'->'||NEW_LOCALIZACAO;
    END

    IF (OLD.GRADE_ID <> NEW.GRADE_ID) THEN
    BEGIN
        OLD_GRADE = COALESCE((SELECT FIRST 1 FN_LPAD(D.CODIGO, 4, '0')||' - '||D.DESCRICAO FROM TBGRADE D WHERE D.CODIGO = OLD.GRADE_ID), '');
        NEW_GRADE = COALESCE((SELECT FIRST 1 FN_LPAD(D.CODIGO, 4, '0')||' - '||D.DESCRICAO FROM TBGRADE D WHERE D.CODIGO = NEW.GRADE_ID), '');

        HISTORICO = HISTORICO||' GRADE:'||OLD_GRADE||'->'||NEW_GRADE;
    END

    IF (OLD.UNIDADEMEDIDA_SIGLA <> NEW.UNIDADEMEDIDA_SIGLA) THEN
    BEGIN
        OLD_UNIDADEMEDIDA = COALESCE((SELECT FIRST 1 E.SIGLA||' - '||E.DESCRICAO FROM TBUNIDADEMEDIDA E WHERE E.SIGLA = OLD.UNIDADEMEDIDA_SIGLA), '');
        NEW_UNIDADEMEDIDA = COALESCE((SELECT FIRST 1 E.SIGLA||' - '||E.DESCRICAO FROM TBUNIDADEMEDIDA E WHERE E.SIGLA = NEW.UNIDADEMEDIDA_SIGLA), '');

        HISTORICO = HISTORICO||' UM:'||OLD_UNIDADEMEDIDA||'->'||NEW_UNIDADEMEDIDA;
    END

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

    IF (OLD.HABILITA_COMPRA <> NEW.HABILITA_COMPRA) THEN
    BEGIN
        HISTORICO = HISTORICO||' HAB.COMPRA:'||OLD.HABILITA_COMPRA||'->'||NEW.HABILITA_COMPRA;
    END

    IF (OLD.HABILITA_VENDA <> NEW.HABILITA_VENDA) THEN
    BEGIN
        HISTORICO = HISTORICO||' HAB.VENDA:'||OLD.HABILITA_VENDA||'->'||NEW.HABILITA_VENDA;
    END

    IF (OLD.CUSTOUNITARIO_MEDIO <> NEW.CUSTOUNITARIO_MEDIO) THEN
    BEGIN
    HISTORICO = HISTORICO||' VR.CM:'||FN_FORMAT_NUMBER2(OLD.CUSTOUNITARIO_MEDIO, 5)||'->'||FN_FORMAT_NUMBER2(NEW.CUSTOUNITARIO_MEDIO, 5);
    END

    IF (OLD.IMPOSTO_CUSTO <> NEW.IMPOSTO_CUSTO) THEN
    BEGIN
    HISTORICO = HISTORICO||' CM.%IMP:'||FN_FORMAT_NUMBER(OLD.IMPOSTO_CUSTO)||'->'||FN_FORMAT_NUMBER(NEW.IMPOSTO_CUSTO);
    END

    IF (OLD.ICMS <> NEW.ICMS) THEN
    BEGIN
    HISTORICO = HISTORICO||' CM%ICM:'||FN_FORMAT_NUMBER(OLD.ICMS)||'->'||FN_FORMAT_NUMBER(NEW.ICMS);
    END

    IF (OLD.IPI <> NEW.IPI) THEN
    BEGIN
    HISTORICO = HISTORICO||' CM%IPI:'||FN_FORMAT_NUMBER(OLD.IPI)||'->'||FN_FORMAT_NUMBER(NEW.IPI);
    END

    IF (OLD.FRETE <> NEW.FRETE) THEN
    BEGIN
    HISTORICO = HISTORICO||' CM%FRT:'||FN_FORMAT_NUMBER(OLD.FRETE)||'->'||FN_FORMAT_NUMBER(NEW.FRETE);
    END

    IF (OLD.FINANCEIRO <> NEW.FINANCEIRO) THEN
    BEGIN
    HISTORICO = HISTORICO||' CM%FIN:'||FN_FORMAT_NUMBER(OLD.FINANCEIRO)||'->'||FN_FORMAT_NUMBER(NEW.FINANCEIRO);
    END

    IF (OLD.T01 <> NEW.T01) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T01:'||FN_FORMAT_NUMBER(OLD.T01)||'->'||FN_FORMAT_NUMBER(NEW.T01);
       END
    IF (OLD.T02 <> NEW.T02) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T02:'||FN_FORMAT_NUMBER(OLD.T02)||'->'||FN_FORMAT_NUMBER(NEW.T02);
       END
    IF (OLD.T03 <> NEW.T03) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T03:'||FN_FORMAT_NUMBER(OLD.T03)||'->'||FN_FORMAT_NUMBER(NEW.T03);
       END
    IF (OLD.T04 <> NEW.T04) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T04:'||FN_FORMAT_NUMBER(OLD.T04)||'->'||FN_FORMAT_NUMBER(NEW.T04);
       END
    IF (OLD.T05 <> NEW.T05) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T05:'||FN_FORMAT_NUMBER(OLD.T05)||'->'||FN_FORMAT_NUMBER(NEW.T05);
       END
    IF (OLD.T06 <> NEW.T06) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T06:'||FN_FORMAT_NUMBER(OLD.T06)||'->'||FN_FORMAT_NUMBER(NEW.T06);
       END
    IF (OLD.T07 <> NEW.T07) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T07:'||FN_FORMAT_NUMBER(OLD.T07)||'->'||FN_FORMAT_NUMBER(NEW.T07);
       END
    IF (OLD.T08 <> NEW.T08) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T08:'||FN_FORMAT_NUMBER(OLD.T08)||'->'||FN_FORMAT_NUMBER(NEW.T08);
       END
    IF (OLD.T09 <> NEW.T09) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T09:'||FN_FORMAT_NUMBER(OLD.T09)||'->'||FN_FORMAT_NUMBER(NEW.T09);
       END
    IF (OLD.T10 <> NEW.T10) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T10:'||FN_FORMAT_NUMBER(OLD.T10)||'->'||FN_FORMAT_NUMBER(NEW.T10);
       END
    IF (OLD.T11 <> NEW.T11) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T11:'||FN_FORMAT_NUMBER(OLD.T11)||'->'||FN_FORMAT_NUMBER(NEW.T11);
       END
    IF (OLD.T12 <> NEW.T12) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T12:'||FN_FORMAT_NUMBER(OLD.T02)||'->'||FN_FORMAT_NUMBER(NEW.T12);
       END
    IF (OLD.T13 <> NEW.T13) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T13:'||FN_FORMAT_NUMBER(OLD.T03)||'->'||FN_FORMAT_NUMBER(NEW.T13);
       END
    IF (OLD.T14 <> NEW.T14) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T14:'||FN_FORMAT_NUMBER(OLD.T14)||'->'||FN_FORMAT_NUMBER(NEW.T14);
       END
    IF (OLD.T15 <> NEW.T15) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T15:'||FN_FORMAT_NUMBER(OLD.T15)||'->'||FN_FORMAT_NUMBER(NEW.T15);
       END
    IF (OLD.T16 <> NEW.T16) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T16:'||FN_FORMAT_NUMBER(OLD.T16)||'->'||FN_FORMAT_NUMBER(NEW.T16);
       END
    IF (OLD.T17 <> NEW.T17) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T17:'||FN_FORMAT_NUMBER(OLD.T17)||'->'||FN_FORMAT_NUMBER(NEW.T17);
       END
    IF (OLD.T18 <> NEW.T18) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T18:'||FN_FORMAT_NUMBER(OLD.T18)||'->'||FN_FORMAT_NUMBER(NEW.T18);
       END
    IF (OLD.T19 <> NEW.T19) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T19:'||FN_FORMAT_NUMBER(OLD.T19)||'->'||FN_FORMAT_NUMBER(NEW.T19);
       END
    IF (OLD.T20 <> NEW.T20) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.T20:'||FN_FORMAT_NUMBER(OLD.T20)||'->'||FN_FORMAT_NUMBER(NEW.T20);
       END

    IF (OLD.RENDIMENTO <> NEW.RENDIMENTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' REND:'||FN_FORMAT_NUMBER2(OLD.RENDIMENTO, 4)||'->'||FN_FORMAT_NUMBER2(NEW.RENDIMENTO, 4);
    END

    IF (OLD.LARGURA <> NEW.LARGURA) THEN
    BEGIN
        HISTORICO = HISTORICO||' LARG:'||FN_FORMAT_NUMBER2(OLD.LARGURA, 4)||'->'||FN_FORMAT_NUMBER2(NEW.LARGURA, 4);
    END

    IF (OLD.COMPRIMENTO <> NEW.COMPRIMENTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' COMPR:'||FN_FORMAT_NUMBER2(OLD.COMPRIMENTO, 4)||'cm'||'->'||FN_FORMAT_NUMBER2(NEW.COMPRIMENTO, 4)||'cm';
    END
    
    IF (OLD.COMPOSICAO <> NEW.COMPOSICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' COMP:'||OLD.COMPOSICAO||'->'||NEW.COMPOSICAO;
    END

    IF (OLD.TOLERANCIA <> NEW.TOLERANCIA) THEN
    BEGIN
        HISTORICO = HISTORICO||' %TOL:'||FN_FORMAT_NUMBER2(OLD.TOLERANCIA, 2)||'%'||'->'||FN_FORMAT_NUMBER2(NEW.TOLERANCIA, 2)||'%';
    END

    IF (OLD.PESOLIQUIDO <> NEW.PESOLIQUIDO) THEN
    BEGIN
        HISTORICO = HISTORICO||' PESO:'||FN_FORMAT_NUMBER2(OLD.PESOLIQUIDO, 5)||'g'||'->'||FN_FORMAT_NUMBER2(NEW.PESOLIQUIDO, 5)||'g';
    END

    IF (OLD.SEGURANCA <> NEW.SEGURANCA) THEN
    BEGIN
        HISTORICO = HISTORICO||' %SEG:'||FN_FORMAT_NUMBER2(OLD.SEGURANCA, 4)||'%'||'->'||FN_FORMAT_NUMBER2(NEW.SEGURANCA, 4)||'%';
    END

    IF (OLD.DESCRICAO_ETIQUETA <> NEW.DESCRICAO_ETIQUETA) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC.ETQ:'||OLD.DESCRICAO_ETIQUETA||'->'||NEW.DESCRICAO_ETIQUETA;
    END

    IF (OLD.CUBAGEM_ALTURA <> NEW.CUBAGEM_ALTURA) THEN
    BEGIN
        HISTORICO = HISTORICO||' CUB.ALT:'||FN_FORMAT_NUMBER2(OLD.CUBAGEM_ALTURA, 4)||'mm'||'->'||FN_FORMAT_NUMBER2(NEW.CUBAGEM_ALTURA, 4)||'mm';
    END

    IF (OLD.CUBAGEM_LARGURA <> NEW.CUBAGEM_LARGURA) THEN
    BEGIN
        HISTORICO = HISTORICO||' CUB.LARG:'||FN_FORMAT_NUMBER2(OLD.CUBAGEM_LARGURA, 4)||'MM'||'->'||FN_FORMAT_NUMBER2(NEW.CUBAGEM_LARGURA, 4)||'MM';
    END

    IF (OLD.CUBAGEM_COMPRIMENTO <> NEW.CUBAGEM_COMPRIMENTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' CUB.COMPR:'||FN_FORMAT_NUMBER2(OLD.CUBAGEM_COMPRIMENTO, 4)||'MM'||'->'||FN_FORMAT_NUMBER2(NEW.CUBAGEM_COMPRIMENTO, 4)||'MM';
    END

    IF (OLD.CONTROLE_BENEFICIAMENTO <> NEW.CONTROLE_BENEFICIAMENTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' HAB.BENEF:'||OLD.CONTROLE_BENEFICIAMENTO||'->'||NEW.CONTROLE_BENEFICIAMENTO;
    END

    IF (OLD.INVENTARIO <> NEW.INVENTARIO) THEN
    BEGIN
        HISTORICO = HISTORICO||' HAB.INV:'||OLD.INVENTARIO||'->'||NEW.INVENTARIO;
    END

    IF (OLD.PROGRAMAR_SEM_ESTOQUE <> NEW.PROGRAMAR_SEM_ESTOQUE) THEN
    BEGIN
        HISTORICO = HISTORICO||' PROG.S/EST:'||OLD.PROGRAMAR_SEM_ESTOQUE||'->'||NEW.PROGRAMAR_SEM_ESTOQUE;
    END

    IF (OLD.GERAR_OC <> NEW.GERAR_OC) THEN
    BEGIN
        HISTORICO = HISTORICO||' GERAR OC:'||OLD.GERAR_OC||'->'||NEW.GERAR_OC;
    END

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

    IF (OLD.FEEF_PERC_DEDUCAO <> NEW.FEEF_PERC_DEDUCAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' %DEDUC.FEEF:'||OLD.FEEF_PERC_DEDUCAO||'->'||NEW.FEEF_PERC_DEDUCAO;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBGRUPO_PRODUTO', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^

/***************************************************************************************/
/***************************************************************************************/

SET TERM ^ ;

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

   HISTORICO = '';

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

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

   IF (OLD.TIPOPRODUTO_CODIGO <> NEW.TIPOPRODUTO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TP.PROD:'||OLD.TIPOPRODUTO_CODIGO||'->'||NEW.TIPOPRODUTO_CODIGO;
       END
   IF (OLD.FAMILIA_CODIGO <> NEW.FAMILIA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM:'||OLD.FAMILIA_CODIGO||'->'||NEW.FAMILIA_CODIGO;
       END
   IF (OLD.LINHA_CODIGO <> NEW.LINHA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' LIN:'||OLD.LINHA_CODIGO||'->'||NEW.LINHA_CODIGO;
       END
   IF (OLD.MODELO_CODIGO <> NEW.MODELO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' MOD:'||OLD.MODELO_CODIGO||'->'||NEW.MODELO_CODIGO;
       END
   IF (OLD.GRADE_CODIGO <> NEW.GRADE_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' GDE:'||OLD.GRADE_CODIGO||'->'||NEW.GRADE_CODIGO;
       END
   IF (OLD.UNIDADEMEDIDA_SIGLA <> NEW.UNIDADEMEDIDA_SIGLA) THEN
       BEGIN
       HISTORICO = HISTORICO||' UM:'||OLD.UNIDADEMEDIDA_SIGLA||'->'||NEW.UNIDADEMEDIDA_SIGLA;
       END
   IF (OLD.COR_CODIGO <> NEW.COR_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COR:'||OLD.COR_CODIGO||'->'||NEW.COR_CODIGO;
       END
   IF (OLD.LOCALIZACAO_CODIGO <> NEW.LOCALIZACAO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' LOC:'||OLD.LOCALIZACAO_CODIGO||'->'||NEW.LOCALIZACAO_CODIGO;
       END
   IF (OLD.GRUPO_PRODUTO_ID <> NEW.GRUPO_PRODUTO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' GRP.PROD:'||OLD.GRUPO_PRODUTO_ID||'->'||NEW.GRUPO_PRODUTO_ID;
       END

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

   IF (OLD.NBM_CODIGO <> NEW.NBM_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' NBM:'||OLD.NBM_CODIGO||'->'||NEW.NBM_CODIGO;
       END
   IF (OLD.EAN <> NEW.EAN) THEN
       BEGIN
       HISTORICO = HISTORICO||' EAN:'||OLD.EAN||'->'||NEW.EAN;
       END
   IF (OLD.HABILITA_COMPRA <> NEW.HABILITA_COMPRA) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.COMP:'||OLD.HABILITA_COMPRA||'->'||NEW.HABILITA_COMPRA;
       END
   IF (OLD.HABILITA_VENDA <> NEW.HABILITA_VENDA) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.VEND:'||OLD.HABILITA_VENDA||'->'||NEW.HABILITA_VENDA;
       END
   IF (OLD.PROGRAMAR_SEM_ESTOQUE <> NEW.PROGRAMAR_SEM_ESTOQUE) THEN
       BEGIN
       HISTORICO = HISTORICO||' PROG.S/EST:'||OLD.PROGRAMAR_SEM_ESTOQUE||'->'||NEW.PROGRAMAR_SEM_ESTOQUE;
       END
   IF (OLD.INVENTARIO <> NEW.INVENTARIO) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.INV:'||OLD.INVENTARIO||'->'||NEW.INVENTARIO;
       END

   IF (OLD.TOLERANCIA <> NEW.TOLERANCIA) THEN
       BEGIN
       HISTORICO = HISTORICO||' %TOL: '||OLD.TOLERANCIA||'->'||NEW.TOLERANCIA;
       END
   IF (OLD.SEGURANCA <> NEW.SEGURANCA) THEN
       BEGIN
       HISTORICO = HISTORICO||' %EST.SEG:'||OLD.SEGURANCA||'->'||NEW.SEGURANCA;
       END
   IF (OLD.GERAR_OC <> NEW.GERAR_OC) THEN
       BEGIN
       HISTORICO = HISTORICO||' GERAR OC:'||OLD.GERAR_OC||'->'||NEW.GERAR_OC;
       END
   IF (OLD.FEEF <> NEW.FEEF) THEN
       BEGIN
       HISTORICO = HISTORICO||' FEEF:'||OLD.FEEF||'->'||NEW.FEEF;
       END
   IF (OLD.FEEF_PERC_DEDUCAO <> NEW.FEEF_PERC_DEDUCAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' %DEDUC.FEEF:'||OLD.FEEF_PERC_DEDUCAO||'->'||NEW.FEEF_PERC_DEDUCAO;
       END
   IF (OLD.FAMILIA_ALTERNATIVA <> NEW.FAMILIA_ALTERNATIVA) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM.ALT:'||OLD.FAMILIA_ALTERNATIVA||'->'||NEW.FAMILIA_ALTERNATIVA;
       END

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

   IF (OLD.TABELA_PRECO_ID IS DISTINCT FROM NEW.TABELA_PRECO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' TB.PRECO:'||FN_IS_EMPTY(OLD.TABELA_PRECO_ID)||'->'||FN_IS_EMPTY(NEW.TABELA_PRECO_ID);
       END

   IF (OLD.DESCRICAO_ETIQUETA <> NEW.DESCRICAO_ETIQUETA) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.ETIQ:'||OLD.DESCRICAO_ETIQUETA||'->'||NEW.DESCRICAO_ETIQUETA;
       END
   IF (OLD.INFORMACOES_COMPLEMENTARES <> NEW.INFORMACOES_COMPLEMENTARES) THEN
       BEGIN
       HISTORICO = HISTORICO||' INF.COMP:'||FN_ELIPSES(OLD.INFORMACOES_COMPLEMENTARES,100)||'->'||FN_ELIPSES(NEW.INFORMACOES_COMPLEMENTARES,100);
       END

   IF (OLD.VALOR_SERVICO <> NEW.VALOR_SERVICO) THEN
       BEGIN
       HISTORICO = HISTORICO||' VL.SERV:'||OLD.VALOR_SERVICO||'->'||NEW.VALOR_SERVICO;
       END

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

   IF (OLD.TIPO_INC <> NEW.TIPO_INC) THEN
       BEGIN
       HISTORICO = HISTORICO||' TIPO INC:'||OLD.TIPO_INC||'->'||NEW.TIPO_INC;
       END


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

SET TERM ; ^

