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:
- O pedido de venda estar posicionado na SC5
- As variáveis internas do Protheus INCLUI e ALTERA precisam estar definidas como .F. e .T. respectivamente
- 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:
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:
Do contrário, se tiver tudo ok, ai já vai abrir a 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.