quinta-feira, 14 de setembro de 2023

Natureza padrão por Tipo de Operação

 



1. Criar tabela adicional:

1.1. Tela Construtor de Telas;

1.2. Selecionar Tela detalhe:



Tela Natureza de Receitas e Despesas


2. Criar evento na tabela TGFCAB: 

2.1. Tela Dicionário de Dados > Aba Eventos;


3. No banco de dados (Oracle), criar/substituir a stored procedure abaixo:
 CREATE OR REPLACE PROCEDURE "STP_EVP_TGFCAB_NATPADRAODEV" (  
     P_TIPOEVENTO INT,  -- Identifica o tipo de evento  
     P_IDSESSAO VARCHAR2, -- Identificador da execução. Serve para buscar informações dos campos da execução.  
     P_CODUSU INT     -- Código do usuário logado  
 ) AS  
     BEFORE_INSERT INT;  
     AFTER_INSERT INT;  
     BEFORE_DELETE INT;  
     AFTER_DELETE INT;  
     BEFORE_UPDATE INT;  
     AFTER_UPDATE INT;  
     BEFORE_COMMIT INT;  
     V_COUNT INT;  
     V_CODTIPOPER INT;  
     V_CODNAT INT;  
     V_CODTOP INT;  
 BEGIN  
     BEFORE_INSERT := 0;  
     AFTER_INSERT := 1;  
     BEFORE_DELETE := 2;  
     AFTER_DELETE := 3;  
     BEFORE_UPDATE := 4;  
     AFTER_UPDATE := 5;  
     BEFORE_COMMIT := 10;  
 /*******************************************************************************  
   É possível obter o valor dos campos através das Functions:  
  EVP_GET_CAMPO_DTA(P_IDSESSAO, 'NOMECAMPO') -- PARA CAMPOS DE DATA  
  EVP_GET_CAMPO_INT(P_IDSESSAO, 'NOMECAMPO') -- PARA CAMPOS NUMÉRICOS INTEIROS  
  EVP_GET_CAMPO_DEC(P_IDSESSAO, 'NOMECAMPO') -- PARA CAMPOS NUMÉRICOS DECIMAIS  
  EVP_GET_CAMPO_TEXTO(P_IDSESSAO, 'NOMECAMPO')  -- PARA CAMPOS TEXTO  
  O primeiro argumento é uma chave para esta execução. O segundo é o nome do campo.  
  Para os eventos BEFORE UPDATE, BEFORE INSERT e AFTER DELETE todos os campos estarão disponíveis.  
  Para os demais, somente os campos que pertencem à PK  
  * Os campos CLOB/TEXT serão enviados convertidos para VARCHAR(4000)  
  Também é possível alterar o valor de um campo através das Stored procedures:  
  EVP_SET_CAMPO_DTA(P_IDSESSAO, 'NOMECAMPO', VALOR) -- VALOR DEVE SER UMA DATA  
  EVP_SET_CAMPO_INT(P_IDSESSAO, 'NOMECAMPO', VALOR) -- VALOR DEVE SER UM NÚMERO INTEIRO  
  EVP_SET_CAMPO_DEC(P_IDSESSAO, 'NOMECAMPO', VALOR) -- VALOR DEVE SER UM NÚMERO DECIMAL  
  EVP_SET_CAMPO_TEXTO(P_IDSESSAO, 'NOMECAMPO', VALOR) -- VALOR DEVE SER UM TEXTO  
 ********************************************************************************/  
     IF P_TIPOEVENTO = BEFORE_INSERT THEN  
       V_CODTIPOPER := EVP_GET_CAMPO_INT(P_IDSESSAO, 'CODTIPOPER');  
       SELECT COUNT(*) INTO V_COUNT FROM AD_TGFNATTOPPAD WHERE CODTIPOPER = V_CODTIPOPER;  
       IF V_COUNT > 0 THEN  
         SELECT CODNAT,CODTIPOPER INTO V_CODNAT,V_CODTOP FROM AD_TGFNATTOPPAD WHERE CODTIPOPER = V_CODTIPOPER;  
         IF V_CODTIPOPER = V_CODTOP THEN  
           EVP_SET_CAMPO_INT(P_IDSESSAO, 'CODNAT', V_CODNAT);  
         ELSE  
           RETURN;  
         END IF;  
       ELSE  
         RETURN;  
       END IF;  
     END IF;  
 END;  
 /  

Nenhum comentário:

Postar um comentário