Você já precisou ajustar as tags de quantidade e unidade de medida diretamente no XML da nota fiscal do Protheus antes da transmissão?
Esse tipo de situação é mais comum do que parece, principalmente em empresas que trabalham com fatores de conversão específicos ou utilizam unidades diferentes das cadastradas no padrão do sistema.
Neste artigo, vamos mostrar como tratar esse cenário via ponto de entrada PE01NFESEFAZ, com um exemplo prático de código em ADVPL, que permite editar as informações dos produtos antes da geração do XML da nota.
Por que alterar a unidade e a quantidade no XML do Protheus?
Existem empresas que vendem em unidades comerciais diferentes da unidade padrão do produto.
Por exemplo: o item pode estar cadastrado com unidade principal MI (milheiro), mas o cliente prefere comprar por CX (caixa).
Se o sistema não estiver preparado para lidar com esse tipo de conversão, o XML da nota pode ser gerado com informações incorretas, causando erros na SEFAZ ou divergências fiscais.
Por isso, o ponto de entrada PE01NFESEFAZ é ideal para ajustar dinamicamente as tags antes do envio, garantindo que os dados estejam consistentes e aderentes à operação de cada cliente.
Como funciona a lógica do ponto de entrada PE01NFESEFAZ
A ideia aqui é simples, mas eficiente:
- Validar se a nota não é devolução e não utiliza fornecedor.
- Verificar no cadastro do cliente se ele prefere comprar por caixa em vez da unidade padrão.
- Percorrer o array de produtos do XML.
- Localizar o produto na tabela SB1.
- Pegar as informações de unidade secundária, fator de conversão e quantidade vendida.
- Realizar a conversão de unidade e quantidade conforme o tipo de cálculo (multiplicação ou divisão).
- Atualizar as posições do array que definem as tags de uCom, qCom, uTrib e qTrib antes de gerar o XML.
Exemplo prático: alterando unidade e quantidade do XML via ADVPL
Abaixo está o exemplo completo da função utilizada para alterar as informações no XML antes da transmissão da nota fiscal.
⚠️ Importante: o código é apenas um exemplo de customização. Sempre valide com seu time técnico antes de aplicar em ambiente produtivo.
User Function PE01NFESEFAZ()
Local aArea := FWGetArea()
Local aAreaSA1 := SA1->(FWGetArea())
Local aAreaSB1 := SB1->(FWGetArea())
Local aDados := PARAMIXB
Local cMsgAux := ""
Local cTipoRedes := ""
Local cQrySC5 := ""
Local aProd := aDados[01]
Local nProdAtu := 0
//Se não for devolução e nem usa fornecedor
If ! SF2->F2_TIPO $ "B;D;"
//Posiciona no cliente
DbSelectArea("SA1")
SA1->(DbSetOrder(1))
If SA1->(MsSeek(FWxFilial("SA1") + SF2->F2_CLIENTE + SF2->F2_LOJA))
//Somente se o cliente for por caixa, irá converter
If SA1->A1_X_UM == "C"
//Percorre os produtos
For nProdAtu := 1 To Len(aProd)
//Pega o código do produto na tag
cXCodProd := aProd[nProdAtu][02]
//Abre a tabela de produtos
DbSelectArea("SB1")
SB1->(DbSetOrder(1))
//Se conseguiu posicionar no produto e a unidade for Milheiro e a segunda for Caixa
If SB1->(MsSeek(FWxFilial("SB1") + cXCodProd)) .And. SB1->B1_UM == "MI" .And. SB1->B1_SEGUM == "CX"
//Pega a unidade de conversão, o valor de conversão, a quantidade vendida e o tipo de conversão
cXUmDipi := SB1->B1_SEGUM //B5_UMDIPI
nXConvDip := SB1->B1_X_QTDCX //B5_CONVDIP
nXQuantid := aProd[nProdAtu][09]
cXTipoConv := SB1->B1_TIPCONV
//Se tiver valor de conversão
If nXConvDip != 0
//Altera a unidade para a convertida
cUnTrib := cXUmDipi
//Faz a conversão se for multiplicação / divisão
If cXTipoConv == "M"
nQtdTrib := nXConvDip * nXQuantid
Else
nQtdTrib := nXQuantid / nXConvDip
EndIf
//Altera as posições do produto antes de gerar o XML
aProd[nProdAtu][08] := cUnTrib //uCom
aProd[nProdAtu][09] := nQtdTrib //qCom
aProd[nProdAtu][11] := cUnTrib //uTrib
aProd[nProdAtu][12] := nQtdTrib //qTrib
EndIf
EndIf
Next
EndIf
EndIf
EndIf
FWRestArea(aAreaSB1)
FWRestArea(aAreaSA1)
FWRestArea(aArea)
Return aDados
Observações importantes
O processo acima mostra como personalizar a geração do XML da NFe, alterando as tags uCom, qCom, uTrib e qTrib antes do envio à SEFAZ.
Entretanto, vale lembrar que o Protheus já possui um recurso padrão para trabalhar com segunda unidade de medida, que pode ser utilizado em muitos casos sem necessidade de customização.
Para entender melhor esse recurso, confira a documentação oficial da TOTVS:
👉 Como gerar Segunda unidade de medida no XML
Quando usar essa customização?
Esse tipo de desenvolvimento é recomendado quando:
- A empresa usa conversões próprias não contempladas no padrão do Protheus.
- Há regras específicas de clientes que exigem unidades diferentes no XML.
- O negócio precisa de flexibilidade fiscal sem alterar cadastros padrão.
A customização via ponto de entrada PE01NFESEFAZ permite tratar essas exceções de forma isolada, sem comprometer a integridade dos dados mestres do sistema.
Conclusão
Alterar as tags de unidade e quantidade diretamente no XML do Protheus pode parecer complexo, mas com a lógica correta e um bom uso do ponto de entrada PE01NFESEFAZ, o processo se torna totalmente controlável e seguro.
Na Geeker Company, desenvolvemos customizações sob medida para empresas que precisam de mais autonomia e precisão nos processos fiscais do Protheus.
Se sua empresa também lida com situações como essa — e precisa garantir que o XML saia exatamente como o cliente e a SEFAZ esperam — entre em contato conosco.
Fale com a Geeker Company e veja como podemos ajudar seu Protheus a ir além do padrão.



