SET TERM ^ ;

CREATE OR ALTER trigger ttbnfs_item_saldo_b0u_01 for tbnfs_item_saldo
active before update position 0
AS
DECLARE VARIABLE SALDO   Numeric(15,5);
DECLARE VARIABLE SALDO01 Numeric(15,5); DECLARE VARIABLE SALDO02 Numeric(15,5);
DECLARE VARIABLE SALDO03 Numeric(15,5); DECLARE VARIABLE SALDO04 Numeric(15,5);
DECLARE VARIABLE SALDO05 Numeric(15,5); DECLARE VARIABLE SALDO06 Numeric(15,5);
DECLARE VARIABLE SALDO07 Numeric(15,5); DECLARE VARIABLE SALDO08 Numeric(15,5);
DECLARE VARIABLE SALDO09 Numeric(15,5); DECLARE VARIABLE SALDO10 Numeric(15,5);
DECLARE VARIABLE SALDO11 Numeric(15,5); DECLARE VARIABLE SALDO12 Numeric(15,5);
DECLARE VARIABLE SALDO13 Numeric(15,5); DECLARE VARIABLE SALDO14 Numeric(15,5);
DECLARE VARIABLE SALDO15 Numeric(15,5); DECLARE VARIABLE SALDO16 Numeric(15,5);
DECLARE VARIABLE SALDO17 Numeric(15,5); DECLARE VARIABLE SALDO18 Numeric(15,5);
DECLARE VARIABLE SALDO19 Numeric(15,5); DECLARE VARIABLE SALDO20 Numeric(15,5);
declare variable vProduto varchar(200);
declare variable PRODUTO_ID INTEGER;
Begin
For
Select
OLD.QUANTIDADE-NEW.QUANTIDADE, 
OLD.T01-NEW.T01,OLD.T02-NEW.T02,OLD.T03-NEW.T03,OLD.T04-NEW.T04,OLD.T05-NEW.T05,
OLD.T06-NEW.T06,OLD.T07-NEW.T07,OLD.T08-NEW.T08,OLD.T09-NEW.T09,OLD.T10-NEW.T10,
OLD.T11-NEW.T11,OLD.T12-NEW.T12,OLD.T13-NEW.T13,OLD.T14-NEW.T14,OLD.T15-NEW.T15,
OLD.T16-NEW.T16,OLD.T17-NEW.T17,OLD.T18-NEW.T18,OLD.T19-NEW.T19,OLD.T20-NEW.T20
FROM RDB$DATABASE
Into :SALDO, 
     :SALDO01,:SALDO02,:SALDO03,:SALDO04,
     :SALDO05,:SALDO06,:SALDO07,:SALDO08,
     :SALDO09,:SALDO10,:SALDO11,:SALDO12,
     :SALDO13,:SALDO14,:SALDO15,:SALDO16,
     :SALDO17,:SALDO18,:SALDO19,:SALDO20
Do
begin

  vProduto      = (Select fn_Lpad(Produto_codigo,6,'0')||' - '||Produto_Descricao From TbNfs_Item Where Controle = Old.nfs_item_controle);
  PRODUTO_ID    = COALESCE((Select Produto_codigo From TbNfs_Item Where Controle = Old.nfs_item_controle), 0);


    if (NEW.T01 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 1) FROM RDB$DATABASE), '[T01]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T01||'   QUANTIDADE A BAIXAR: '||:SALDO01||'   [T01]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T02 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 2) FROM RDB$DATABASE), '[T02]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T02||'   QUANTIDADE A BAIXAR: '||:SALDO02||'   [T01]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T03 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 3) FROM RDB$DATABASE), '[T03]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T03||'   QUANTIDADE A BAIXAR: '||:SALDO03||'   [T03]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T04 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 4) FROM RDB$DATABASE), '[T04]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T04||'   QUANTIDADE A BAIXAR: '||:SALDO04||'   [T04]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T05 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 5) FROM RDB$DATABASE), '[T05]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T05||'   QUANTIDADE A BAIXAR: '||:SALDO05||'   [T05]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T06 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 6) FROM RDB$DATABASE), '[T06]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T06||'   QUANTIDADE A BAIXAR: '||:SALDO06||'   [T06]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T07 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 7) FROM RDB$DATABASE), '[T07]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T07||'   QUANTIDADE A BAIXAR: '||:SALDO07||'   [T07]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T08 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 8) FROM RDB$DATABASE), '[T08]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T08||'   QUANTIDADE A BAIXAR: '||:SALDO08||'   [T08]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T09 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 9) FROM RDB$DATABASE), '[T09]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T09||'   QUANTIDADE A BAIXAR: '||:SALDO09||'   [T09]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T10 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 10) FROM RDB$DATABASE), '[T10]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T10||'   QUANTIDADE A BAIXAR: '||:SALDO10||'   [T10]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T11 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 11) FROM RDB$DATABASE), '[T11]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T11||'   QUANTIDADE A BAIXAR: '||:SALDO11||'   [T11]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T12 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 12) FROM RDB$DATABASE), '[T12]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T12||'   QUANTIDADE A BAIXAR: '||:SALDO12||'   [T12]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T13 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 13) FROM RDB$DATABASE), '[T13]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T13||'   QUANTIDADE A BAIXAR: '||:SALDO13||'   [T13]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T14 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 14) FROM RDB$DATABASE), '[T14]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T14||'   QUANTIDADE A BAIXAR: '||:SALDO14||'   [T14]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T15 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 15) FROM RDB$DATABASE), '[T15]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T15||'   QUANTIDADE A BAIXAR: '||:SALDO15||'   [T15]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T16 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 16) FROM RDB$DATABASE), '[T16]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T16||'   QUANTIDADE A BAIXAR: '||:SALDO16||'   [T16]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T17 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 17) FROM RDB$DATABASE), '[T17]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T17||'   QUANTIDADE A BAIXAR: '||:SALDO17||'   [T17]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T18 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 18) FROM RDB$DATABASE), '[T18]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T18||'   QUANTIDADE A BAIXAR: '||:SALDO18||'   [T18]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T19 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 19) FROM RDB$DATABASE), '[T19]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T19||'   QUANTIDADE A BAIXAR: '||:SALDO19||'   [T19]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
    if (NEW.T20 < 0) then  Exception  "..." vProduto||' - TAM '|| COALESCE((SELECT FN_TAMANHO_PRODUTO(:PRODUTO_ID, 20) FROM RDB$DATABASE), '[T20]')||' SALDO NA GRADE DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.T20||'   QUANTIDADE A BAIXAR: '||:SALDO20||'   [T20]  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
  if (NEW.QUANTIDADE < 0) then Exception "..." vProduto||' SALDO DO ITEM NO DOCUMENTO NAO PODE FICAR NEGATIVO. QUANTIDADE DISPONIVEL: '||OLD.QUANTIDADE||'   QUANTIDADE A BAIXAR: '||:SALDO||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
end                                       

End
^

SET TERM ; ^

