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.