Como alterar unidade de medida e quantidade no XML da nota fiscal no Protheus

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:

  1. Validar se a nota não é devolução e não utiliza fornecedor.
  2. Verificar no cadastro do cliente se ele prefere comprar por caixa em vez da unidade padrão.
  3. Percorrer o array de produtos do XML.
  4. Localizar o produto na tabela SB1.
  5. Pegar as informações de unidade secundária, fator de conversão e quantidade vendida.
  6. Realizar a conversão de unidade e quantidade conforme o tipo de cálculo (multiplicação ou divisão).
  7. 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.
  • 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.

Index

Categorias

Sobre o Autor

Foto do Autor
Fábio Hayama

Apaixonado por gestão, tecnologia e inovação, Fábio Hayama possui mais de 15 anos de experiência no universo do ERP Protheus, estratégia empresarial e automação de processos.

Leia mais sobre o Fábio

Entre em contato conosco

Veja mais artigos relacionados

erp
Como identificar gargalos no seu ERP e planejar melhorias com BI
Quando o seu ERP trava, o problema pode não ser o sistema Quem trabalha com o ERP sabe: às vezes, tudo parece travar ao mesmo tempo. Os relatórios demoram para sair, o time reclama de lentidão, as aprovações acumulam e a culpa cai no sistema. Mas, na maioria das vezes, o verdadeiro problema não está […]
Protheus
Como alterar unidade de medida e quantidade no XML da nota fiscal no Protheus
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 […]
Vendedor 24h por dia: como automatizar seu processo comercial e vender mesmo dormindo
Você já imaginou ter um vendedor que trabalha 24 horas por dia, sem pausa, sem folga e sem pedir aumento?Parece exagero, mas esse “funcionário dos sonhos” já existe — e ele está nas automações que conectam seus canais digitais, CRM e processos comerciais. No mundo de hoje, quem depende apenas do horário comercial para vender […]
reforma tributária
Como garantir que seu Protheus está pronto para a reforma tributária
A tão falada reforma tributária está batendo à porta — e, ao contrário de outros assuntos que parecem distantes do dia a dia das empresas, essa vai mexer diretamente com a rotina fiscal, contábil e até operacional de praticamente todo negócio no país. E se você usa o Protheus, da TOTVS, já deve ter ouvido […]