FAAAAALA PESSOAL!!!
Tudo bom?!
O artigo de hoje será uma dica rápida.
Irei mostrar um macete muito interessante na hora de fazer uma consulta nos lançamentos contábeis (CT2) . Caso tenha que analisar o campo histórico do lançamento contábil, observe a dica que deixo abaixo: (vale lembrar que este campo é quebrado em diversos registros, quando ultrapassa o limite do campo de histórico)
A grande vantagem de utilizar esta técnica é possibilitar a concatenação dos históricos contábeis em um único campo. Este método possibilita buscas rápidas, uma vez que será criada uma função diretamente no banco de dados.
Observação: este tutorial representa procedimentos para serem utilizados com banco de dados SQL Server, posteriormente, criaremos uma versão para Oracle e demais bancos, qualquer dúvida, deixe um comentário.
A seguir, confira o passo-a-passo de como criar e utilizar esta facilidade:
Passo-a-Passo para criação da Função para concatenar
Passo 1:
O primeiro passo consiste em abrir o programa SQL Management (SSMS.EXE), através deste aplicativo que criaremos uma função em nosso banco de dados;
Passo 2:
Agora que já estamos dentro do SQL Management Studio, podemos nos conectar ao banco ao qual desejamos criar a funcionalidade.
Passo 3:
Clique com o botão direito sobre o banco ao qual deseja utilizar, navegue até a opção “Nova Consulta” e clique, esta ação irá abrir uma janela que permite a realização de consultas. Através desta janela, iremos realizar a criação da nossa função.
Observação:
Antes de criarmos a função, veja como é criada na tabela CT2 e exibida uma consulta de um determinado lançamento que possui um histórico relativamente comprido:
Note que para o lançamento de CRÉDITO há duas linhas de registros na tabela, enquanto que para as informações do DÉBITO existem quatro.
O indicativo de Crédito é o campo CT2_DC=’2′, onde o campo histórico inicia, a continuação do histórico sempre é gravada no registro CT2_DC=’4′ que vem na sequência, o mesmo ocorer para o Débito (CT2_DC=’1′).
Passo 4:
Para criar a função executa a sequência de Códigos explicada abaixo:
Observação: No exemplo, utilizei o nome da função como ‘RetCT2Conc’, entretanto, utilize o nome que desejar, lembrando de alterar na chamada no momento de realizar a consulta, posteriormente. Note também que está sendo considera apenas TPSALD=’1′, manipule conforme a sua necessidade.
Create Function fnc_RetCT2Conc(@FILIAL varchar(2), @DT varchar(8), @LOTE varchar(6), @SBLOTE varchar(3), @DOC varchar(6),@SEQLAN varchar(3),@SEQUEN varchar(10)) returns VarChar(400) as Begin Declare @rchave VarChar(400) = '' Select @rchave = LTRIM(RTRIM(CT2_HIST)) + @rchave From CT2990 Where CT2_FILIAL = @FILIAL AND CT2_DATA = @DT AND CT2_LOTE = @LOTE AND CT2_SBLOTE = @SBLOTE AND CT2_DOC = @DOC AND CT2_SEQLAN = @SEQLAN and CT2_SEQUEN = @SEQUEN AND CT2_DC IN ('1','2','3','4') AND CT2_TPSALD = '1' AND D_E_L_E_T_ = '' ORDER BY CT2_SEQHIS DESC Return @rchave End
Passo 5:
Uma vez que função foi criada com sucesso e obteve a mensagem conforme o print (Comando(s) concluído(s) com êxito.), devemos utilizar esta função para melhorar a nossa consulta conforme o exemplo abaixo:
–Utilização no Select
SELECT CT2_FILIAL, CT2_DOC, CT2_SEQUEN, CT2_SEQLAN,CT2_LOTE, CT2_SBLOTE, CT2_LINHA, CT2_DATA, CT2_DC, CT2_DEBITO, CT2_CREDIT, CT2_VALOR, CT2_HIST, --, * CT2_HIST1 = dbo.fnc_RetCT2Conc(CT2_FILIAL, CT2_DATA, CT2_LOTE, CT2_SBLOTE, CT2_DOC, CT2_SEQLAN, CT2_SEQUEN ) FROM CT2990 WHERE CT2_FILIAL ='01' AND CT2_DATA ='20151211' AND CT2_LOTE ='008850' AND CT2_DOC = '000002' AND CT2_DC IN ('1','2','3') AND D_E_L_E_T_<>'*' group by CT2_FILIAL, CT2_DOC, CT2_SEQUEN, CT2_SEQLAN,CT2_LOTE, CT2_SBLOTE, CT2_LINHA, CT2_DATA, CT2_DC, CT2_DEBITO, CT2_CREDIT, CT2_VALOR, CT2_HIST ORDER BY CT2_DATA, CT2_LOTE, CT2_SBLOTE, CT2_DOC, CT2_LINHA
Nota:
Observe que no resultado é possível visualizar ambas as colunas, o retorno da coluna padrão CT2_HIST e o retorno da função que criamos, onde houve a concatenação e apenas uma linha. Também, note que na consulta que realizamos EXCLUÍMOS os lançamentos do tipo CT2_DC=’4′, uma vez que este será concatenado nos lançamentos onde o campo CT2_DC for ‘1’, ‘2’ ou ‘3’.
Complemento:
- Esta funcionalidade poderá ser utilizada normalmente em seus programas AdvPL;
- Caso necessite remover a função que foi criada, execute a função demonstrada a seguir:
–Substitua o “fnc_RetCT2Conc” pela nome da função que criou, no meu exemplo, criei a função com este nome.
--Dropar a Função DROP function dbo.fnc_RetCT2Conc
Pessoal, caso tenha alguma dúvida, sugestão ou crítica, por favor, não exite em nos enviar uma mensagem. Ficaremos feliz em recebê-la e, certamente, retornaremos o mais breve possível.
Muito obrigado e boa sorte.