No artigo de hoje, vamos demonstrar em como criar uma aba e incluir campos customizados na tela de pré nota de entrada.
Alguns alunos, estavam nos perguntando se teria como manipular a tela de pré nota, igual fizemos com a de documento de entrada, nesse artigo: https://terminaldeinformacao.com/2021/08/02/como-inserir-campos-customizados-na-tela-de-documento-de-entrada/
Pensando nisso, montamos esse exemplo, onde a lógica é a seguinte:
- É usado os pontos de entrada MA140BUT (para carregar o Outras Ações da tela de manutenção dos registros) e o SF1140I para incluir os dados na tabela
- Dentro do primeiro p.e. é usado a função GetWndDefault para buscar todos os objetos na tela
- É feito um laço de repetição procurando por algum que seja “TFOLDER”
- Se encontrar, ai cria uma nova aba, e dentro dela cria o campo colocando um SAY e e um MSGET
- Nisso no outro ponto de entrada, é validado se a variável com o conteúdo do campo existe, e se sim, grava o conteúdo dela
Abaixo então um print do resultado:
E abaixo o código fonte conforme a lógica acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function MA140BUT
P.E. para adicionar opções dentro da tela de manipulação da Pré Nota
@type Function
@author Atilio
@since 11/06/2025
@version version
@see https://tdn.totvs.com/pages/releaseview.action?pageId=6085354
/*/
User Function MA140BUT()
Local aArea := FWGetArea()
Local lEdit
Local nAba
Local oCampo
Local nAtual
Local lEncontrou := .F.
Local oFolder
Public __cCamNovo := ""
//Busca a tela e os objetos dentro dela
Private nAtuPvt
Private oPai := GetWndDefault()
Private aControles := oPai:aControls
//Percorre todos os objetos da tela
For nAtual := 1 To Len(aControles)
nAtuPvt := nAtual
//Se for um Objeto, e for TFolderfor aba de uma TFolder e o título for Notas Fiscais, busca a dialog vinculada
If Type("aControles[nAtuPvt]") == "O" .And. Upper(GetClassName(aControles[nAtuPvt])) == "TFOLDER"
oFolder := aControles[nAtuPvt]
lEncontrou := .T.
Exit
EndIf
Next
//Se encontrou
If lEncontrou
//Adiciona uma nova aba
oFolder:AddItem("* Customizados", .T.)
nAba := Len(oFolder:aDialogs)
//Se for inclusão, irá criar a variável e será editável, senão irá buscar do banco e não será editável
If INCLUI
__cCamNovo := CriaVar("F1_X_CAMPO",.F.)
lEdit := .T.
Else
__cCamNovo := SF1->F1_X_CAMPO
lEdit := .F.
EndIf
//Criando na janela o campo OBS
@ 003, 003 SAY Alltrim(RetTitle("F1_X_CAMPO")) OF oFolder:aDialogs[nAba] PIXEL SIZE 050,006
@ 001, 053 MSGET oCampo VAR __cCamNovo SIZE 100, 006 OF oFolder:aDialogs[nAba] COLORS 0, 16777215 PIXEL
oCampo:bHelp := {|| ShowHelpCpo( "F1_X_CAMPO", {GetHlpSoluc("F1_X_CAMPO")[1]}, 5 )}
//Se não houver edição, desabilita os gets
If ! lEdit
oCampo:lActive := .F.
EndIf
EndIf
FWRestArea(aArea)
Return Nil
/*/{Protheus.doc} User Function SF1140I
P.E. após inclusão da SF1 na Pré Nota
@type Function
@author Atilio
@since 11/06/2025
@version version
@see https://tdn.totvs.com/pages/releaseview.action?pageId=6085617
/*/
User Function SF1140I()
Local aArea := FWGetArea()
//Se a variável pública existir
If Type("__cCamNovo") != "U"
//Grava o conteúdo na SF1
RecLock("SF1", .F.)
SF1->F1_X_CAMPO := __cCamNovo
SF1->(MsUnlock())
EndIf
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
