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.


