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:
- MC030IDE: Para incluir a coluna nova no momento da criação da tabela temporária
- MC030GRV: Para gravação dos campos F5_TEXTO (quando for TM) ou F4_TEXTO / F4_FINALID (quando for TES)
- 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:
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.
