<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>segredo on Abapinho</title><link>https://abapinho.com/tags/segredo/</link><description>Recent content in segredo on Abapinho</description><generator>Hugo -- gohugo.io</generator><language>pt</language><copyright>&amp;copy;2009-2026 Nuno Godinho</copyright><lastBuildDate>Mon, 16 Feb 2026 09:00:00 +0100</lastBuildDate><atom:link href="https://abapinho.com/tags/segredo/index.xml" rel="self" type="application/rss+xml"/><item><title>Executa código após um COMMIT</title><link>https://abapinho.com/2026/02/evento-transaction-finished/</link><pubDate>Mon, 16 Feb 2026 09:00:00 +0100</pubDate><guid>https://abapinho.com/2026/02/evento-transaction-finished/</guid><description>&lt;p>Lembras-te como o &lt;code>CALL FUNCTION IN UPDATE TASK&lt;/code> permitia adiar algumas acções até ao momento do COMMIT?&lt;/p></description></item><item><title>SELECTs insensível a maiúsculas e minúsculas</title><link>https://abapinho.com/2025/05/select-case-insensitive/</link><pubDate>Mon, 26 May 2025 09:00:00 +0100</pubDate><guid>https://abapinho.com/2025/05/select-case-insensitive/</guid><description>&lt;p>No SAP é normal ter tabelas na base de dados com um campo &lt;code>NAME&lt;/code> e outro &lt;code>NAME_SEARCH&lt;/code> que é preenchido com exactamente a mesma coisa que o &lt;code>NAME&lt;/code> mas em maiúsculas.&lt;/p>
&lt;p>Depois quando queres fazer pesquisas sem ligar a maiúsculas e minúsculas usas o &lt;code>NAME_SEARCH&lt;/code>. Já não é preciso fazer isso.&lt;/p></description></item><item><title>Copia do SAPGUI para o clipboard</title><link>https://abapinho.com/2023/09/copy-to-clipboard/</link><pubDate>Mon, 25 Sep 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/2023/09/copy-to-clipboard/</guid><description>&lt;p>Sabias que o teu programa ABAP pode copiar conteúdo para o clipboard do teu sistema operativo?&lt;/p></description></item><item><title>Prefixos fixos</title><link>https://abapinho.com/2023/05/prefixos-fixos/</link><pubDate>Mon, 01 May 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/2023/05/prefixos-fixos/</guid><description>&lt;p>É muito fácil fazer asneira com os nomes dos objectos em SAP. Encontrei recentemente uma forma de minimizar esse problema: definir regras para fixar prefixos por pacote para determinados tipos de objecto.&lt;/p></description></item><item><title>O ponto de exclamação!</title><link>https://abapinho.com/2023/03/exclamation-point/</link><pubDate>Mon, 27 Mar 2023 09:00:00 +0000</pubDate><guid>https://abapinho.com/2023/03/exclamation-point/</guid><description>&lt;p>Quando se olha para o código fonte ABAP, a declaração dos métodos prefixa sempre os parâmetros de entrada com um ponto de exclamação. Isto sempre me intrigou. Finalmente sei o porquê.&lt;/p></description></item><item><title>As duplas negativas dos RANGEs</title><link>https://abapinho.com/2021/07/as-duplas-negativas-dos-ranges/</link><pubDate>Mon, 26 Jul 2021 09:00:15 +0000</pubDate><guid>https://abapinho.com/2021/07/as-duplas-negativas-dos-ranges/</guid><description>&lt;p>Os RANGEs têm propriedades interessantes.&lt;/p></description></item><item><title>Popula manulamente uma LISTBOX</title><link>https://abapinho.com/2021/06/popula-manulamente-listbox/</link><pubDate>Mon, 14 Jun 2021 12:47:10 +0000</pubDate><guid>https://abapinho.com/2021/06/popula-manulamente-listbox/</guid><description>&lt;p>Em 2012 &lt;a href="https://abapinho.com/2012/10/ninguemligaaolistbox/">lamentei que a LISTBOX fosse tão pouco usada&lt;/a>. Ensinei a usá-la com elementos de dado standard, que a populam automaticamente. Hoje vou-te ensinar como a podes popular tu próprio se quiseres listar opções que não venham de um elemento de dados.&lt;/p></description></item><item><title>Manipula textos de selecção sem os fixar no programa</title><link>https://abapinho.com/2021/05/manipula-textos-de-seleccao/</link><pubDate>Mon, 24 May 2021 09:00:11 +0000</pubDate><guid>https://abapinho.com/2021/05/manipula-textos-de-seleccao/</guid><description>&lt;p>Embora muitos ABAPers ainda se esqueçam disto, quanto menos textos forem fixados no programa mais fácil será traduzi-lo.&lt;/p>
&lt;p>Aqui está uma forma simples mas relativamente obscura de alterar os textos para, por exemplo, adicionar-lhes ícones, mantendo-os traduzíveis.&lt;/p></description></item><item><title>Usa CL_GUI_ALV_GRID sem ter de criar um ecrã</title><link>https://abapinho.com/2020/03/usa-cl_gui_alv_grid-sem-ter-de-criar-um-ecra/</link><pubDate>Mon, 02 Mar 2020 09:00:14 +0000</pubDate><guid>https://abapinho.com/2020/03/usa-cl_gui_alv_grid-sem-ter-de-criar-um-ecra/</guid><description>&lt;p>Hoje em dia é raro usar o CL_GUI_ALV_GRID porque uso quase sempre a SALV. Mas quando é preciso fazer ALVs editáveis continuo a recorrer à CL_GUI_ALV_GRID. Durante muito tempo julguei que, para a usar, tinha de criar um ecrã com um container, o que é uma chatice. E como eu uso ABAP OO, precisava de criar um function group para alojar o ecrã e um function module para o chamar, o que era outra chatice.&lt;/p></description></item><item><title>Atalhos mágicos para menus</title><link>https://abapinho.com/2019/09/atalhos-magicos-para-menus/</link><pubDate>Tue, 10 Sep 2019 09:00:02 +0000</pubDate><guid>https://abapinho.com/2019/09/atalhos-magicos-para-menus/</guid><description>&lt;p>Se tu que estás a ler isto achares que tudo o que está escrito no Abapinho é literalmente verdade, o que te vou dizer a seguir vai desiludir: quando disse mágico não quis dizer que era sobrenatural. É só uma forma mais abrilhantada de dizer que é surpreendente e inesperado. Tomei esta liberdade um bocado como quando dizes &lt;em>estou morto de sede&lt;/em> e no entanto ainda estás vivo. Tendo clarificado isto, podemos continuar.&lt;/p></description></item><item><title>Atalho para gravar lista em ficheiro local</title><link>https://abapinho.com/2019/09/atalho-para-gravar-lista-em-ficheiro-local/</link><pubDate>Wed, 04 Sep 2019 09:00:54 +0000</pubDate><guid>https://abapinho.com/2019/09/atalho-para-gravar-lista-em-ficheiro-local/</guid><description>&lt;p>O SAP está replecto de recantos refundidos e rebuscados raramente reconhecidos que o Abapinho se regozija por revelar.&lt;/p>
&lt;p>O comando %pc é equivalente à opção de menu Sistema/Lista/Gravar/File local:&lt;/p></description></item><item><title>Enhancements implícitos em estruturas de dados</title><link>https://abapinho.com/2019/05/enhancements-implicitos-em-estruturas-de-dados/</link><pubDate>Mon, 13 May 2019 09:00:00 +0000</pubDate><guid>https://abapinho.com/2019/05/enhancements-implicitos-em-estruturas-de-dados/</guid><description>&lt;p>Já todos usámos &lt;em>enhancements&lt;/em> implícitos para adicionar código ao início ou final de funções, forms ou métodos standard. Mas é menos conhecido o facto de que também podemos adicionar campos a estruturas de dados, estejam elas declaradas como TYPES ou ou directamente como DATA.&lt;/p></description></item><item><title>Guarda dados XML numa ST (Simple Transformation)</title><link>https://abapinho.com/2019/04/guarda-dados-xml-numa-st-simple-transformation/</link><pubDate>Mon, 01 Apr 2019 09:00:59 +0000</pubDate><guid>https://abapinho.com/2019/04/guarda-dados-xml-numa-st-simple-transformation/</guid><description>&lt;p>No outro dia estava a aprender sobre ST (Simple Transformations) e lembrei-me que, ainda que tenha sido desenvolvida para transformar dados, é uma forma práctica de guardar dados XML.&lt;/p>
&lt;p>Temos o seguinte XML:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-ABAP" data-lang="ABAP">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">&amp;lt;cocktails&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#000">cocktail&lt;/span> &lt;span style="color:#00f">id&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#00f">gt&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>; &lt;span style="color:#000">nome&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">Gin&lt;/span> &lt;span style="color:#000">Tonic&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>;/&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#000">cocktail&lt;/span> &lt;span style="color:#00f">id&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">ws&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>; &lt;span style="color:#000">nome&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">Whiskey&lt;/span> &lt;span style="color:#000">Sour&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>;/&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#000">cocktail&lt;/span> &lt;span style="color:#00f">id&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">cl&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>; &lt;span style="color:#000">nome&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">Campari&lt;/span> &lt;span style="color:#000">Laranja&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>;/&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">&amp;lt;/cocktails&amp;gt;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Injectar comandos ABAP num sistema produtivo</title><link>https://abapinho.com/2018/10/injectar-comandos-abap-num-sistema-produtivo/</link><pubDate>Mon, 08 Oct 2018 09:00:50 +0000</pubDate><guid>https://abapinho.com/2018/10/injectar-comandos-abap-num-sistema-produtivo/</guid><description>O vídeo abaixo demonstra como é simples criar condições para facilmente injectar comandos ABAP em programas em produtivo.
Ponderei sobre partilhar este vídeo pois o seu conteúdo pode ser usado para fins menos nobres. Mas, como já aconteceu no passado, acredito que é preferivel que isto seja divulgado pois é fundamental que os administradores de sistema estejam conscientes desta possibilidade e protejam os seus sistemas dela. Pois é algo verdadeiramente perigoso.</description></item><item><title>Transporta uma tabela local com os ecrãs de manutenção</title><link>https://abapinho.com/2018/10/transporta-ecras-de-manutencao-de-tabela/</link><pubDate>Mon, 01 Oct 2018 12:47:47 +0000</pubDate><guid>https://abapinho.com/2018/10/transporta-ecras-de-manutencao-de-tabela/</guid><description>&lt;p>Criaste uma tabela e os seus ecrãs de manutenção como objectos locais.&lt;/p>
&lt;p>Quando mais tarde te arrependeres e decidires transportar a tabela, como fazes para os transportar também os ecrãs de manutenção?&lt;/p>
&lt;p>Transportar só o grupo de funções não chega, vai dar erro.&lt;/p></description></item><item><title>Testa uma sequência de funções na SE37</title><link>https://abapinho.com/2018/07/testa-uma-sequencia-de-funcoes-na-se37/</link><pubDate>Mon, 09 Jul 2018 09:00:17 +0000</pubDate><guid>https://abapinho.com/2018/07/testa-uma-sequencia-de-funcoes-na-se37/</guid><description>&lt;p>Podia jurar que já tinha feito um post sobre isto mas não consigo encontrá-lo por isso aqui vai.&lt;/p>
&lt;p>Há funções que guardam dados globais que serão depois usados por outra função do mesmo grupo. Ora se quiseres testar as duas juntas é fundamental que corram sequencialmente dentro da mesma transacção.&lt;/p>
&lt;p>Toda a gente sabe que a transacção SE37 permite testar uma função. O que pouca gente sabe é que a transacção SE37 permite testar uma sequência de funções dentro da mesma transacção. Quem não sabe isto normalmente acaba por criar um pequeno programa de testes para chamar as várias funções em sequência. Fica agora a saber como o pode evitar.&lt;/p></description></item><item><title>Controla mais o teu ecrã de selecção</title><link>https://abapinho.com/2018/03/controla-ecra-seleccao/</link><pubDate>Mon, 12 Mar 2018 09:00:08 +0000</pubDate><guid>https://abapinho.com/2018/03/controla-ecra-seleccao/</guid><description>&lt;p>Os PARAMETERS e os SELECT-OPTIONS até têm algumas opções de configuração. Mas muitas vezes dava jeito conseguir configurá-los ainda mais. E curiosamente, ainda que não seja assim tão simples, é possível fazê-lo, através de uma função standard.&lt;/p></description></item><item><title>Debug em utilizador sem permissões para debug</title><link>https://abapinho.com/2018/03/debug-sem-permissoes/</link><pubDate>Mon, 05 Mar 2018 09:00:48 +0000</pubDate><guid>https://abapinho.com/2018/03/debug-sem-permissoes/</guid><description>&lt;p>Num sistema bem protegido, os utilizadores não têm permissões para debug. Mas muitas vezes isso complica a vida dos ABAPers que, ao quererem resolver um problema desse utilizador, não podem fazer debug à sua sessão.&lt;/p>
&lt;p>Mas há uma forma legítima, ainda que pouco óbvia, de contornar o problema.&lt;/p></description></item><item><title>Altera programas standard sem precisar de chave</title><link>https://abapinho.com/2018/02/editar-objectos-standard/</link><pubDate>Mon, 12 Feb 2018 09:00:22 +0000</pubDate><guid>https://abapinho.com/2018/02/editar-objectos-standard/</guid><description>&lt;p>Estamos perante mais um daquelas dilemas: esconder porque é perigoso e alguém pode fazer o mal usando esta informação ou ensinar porque não o fazer é paternalista porque presume que os leitores não são responsáveis. O regimes de ditadura costumam optar pela primeira: queimam livros e censuram. O Abapinho gosta de acreditar que os seus leitores são pessoas responsáveis que merecem ter acesso ao conhecimento.&lt;/p>
&lt;p>E, por isso, aqui está. Não, não é um manual de como criar urânio enriquecido nem uma fórmula para nitroglicerina caseira. Mas anda perto: é um truque para conseguir alterar objectos standard sem precisar de chave.&lt;/p></description></item><item><title>Altera ordens de transporte mesmo que não te deixem</title><link>https://abapinho.com/2018/01/altera-ordens-de-transporte/</link><pubDate>Mon, 22 Jan 2018 09:00:15 +0000</pubDate><guid>https://abapinho.com/2018/01/altera-ordens-de-transporte/</guid><description>&lt;p>Como todos nós sabemos os administradores de sistemas são pessoas más, insensíveis e crueis. A prová-lo está o incontornável &lt;a href="http://bofharchive.com/">BOFH&lt;/a>.&lt;/p>
&lt;p>Nós, programadores ABAP, somos vítimas indefesas nas mãos destas criaturas maléficas.&lt;/p>
&lt;p>Mas nem sempre somos obrigados a deixar-nos esmagar pelos dedos peludos dos seus caprichos.&lt;/p></description></item><item><title>Relatório de consistência da SALV</title><link>https://abapinho.com/2017/07/relatorio-consistencia-salv/</link><pubDate>Tue, 18 Jul 2017 09:00:08 +0000</pubDate><guid>https://abapinho.com/2017/07/relatorio-consistencia-salv/</guid><description>&lt;p>Às vezes uma SALV pode ter inconsistências que passam despercebidas a quem as programa. Um exemplo é uma estrutura com um campo WRBTR sem um campo de moeda associado:&lt;/p></description></item><item><title>A transacção que queria chamar outra e não podia</title><link>https://abapinho.com/2017/02/a-transaccao-que-queria-chamar-outra-e-nao-podia/</link><pubDate>Mon, 06 Feb 2017 09:00:24 +0000</pubDate><guid>https://abapinho.com/2017/02/a-transaccao-que-queria-chamar-outra-e-nao-podia/</guid><description>&lt;p>O Manelinho criou a transacção ZFB01 associada ao programa ZFB01 que faz lá umas coisas e depois faz CALL TRANSACTION à FB01. A seguir veio o Joãozinho e correu a transacção ZFB01.&lt;/p>
&lt;p>Conseguiu começar a corrê-la porque tem permissões para a transacção ZFB01. Mas a meio teve um erro porque não tem permissões para a transacção FB01.&lt;/p>
&lt;p>Tanto o Manelinho como o Joãozinho sabiam que os administradores de sistema nunca na vida deles darão ao Joãozinho autorizações para correr a FB01.&lt;/p></description></item><item><title>$PACOTES locais</title><link>https://abapinho.com/2016/11/pacotes-locais/</link><pubDate>Mon, 07 Nov 2016 09:00:37 +0000</pubDate><guid>https://abapinho.com/2016/11/pacotes-locais/</guid><description>&lt;p>Todos os objectos criados em SAP têm de estar associados a um pacote.&lt;/p>
&lt;p>Até recentemente, quando eu queria fazer um teste rápido criava o objecto no pacote $TMP. Tinha assim a garantia de este nunca viria a ser transportado.&lt;/p>
&lt;p>Mas por vezes há necessidade de criar coisas no sistema de desenvolvimento que não pretendemos nunca vir a transportar mas que queremos que lá existam eternamente. Como o ZSAPLINK e o abapGit, por exemplo. Mas se as associarmos todas as pacote $TMP fica uma valente confusão.&lt;/p></description></item><item><title>Campos chave de estrutura DDIC</title><link>https://abapinho.com/2016/11/definir-a-chave-de-uma-estrutura-do-ddic/</link><pubDate>Wed, 02 Nov 2016 09:00:39 +0000</pubDate><guid>https://abapinho.com/2016/11/definir-a-chave-de-uma-estrutura-do-ddic/</guid><description>&lt;p>Hoje em dia quando quero criar uma SALV defino sempre a estrutura dos dados no DDIC já com os elementos de dados com as descrições desejadas em vez de os forçar no código.&lt;/p></description></item><item><title>As APPEND STRUCTUREs fazem mais do que eu pensava</title><link>https://abapinho.com/2016/10/append-structures-do-more-stuff-than-i-thought/</link><pubDate>Mon, 17 Oct 2016 09:00:06 +0000</pubDate><guid>https://abapinho.com/2016/10/append-structures-do-more-stuff-than-i-thought/</guid><description>&lt;p>Toda a minha vida ABAPiana usei APPEND STRUCTURES para adicionar campos extra a tabelas standard.&lt;/p>
&lt;p>Mas aprendi recentemente que afinal servem para mais duas coisas:&lt;/p></description></item><item><title>Eu chamo-te e tu chamas-me</title><link>https://abapinho.com/2016/05/i-call-you-and-you-call-me/</link><pubDate>Mon, 09 May 2016 18:36:30 +0000</pubDate><guid>https://abapinho.com/2016/05/i-call-you-and-you-call-me/</guid><description>&lt;p>Quando chamas uma função por RFC tens de lhe dar a RFC DESTINATION do sistema remoto:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-ABAP" data-lang="ABAP">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">CALL FUNCTION&lt;/span> &lt;span style="color:#f00">‘&lt;/span>&lt;span style="color:#000">ZESPIRREI&lt;/span>&lt;span style="color:#f00">’&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">DESTINATION&lt;/span> &lt;span style="color:#f00">’&lt;/span>&lt;span style="color:#000">sistema_longe_daqui&lt;/span>&lt;span style="color:#f00">’&lt;/span>.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>E se, por alguma razão, precisares que a função que corre no sistema remoto chame uma função no sistema original. Sabes fazê-lo?&lt;/p></description></item><item><title>Acrescenta parâmetros a métodos e funções standard</title><link>https://abapinho.com/2016/02/acrescenta-parametros-a-metodos-e-funcoes-standard/</link><pubDate>Mon, 01 Feb 2016 09:00:50 +0000</pubDate><guid>https://abapinho.com/2016/02/acrescenta-parametros-a-metodos-e-funcoes-standard/</guid><description>&lt;p>Todos conhecemos as ampliações implícitas da SAP, que permitem adicionar código no início ou final qualquer blocos de código standard (funções, métodos, etc.). Já todos as usámos para alterar uma BAPI ou outro código standard qualquer.&lt;/p>
&lt;p>Mas só há pouco tempo é que descobri que também é possível usar ampliações implícitas para acrescentar parâmetros a funções e métodos ABAP standard.&lt;/p></description></item><item><title>Programa a programação dos programas</title><link>https://abapinho.com/2016/01/programa-a-programacao-dos-programas/</link><pubDate>Mon, 18 Jan 2016 09:00:47 +0000</pubDate><guid>https://abapinho.com/2016/01/programa-a-programacao-dos-programas/</guid><description>&lt;p>Uma das coisas que distingue o homem dos restantes animais é o facto de ser capaz de pensar o pensamento.&lt;/p>
&lt;p>Um pardal pode pensar &lt;em>estou assustado, vou dizer piu piu piu&lt;/em> e, como consequência, quem estiver ao pé dele ouve &lt;em>piu piu piu&lt;/em>.&lt;/p></description></item><item><title>O SAP sabe tirar &lt;i>selfies&lt;/i>!</title><link>https://abapinho.com/2015/12/o-sap-sabe-tirar-selfies/</link><pubDate>Mon, 28 Dec 2015 09:00:35 +0000</pubDate><guid>https://abapinho.com/2015/12/o-sap-sabe-tirar-selfies/</guid><description>&lt;p>Acabei de descobrir que o SAP consegue tirar selfies. Ainda não estou a ver para que é que isto possa servir. Mas não é grave porque na verdade também nunca vi para que é que servem as selfies tiradas por nós os humanos.&lt;/p>
&lt;p>Faz-se assim:&lt;/p></description></item><item><title>Limitar execução em background ou foreground</title><link>https://abapinho.com/2015/11/limitar-execucao-em-background-ou-foreground/</link><pubDate>Mon, 30 Nov 2015 09:00:36 +0000</pubDate><guid>https://abapinho.com/2015/11/limitar-execucao-em-background-ou-foreground/</guid><description>&lt;p>Desenvolveste um report que sabes que demora 12 horas a correr. Por isso não queres que ninguém tente corrê-lo em &lt;em>foreground&lt;/em>. Vou mostrar-te uma forma de garantires que isso não acontece.&lt;/p></description></item><item><title>Como sabotar textos standard</title><link>https://abapinho.com/2015/11/como-sabotar-textos-standard/</link><pubDate>Mon, 23 Nov 2015 09:00:43 +0000</pubDate><guid>https://abapinho.com/2015/11/como-sabotar-textos-standard/</guid><description>&lt;p>Às vezes não gosto dos nomes que a SAP deu às coisas. E então mudo-os.&lt;/p>
&lt;p>Por exemplo, um dia estava muito zangado e achava que os clientes eram todos uns parasitas.&lt;/p>
&lt;p>Então fiz o seguinte:&lt;/p></description></item><item><title>Como evitar &lt;i>timeout&lt;/i> ao correr um programa</title><link>https://abapinho.com/2015/11/como-evitar-timeout-ao-correr-um-programa/</link><pubDate>Mon, 02 Nov 2015 09:00:52 +0000</pubDate><guid>https://abapinho.com/2015/11/como-evitar-timeout-ao-correr-um-programa/</guid><description>&lt;p>Normalmente os sistemas SAP têm definido um tempo limite para que um programa possa correr interactivamente. Se o programa demorar mais ocorre um erro de execução (vulgo &lt;em>dump&lt;/em> ).&lt;/p></description></item><item><title>SE16H - Agrega dados sem precisares do Excel</title><link>https://abapinho.com/2015/10/se16h-agrega-dados-sem-precisares-do-excel/</link><pubDate>Mon, 12 Oct 2015 09:00:57 +0000</pubDate><guid>https://abapinho.com/2015/10/se16h-agrega-dados-sem-precisares-do-excel/</guid><description>&lt;p>No início dos tempos usava-se a transacção SE17 para ver o conteúdo de tabelas.
Rapidamente sentiram vergonha e decidiram fazer uma coisa melhorzinha a que chamaram SE16.
Depois inventaram a ALV e surgiu a SE16N (e muita gente continuou até hoje a usar a SE16, algo que me ultrapassa).&lt;/p>
&lt;p>Hoje apresento-vos a SE16H.&lt;/p></description></item><item><title>Múltiplas selecções OR na SE16N</title><link>https://abapinho.com/2015/08/multiplas-seleccoes-or-na-se16n/</link><pubDate>Mon, 03 Aug 2015 09:00:15 +0000</pubDate><guid>https://abapinho.com/2015/08/multiplas-seleccoes-or-na-se16n/</guid><description>&lt;p>Se tu és daquelas pessoas que ainda usa a SE16, este artigo não é para ti. Se continuares a ler corres o risco de encontrar ainda mais uma razão para finalmente passares a usar a SE16N (como se todas as outras não fossem já suficientes).&lt;/p>
&lt;p>Imagina que queres seleccionar todos os materiais que tenham “PREGO&amp;quot; no nome e que sejam do tipo FERRAGENS e além disso todos os materiais que tenham “GUARDANAPO&amp;quot; no nome e que sejam do tipo COMIDA. Ou seja, não deverá aparecer o “PREGO_NO_PAO” nem o “GARDANAPO_PAPEL”. O que tu queres é isto (faz de conta):&lt;/p>
&lt;p>(MATNR = “PREGO%” AND MTART = “FERR” ) OR (MATNR = “GUARDANAPO%” AND MAKT = “COMI” )&lt;/p>
&lt;p>Como bem sabes, numa utilização normal (sem recorrer a isto que te vou mostrar) da SE16N terias de a executar duas vezes e cruzar manualmente a informação porque o ecrã de selecção não dá para fazer ORs.&lt;/p>
&lt;p>Ou dá?&lt;/p></description></item><item><title>CALL FUNCTION com DESTINATION ‘NONE' cria nova LUW</title><link>https://abapinho.com/2015/06/call-function-com-destination-none-cria-nova-luw/</link><pubDate>Mon, 22 Jun 2015 09:00:57 +0000</pubDate><guid>https://abapinho.com/2015/06/call-function-com-destination-none-cria-nova-luw/</guid><description>Sabias que quando invocas uma função com a opção DESTINATION ‘NONE’ estás a iniciar uma nova LUW?
Isto pode parecer apenas uma curiosidade, mas há um caso em que pode fazer toda a diferença: sabes aqueles módulos de função que ao serem chamados uma segunda vez têm um comportamento diferente da primeira vez? Isto acontece porque eles hão-de ter alterado alguma variável global ao grupo de funções. Ora se iniciares uma nova LUW quando chamares a função, o seu grupo de funções é automaticamente inicializado e assim garantes que o comportamento da função é o esperado.</description></item><item><title>Debug de um job</title><link>https://abapinho.com/2015/06/debug-de-um-job/</link><pubDate>Mon, 15 Jun 2015 09:00:40 +0000</pubDate><guid>https://abapinho.com/2015/06/debug-de-um-job/</guid><description>&lt;p>Para fazeres &lt;em>debug&lt;/em> a um programa que faça parte de um &lt;em>job&lt;/em> faz o seguinte:&lt;/p></description></item><item><title>Calem-se as mensagens das funções</title><link>https://abapinho.com/2015/03/calem-se-as-mensagens-das-funcoes/</link><pubDate>Mon, 30 Mar 2015 09:00:30 +0000</pubDate><guid>https://abapinho.com/2015/03/calem-se-as-mensagens-das-funcoes/</guid><description>&lt;p>Há módulos de função standard que lançam mensagens e não deviam. Não deviam porque depois queremos usá-las em programas não interactivos e, em vez de devolverem o erro, atiram com uma mensagem para o ecrã que dá cabo do processo.&lt;/p>
&lt;p>Mas, provavelmente por ter tomado consciência deste problema, a SAP disponibilizou uma forma elegante (mas muito mal documentada) de resolver o problema.&lt;/p></description></item><item><title>Procurar texto numa WebDynpro</title><link>https://abapinho.com/2015/03/procurar-texto-numa-webdynpro/</link><pubDate>Mon, 23 Mar 2015 09:00:31 +0000</pubDate><guid>https://abapinho.com/2015/03/procurar-texto-numa-webdynpro/</guid><description>&lt;p>A SAP não sabe fazer as coisas bem à primeira. As WebDynpros são um bom exemplo disso. Aquilo nem sequer permite pesquisar texto. É triste.&lt;/p>
&lt;p>Felizmente o Sérgio Fraga descobriu uma forma, ainda que rebuscada:&lt;/p></description></item><item><title>De quantos includes é feita uma classe?</title><link>https://abapinho.com/2015/02/de-quantos-includes-e-feita-uma-classe/</link><pubDate>Mon, 23 Feb 2015 09:00:55 +0000</pubDate><guid>https://abapinho.com/2015/02/de-quantos-includes-e-feita-uma-classe/</guid><description>&lt;p>Por muitas voltas que eles dêem no ABAP, acaba tudo por ir dar à SE38. Até os métodos das classes ABAP são guardados em includes.&lt;/p>
&lt;p>Às vezes quando há um dump diz que o problema está, por exemplo, aqui: CL_MESSAGE_HELPER=============CM001.&lt;/p></description></item><item><title>Tornar a prender uma ordem de transporte liberada</title><link>https://abapinho.com/2015/02/tornar-a-prender-uma-ordem-de-transporte-liberada/</link><pubDate>Mon, 16 Feb 2015 09:00:51 +0000</pubDate><guid>https://abapinho.com/2015/02/tornar-a-prender-uma-ordem-de-transporte-liberada/</guid><description>&lt;p>Liberaste uma ordem de transporte porque achavas que estava tudo pronto. Mas afinal ainda faltava fazer mais uma pequena modificação. E agora vais ter de criar uma nova ordem e transportar as duas. Que grande chatice.&lt;/p>
&lt;p>Calma.&lt;/p></description></item><item><title>Escrever em muitas linhas ao mesmo tempo</title><link>https://abapinho.com/2014/12/escrever-em-muitas-linhas-ao-mesmo-tempo/</link><pubDate>Mon, 15 Dec 2014 09:00:42 +0000</pubDate><guid>https://abapinho.com/2014/12/escrever-em-muitas-linhas-ao-mesmo-tempo/</guid><description>&lt;p>O editor de ABAP tem coisas que não lembram ao diabo.
Até dá para escrever ao mesmo tempo em várias linhas.&lt;/p></description></item><item><title>Matemática problemática</title><link>https://abapinho.com/2013/12/matematica-problematica/</link><pubDate>Mon, 09 Dec 2013 09:00:23 +0000</pubDate><guid>https://abapinho.com/2013/12/matematica-problematica/</guid><description>&lt;p>Sabes a diferença entre um mistério e um enigma? Num enigma sabe-se que há uma solução mas esta não é conhecida; já num mistério, não se sabe se haverá solução.&lt;/p>
&lt;p>Concordas com isto?
5 * 3 / 10 = ( 5 * 3 ) / 10 = 5 * ( 3 / 10 ) = 1.5&lt;/p>
&lt;p>Se não concordas, devias concordar porque é um facto matemático.&lt;/p>
&lt;p>Mas vamos lá fazer umas experiências.&lt;/p></description></item><item><title>SELECT comparando 2 campos da própria tabela</title><link>https://abapinho.com/2013/11/select-propria-tabela/</link><pubDate>Mon, 04 Nov 2013 09:00:00 +0000</pubDate><guid>https://abapinho.com/2013/11/select-propria-tabela/</guid><description>&lt;p>Esta dica é simples e rápida mas aposto 200$482 em como poucos a sabem.&lt;/p></description></item><item><title>Roubar o conteúdo de uma SALV</title><link>https://abapinho.com/2013/10/roubar-salv/</link><pubDate>Mon, 14 Oct 2013 10:04:02 +0000</pubDate><guid>https://abapinho.com/2013/10/roubar-salv/</guid><description>&lt;p>Um amigo de um amigo de um amigo disse que um amigo dele conhecia um amigo que, num bar de alterne ali nas docas, lhe explicou como roubar os dados a uma SALV.&lt;/p></description></item><item><title>Comando /HS</title><link>https://abapinho.com/2013/07/comando-hs/</link><pubDate>Mon, 22 Jul 2013 09:00:36 +0000</pubDate><guid>https://abapinho.com/2013/07/comando-hs/</guid><description>&lt;p>Todo os funcional, até o mais funcional dos funcionais, sabe que para começar a depurar (vá, a fazer &lt;em>debug&lt;/em> a) um programa ABAP se usa o comando /H. Mas raro será o programador, mesmo o mais programador dos programadores, que saberá para que serve o comando /HS.&lt;/p></description></item><item><title>Salta a parede</title><link>https://abapinho.com/2012/08/salta-a-parede/</link><pubDate>Mon, 06 Aug 2012 09:00:31 +0000</pubDate><guid>https://abapinho.com/2012/08/salta-a-parede/</guid><description>&lt;p>Baixa a música.
Fecha a porta.
Olha à volta.
Está alguém a olhar para ti?
Não estás a ser observado?
Nem câmaras de vigilância?
Então, podemos continuar.&lt;/p></description></item><item><title>Parâmetros complexos em funções remotas</title><link>https://abapinho.com/2012/07/parametros-complexos-por-rfc/</link><pubDate>Mon, 16 Jul 2012 09:00:01 +0000</pubDate><guid>https://abapinho.com/2012/07/parametros-complexos-por-rfc/</guid><description>&lt;p>As chamadas a funções remotas (por RFC) não suportam parâmetros com estruturas complexas ( &lt;em>deep structures&lt;/em> ). Por outras palavras, se algum dos parâmetros tiver uma estrutura em que um dos seus campos seja outra estrutura ou uma tabela interna, azar, não dá.&lt;/p>
&lt;p>Desistes? Não desistas. O Abapinho dá-te a solução: serialização.&lt;/p></description></item><item><title>Ó Tempo Volta Para Trás</title><link>https://abapinho.com/2012/04/o-tempo-volta-para-tras/</link><pubDate>Mon, 02 Apr 2012 10:00:08 +0000</pubDate><guid>https://abapinho.com/2012/04/o-tempo-volta-para-tras/</guid><description>&lt;p>&amp;ldquo;Ó tempo volta para trás
Dá-me tudo o que eu perdi
Tem pena e dá-me a vida
A vida que eu já vivi
Ò tempo volta p&amp;rsquo;ra trás
Mata as minhas esperanças vãs
Vê que até o próprio sol
Volta todas as manhãs&amp;rdquo; - António Mourão&lt;/p>
&lt;p>Ó &lt;a href="https://www.youtube.com/watch?v=LOtAfLvhSZo">Tony&lt;/a>, é para já. Vou mostrar-te como podes voltar atrás no tempo.&lt;/p></description></item><item><title>Como sabotar tabelas</title><link>https://abapinho.com/2012/03/como-sabotar-tabelas/</link><pubDate>Mon, 12 Mar 2012 13:30:24 +0000</pubDate><guid>https://abapinho.com/2012/03/como-sabotar-tabelas/</guid><description>&lt;p>Mais um artigo em auxílio dos que buscam a subversão subreptícia. Espiões, reparem como editar uma tabela que não pode (e provavelmente não deve) ser editada. Apresento-vos 3 técnicas. A primeira já caducou há anos, a segunda está em vias de caducar e a terceira vamos ver quando caducará.&lt;/p></description></item><item><title>Quando a tabela interna não é estruturada</title><link>https://abapinho.com/2012/02/tabela-interna-nao-estruturada/</link><pubDate>Mon, 27 Feb 2012 10:00:06 +0000</pubDate><guid>https://abapinho.com/2012/02/tabela-interna-nao-estruturada/</guid><description>Quando queres seleccionar linhas numa tabela interna normalmente fazes algo assim:
DATA: BEGIN OF itbl, campo1 TYPE c, campo2 TYPE c, END OF itbl. READ TABLE itbl WITH KEY campo1 = &amp;#39;X&amp;#39; campo2 = &amp;#39;Y&amp;#39;. LOOP AT itbl WHERE campo1 = &amp;#39;X&amp;#39; and campo2 = &amp;#39;Y&amp;#39;. COISO. ENDLOOP. Mas, e se a tabela não for estruturada e quiseres pesquisar na linha como um todo? Bem, nesse caso, fica aqui a dica: usas a palavra especial TABLE_LINE :</description></item><item><title>Cria variantes de teste em funções a partir do debugger</title><link>https://abapinho.com/2012/02/variantes-de-teste-em-debug/</link><pubDate>Mon, 20 Feb 2012 10:00:42 +0000</pubDate><guid>https://abapinho.com/2012/02/variantes-de-teste-em-debug/</guid><description>&lt;p>Imagina que estás a fazer debug de uma transacção e entras numa função e encontras algo interessante. Tão interessante que tens de lhe fazer debug várias vezes. A via convencional é tornar a iniciar o debug da transacção desde o início. Que seca.&lt;/p>
&lt;p>Mas há uma via mais directa. Quando estás a fazer debug de uma função podes, directamente a partir do debugger, criar dados de teste para essa função com os valores com que a função tiver sido chamada nessa instância. É assim:&lt;/p></description></item><item><title>O histórico do SAPGui não funciona ainda que activo?</title><link>https://abapinho.com/2012/02/sapgui-historico/</link><pubDate>Mon, 06 Feb 2012 10:00:01 +0000</pubDate><guid>https://abapinho.com/2012/02/sapgui-historico/</guid><description>&lt;p>Já te aconteceu o SAPGui não guardar um histórico dos valores que vais introduzindo nos vários campos ainda que, nas configurações, a opção de Histórico esteja activa?&lt;/p></description></item><item><title>Debug em janelas de diálogo modais</title><link>https://abapinho.com/2012/01/debug-em-popups/</link><pubDate>Mon, 09 Jan 2012 10:00:29 +0000</pubDate><guid>https://abapinho.com/2012/01/debug-em-popups/</guid><description>&lt;p>Há determinados momentos em que não é possível fazer /H para iniciar o &lt;em>debugger&lt;/em>. O caso mais comum é durante uma janela de diálogo modal (aquilo que os estrangeiros chamam de &lt;em>popup&lt;/em> ). Mas há uma forma simples, ainda que rocambolesca, para o conseguires:&lt;/p></description></item><item><title>Macros globais</title><link>https://abapinho.com/2011/05/macros-globais/</link><pubDate>Thu, 19 May 2011 18:02:41 +0000</pubDate><guid>https://abapinho.com/2011/05/macros-globais/</guid><description>Noutro artigo falámos de macros, uma funcionalidade relativamente obscura e pouco utilizada que tanto pode ser útil como criar uma grande salganhada. Mas estas não são as únicas macros do ABAP. Há outras, ainda mais obscuras e com ainda maior potencial de enfarelhamento de um sistema: as macros globais.
Nem sei se revele isto de tão esquisito que é&amp;hellip; Mas também não me parece bem escondê-lo&amp;hellip; Seja, revelarei.
É possível definir macros a nível global do sistema que podem ser utilizadas em qualquer programa ABAP.</description></item><item><title>Começar com o pé direito</title><link>https://abapinho.com/2011/04/transaccao-inicial/</link><pubDate>Sat, 23 Apr 2011 09:27:25 +0000</pubDate><guid>https://abapinho.com/2011/04/transaccao-inicial/</guid><description>Quando se faz login no SAP normalmente vai parar-se ao menu. Mas pode usar-se o módulo de função NAVIGATION_SET_START_TCODE para pré-definir uma transacção inicial. Vale o que vale, mas é melhor saber que existe do que não saber que existe e ainda melhor do que sabe que não existe. Quem sabe dê jeito a alguns utilizadores. Existe também o módulo de função NAVIGATION_GET_START_TCODE para ver qual está pré-definida.
O Abapinho saúda-vos.</description></item><item><title>Nem o Luís de Matos faria melhor</title><link>https://abapinho.com/2011/04/call-transaction/</link><pubDate>Thu, 21 Apr 2011 11:26:14 +0000</pubDate><guid>https://abapinho.com/2011/04/call-transaction/</guid><description>Às vezes acontece querermos aceder a uma transacção e não termos permissões. É uma chatice. Felizmente existe o módulo de função ALINK_CALL_TRANSACTION que alivia a situação. Mas usa com cuidado, não vá alguém zangar-se. Bem-vindo ao lado negro do Abapinho. Se disserem que fui eu que disse, nego tudo.
(obrigado aoBohman pela foto)
Actualização: com este módulo de função também lá chegas: CALL_TRANSACTION_FROM_TABLE.
Nova actualização: se os outros falharem tenta este módulo de função: RS_HDSYS_CALL_TC_VARIANT (limpando a flag AUTHORITY_CHECK).</description></item><item><title>Testar na SE37 não grava dados? Grava.</title><link>https://abapinho.com/2009/05/se37-gravar/</link><pubDate>Wed, 20 May 2009 10:40:40 +0000</pubDate><guid>https://abapinho.com/2009/05/se37-gravar/</guid><description>Uma forma prática de aprender a usar um módulo de funções ou verificar se este nos é útil é através da funcionalidade de teste da transacção SE37. Escolhe-se o módulo de função, faz-se F8 (Executar) e tem-se uma forma interactiva de testar uma função.
Isto é óbvio.
O que não será óbvio para toda a gente é que este teste não faz COMMIT à transacção e, por isso, qualquer alteração que a função possa fazer à base de dados - como gerar um documento por exemplo - não é gravada.</description></item><item><title>A transacção N</title><link>https://abapinho.com/2009/05/transaccao-n/</link><pubDate>Thu, 14 May 2009 12:44:21 +0000</pubDate><guid>https://abapinho.com/2009/05/transaccao-n/</guid><description>É intrigante o porquê de, nos dias que correm, a transacção SE16 continuar a ser tão utilizada, quando já existe há tantos anos uma muito melhor, a SE16N.
A transacção SE16N tem mais:
sainete: tem um interface mais dinâmico e sofisticado;
simpatia: mostra em simultâneo a descrição funcional e o nome técnico dos campos;
sabedoria: mostra em simultâneo o valor interno e externo dos campos com rotinas de conversão;
E pode, vejam só, ser também invocada através da transacção N.</description></item></channel></rss>