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
Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

4 Responses

  1. Rone disse:

    Parabéns Dan, ótimo material muito bom.

  2. Edivaldo Duque de Souza disse:

    Excelente!

Deixe uma resposta