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||' GP.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||' TIPO:'||OLD.TIPOPRODUTO_CODIGO||'->'||NEW.TIPOPRODUTO_CODIGO;
       END
   IF (OLD.FAMILIA_CODIGO <> NEW.FAMILIA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM:'||OLD.FAMILIA_CODIGO||'->'||NEW.FAMILIA_CODIGO;
       END
   IF (OLD.LINHA_CODIGO <> NEW.LINHA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' LIN:'||OLD.LINHA_CODIGO||'->'||NEW.LINHA_CODIGO;
       END
   IF (OLD.MODELO_CODIGO <> NEW.MODELO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' MOD:'||OLD.MODELO_CODIGO||'->'||NEW.MODELO_CODIGO;
       END
   IF (OLD.GRADE_CODIGO <> NEW.GRADE_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' GDE:'||OLD.GRADE_CODIGO||'->'||NEW.GRADE_CODIGO;
       END
   IF (OLD.UNIDADEMEDIDA_SIGLA <> NEW.UNIDADEMEDIDA_SIGLA) THEN
       BEGIN
       HISTORICO = HISTORICO||' UND:'||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||' GRUPO 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||' INV:'||OLD.INVENTARIO||'->'||NEW.INVENTARIO;
       END
   IF (COALESCE(OLD.T01, 0) <> COALESCE(NEW.T01, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.01:'||OLD.T01||'->'||NEW.T01;
       END
   IF (COALESCE(OLD.T02, 0) <> COALESCE(NEW.T02, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.02:'||OLD.T02||'->'||NEW.T02;
       END
   IF (COALESCE(OLD.T03, 0) <> COALESCE(NEW.T03, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.03:'||OLD.T03||'->'||NEW.T03;
       END
   IF (COALESCE(OLD.T04, 0) <> COALESCE(NEW.T04, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.04:'||OLD.T04||'->'||NEW.T04;
       END
   IF (COALESCE(OLD.T05, 0) <> COALESCE(NEW.T05, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.05:'||OLD.T05||'->'||NEW.T05;
       END
   IF (COALESCE(OLD.T06, 0) <> COALESCE(NEW.T06, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.06:'||OLD.T06||'->'||NEW.T06;
       END
   IF (COALESCE(OLD.T07, 0) <> COALESCE(NEW.T07, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.07:'||OLD.T07||'->'||NEW.T07;
       END
   IF (COALESCE(OLD.T08, 0) <> COALESCE(NEW.T08, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.08:'||OLD.T08||'->'||NEW.T08;
       END
   IF (COALESCE(OLD.T09, 0) <> COALESCE(NEW.T09, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.09:'||OLD.T09||'->'||NEW.T09;
       END
   IF (COALESCE(OLD.T10, 0) <> COALESCE(NEW.T10, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.10:'||OLD.T10||'->'||NEW.T10;
       END
   IF (COALESCE(OLD.T11, 0) <> COALESCE(NEW.T11, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.11:'||OLD.T11||'->'||NEW.T11;
       END
   IF (COALESCE(OLD.T12, 0) <> COALESCE(NEW.T12, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.12:'||OLD.T02||'->'||NEW.T12;
       END
   IF (COALESCE(OLD.T13, 0 ) <> COALESCE(NEW.T13, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.13:'||OLD.T03||'->'||NEW.T13;
       END
   IF (COALESCE(OLD.T14, 0) <> COALESCE(NEW.T14, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.14:'||OLD.T14||'->'||NEW.T14;
       END
   IF (COALESCE(OLD.T15, 0) <> COALESCE(NEW.T15, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.15:'||OLD.T15||'->'||NEW.T15;
       END
   IF (COALESCE(OLD.T16, 0) <> COALESCE(NEW.T16, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.16:'||OLD.T16||'->'||NEW.T16;
       END
   IF (COALESCE(OLD.T17, 0) <> COALESCE(NEW.T17,0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.17:'||OLD.T17||'->'||NEW.T17;
       END
   IF (COALESCE(OLD.T18, 0) <> COALESCE(NEW.T18, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.18:'||OLD.T18||'->'||NEW.T18;
       END
   IF (COALESCE(OLD.T19, 0) <> COALESCE(NEW.T19, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.19:'||OLD.T19||'->'||NEW.T19;
       END
   IF (COALESCE(OLD.T20, 0) <> COALESCE(NEW.T20, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' CM.20:'||OLD.T20||'->'||NEW.T20;
       END
   IF (OLD.IMPOSTO_CUSTO <> NEW.IMPOSTO_CUSTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' IMP.CUSTO:'||OLD.IMPOSTO_CUSTO||'->'||NEW.IMPOSTO_CUSTO;
       END
   IF (OLD.TOLERANCIA <> NEW.TOLERANCIA) THEN
       BEGIN
       HISTORICO = HISTORICO||' TOLERANCIA: '||OLD.TOLERANCIA||'->'||NEW.TOLERANCIA;
       END
   IF (OLD.SEGURANCA <> NEW.SEGURANCA) THEN
       BEGIN
       HISTORICO = HISTORICO||' %EST.SEG:'||OLD.SEGURANCA||'->'||NEW.SEGURANCA;
       END
   IF (OLD.GERAR_OC <> NEW.GERAR_OC) THEN
       BEGIN
       HISTORICO = HISTORICO||' GERAR OC:'||OLD.GERAR_OC||'->'||NEW.GERAR_OC;
       END
   IF (OLD.FEEF <> NEW.FEEF) THEN
       BEGIN
       HISTORICO = HISTORICO||' FEEF:'||OLD.FEEF||'->'||NEW.FEEF;
       END
   IF (OLD.FAMILIA_ALTERNATIVA <> NEW.FAMILIA_ALTERNATIVA) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM.ALT:'||OLD.FAMILIA_ALTERNATIVA||'->'||NEW.FAMILIA_ALTERNATIVA;
       END

   IF (OLD.CONTA_CONTABIL IS DISTINCT FROM NEW.CONTA_CONTABIL) THEN
       BEGIN
       HISTORICO = HISTORICO||' C.CONTABIL:'||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||' TAB.PRECO:'||COALESCE(OLD.TABELA_PRECO_ID, 0)||'->'||COALESCE(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.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 (OLD.TABELA_PRECO_ID IS DISTINCT FROM NEW.TABELA_PRECO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' TAB PRECO:'||FN_IS_EMPTY(OLD.TABELA_PRECO_ID)||'->'||FN_IS_EMPTY(NEW.TABELA_PRECO_ID);
       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;