Como ficou a reestruturação da tabela SE5 nas tabelas FK*?

Salve salve pessoal…

Trago para vocês hoje, uma exemplificação da Restruturação da SE5 na família de tabelas FK* no Protheus 12.

Para quem conhece o Protheus, sabe que a tabela SE5, de Movimentos Financeiros, era a representação do Labírinto do Minotauro, só que sem saída rs. Acontece que para normatizar e melhorar o sistema, eles separaram a tabela SE5, em 11 tabelas menores da FK1 à FKB, conforme imagem abaixo.

Lista de tabelas FK

Lista de tabelas FK

Dessa forma, separaram as tabelas para melhorar a identificação dos registros, por exemplo, ai baixar um título a receber, gera uma FK1, e as FK* auxiliares.

Representação do Baixas a Receber

Representação do Baixas a Receber

No caso de baixar um título a pagar, gera uma FK2, e as FK* auxiliares.

Representação do Baixas a Pagar

Representação do Baixas a Pagar

E se for feito um movimento bancário, gera uma FK5, e as FK* auxiliares.

Representação do Movimento Bancário

Representação do Movimento Bancário

A nível de sistema, ficou mais organizado dessa forma, porém para dar manutenção, ou encontrar algo, se tornou mais trabalhoso, pensando nisso, montei uma cláusula SQL para identificar os dados de uma baixa a pagar e de uma baixa a receber.

Abaixo o código da baixa a pagar.

SELECT 
	SE5.R_E_C_N_O_  AS SE5REC,
	FK2.R_E_C_N_O_  AS FK2REC,
	FK7.R_E_C_N_O_  AS FK7REC,
	FKA.R_E_C_N_O_  AS FKAREC,
	FKA2.R_E_C_N_O_ AS FKA2REC
FROM 
	SE5010 SE5
	LEFT JOIN FK2010 FK2 ON (
		FK2_FILIAL = '01'
		AND FK2_IDFK2 = E5_IDORIG
		AND FK2.D_E_L_E_T_ = ' '
	)
	LEFT JOIN FK7010 FK7 ON (
		FK7_FILIAL = '01'
		AND FK7_IDDOC = FK2_IDDOC
		AND FK7.D_E_L_E_T_ = ' '
	)
	LEFT JOIN FKA010 FKA ON (
		FKA.FKA_FILIAL = '01'
		AND FKA.FKA_IDORIG = E5_IDORIG
		AND FKA.FKA_TABORI = 'FK2'
		AND FKA.D_E_L_E_T_ = ' '
	)
	LEFT JOIN FKA010 FKA2 ON (
		FKA2.FKA_FILIAL = '01'
		AND FKA2.FKA_IDPROC = FKA.FKA_IDPROC
		AND FKA2.FKA_TABORI = 'FK5'
		AND FKA2.D_E_L_E_T_ = ' '
	)
	LEFT JOIN FK5010 FK5 ON (
		FK5_FILIAL = '01'
		AND FK5_IDMOV = FKA2.FKA_IDORIG
		AND FK5.D_E_L_E_T_ = ' '
	)
WHERE 
	E5_FILIAL = '01'
	AND E5_NUMERO = '000000058' 
	AND E5_PREFIXO = '3' 
	AND SE5.D_E_L_E_T_ = ' '

Abaixo o código da baixa a receber.

SELECT 
	SE5.R_E_C_N_O_  AS SE5REC,
	FK1.R_E_C_N_O_  AS FK1REC,
	FK7.R_E_C_N_O_  AS FK7REC,
	FKA.R_E_C_N_O_  AS FKAREC,
	FKA2.R_E_C_N_O_ AS FKA2REC
FROM 
	SE5010 SE5
	LEFT JOIN FK1010 FK1 ON (
		FK1_FILIAL = '01'
		AND FK1_IDFK1 = E5_IDORIG
		AND FK1.D_E_L_E_T_ = ' '
	)
	LEFT JOIN FK7010 FK7 ON (
		FK7_FILIAL = '01'
		AND FK7_IDDOC = FK1_IDDOC
		AND FK7.D_E_L_E_T_ = ' '
	)
	LEFT JOIN FKA010 FKA ON (
		FKA.FKA_FILIAL = '01'
		AND FKA.FKA_IDORIG = E5_IDORIG
		AND FKA.FKA_TABORI = 'FK1'
		AND FKA.D_E_L_E_T_ = ' '
	)
	LEFT JOIN FKA010 FKA2 ON (
		FKA2.FKA_FILIAL = '01'
		AND FKA2.FKA_IDPROC = FKA.FKA_IDPROC
		AND FKA2.FKA_TABORI = 'FK5'
		AND FKA2.D_E_L_E_T_ = ' '
	)
	LEFT JOIN FK5010 FK5 ON (
		FK5_FILIAL = '01'
		AND FK5_IDMOV = FKA2.FKA_IDORIG
		AND FK5.D_E_L_E_T_ = ' '
	)
WHERE 
	E5_FILIAL = '01'
	AND E5_NUMERO = '000133613' 
	AND E5_PREFIXO = '3' 
	AND SE5.D_E_L_E_T_ = ' '

Caso tenha interesse, abaixo uma representação dos campos para comparação do processo de baixas a pagar.

Campos - Títulos a Pagar

Campos – Títulos a Pagar

Abaixo uma do baixas a receber.

Campos - Títulos a Receber

Campos – Títulos a Receber

E por último, uma de movimentação bancária.

Campos - Movimento Bancário

Campos – Movimento Bancário

Referências:
tdn.totvs.com

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

12 Responses

  1. Rone disse:

    Parabéns Dan, ótimo material muito bom.

  2. Edivaldo Duque de Souza disse:

    Excelente!

  3. Alex Neto disse:

    Dan_Atilio boa tarde,

    Estou tentando criar uma função para baixar titulos que são feitos em cartão de credito, porém para relalizar esse baixa preciso registrar na tabela SE5, porém existem campos que não entendo são eles:

    E5_LA
    E5_SITUACA
    E5_LOTE
    E5_MULTNAT
    E5_MOVFKS
    E5_IDORIG
    E5_TABORI

    Gostaria de saber em especial como gero esse codigo estremamente complexo presente no campo E5_IDORIG

    Desde já agradecido.

    Alex Neto

    • Dan_Atilio disse:

      Boa tarde Alex.
      Se você utilizar o conceito de ExecAuto (inclusive tem vídeo aula gratuita no nosso canal do YouTube), as rotinas padrões preenchem tudo isso de forma automática, e você não precisa se preocupar com nada.
      Grande abraço.

  4. Raphael Gomes Leal disse:

    Olá, bom dia!

    Ótima explicação, parabéns!
    Um dúvida, sabe dizer se em algum momento a SE5 não será mais usada?

  5. Edmilson disse:

    Boa noite!
    Preciso de um relatório que me traga o valor a receber, desconsiderando o que eu já fiz de compensação através de RA, contudo, as RA que eu ainda não compensei, precisa aparecer no relatório.
    Se alguém ajudar eu agradeço.

  6. Eduardo disse:

    Artigo muito útil, parabéns!

Deixe uma resposta