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.