Como adicionar mensagem complementar na DANFE através de uma User Function

Hoje vou mostrar um modo fácil de adicionar uma mensagem complementar na DANFE usando uma User Function, e sem alterar o fonte danfeii.prw.


Primeiramente será necessário criar uma função de usuário, iremos criar com o nome de zComplMsg.

Após criar, iremos criar uma Fórmula no sistema (tabela SM4 – Cadastro de Fórmulas), sendo que ela será “u_zComplMsg()” (sem as aspas). Depois, iremos vincular essa fórmula no campo C5_MENPAD (pode ser colocado no Ini. Padrão do campo).

Agora, dentro da sua customização, basta você informar os textos necessários, lembrando que, a maioria das tabelas do faturamento estarão posicionadas nesse momento.

No exemplo abaixo, é colocado uma frase para acessar o Terminal. Note que existe uma constante, que deve ser do mesmo tamanho da existente dentro do arquivo danfeii.prw.

#Include "Protheus.ch"
#Include "TopConn.ch" 
 
#DEFINE MAXMENLIN 080 // Máximo de caracteres por linha de dados adicionais - deixar igual o do fonte danfeii.prw
 
//1 - Criar uma Fórmula (SM4), com u_zComplMsg()
//2 - Colocar o código dessa fórmula no campo C5_MENPAD
 
User Function zComplMsg()
    Local aArea       := GetArea()
    Local aAreaSD2 := SD2->(GetArea())
    Local aAreaSF2 := SF2->(GetArea())
    Local aAreaSC5 := SC5->(GetArea())
    Local aAreaSC6 := SC6->(GetArea())
    Local aAreaSA1 := SA1->(GetArea())
    Local aAreaSB1 := SB1->(GetArea())
    Local aAreaSA3 := SA3->(GetArea())
    Local aAreaSF4 := SF4->(GetArea())
    Local cMens    := ""
    Local cAux     := ""
 
    cAux := "Beluguinha, Belugão... Acesse Terminal de Informação (https://terminaldeinformacao.com)"
    cMens += fLinhaDanfe(cAux)
 
    RestArea(aAreaSD2)
    RestArea(aAreaSF2)
    RestArea(aAreaSC5)
    RestArea(aAreaSC6)
    RestArea(aAreaSA1)
    RestArea(aAreaSB1)
    RestArea(aAreaSA3)
    RestArea(aAreaSF4)
    RestArea(aArea)
Return cMens
 
Static Function fLinhaDanfe(cLinhaTexto)
    Local cLinhaTrans:=""
 
    //Se houver texto
    If !Empty(cLinhaTexto)
        //Enquanto o tamnho for maior que o máximo da linha, vai quebrando
        While Len(cLinhaTexto) > MAXMENLIN
            cLinhaTrans += Substr(cLinhaTexto, 1, MAXMENLIN)
            cLinhaTexto := Substr(cLinhaTexto, MAXMENLIN + 1, Len(cLinhaTexto) - MAXMENLIN)
        EndDo
 
        //Se restou texto, incrementa
        If cLinhaText != ""
            cLinhaTrans += PadR(cLinhaTexto, MAXMENLIN)
        EndIf
    EndIf
 
Return cLinhaTrans

Automaticamente agora ao faturar uma nota e transmitir, ele irá buscar a fórmula do C5_MENPAD, executar a função, e retornar esse texto customizado.

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta