Como inserir campos customizados na tela de Pré Nota

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:

  1. É 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
  2. Dentro do primeiro p.e. é usado a função GetWndDefault para buscar todos os objetos na tela
  3. É feito um laço de repetição procurando por algum que seja “TFOLDER”
  4. Se encontrar, ai cria uma nova aba, e dentro dela cria o campo colocando um SAY e e um MSGET
  5. 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:

Tela com campo adicionado

Tela com campo adicionado

 

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.

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