Adicionar coluna na tela de consulta de Kardex Diário

No artigo de hoje, vamos demonstrar em como criar uma coluna com a observação da TES na tela de Kardex Diário (MATC030) através de pontos de entrada.

O intuito dessa alteração, é exibir uma observação dependendo da tabela SF4 (TES) ou da SF5 (TM).

 

Então foram usados 3 pontos de entrada, sendo:

  1. MC030IDE: Para incluir a coluna nova no momento da criação da tabela temporária
  2. MC030GRV: Para gravação dos campos F5_TEXTO (quando for TM) ou F4_TEXTO / F4_FINALID (quando for TES)
  3. MC030PRJ: Para manipular o aHeader e aCols da tela para exibir informações dessa coluna nova que foi criada na temporária

 

Abaixo então, um print de como ficou a tela:

Exemplo da tela do Kardex com a coluna nova

Exemplo da tela do Kardex com a coluna nova

 

E abaixo o código fonte utilizado com os pontos de entrada descritos mais acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} MC030IDE
Adiciona campos na tabela temporária usada na tela de consulta kardex (MATC030)
@type user function
@author Atilio
@since 31/01/2025
@version version
@return aStru, Array, Estrutura com os campos que serão criados na temporária
@see https://tdn.totvs.com/display/public/PROT/MC030IDE+-+Customiza+a+estrutura+do+arquivo
/*/

User Function MC030IDE()
	Local aArea := FWGetArea()
    Local aStru := ParamIxb[1]

	//Adiciona na tabela temporária da tela um novo campo com tamanho de 50 caracteres
	aAdd(aStru, {"TESOBS", "C", 50, 0})

	FWRestArea(aArea)
Return aStru

/*/{Protheus.doc} MC030GRV
Grava informações na tabela temporária usada na tela de consulta kardex (MATC030)
@type user function
@author Atilio
@since 31/01/2025
@version version
@see https://tdn.totvs.com/pages/releaseview.action?pageId=6087667
/*/

User Function MC030GRV()
    Local aArea      := FWGetArea()
    Local cAliasKdx  := ParamIxb[1]
    Local aDados     := ParamIxb[3]
    Local cCfop      := aDados[3]
    Local cTes       := aDados[2]
	Local nTamCfop   := Len(Alltrim(cCfop))

	//Se tiver apenas 3 caracteres na CFOP e não começar com número (exemplo, PR0, DE0, RE0, etc), vai pegar da tabela de TM (Tipos de Movimento)
	If nTamCfop == 3 .And. ! IsNumeric(Left(cCfop, 1))
		DbSelectArea("SF5")
		SF5->(DbSetOrder(1)) // F5_FILIAL + F5_CODIGO

		//Se conseguir posicionar na tabela de movimentos, atualiza o conteúdo na temporária
		If SF5->(MsSeek(FWxFilial("SF5") + Alltrim(cTes)))
			(cAliasKdx)->TESOBS := Alltrim(SF5->F5_TEXTO)
		EndIf

	//Senão, vai pegar da tabela de TES (Tipos de Entrada e Saída)
	Else
		DbSelectArea("SF4")
		SF4->(DbSetOrder(1)) // F4_FILIAL + F4_CODIGO

		//Se conseguir posicionar na tabela de TES, atualiza o conteúdo na temporária
		If SF4->(MsSeek(FWxFilial("SF4") + Alltrim(cTes)))
			(cAliasKdx)->TESOBS := Iif(! Empty(SF4->F4_FINALID), SF4->F4_FINALID, SF4->F4_TEXTO)
		EndIf
	EndIf

    FWRestArea(aArea)
Return

/*/{Protheus.doc} MC030PRJ
Altera o conteúdo do aHeader (Cabeçalho) ou o aCols (linhas) da grid na tela de consulta kardex (MATC030)
@type user function
@author Atilio
@since 31/01/2025
@version version
@return aDados, Array, Array com a posição 1 sendo o aHeader e a posição 2 sendo o aCols
@see https://tdn.totvs.com/display/public/PROT/MC030PRJ+-+Manipula+os+campos+do+aHeader
/*/

User Function MC030PRJ()
	Local aArea      := FWGetArea()
	Local cAliasKdx  := ParamIxb[1]
    Local aHeaderPrj := ParamIxb[2]
    Local aColsPrj   := ParamIxb[3]
	Local nColObserv := aScan(aHeaderPrj, {|x| Alltrim(x[2]) == "TESOBS"})

	//Se a coluna de observação da TES não existir ainda nas definições do cabeçalho
	If nColObserv == 0
    	aAdd(aHeaderPrj, {'Observação TES', 'TESOBS', '', 50, 0, , .T., 'C', '', ''})
	EndIf

	//Se o aCols ainda não tem o tamanho do aHeader, adiciona a posição nova
	If Len(aColsPrj) < Len(aHeaderPrj)
		aAdd(aColsPrj, (cAliasKdx)->TESOBS)

	//Senão, se a posição já existir, apenas atualiza ela
	Else
		aColsPrj[nColObserv] := (cAliasKdx)->TESOBS
	EndIf

	FWRestArea(aArea)
Return {aHeaderPrj, aColsPrj}

 

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação