No artigo de hoje, nós vamos demonstrar em como preencher o peso, volume e espécie no Pedido de Venda via ponto de entrada.
Quando precisamos enviar o peso e volume para uma nota no Protheus, uma alternativa é preencher no pedido de venda, que ao faturar, ele levará as informações e depois irá para o XML e Danfe.
Acontece que, imagina um pedido com 50 itens, e o usuário tendo que fazer as contas na mão, a chance de acontecer algum equívoco é grande.
Pensando nisso, uma forma de automatizar esse processo é:
- Usar o ponto de entrada MT410TOK, que é ao clicar no botão confirmar do pedido de venda
- Percorrer as linhas digitadas na grid
- Pegar a Quantidade Vendida e o Código do Produto
- Posicionar na SB1, para pegar o peso bruto e líquido no cadastro
- Preencher o volume, peso liquido e peso bruto
- Se a unidade de medida for CX, será CAIXAS, senão será PACOTES
- Gravar essas informações na SC5
Abaixo segue o fonte conforme a lógica descrita acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function MT410TOK
Ponto de entrada na validação do Pedido de Venda ao clicar no botão confirmar
@type Function
@author Atilio
@since 22/09/2025
@return lRet, Lógico, Retorna .T. se irá continuar ou .F. se irá barrar
@see https://tdn.totvs.com/pages/releaseview.action?pageId=6784353
/*/
User Function MT410TOK()
Local aArea := FWGetArea()
Local lRet := .T.
Local nLinha := 0
Local nPosProd := GDFieldPos("C6_PRODUTO")
Local nPosQtde := GDFieldPos("C6_QTDVEN")
Local cProduto := ""
Local nQtdVenda := 0
Local nPesoBruto := 0
Local nPesoLiqui := 0
//Local nOpc := PARAMIXB[1]
DbSelectArea("SB1")
SB1->(DbSetOrder(1)) // B1_FILIAL + B1_COD
//Zerando informações do cabeçalho
M->C5_VOLUME1 := 0
M->C5_PBRUTO := 0
M->C5_PESOL := 0
M->C5_ESPECI1 := ""
//Percorrendo as linhas do browse
For nLinha := 1 To Len(aCols)
//Se a linha não tiver apagada
If ! GDDeleted(nLinha)
//Pega o produto e a quantidade
cProduto := aCols[nLinha][nPosProd]
nQtdVenda := aCols[nLinha][nPosQtde]
//Se conseguir posicionar no produto
If SB1->(MsSeek(FWxFilial("SB1") + cProduto))
//Calcula o peso bruto, conforme o que foi vendido vezes o que esta no cadastro
nPesoBruto := nQtdVenda * SB1->B1_PESBRU
nPesoLiqui := nQtdVenda * SB1->B1_PESO
//Incrementa as informações no cabeçalho do pedido
M->C5_VOLUME1 += nQtdVenda
M->C5_PBRUTO += nPesoBruto
M->C5_PESOL += nPesoLiqui
//Se não teve espécie ainda preenchida
If Empty(M->C5_ESPECI1)
//Se for CX, é caixas
If SB1->B1_UM == "CX"
M->C5_ESPECI1 := "CAIXAS"
//Senão, (PT, UN, KG), será pacotes
Else
M->C5_ESPECI1 := "PACOTES"
EndIf
EndIf
EndIf
EndIf
Next
FWRestArea(aArea)
Return lRet
Bom pessoal, por hoje é só.
Abraços e até a próxima.