Abrir a Tela de Alterar Pedido de Venda via Código Fonte

No artigo de hoje, vamos demonstrar em como acionar a MATA410, abrindo a tela de alterar pedido de venda, direto via código fonte.

 

Recentemente, um cliente pediu uma demanda, onde tinha uma tela customizada com uma tabela temporária, e ao pressionar um botão, que já fosse aberto a tela do pedido de venda com a opção de alterar.

 

Pensando nisso, conseguimos montar de uma forma, para acionar diretamente a MATA410. O que acontece, é que é possível, através de três coisas:

  1. O pedido de venda estar posicionado na SC5
  2. As variáveis internas do Protheus INCLUI e ALTERA precisam estar definidas como .F. e .T. respectivamente
  3. Acionar a função MATA410, e informar no 5º parâmetro, o texto “a410Altera”

 

Então para montagem desse artigo de exemplo, montamos um pequeno fonte para demonstrar em como fazer. Ao abrir o fonte, é exibido uma tela para informar o número do pedido:

Tela para informar o número do pedido

Tela para informar o número do pedido

 

Se o campo C5_NOTA tiver conteúdo (pedido já foi faturado ou eliminado resíduo), ele vai exibir uma mensagem que não é possível alterar:

Mensagem se já estiver faturado

Mensagem se já estiver faturado

 

Do contrário, se tiver tudo ok, ai já vai abrir a tela de alteração do pedido de venda:

Tela de alteração do pedido de venda

Tela de alteração do pedido de venda

 

Abaixo o código fonte desenvolvido conforme a lógica acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} zAltPed
Função que aciona a alteração de um pedido de venda
@type user function
@author Atilio
@since 08/01/2025
@version version
/*/

User Function zAltPed()
    Local aArea   := FWGetArea()
    Local cPedido := ""

    //Busca o pedido a ser alterado (aqui você pode buscar de outra forma sem ser pela FWInputBox, tipo o resultado de uma query)
    cPedido := FWInputBox("Informe um número de pedido de venda (C5_NUM):")

    //Transforma o conteúdo conforme o tamanho do campo no dicionário
    cPedido := AvKey(cPedido, "C5_NUM")

    //Tenta posicionar no pedido
    DbSelectArea("SC5")
    SC5->(DbSetOrder(1)) // C5_FILIAL + C5_NUM
    If SC5->( MsSeek(FWxFilial("SC5") + cPedido) )
    
        //Se já tiver nota
        If ! Empty(SC5->C5_NOTA)
            FWAlertError("Pedido já faturado!", "Atenção")

        //Senão, aciona a alteração do pedido
        Else
            INCLUI := .F.
            ALTERA := .T.
            MATA410(Nil, Nil, Nil, Nil, "a410Altera")
        EndIf
    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