Assumindo um Time com Integração TOTVS: aprendizados sobre ADVPL, TLPP e modernização no Protheus
Recentemente, assumi a liderança de um time responsável por integrações com o ERP TOTVS Protheus. Esse novo desafio me levou a mergulhar fundo nesse universo, entendendo suas particularidades, sua arquitetura e a forma como a engenharia de software da TOTVS foi construída ao longo do tempo.
Percebi que existe um ecossistema vasto e, muitas vezes, pouco documentado fora das comunidades técnicas da TOTVS. Então, decidi compartilhar o que aprendi em uma série de artigos, organizando o conhecimento de forma leve e prática. E nada melhor para começar do que falar sobre as duas linguagens que sustentam boa parte do desenvolvimento nesse ambiente: ADVPL e TLPP.
Totvs: ADVPL vs TLPP
Quando falamos em ADVPL e TLPP, estamos comparando duas linguagens do mesmo ecossistema, mas de gerações diferentes. Ambas são usadas no ERP Protheus, e entender suas diferenças impacta diretamente a forma como escrevemos, mantemos e evoluímos o código.
Vamos ao comparativo.
1. Ambiente e Modernização
- ADVPL
É a linguagem tradicional da TOTVS, presente há décadas. Funciona bem, mas carrega limitações de ambientes mais antigos, com pouco suporte a práticas modernas de engenharia.
- TLPP (TOTVS Language Parallel Programming)
É a evolução natural da ADVPL. Foi criada para rodar em ambientes modernos, com suporte a modularização, orientação a objetos e integrações DevOps. É mais preparada para o mundo atual da engenharia de software.
2. Paradigmas de Programação
- ADVPL: segue um modelo procedural, com suporte limitado à orientação a objetos.
- TLPP: adota um estilo mais orientado a objetos, facilitando o encapsulamento, a reutilização e a manutenção de código.
3. Ferramentas e Experiência de Desenvolvimento
Ambas as linguagens são executadas no AppServer e utilizam o SmartClient como interface.
Hoje, é possível programar em VS Code, integrar com Git e automatizar deploys com CI/CD, desde que a infraestrutura esteja configurada para isso. Ou seja, a experiência de desenvolvimento depende mais do ambiente da empresa do que da linguagem em si.
4. Performance e Paralelismo
- ADVPL executa de forma linear, sem aproveitar muito o paralelismo.
- TLPP foi projetada para ambientes concorrentes, com melhor desempenho em cenários com múltiplos usuários e serviços.
5. Manutenibilidade e Escalabilidade
- ADVPL tende a gerar códigos mais monolíticos.
- TLPP incentiva a construção de sistemas modulares e escaláveis, o que é essencial em projetos grandes e dinâmicos.
6. Compatibilidade e Legado
- ADVPL ainda está muito presente nos sistemas legados da TOTVS.
- TLPP representa o futuro. Novas aplicações já nascem nessa linguagem, embora a base ADVPL continue sendo mantida e suportada por bastante tempo.
Resumo Prático

Se você está começando agora ou trabalhando em projetos novos, TLPP é o caminho.
Mas se o foco é manutenção de sistemas legados, ainda vai precisar conviver com ADVPL por um bom tempo.
| Aspecto | ADVPL | TLPP |
|---|---|---|
| Paradigma | Procedural | Orientado a objetos |
| Ferramentas modernas | Limitado | Integração com DevOps, VS Code |
| Performance | Linear | Paralelo e otimizado |
| Manutenibilidade | Mais difícil | Mais organizada e modular |
| Uso atual | Legado, ainda muito comum | Recomendado para novos desenvolvimentos |
| Tipagem | Dinâmica | Forte e explícita |
| Validação de tipos | Apenas em tempo de execução | Já em tempo de compilação |
| Annotations | Não existem | Sim, para REST, eventos, segurança etc. |
| Legibilidade | Menor | Maior |
Exemplo em ADVPL (tradicional)
Simples e funcional, mas tudo fica solto dentro da função, sem estruturação ou reaproveitamento.
User Function SomaNumeros()
Local nValor1 := 10
Local nValor2 := 20
Local nResultado := nValor1 + nValor2
Alert("Resultado: " + AllTrim(Str(nResultado)))
Return
Exemplo equivalente em TLPP (moderno e orientado a objetos)
Aqui temos uma classe chamada Calculadora, um método reutilizável, separação entre lógica e execução e um código mais limpo e modular.
Class Calculadora
Method Soma(n1 As Numeric, n2 As Numeric) As Numeric
Return n1 + n2
EndClass
User Function ExecutaSoma()
Local oCalc := Calculadora():New()
Local nResultado := oCalc:Soma(10, 20)
Alert("Resultado: " + AllTrim(Str(nResultado)))
Return
Benefícios do TLPP
- Permite testar partes do código de forma independente
- Facilita a aplicação de testes unitários
- Ajuda na escalabilidade e na organização do projeto
- Permite seguir padrões de projeto como MVC
Conclusão
A migração do mundo ADVPL para TLPP reflete uma mudança de mentalidade na TOTVS: sair do código procedural e adotar práticas modernas, com foco em qualidade, modularidade e integração contínua.
Se você quer trabalhar com Protheus de forma mais moderna, comece a olhar para o TLPP como seu novo ponto de partida.