Como adicionar campos no cabeçalho do Pedido de Compra

Olá pessoal…

Hoje vou mostrar como adicionar um campo no cabeçalho da tela do Pedido de Compra no AdvPL usando pontos de entrada.

Apesar de eu já ter postado isso no Guia de Referências, muitas pessoas me perguntam no Skype como fazer, decidi então montar essa postagem auxiliando.

Quem me ajudou a fazer a postagem foi meu amigo Rafael Almeida, um salve ai Rafinha.

Serão necessários 2 pontos de entrada, o MT120TEL (para criar o get na tela), e o MTA120G2 (para gravar o conteúdo). No ponto de entrada da tela, é necessário definir o conteúdo como Public, para que no outro Ponto de Entrada seja visto esse valor.

Abaixo um print do resultado.

Campo no cabeçalho do Pedido de Compra

Campo no cabeçalho do Pedido de Compra

Abaixo o código fonte desenvolvido.

//Bibliotecas
#Include "Protheus.ch"
 
 /*--------------------------------------------------------------------------------------------------------------*
 | P.E.:  MT120TEL                                                                                              |
 | Desc:  Ponto de Entrada para adicionar campos no cabeçalho do pedido de compra                               |
 | Link:  http://tdn.totvs.com/display/public/mp/MT120TEL                                                       |
 *--------------------------------------------------------------------------------------------------------------*/

User Function MT120TEL()
	Local aArea     := GetArea()
	Local oDlg      := PARAMIXB[1] 
	Local aPosGet   := PARAMIXB[2]
	Local nOpcx     := PARAMIXB[4]
	Local nRecPC    := PARAMIXB[5]
	Local lEdit     := IIF(nOpcx == 3 .Or. nOpcx == 4 .Or. nOpcx ==  9, .T., .F.) //Somente será editável, na Inclusão, Alteração e Cópia
	Local oXObsAux
	Public cXObsAux := ""

	//Define o conteúdo para os campos
	SC7->(DbGoTo(nRecPC))
	If nOpcx == 3
		cXObsAux := CriaVar("C7_OBS",.F.)
	Else
		cXObsAux := SC7->C7_OBS
	EndIf

	//Criando na janela o campo OBS
	@ 062, aPosGet[1,08] - 012 SAY Alltrim(RetTitle("C7_OBS")) OF oDlg PIXEL SIZE 050,006
	@ 061, aPosGet[1,09] - 006 MSGET oXObsAux VAR cXObsAux SIZE 100, 006 OF oDlg COLORS 0, 16777215  PIXEL
	oXObsAux:bHelp := {|| ShowHelpCpo( "C7_OBS", {GetHlpSoluc("C7_OBS")[1]}, 5  )}

	//Se não houver edição, desabilita os gets
	If !lEdit
		oXObsAux:lActive := .F.
	EndIf

	RestArea(aArea)
Return
 
/*--------------------------------------------------------------------------------------------------------------*
 | P.E.:  MTA120G2                                                                                              |
 | Desc:  Ponto de Entrada para gravar informações no pedido de compra a cada item (usado junto com MT120TEL)   |
 | Link:  http://tdn.totvs.com/pages/releaseview.action?pageId=6085572                                          |
 *--------------------------------------------------------------------------------------------------------------*/
 
User Function MTA120G2()
	Local aArea := GetArea()

	//Atualiza a descrição, com a variável pública criada no ponto de entrada MT120TEL
	SC7->C7_OBS := cXObsAux

	RestArea(aArea)
Return

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

27 Responses

  1. Valeu meu querido DaniBoy!
    Precisando, sabe que pode contar comigo sempre 🙂

  2. Marcos disse:

    Caramba, procurei muito essa informação, como não tinha encontrado, acabei me virando com os PE MT120TEL, MT120FOL e MTA120G2. Esses criam uma folder nova na tela.

  3. Don Junior disse:

    Parabéns… ótima dica!

    Reparei que você utilizou a função RetTitle(), essa não conhecia!

    Vlw!

  4. Marte Lins disse:

    No meu caso gostava de adicionar “descrição da razão social do fornecedor” no modulo Compras em Documento de Entrada.
    alguém saberia o caminho ?

    • Dan_Atilio disse:

      Bom dia Marte.
      No Documento de Entrada acho um pouco mais complicado que no Pedido de Compras, por não ter um p.e. específico para isso.
      Infelizmente não possuo exemplos.
      Um grande abraço jovem.

  5. Fabio Baggio disse:

    Aoba

    Grande Atilio.

    Me ajudou muito.

    Muito obrigado meu amigo

  6. Marcos disse:

    Dan, você sabe dizer se tem como abaixar mais o Acols do pedido de compras. Eu fiz o campo de observaçoes igual voce mencionou e agora o usuario quer colocar mais um campo, mas se incluo mais um campo o ele é cortado pelo aCols. Estava precisando descer mais o Acols.
    Abs

    • Dan_Atilio disse:

      Bom dia Marcos, tudo bem?
      Olha jovem, acho que não tem como mexer no tamanho do aCols do Pedido de Compras, pois na verdade, você teria que manipular o GetDados / MsNewGetDados, e não sei se tem algum p.e. que possa fazer isso.
      Tente incluir um campo na frente da filial para entrega, talvez caiba ali, ou abra um chamado na TOTVS questionando se existe algum p.e. para alterar o tamanho dos objetos dessa tela.
      Um grande abraço.

  7. GERSON LUIS INACIO DA LUZ disse:

    Olá amigo!
    Eu consigo escolher a ordem que eu quero colocar o campo?
    Por exemplo eu quero colocar ele depois da condição de pagamento.

  8. GILBERTO GUARIERO disse:

    Alguma dica se quiser incluir um campo MEMO?

  9. GILBERTO GUARIERO disse:

    Tem alguma dica se o campo for tipo MEMO?

  10. gerfeson diego disse:

    boa tarde !
    é possível gatilhar o campo ? se sim como seria?

    • Dan_Atilio disse:

      Bom dia, sim é possível.
      Na criação do get, coloque um valid, por exemplo, VALID u_zSeuGatilho()
      Ai na user function zSeuGatilho, você atualiza outros campos e informações.
      Grande abraço.

  11. Boa tarde, estou usando o MT120FOL para criar dois campos no folder do rodapé, agora estou tentando achar uma maneira de atualizar a informação dos campos criados de acordo com a atualização do valor do pedido. Por acaso já fizeram algo parecido.

    • Dan_Atilio disse:

      Bom dia Rodolfo.
      No caso, para você atualizar o valor em tempo de execução, é necessário disparar alguma coisa, e pode ser um gatilho ou o valid da linha (via p.e.), ai tanto um quanto o outro, o ideal é fazer uma user function que percorra os itens e atualize os seus gets no rodapé.

  12. Renan disse:

    Atilio tudo bem? Apos compilar o fonte eu seleciona o opção, salvo o pedido mas ele só grava no banco a primeira combo box. Sabe oq posso estar fazendo errado? Você teria um grupo de ajuda no Whats e gostaria de saber seu contato para os cursos?

  13. João disse:

    Bom dia Dan, muito bomm !!

    Estão me pedindo para colocar um campo do usuário que incluiu o pedido de compra ali, é mais ou menos por ae ?
    Porque no SC1 tem o c1_solicit, da pra tentar puxar direto ali ?

    Abraço

  14. RILDO OLIVEIRA disse:

    Valeu, Dan!
    Sempre salvando.

Deixe uma resposta