{"id":51,"date":"2025-05-07T16:51:02","date_gmt":"2025-05-07T19:51:02","guid":{"rendered":"https:\/\/cahfelix.tech\/blog\/?p=51"},"modified":"2025-10-27T10:47:12","modified_gmt":"2025-10-27T13:47:12","slug":"assumindo-um-time-com-integracao-totvs","status":"publish","type":"post","link":"https:\/\/cahfelix.tech\/blog\/assumindo-um-time-com-integracao-totvs\/","title":{"rendered":"Assumindo um time com integra\u00e7\u00e3o Totvs"},"content":{"rendered":"\n<p><strong>Assumindo um Time com Integra\u00e7\u00e3o TOTVS: aprendizados sobre ADVPL, TLPP e moderniza\u00e7\u00e3o no Protheus<\/strong><\/p>\n\n\n\n<p>Recentemente, assumi a lideran\u00e7a de um time respons\u00e1vel por integra\u00e7\u00f5es com o ERP <strong>TOTVS Protheus<\/strong>. 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\u00edda ao longo do tempo.<\/p>\n\n\n\n<p>Percebi que existe um ecossistema vasto e, muitas vezes, pouco documentado fora das comunidades t\u00e9cnicas da TOTVS. Ent\u00e3o, decidi compartilhar o que aprendi em uma s\u00e9rie de artigos, organizando o conhecimento de forma leve e pr\u00e1tica. E nada melhor para come\u00e7ar do que falar sobre as duas linguagens que sustentam boa parte do desenvolvimento nesse ambiente: <strong>ADVPL<\/strong> e <strong>TLPP<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Totvs: ADVPL vs TLPP<\/h2>\n\n\n\n<p>Quando falamos em <strong>ADVPL<\/strong> e <strong>TLPP<\/strong>, estamos comparando duas linguagens do mesmo ecossistema, mas de gera\u00e7\u00f5es diferentes. Ambas s\u00e3o usadas no ERP Protheus, e entender suas diferen\u00e7as impacta diretamente a forma como escrevemos, mantemos e evolu\u00edmos o c\u00f3digo.<\/p>\n\n\n\n<p>Vamos ao comparativo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1. Ambiente e Moderniza\u00e7\u00e3o<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADVPL<\/strong><br>\u00c9 a linguagem tradicional da TOTVS, presente h\u00e1 d\u00e9cadas. Funciona bem, mas carrega limita\u00e7\u00f5es de ambientes mais antigos, com pouco suporte a pr\u00e1ticas modernas de engenharia.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>TLPP (TOTVS Language Parallel Programming)<\/strong><br>\u00c9 a evolu\u00e7\u00e3o natural da <strong>ADVPL<\/strong>. Foi criada para rodar em ambientes modernos, com suporte a modulariza\u00e7\u00e3o, orienta\u00e7\u00e3o a objetos e integra\u00e7\u00f5es DevOps. \u00c9 mais preparada para o mundo atual da engenharia de software.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. Paradigmas de Programa\u00e7\u00e3o<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADVPL:<\/strong> segue um modelo procedural, com suporte limitado \u00e0 orienta\u00e7\u00e3o a objetos.<\/li>\n\n\n\n<li><strong>TLPP:<\/strong> adota um estilo mais orientado a objetos, facilitando o encapsulamento, a reutiliza\u00e7\u00e3o e a manuten\u00e7\u00e3o de c\u00f3digo.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. Ferramentas e Experi\u00eancia de Desenvolvimento<\/h3>\n\n\n\n<p>Ambas as linguagens s\u00e3o executadas no <strong>AppServer<\/strong> e utilizam o <strong>SmartClient<\/strong> como interface.<\/p>\n\n\n\n<p>Hoje, \u00e9 poss\u00edvel programar em <strong>VS Code<\/strong>, integrar com <strong>Git<\/strong> e automatizar deploys com <strong>CI\/CD<\/strong>, desde que a infraestrutura esteja configurada para isso. Ou seja, a experi\u00eancia de desenvolvimento depende mais do ambiente da empresa do que da linguagem em si.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4. Performance e Paralelismo<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADVPL<\/strong> executa de forma linear, sem aproveitar muito o paralelismo.<\/li>\n\n\n\n<li><strong>TLPP<\/strong> foi projetada para ambientes concorrentes, com melhor desempenho em cen\u00e1rios com m\u00faltiplos usu\u00e1rios e servi\u00e7os.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">5. Manutenibilidade e Escalabilidade<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADVPL<\/strong> tende a gerar c\u00f3digos mais monol\u00edticos.<\/li>\n\n\n\n<li><strong>TLPP<\/strong> incentiva a constru\u00e7\u00e3o de sistemas modulares e escal\u00e1veis, o que \u00e9 essencial em projetos grandes e din\u00e2micos.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">6. Compatibilidade e Legado<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADVPL<\/strong> ainda est\u00e1 muito presente nos sistemas legados da TOTVS.<\/li>\n\n\n\n<li><strong>TLPP<\/strong> representa o futuro. Novas aplica\u00e7\u00f5es j\u00e1 nascem nessa linguagem, embora a base <strong>ADVPL<\/strong> continue sendo mantida e suportada por bastante tempo.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Resumo Pr\u00e1tico<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"301\" src=\"https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/05\/Capa-ERP-1024x301.png\" alt=\"\" class=\"wp-image-143\" srcset=\"https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/05\/Capa-ERP-1024x301.png 1024w, https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/05\/Capa-ERP-300x88.png 300w, https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/05\/Capa-ERP-768x226.png 768w, https:\/\/cahfelix.tech\/blog\/wp-content\/uploads\/2025\/05\/Capa-ERP.png 1075w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Se voc\u00ea est\u00e1 come\u00e7ando agora ou trabalhando em projetos novos, <strong>TLPP<\/strong> \u00e9 o caminho.<br>Mas se o foco \u00e9 manuten\u00e7\u00e3o de sistemas legados, ainda vai precisar conviver com <strong>ADVPL<\/strong> por um bom tempo.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table tabela-especial\"><table><thead><tr><th>Aspecto<\/th><th><strong>ADVPL<\/strong><\/th><th><strong>TLPP<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Paradigma<\/td><td>Procedural<\/td><td>Orientado a objetos<\/td><\/tr><tr><td>Ferramentas modernas<\/td><td>Limitado<\/td><td>Integra\u00e7\u00e3o com DevOps, VS Code<\/td><\/tr><tr><td>Performance<\/td><td>Linear<\/td><td>Paralelo e otimizado<\/td><\/tr><tr><td>Manutenibilidade<\/td><td>Mais dif\u00edcil<\/td><td>Mais organizada e modular<\/td><\/tr><tr><td>Uso atual<\/td><td>Legado, ainda muito comum<\/td><td>Recomendado para novos desenvolvimentos<\/td><\/tr><tr><td>Tipagem<\/td><td>Din\u00e2mica<\/td><td>Forte e expl\u00edcita<\/td><\/tr><tr><td>Valida\u00e7\u00e3o de tipos<\/td><td>Apenas em tempo de execu\u00e7\u00e3o<\/td><td>J\u00e1 em tempo de compila\u00e7\u00e3o<\/td><\/tr><tr><td>Annotations<\/td><td>N\u00e3o existem<\/td><td>Sim, para REST, eventos, seguran\u00e7a etc.<\/td><\/tr><tr><td>Legibilidade<\/td><td>Menor<\/td><td>Maior<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo em ADVPL (tradicional)<\/h2>\n\n\n\n<p>Simples e funcional, mas tudo fica solto dentro da fun\u00e7\u00e3o, sem estrutura\u00e7\u00e3o ou reaproveitamento.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>User Function SomaNumeros()\n  Local nValor1 := 10\n  Local nValor2 := 20\n  Local nResultado := nValor1 + nValor2\n  Alert(\"Resultado: \" + AllTrim(Str(nResultado)))\nReturn\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo equivalente em TLPP (moderno e orientado a objetos)<\/h2>\n\n\n\n<p>Aqui temos uma classe chamada <strong>Calculadora<\/strong>, um m\u00e9todo reutiliz\u00e1vel, separa\u00e7\u00e3o entre l\u00f3gica e execu\u00e7\u00e3o e um c\u00f3digo mais limpo e modular.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Class Calculadora\n    Method Soma(n1 As Numeric, n2 As Numeric) As Numeric\n        Return n1 + n2\nEndClass\n\nUser Function ExecutaSoma()\n    Local oCalc := Calculadora():New()\n    Local nResultado := oCalc:Soma(10, 20)\n\n    Alert(\"Resultado: \" + AllTrim(Str(nResultado)))\nReturn\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Benef\u00edcios do TLPP<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Permite testar partes do c\u00f3digo de forma independente<\/li>\n\n\n\n<li>Facilita a aplica\u00e7\u00e3o de testes unit\u00e1rios<\/li>\n\n\n\n<li>Ajuda na escalabilidade e na organiza\u00e7\u00e3o do projeto<\/li>\n\n\n\n<li>Permite seguir padr\u00f5es de projeto como MVC<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>A migra\u00e7\u00e3o do mundo <strong>ADVPL<\/strong> para <strong>TLPP<\/strong> reflete uma mudan\u00e7a de mentalidade na TOTVS: sair do c\u00f3digo procedural e adotar pr\u00e1ticas modernas, com foco em qualidade, modularidade e integra\u00e7\u00e3o cont\u00ednua.<\/p>\n\n\n\n<p>Se voc\u00ea quer trabalhar com Protheus de forma mais moderna, comece a olhar para o <strong>TLPP<\/strong> como seu novo ponto de partida.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Assumindo um Time com Integra\u00e7\u00e3o TOTVS: aprendizados sobre ADVPL, TLPP e moderniza\u00e7\u00e3o no Protheus Recentemente, assumi a lideran\u00e7a de um time respons\u00e1vel por integra\u00e7\u00f5es com o ERP TOTVS Protheus. Esse&#8230;<\/p>\n","protected":false},"author":1,"featured_media":142,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[9,38],"class_list":["post-51","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lideranca","tag-lideranca","tag-totvs"],"aioseo_notices":[],"featured":true,"read_time":4,"_links":{"self":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/comments?post=51"}],"version-history":[{"count":19,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/51\/revisions"}],"predecessor-version":[{"id":376,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/51\/revisions\/376"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/media\/142"}],"wp:attachment":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/media?parent=51"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/categories?post=51"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/tags?post=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}