<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>dicas on Abapinho</title><link>https://abapinho.com/en/categories/dicas/</link><description>Recent content in dicas on Abapinho</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>&amp;copy;2009-2026 Nuno Godinho</copyright><lastBuildDate>Mon, 13 Jul 2026 09:00:00 +0000</lastBuildDate><atom:link href="https://abapinho.com/en/categories/dicas/index.xml" rel="self" type="application/rss+xml"/><item><title>Replace value of an internal table field</title><link>https://abapinho.com/en/2026/07/substituir-campo-em-tabela/</link><pubDate>Mon, 13 Jul 2026 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2026/07/substituir-campo-em-tabela/</guid><description>&lt;p>Now that ABAP has &lt;em>comprehensions&lt;/em>, there are a number of superpowers that aren’t always obvious. Here, I’ll show you how to change the value of a single field in all, several or just one record of an internal table.&lt;/p></description></item><item><title>Who triggered the exception?</title><link>https://abapinho.com/en/2026/06/quem-lancou-a-excepcao/</link><pubDate>Mon, 22 Jun 2026 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2026/06/quem-lancou-a-excepcao/</guid><description>&lt;p>Exceptions can be passed back, method by method, bubbling up, and caught by a method that has nothing to do with the one that raised it. And how will you find it?&lt;/p></description></item><item><title>Attributes that are global variables in disguise</title><link>https://abapinho.com/en/2026/06/atributos-variaveis-globais/</link><pubDate>Mon, 08 Jun 2026 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2026/06/atributos-variaveis-globais/</guid><description>&lt;p>There’s nothing worse than seeing code that abuses variables. They’re so delicate, and yet they’re treated so badly. Poor things. And to those who have to read them. The worst way to treat a variable is to make it global. It’s hard to believe, but in 2025 this crime continues to plague our systems. Well, here’s a way to show them some love.&lt;/p></description></item><item><title>VALUE #( ) and nothing else</title><link>https://abapinho.com/en/2026/04/value-cardinal-mais-nada/</link><pubDate>Mon, 20 Apr 2026 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2026/04/value-cardinal-mais-nada/</guid><description>&lt;p>I once wanted to test a class whose constructor took several parameters, each requiring an instance of a different interface. These instances weren&amp;rsquo;t easy to create and weren&amp;rsquo;t relevant to the test. After some experimenting, I found a way to work around the problem.&lt;/p></description></item><item><title>Test boolean methods implicitly</title><link>https://abapinho.com/en/2026/04/if-metodo-booleano-implicito/</link><pubDate>Mon, 13 Apr 2026 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2026/04/if-metodo-booleano-implicito/</guid><description>&lt;p>A quick reminder. I thought this was obvious but I keep seeing IF statements that explicitly test the result of a boolean method against ABAP_TRUE or using INITIAL. There&amp;rsquo;s no need! ABAP is clever in this regard.&lt;/p></description></item><item><title>Execute code after a COMMIT</title><link>https://abapinho.com/en/2026/02/evento-transaction-finished/</link><pubDate>Mon, 16 Feb 2026 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2026/02/evento-transaction-finished/</guid><description>&lt;p>Remember how with &lt;code>CALL FUNCTION IN UPDATE TASK&lt;/code> you could delay some actions until the moment of a &lt;code>COMMIT&lt;/code>?&lt;/p></description></item><item><title>Tech Radar</title><link>https://abapinho.com/en/2026/01/tech-radar/</link><pubDate>Mon, 19 Jan 2026 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2026/01/tech-radar/</guid><description>&lt;p>I found this amazing chart of SAP technologies.&lt;/p></description></item><item><title>FILTER</title><link>https://abapinho.com/en/2025/11/filter/</link><pubDate>Mon, 03 Nov 2025 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2025/11/filter/</guid><description>&lt;p>The FILTER function is new and still relatively unknown. I will give you an example of how it can be used.&lt;/p></description></item><item><title>Everything Everywhere All At Once</title><link>https://abapinho.com/en/2025/06/eclipse-adt-split-editor/</link><pubDate>Mon, 02 Jun 2025 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2025/06/eclipse-adt-split-editor/</guid><description>&lt;p>Sometimes it&amp;rsquo;s useful to look at two areas of the code at the same time. If the areas are in different classes, just open them both. But what if they&amp;rsquo;re in the same class? For example, if you want to make a method inspired by or related to another.&lt;/p></description></item><item><title>Case insensitive SELECTs</title><link>https://abapinho.com/en/2025/05/select-case-insensitive/</link><pubDate>Mon, 26 May 2025 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2025/05/select-case-insensitive/</guid><description>&lt;p>In SAP it&amp;rsquo;s normal to have tables in the database with a &lt;code>NAME&lt;/code> field and another &lt;code>NAME_SEARCH&lt;/code> which is filled in with exactly the same thing as &lt;code>NAME&lt;/code> but in upper case.&lt;/p>
&lt;p>Then, when you want to do case-insensitive searches you use &lt;code>NAME_SEARCH&lt;/code>. You don&amp;rsquo;t need to do this anymore.&lt;/p></description></item><item><title>Reconstants</title><link>https://abapinho.com/en/2025/02/reconstantes/</link><pubDate>Mon, 17 Feb 2025 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2025/02/reconstantes/</guid><description>&lt;p>In my current project constants are all over the place, with confusing or wrong names. It&amp;rsquo;s a mess. I&amp;rsquo;ve found a way to reorganize and rearrange the constants so that the new code can use pretty constants without messing up the old code, which can continue to use the confusing ones.&lt;/p></description></item><item><title>We finally have FINAL</title><link>https://abapinho.com/en/2025/02/final/</link><pubDate>Mon, 03 Feb 2025 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2025/02/final/</guid><description>&lt;p>There&amp;rsquo;s nothing worse than seeing people abusing variables. They&amp;rsquo;re so delicate and yet so badly treated, poor things. Here&amp;rsquo;s a way to show them some love.&lt;/p></description></item><item><title>How do you like your blank lines?</title><link>https://abapinho.com/en/2024/12/linhas-em-branco/</link><pubDate>Mon, 30 Dec 2024 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2024/12/linhas-em-branco/</guid><description>&lt;p>Everyone uses blank lines to better organize their code. But where to use them and how many? Let&amp;rsquo;s talk about that.&lt;/p></description></item><item><title>In Eclipse ADT you can open an object in another client</title><link>https://abapinho.com/en/2024/10/eclipse-adt-open-in-project/</link><pubDate>Mon, 07 Oct 2024 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2024/10/eclipse-adt-open-in-project/</guid><description>&lt;p>Historically, it has always been impossible to jump from one SAP system to another without losing context. Now it&amp;rsquo;s possible.&lt;/p></description></item><item><title>Eclipse ADT Data browser is much better than SE16N</title><link>https://abapinho.com/en/2024/09/eclipse-adt-data-browser/</link><pubDate>Mon, 30 Sep 2024 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2024/09/eclipse-adt-data-browser/</guid><description>&lt;p>The tools that SAP provides for viewing the contents of database tables have always been very sketchy.&lt;/p></description></item><item><title>In Eclipse ADT you can always undo</title><link>https://abapinho.com/en/2024/06/eclipse-adt-undo/</link><pubDate>Mon, 17 Jun 2024 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2024/06/eclipse-adt-undo/</guid><description>&lt;p>They say: Don&amp;rsquo;t go back to where you were once happy. But the truth is that in many cases, if you could go back, you would.&lt;/p></description></item><item><title>Eclipse ADT has lots and lots of keyboard shortcuts</title><link>https://abapinho.com/en/2024/06/eclipse-adt-keyboard-shortcuts/</link><pubDate>Mon, 10 Jun 2024 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2024/06/eclipse-adt-keyboard-shortcuts/</guid><description>&lt;p>I like keyboard shortcuts. If I could do my job without taking my hands off my keyboard I&amp;rsquo;d be an even happier programmer.&lt;/p></description></item><item><title>In Eclipse ADT you can share links to your code</title><link>https://abapinho.com/en/2024/05/eclipse-adt-share-link/</link><pubDate>Mon, 20 May 2024 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2024/05/eclipse-adt-share-link/</guid><description>&lt;p>Until recently, ABAP has never been one for big collaborations.&lt;/p></description></item><item><title>Eclipse ADT puts ABAP Doc to good use</title><link>https://abapinho.com/en/2024/04/eclipse-adt-abap-doc/</link><pubDate>Mon, 29 Apr 2024 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2024/04/eclipse-adt-abap-doc/</guid><description>&lt;p>ABAP Doc is an excellent way of integrating documentation into the code.&lt;/p></description></item><item><title>The magical F2 in Eclipse ADT</title><link>https://abapinho.com/en/2024/04/eclipse-adt-f2/</link><pubDate>Mon, 22 Apr 2024 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2024/04/eclipse-adt-f2/</guid><description>&lt;p>Eclipse ADT calls it &lt;em>Code element information&lt;/em>.&lt;/p></description></item><item><title>Use BASE to not ruin what you already have</title><link>https://abapinho.com/en/2023/11/base/</link><pubDate>Mon, 06 Nov 2023 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2023/11/base/</guid><description>&lt;p>We used to use the &lt;code>APPEND&lt;/code> and &lt;code>INSERT&lt;/code> commands to add rows to internal tables. Now that ABAP has grown, we can use &lt;code>VALUE&lt;/code>, &lt;code>REDUCE&lt;/code>, &lt;code>CORRESPONDING&lt;/code>, etc. But what if the internal table already has rows and we don&amp;rsquo;t want to lose them?&lt;/p></description></item><item><title>INNER JOIN instead of FOR ALL ENTRIES</title><link>https://abapinho.com/en/2023/10/inner-join-itbl/</link><pubDate>Mon, 30 Oct 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2023/10/inner-join-itbl/</guid><description>&lt;p>A while ago &lt;a href="https://abapinho.com/en/2023/08/select-itbl/">I showed you&lt;/a> that you could SELECT from an internal table. And then I asked myself: if that is possible, shouldn&amp;rsquo;t INNER JOIN be possible too?&lt;/p></description></item><item><title>Copy from SAPGui to the clipboard</title><link>https://abapinho.com/en/2023/09/copy-to-clipboard/</link><pubDate>Mon, 25 Sep 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2023/09/copy-to-clipboard/</guid><description>&lt;p>Did you know that your ABAP programme can copy content to your operating system&amp;rsquo;s clipboard?&lt;/p></description></item><item><title>SELECTing from an internal table</title><link>https://abapinho.com/en/2023/08/select-itbl/</link><pubDate>Mon, 28 Aug 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2023/08/select-itbl/</guid><description>&lt;p>Now you can SELECT from an internal table.&lt;/p></description></item><item><title>SELECT SINGLE vs SELECT UP TO 1 ROWS</title><link>https://abapinho.com/en/2023/06/select-single-vs-select-up-to-1-rows/</link><pubDate>Mon, 12 Jun 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2023/06/select-single-vs-select-up-to-1-rows/</guid><description>&lt;p>Man, this is one of those endless discussions that will never get anywhere. Ditto trying to decide if you deserve to go on living if you put pineapple on your pizza or Philadelphia cheese on your sushi.&lt;/p></description></item><item><title>Call SM30 or SM34 from a function module</title><link>https://abapinho.com/en/2023/06/funcoes-para-sm30/</link><pubDate>Mon, 05 Jun 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2023/06/funcoes-para-sm30/</guid><description>&lt;p>If you want to call the SM30 from a program you can use &lt;code>CALL TRANSACTION&lt;/code> but there is a simpler way.&lt;/p></description></item><item><title>Use a dictionary instead of IF or CASE</title><link>https://abapinho.com/en/2023/05/diccionario-vs-if-ou-case/</link><pubDate>Mon, 29 May 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2023/05/diccionario-vs-if-ou-case/</guid><description>&lt;p>The fewer IFs and CASEs the better, right? Every branch of an IF or a CASE is an exception. And we like rules better than exceptions. Here&amp;rsquo;s one more technique to achieve that.&lt;/p></description></item><item><title>Message collector</title><link>https://abapinho.com/en/2023/01/message-collector/</link><pubDate>Mon, 16 Jan 2023 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2023/01/message-collector/</guid><description>&lt;p>SAP messages are all managed centrally through the &lt;code>SE91&lt;/code> transaction, but can appear to a program in a variety of formats.&lt;/p></description></item><item><title>SELECT single record using an incomplete key</title><link>https://abapinho.com/en/2022/11/up-to-1-rows/</link><pubDate>Mon, 28 Nov 2022 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2022/11/up-to-1-rows/</guid><description>&lt;p>I was always told that, when selecting a single record, I should use &lt;code>UP TO 1 ROWS&lt;/code> whenever the key was not fully provided. My elementary school teacher told me that I should always aks why: why? Nobody ever told me why.&lt;/p></description></item><item><title>Use &amp; in SAPSript texts</title><link>https://abapinho.com/en/2022/11/sapscript-ampersand/</link><pubDate>Mon, 14 Nov 2022 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2022/11/sapscript-ampersand/</guid><description>&lt;p>Let&amp;rsquo;s say you want to show an url in a SAPScript layout. You place the url in a SAPSCript text and assume everything will work fine. Because most times everything does work fine. It&amp;rsquo;s just that sometimes&amp;hellip;&lt;/p></description></item><item><title>Clean data declarations</title><link>https://abapinho.com/en/2022/11/clean-data-declarations/</link><pubDate>Mon, 07 Nov 2022 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2022/11/clean-data-declarations/</guid><description>&lt;p>While writing code, you should always keep present how easy it will be to maintain. This is particularly important in data declarations. And so easy to do right.&lt;/p></description></item><item><title>SELECT FOR UPDATE</title><link>https://abapinho.com/en/2022/05/select-for-update/</link><pubDate>Mon, 23 May 2022 09:09:09 +0100</pubDate><guid>https://abapinho.com/en/2022/05/select-for-update/</guid><description>&lt;p>When you&amp;rsquo;re going to modify existing records of a database table it is common to first &lt;code>SELECT&lt;/code> them to see how they are and only then &lt;code>UPDATE&lt;/code> them with what they will be.&lt;/p></description></item><item><title>Table with all development keys</title><link>https://abapinho.com/en/2022/05/chaves-de-desenvolvimento/</link><pubDate>Mon, 16 May 2022 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2022/05/chaves-de-desenvolvimento/</guid><description>&lt;p>When I get to a new project the system administrator generates a development key for each development system assigned to our SAP username. Usually it&amp;rsquo;s sent to me by e-mail. Usually I lose track of it.&lt;/p></description></item><item><title>Easily modify internal table record</title><link>https://abapinho.com/en/2022/05/modifica-tabela-interna/</link><pubDate>Mon, 09 May 2022 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2022/05/modifica-tabela-interna/</guid><description>&lt;p>The new way to get data from internal tables is also the new way to put data into internal tables.&lt;/p></description></item><item><title>IF branches should be small</title><link>https://abapinho.com/en/2022/05/ifs-curtos/</link><pubDate>Mon, 02 May 2022 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2022/05/ifs-curtos/</guid><description>&lt;p>Picture yourself as a monkey hanging from a tree branch. You want to jump to another branch but it&amp;rsquo;s so far away that you cannot see it. If you jump you&amp;rsquo;ll probably fall to the ground. That&amp;rsquo;s bad.&lt;/p></description></item><item><title>Trotting debugger</title><link>https://abapinho.com/en/2022/04/debug-step/</link><pubDate>Mon, 11 Apr 2022 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2022/04/debug-step/</guid><description>&lt;p>There are many excuses not to use the new functional syntax of ABAP 7.4. One is complaining that it&amp;rsquo;s impossible to debug.&lt;/p>
&lt;p>But it is not.&lt;/p></description></item><item><title>Escape from hackers</title><link>https://abapinho.com/en/2022/03/escape/</link><pubDate>Mon, 28 Mar 2022 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2022/03/escape/</guid><description>&lt;p>Data entered by the user is one of the main vulnerabilities of a programme.&lt;/p></description></item><item><title>Avoid obsolete ABAP</title><link>https://abapinho.com/en/2022/03/obsoletos/</link><pubDate>Mon, 07 Mar 2022 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2022/03/obsoletos/</guid><description>&lt;p>ABAP evolves (even though it stood mostly still for too many years). And as it evolves, it leaves behind some commands and syntax constructions which are replaced by better ones.&lt;/p>
&lt;p>Besides learning what&amp;rsquo;s new it is also important to learn what becomes obsolete.&lt;/p></description></item><item><title>Don't be so negative</title><link>https://abapinho.com/en/2021/11/nao-sejas-do-contra/</link><pubDate>Tue, 30 Nov 2021 09:00:14 +0000</pubDate><guid>https://abapinho.com/en/2021/11/nao-sejas-do-contra/</guid><description>&lt;p>Legibility is very important in all written text. Except, maybe, in &lt;a href="https://cdn.culturagenial.com/imagens/aranha.jpg">concrete poetry&lt;/a>.&lt;/p>
&lt;p>As a follow up to the &lt;a href="https://abapinho.com/en/2021/11/as-condicoes-if-devem-ser-simples-de-entender/">previous post&lt;/a>, here are a couple of rules to help you deal with the negative in boolean expressions.&lt;/p></description></item><item><title>IF conditions should be simple to read</title><link>https://abapinho.com/en/2021/11/as-condicoes-if-devem-ser-simples-de-entender/</link><pubDate>Mon, 01 Nov 2021 09:00:45 +0000</pubDate><guid>https://abapinho.com/en/2021/11/as-condicoes-if-devem-ser-simples-de-entender/</guid><description>&lt;p>Because&amp;hellip;why should they be complex to read? It would only make it harder to maintain in the future.&lt;/p>
&lt;p>Just because an IF condition is complex doesn&amp;rsquo;t mean it has to be complicated.&lt;/p></description></item><item><title>SELECT with CASE</title><link>https://abapinho.com/en/2021/10/select-com-case/</link><pubDate>Mon, 25 Oct 2021 13:20:22 +0000</pubDate><guid>https://abapinho.com/en/2021/10/select-com-case/</guid><description>&lt;p>ABAP SQL is becoming more and more interesting and powerful. My latest discovery is the ability to use CASE in SELECT.&lt;/p></description></item><item><title>Insert without raising exception in internal table with unique key</title><link>https://abapinho.com/en/2021/07/insert-into-table/</link><pubDate>Mon, 05 Jul 2021 09:00:51 +0000</pubDate><guid>https://abapinho.com/en/2021/07/insert-into-table/</guid><description>&lt;p>How many times in your ABAP consultant life did you have to deal with dumps happening as a consequence of a program trying to insert duplicate lines into an internal table defined with a UNIQUE KEY?&lt;/p>
&lt;p>Enough.&lt;/p></description></item><item><title>Manually populate a LISTBOX</title><link>https://abapinho.com/en/2021/06/popula-manulamente-listbox/</link><pubDate>Mon, 14 Jun 2021 12:47:10 +0000</pubDate><guid>https://abapinho.com/en/2021/06/popula-manulamente-listbox/</guid><description>&lt;p>In 2012 I &lt;a href="https://abapinho.com/en/2012/10/ninguemligaaolistbox/">wondered why LISTBOX is so rarely used&lt;/a>. I taught how to use it with standard data elements, which automatically populate it. Today I&amp;rsquo;ll teach you how you can populate it yourself.&lt;/p></description></item><item><title>SELECTION-SCREEN FUNCTION KEY N</title><link>https://abapinho.com/en/2021/06/selection-screen-function-key-n/</link><pubDate>Mon, 07 Jun 2021 09:00:33 +0000</pubDate><guid>https://abapinho.com/en/2021/06/selection-screen-function-key-n/</guid><description>&lt;p>There&amp;rsquo;s so many things you can do on the selection screen. Here&amp;rsquo;s another one: five buttons in the toolbar.&lt;/p></description></item><item><title>Send emails to a distribution list</title><link>https://abapinho.com/en/2021/05/lista-de-distribuicao/</link><pubDate>Mon, 31 May 2021 09:00:56 +0000</pubDate><guid>https://abapinho.com/en/2021/05/lista-de-distribuicao/</guid><description>&lt;p>When you need to send an email to multiple email addresses, the usual approach is to store that list of email addresses in a custom table and then add each one as recipient to the BCS request.&lt;/p>
&lt;p>But I recently learned a much nicer way to achieve the same result.&lt;/p></description></item><item><title>Change selection screen texts without hard coding them</title><link>https://abapinho.com/en/2021/05/manipula-textos-de-seleccao/</link><pubDate>Mon, 24 May 2021 09:00:11 +0000</pubDate><guid>https://abapinho.com/en/2021/05/manipula-textos-de-seleccao/</guid><description>&lt;p>Even though many ABAP programmers tend to forget this, the less texts you hard code in your program the simpler it will be to translate it.&lt;/p>
&lt;p>Here&amp;rsquo;s a simple but rather obscure way to manipulate selection screen texts while still being able to translate then. This way you can, for example, prefix them with icons.&lt;/p></description></item><item><title>Call RFC functions AS SEPARATE UNIT</title><link>https://abapinho.com/en/2021/05/as-separate-unit/</link><pubDate>Mon, 17 May 2021 09:00:43 +0000</pubDate><guid>https://abapinho.com/en/2021/05/as-separate-unit/</guid><description>Imagine that you are calling an RFC function module several times in a row. Maybe you think that each call is completely independent from the others. It is not. The remote function group remains in memory and so does its global data. That global data will be reused on every call.
This is probably irrelevant in most cases. But there will be scenarios in which, for some reason, the function module being called is storing data in global variables which will negatively affect the outcome of the subsequent calls.</description></item><item><title>Local dummy functions named after remote RFC functions</title><link>https://abapinho.com/en/2021/05/funcoes-manequins/</link><pubDate>Mon, 10 May 2021 09:00:54 +0000</pubDate><guid>https://abapinho.com/en/2021/05/funcoes-manequins/</guid><description>I recently started working in a new customer and noticed something they do here which I really liked. Whenever they need to call a remote function module by RFC in another SAP system, they create a local function module with the same name and leave it empty, except for a comment explaining that it is a dummy function for that remote function call.
Thanks to this simple trick, one can use the where-used tool to find out where it is being called.</description></item><item><title>Reset SAP note implementation</title><link>https://abapinho.com/en/2020/08/desfazer-implementacao-de-nota-sap/</link><pubDate>Thu, 13 Aug 2020 09:00:32 +0000</pubDate><guid>https://abapinho.com/en/2020/08/desfazer-implementacao-de-nota-sap/</guid><description>&lt;p>I remember when SAP notes had to be inserted by hand. Copy paste and pray that no mistake was made. Wild.&lt;/p>
&lt;p>I actually remember a project which, for some strange obscure reason, instead of upgrading, decided to implement hundreds and hundreds of notes by hand. They printed them all and made a huge pile of paper and about 10 ABAP consultants spent the whole weekend trying to process the whole pile. We did it. But I have no idea what were the consequences and how many bugs were introduced. Many for sure.&lt;/p></description></item><item><title>Table lookup without having to deal with CX_SY_ITAB_LINE_NOT_FOUND</title><link>https://abapinho.com/en/2020/06/lookup-em-tabela-sem-ter-de-lidar-com-a-excepcao-cx_sy_itab_line_not_found/</link><pubDate>Mon, 15 Jun 2020 09:00:08 +0000</pubDate><guid>https://abapinho.com/en/2020/06/lookup-em-tabela-sem-ter-de-lidar-com-a-excepcao-cx_sy_itab_line_not_found/</guid><description>&lt;p>Before the modernization of ABAP in 7.40, a table lookup required an auxiliary variable and at least 4 lines of code.&lt;/p></description></item><item><title>Convert amount to numeric external format</title><link>https://abapinho.com/en/2020/06/converter-montante-para-formato-externo-numerico/</link><pubDate>Tue, 02 Jun 2020 09:09:10 +0000</pubDate><guid>https://abapinho.com/en/2020/06/converter-montante-para-formato-externo-numerico/</guid><description>&lt;p>As is well known, SAP stores amounts internally in variables with 2 decimal places. When we want to convert it to its external format, we use WRITE with the CURRENCY option. But WRITE writes to an alphanumeric variable. What if we need to write it to a numeric variable?&lt;/p></description></item><item><title>Quick Cut and Paste</title><link>https://abapinho.com/en/2020/05/cortar-e-inserir-rapidamente/</link><pubDate>Tue, 26 May 2020 09:00:36 +0000</pubDate><guid>https://abapinho.com/en/2020/05/cortar-e-inserir-rapidamente/</guid><description>&lt;p>I learned yet another small obscure SAPGui functionality. How to speed up copy and paste.&lt;/p></description></item><item><title>Clean ABAP</title><link>https://abapinho.com/en/2020/05/clean-abap/</link><pubDate>Wed, 13 May 2020 12:54:21 +0000</pubDate><guid>https://abapinho.com/en/2020/05/clean-abap/</guid><description>&lt;p>For many years, when confronted with ABAP OO, most ABAPers I talked to, acknowledged that OO is great for most languages but never saw any real advantage in adopting it for ABAP. So they carry on using FORMs, INCLUDEs and CALL FUNCTIONs. The standard SAP code sets the example by trying to make something work while breaking every possible programming best practice.&lt;/p></description></item><item><title>NOT</title><link>https://abapinho.com/en/2020/04/nao/</link><pubDate>Tue, 28 Apr 2020 12:08:03 +0000</pubDate><guid>https://abapinho.com/en/2020/04/nao/</guid><description>&lt;p>No,
ABAP
&lt;a href="https://blogs.sap.com/2014/09/29/abap-news-for-740-sp08-logical-expressions/#comment-82607">will never have&lt;/a>
the NOT operator.&lt;/p></description></item><item><title>MOVE-CORRESPONDING between two tables with automatic look up</title><link>https://abapinho.com/en/2020/03/move-corresponding-entre-duas-tabelas-respeitando-a-chave/</link><pubDate>Mon, 23 Mar 2020 09:00:04 +0000</pubDate><guid>https://abapinho.com/en/2020/03/move-corresponding-entre-duas-tabelas-respeitando-a-chave/</guid><description>&lt;p>Abapinho hasn&amp;rsquo;t been talking a lot about 7.40 because most of the new possibilities have already been widely discussed in other sites and we don&amp;rsquo;t want to reinvent the wheel.&lt;/p>
&lt;p>But, here and there, I find small useful jewels which seem to still be under the radar. This is one of them.&lt;/p></description></item><item><title>Get unique values of an internal table field</title><link>https://abapinho.com/en/2020/03/obtem-valores-unicos-de-campo-de-tabela-interna/</link><pubDate>Mon, 16 Mar 2020 09:00:08 +0000</pubDate><guid>https://abapinho.com/en/2020/03/obtem-valores-unicos-de-campo-de-tabela-interna/</guid><description>&lt;p>In SQL you can get a list of unique values of a field using DISTINCT. When the data is already in an internal table, before ABAP 7.40 you had to use a LOOP and a COLLECT.&lt;/p>
&lt;p>But now that we live in more modern times, there is a simpler and more elegant way to achieve the same with a single command.&lt;/p></description></item><item><title>How to render CL_GUI_ALV_GRID in background</title><link>https://abapinho.com/en/2020/03/como-correr-uma-cl_gui_alv_grid-em-background/</link><pubDate>Mon, 09 Mar 2020 09:00:48 +0000</pubDate><guid>https://abapinho.com/en/2020/03/como-correr-uma-cl_gui_alv_grid-em-background/</guid><description>&lt;p>Someone decided to run an editable ALV (based on CL_GUI_ALV_GRID) in background. It dumped. The solution is simple but not that obvious.&lt;/p></description></item><item><title>Use CL_GUI_ALV_GRID without having to create a screen</title><link>https://abapinho.com/en/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/en/2020/03/usa-cl_gui_alv_grid-sem-ter-de-criar-um-ecra/</guid><description>&lt;p>Nowadays I rarely use CL_GUI_ALV_GRID because SALV is so much better. But when I am asked to make an editable ALV I still use it. Until very recently, I thought that, in order to use it, I needed a screen with a container. And because I&amp;rsquo;m using ABAP OO, I&amp;rsquo;d need a function group to host it and a function module to call it. Painful.&lt;/p></description></item><item><title>How to resize an ALV grid to fill the whole window</title><link>https://abapinho.com/en/2020/02/como-fazer-uma-alv-grid-ocupar-a-janela-inteira/</link><pubDate>Mon, 10 Feb 2020 13:22:15 +0000</pubDate><guid>https://abapinho.com/en/2020/02/como-fazer-uma-alv-grid-ocupar-a-janela-inteira/</guid><description>&lt;p>Sometimes the simplest things take the longest time to do. For instance, we recently needed an ALV grid to automatically resize to fill the whole window. But how? But how? But how?&lt;/p></description></item><item><title>All SAP demo code under the same roof</title><link>https://abapinho.com/en/2020/01/demos-da-sap-todos-juntos/</link><pubDate>Thu, 23 Jan 2020 09:00:03 +0000</pubDate><guid>https://abapinho.com/en/2020/01/demos-da-sap-todos-juntos/</guid><description>&lt;p>When I was a little boy, back in the 80&amp;rsquo;s, I had to type &lt;code>LOAD &amp;quot;&amp;quot;&lt;/code> and then wait for several minutes staring at stripes in a TV and listening to strange noises before a ZX Spectrum game was ready to be played. Many years later, when I already had a PC, I found an emulator which had a menu with hundreds of ZX Spectrum games. I just had to pick one from the list and start playing immediately.&lt;/p></description></item><item><title>I started using " instead of * for comments</title><link>https://abapinho.com/en/2020/01/passei-a-comentar-com-aspas/</link><pubDate>Wed, 15 Jan 2020 09:00:18 +0000</pubDate><guid>https://abapinho.com/en/2020/01/passei-a-comentar-com-aspas/</guid><description>&lt;p>I have always used * to comment my code. I only used &amp;quot; for pseudo-comments or to leave small comment at the end of a line.&lt;/p>
&lt;p>But I recently learned that using &amp;quot; makes much more sense.&lt;/p></description></item><item><title>It's now so simple to convert a MESSAGE into an EXCEPTION</title><link>https://abapinho.com/en/2019/11/converter-message-em-exception/</link><pubDate>Mon, 04 Nov 2019 10:30:44 +0000</pubDate><guid>https://abapinho.com/en/2019/11/converter-message-em-exception/</guid><description>&lt;p>Some years agor I &lt;a href="https://abapinho.com/en/2015/06/converter-excepcao-em-classe-de-excepcao/">showed how to convert a normal MESSAGE into a typified exception&lt;/a>. Meanwhile ABAP evolved a lot and now, since version 7.40, that complex solution is no longer needed.&lt;/p></description></item><item><title>Show internal table content on an ALV</title><link>https://abapinho.com/en/2019/09/alv-tabela-interna/</link><pubDate>Mon, 30 Sep 2019 09:00:54 +0000</pubDate><guid>https://abapinho.com/en/2019/09/alv-tabela-interna/</guid><description>&lt;p>I don&amp;rsquo;t know for how long has this been available but I just now found out about it. In the debugger it is, after all, super easy to see the content of an internal table in an ALV.&lt;/p></description></item><item><title>Magical shortcuts to menus</title><link>https://abapinho.com/en/2019/09/atalhos-magicos-para-menus/</link><pubDate>Tue, 10 Sep 2019 09:00:02 +0000</pubDate><guid>https://abapinho.com/en/2019/09/atalhos-magicos-para-menus/</guid><description>&lt;p>If you, who are reading this, believe that everything written in Abapinho is literally true, what I&amp;rsquo;m about to tell you will be a disappointment: when I said magical I didn&amp;rsquo;t mean that it was supernatural. It is just a nicer way of saying it is surprising and unexpected. I took this liberty just as you&amp;rsquo;d say &amp;ldquo;I could kill for a glass of water&amp;rdquo; knowing that you would never do it. Having made this clear, let&amp;rsquo;s continue.&lt;/p></description></item><item><title>Shortcut to save list local file</title><link>https://abapinho.com/en/2019/09/atalho-para-gravar-lista-em-ficheiro-local/</link><pubDate>Wed, 04 Sep 2019 09:00:54 +0000</pubDate><guid>https://abapinho.com/en/2019/09/atalho-para-gravar-lista-em-ficheiro-local/</guid><description>&lt;p>SAP is full of hidden corners rarely visited. Abapinho is happy to shed some light on them.&lt;/p>
&lt;p>The command %pc is equivalent to the menu option System/List/Save/Local file:&lt;/p></description></item><item><title>IF without IS INITIAL in boolean methods</title><link>https://abapinho.com/en/2019/08/if-sem-is-initial-em-metodos-booleanos/</link><pubDate>Tue, 27 Aug 2019 09:00:07 +0000</pubDate><guid>https://abapinho.com/en/2019/08/if-sem-is-initial-em-metodos-booleanos/</guid><description>&lt;p>My current client&amp;rsquo;s system is finally being upgraded to 7.50 and, after all these years stuck with the old ABAP, I am now finally able to enjoy the wonders introduced in 7.40.&lt;/p>
&lt;p>There are dozens of these wonders and I don&amp;rsquo;t intend to start making a post on all of them as there is already so much quality information on most of them. Besides, Abapinho always tries to write about something new or, at least, not very known.&lt;/p>
&lt;p>But this simple functionality, although not that extraordinary, pleases me: you no longer need to add IS INITIAL in an IF command when the condition is a method returning a boolean.&lt;/p></description></item><item><title>SAAB activation variants</title><link>https://abapinho.com/en/2019/07/saab-variantes/</link><pubDate>Thu, 25 Jul 2019 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2019/07/saab-variantes/</guid><description>&lt;p>Some time ago we spoke about SAAB and its advantages as a tool to analyse, debug and find problems in our code. In that article we didn&amp;rsquo;t explore an important aspect of it: Activation variants.&lt;/p></description></item><item><title>Implicit enhancements in data structures</title><link>https://abapinho.com/en/2019/05/enhancements-implicitos-em-estruturas-de-dados/</link><pubDate>Mon, 13 May 2019 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2019/05/enhancements-implicitos-em-estruturas-de-dados/</guid><description>&lt;p>We have all used implicit enhancements to add code to the beginning or end of a standard function, form or method. But you may not know that it can also be used to add fields to data structures, whether they&amp;rsquo;re declared as TYPES or directly as DATA.&lt;/p></description></item><item><title>A comment on comments</title><link>https://abapinho.com/en/2018/11/comentario-sobre-comentarios/</link><pubDate>Mon, 26 Nov 2018 09:00:19 +0000</pubDate><guid>https://abapinho.com/en/2018/11/comentario-sobre-comentarios/</guid><description>&lt;p>We learn in school that all code should have comments. Then, in real life, we find that not everyone was paying attention to what was said in school. As a consequence, most code is obscure and without proper comments.&lt;/p>
&lt;p>I was always careful to comment every relevant step of my code, specially the parts which are obscure or not self-explanatory.&lt;/p>
&lt;p>But since I recently read &lt;a href="https://en.wikipedia.org/wiki/Robert_C._Martin">Uncle Bob&lt;/a>&amp;rsquo;s &lt;em>&lt;a href="https://www.goodreads.com/book/show/3735293-clean-code">Clean Code&lt;/a>&lt;/em> , my opinion on this changed. Today I believe that the less comments the better. And yet, I don&amp;rsquo;t see this as contradictory to what I used to think.&lt;/p></description></item><item><title>The multiple clocks of your SAP system</title><link>https://abapinho.com/en/2018/10/os-varios-relogios-do-teu-sistema-sap/</link><pubDate>Mon, 22 Oct 2018 09:00:08 +0000</pubDate><guid>https://abapinho.com/en/2018/10/os-varios-relogios-do-teu-sistema-sap/</guid><description>&lt;p>Even though you look at an SAP system as a whole, it is composed by several distinct and interconnected parts. There is a small standard program which checks if each part&amp;rsquo;s clock is correct and synchronised.&lt;/p>
&lt;p>It probably won&amp;rsquo;t be of much use for your daily work. Still, it&amp;rsquo;s an interesting curiosity.&lt;/p></description></item><item><title>Inject ABAP commands into a productive system</title><link>https://abapinho.com/en/2018/10/injectar-comandos-abap-num-sistema-produtivo/</link><pubDate>Mon, 08 Oct 2018 09:00:50 +0000</pubDate><guid>https://abapinho.com/en/2018/10/injectar-comandos-abap-num-sistema-produtivo/</guid><description>The view below shows how simple it is to create the conditions to inject ABAP commands into programs in a productive system.
I considered whether to publish this. But, as it already happened in the past, I believe it is better for this to be known because it is very important for system administrators to be aware of this so they can protect their systems against this threat.
Thank you Ricardo Monteiro for the tip.</description></item><item><title>Transport a local table with its maintenance screens</title><link>https://abapinho.com/en/2018/10/transporta-ecras-de-manutencao-de-tabela/</link><pubDate>Mon, 01 Oct 2018 12:47:47 +0000</pubDate><guid>https://abapinho.com/en/2018/10/transporta-ecras-de-manutencao-de-tabela/</guid><description>&lt;p>Some time ago you created a table and its maintenance screens as local objects.&lt;/p>
&lt;p>When, later, you regret it and decide to transport the table, how will you be able to also transport the maintenance screens?&lt;/p>
&lt;p>Transporting the maintenance screens function group together with the table is not enough.&lt;/p></description></item><item><title>Test a sequence of function modules in SE37</title><link>https://abapinho.com/en/2018/07/testa-uma-sequencia-de-funcoes-na-se37/</link><pubDate>Mon, 09 Jul 2018 09:00:17 +0000</pubDate><guid>https://abapinho.com/en/2018/07/testa-uma-sequencia-de-funcoes-na-se37/</guid><description>&lt;p>I was sure I had already posted about this before but I can&amp;rsquo;t find it so here it goes (again?).&lt;/p>
&lt;p>Some function modules save global data which must then be used by another function module belonging to the same function group. So, if you need to test them, they must run in sequence inside the same transaction.&lt;/p>
&lt;p>Everybody knows you can use SE37 to test a function module. What few people know is that you can also use SE37 to test a sequence of function modules inside the same transaction. Those who don&amp;rsquo;t know this end up creating a small program to call those functions in sequence and that&amp;rsquo;s also ok. But here&amp;rsquo;s how you can avoid that.&lt;/p></description></item><item><title>Have extra control over your selection screen</title><link>https://abapinho.com/en/2018/03/controla-ecra-seleccao/</link><pubDate>Mon, 12 Mar 2018 09:00:08 +0000</pubDate><guid>https://abapinho.com/en/2018/03/controla-ecra-seleccao/</guid><description>&lt;p>The PARAMETERS and SELECT-OPTIONS already have some configuration options. But sometimes you need more control, more customising. Interestingly, although it&amp;rsquo;s not simple nor obvious, it can be done through a standard function module.&lt;/p></description></item><item><title>Debug on a user without debug permissions</title><link>https://abapinho.com/en/2018/03/debug-sem-permissoes/</link><pubDate>Mon, 05 Mar 2018 09:00:48 +0000</pubDate><guid>https://abapinho.com/en/2018/03/debug-sem-permissoes/</guid><description>&lt;p>In a well protected system, normal users don&amp;rsquo;t have debug permissions. Very often, this makes it harder for ABAP programmers to help solve the users&amp;rsquo; problems, not being able to debug directly in their session.&lt;/p>
&lt;p>But there is a legit, albeit obscure, work-around for this problem.&lt;/p></description></item><item><title>Edit standard programs without a key</title><link>https://abapinho.com/en/2018/02/editar-objectos-standard/</link><pubDate>Mon, 12 Feb 2018 09:00:22 +0000</pubDate><guid>https://abapinho.com/en/2018/02/editar-objectos-standard/</guid><description>&lt;p>Here we are again facing a dilemma: hide something because it is dangerous and someone can do bad things using this information or teach it because it would be condescending to presume the readers are not responsible enough to know it. Dictatorships usually go for the first: burning books, censorship, etc. Abapinho like to believe that its readers are responsible people and deserve the right to know.&lt;/p>
&lt;p>Thus, here it is. No, it&amp;rsquo;s not a user manual on how to enrich uranium nor a formula for homemade nitroglycerin. But it&amp;rsquo;s something similar: a trick that allows you to change standard objects without the need for a key.&lt;/p></description></item><item><title>Edit transport requests even if they don't let you</title><link>https://abapinho.com/en/2018/01/altera-ordens-de-transporte/</link><pubDate>Mon, 22 Jan 2018 09:00:15 +0000</pubDate><guid>https://abapinho.com/en/2018/01/altera-ordens-de-transporte/</guid><description>&lt;p>As we all know, system adminstrators are very bad, cold blooded and cruel people. To prove it you just need to read the &lt;a href="http://bofharchive.com/">Bastard Operator from Hell&lt;/a>.&lt;/p>
&lt;p>We, ABAP programmers, are hopeless victims in the hands of these evil creatures.&lt;/p>
&lt;p>But not always do we have to be smashed under their hairy fingers.&lt;/p></description></item><item><title>Show values in SE16N without conversion exit</title><link>https://abapinho.com/en/2017/12/mostra-valores-nao-convertidos-na-se16n/</link><pubDate>Mon, 11 Dec 2017 09:00:35 +0000</pubDate><guid>https://abapinho.com/en/2017/12/mostra-valores-nao-convertidos-na-se16n/</guid><description>&lt;p>By default SE16N always shows the values in the external format, applying the conversion exit to all of them. Until recently, I used to go the ancient SE17 whenever I needed to see them in their internal format. But Rui Nunes told me how to do it in SE16N.&lt;/p></description></item><item><title>Abracadabra reveals secret parameter</title><link>https://abapinho.com/en/2017/10/parametro-secreto/</link><pubDate>Mon, 23 Oct 2017 09:00:29 +0000</pubDate><guid>https://abapinho.com/en/2017/10/parametro-secreto/</guid><description>Here&amp;rsquo;s a not very orthodox wat to deal with a report&amp;rsquo;s selection screen.
Sometimes you may need to have a special parameter which you prefer to hide from normal users but still need access to. Example: a flag to activate a debug/trace mode. I&amp;rsquo;ll show you how you can do this by just typing the magic word, ABRACADABRA.
It goes like this:
DATA: unhide_parameters TYPE flag. PARAMETERS: p_debug AS CHECKBOX. AT SELECTION-SCREEN.</description></item><item><title>Classe para garantir segurança em programação dinâmica</title><link>https://abapinho.com/en/2017/07/classe-garantir-seguranca-programacao-dinamica/</link><pubDate>Wed, 26 Jul 2017 09:00:33 +0000</pubDate><guid>https://abapinho.com/en/2017/07/classe-garantir-seguranca-programacao-dinamica/</guid><description>&lt;p>I recently found a program which was generating an SQL statement by concatenating several variables with fixed SQL parts. But, either by not paying attention or simple ignorance, the person who did it, thought it would make sense to associate a text-symbol to each of these variables with. Something like this:&lt;/p></description></item><item><title>SALV consistency report</title><link>https://abapinho.com/en/2017/07/relatorio-consistencia-salv/</link><pubDate>Tue, 18 Jul 2017 09:00:08 +0000</pubDate><guid>https://abapinho.com/en/2017/07/relatorio-consistencia-salv/</guid><description>&lt;p>Sometimes a SALV has inconsistencies which can go unnoticed. For example, if its structure has an amount field which doesn&amp;rsquo;t have an associated currency field:&lt;/p></description></item><item><title>Go into a transaction skipping its selection screen</title><link>https://abapinho.com/en/2017/07/transaccao-sem-ecra-de-seleccao/</link><pubDate>Wed, 12 Jul 2017 09:00:53 +0000</pubDate><guid>https://abapinho.com/en/2017/07/transaccao-sem-ecra-de-seleccao/</guid><description>Once again SAPGui surprises me with yet another obscure shortcut I didn&amp;rsquo;t know about.
Let&amp;rsquo;s use the customer display transaction XD03 as an example:
Go into the transaction&amp;rsquo;s selection screen with /NXD03
Fill in the customer number an press ENTER to display its details
Do whatever it is you want to do there and get out of it
Suddenly&amp;hellip; you remember that you needed to do something else there
Instead of /NXD03 type /*XD03</description></item><item><title>Copy a Code Inspector variant to another system</title><link>https://abapinho.com/en/2017/05/copiar-variante-do-code-inspector/</link><pubDate>Mon, 08 May 2017 09:00:09 +0000</pubDate><guid>https://abapinho.com/en/2017/05/copiar-variante-do-code-inspector/</guid><description>In my current customer, I have three development systems. There used to be only one. And that&amp;rsquo;s where I customized and fine tuned the Code Inspector_ variant I use to run Abap Test Cockpit.
When the other two appeared, before manually copying the variant into them, I decided to investigate a little bit. Much to my surprise, I found in GitHun project upDOWNci which does exactly what I needed: export and import Code Inspector Now, copying the variant was a piece of cake.</description></item><item><title>Physical vs logical folders</title><link>https://abapinho.com/en/2017/03/pasta-fisica-vs-pasta-logica/</link><pubDate>Mon, 20 Mar 2017 09:00:30 +0000</pubDate><guid>https://abapinho.com/en/2017/03/pasta-fisica-vs-pasta-logica/</guid><description>&lt;p>If in your report called APP1 you need to save a file in a server folder (ex.: /export/app1/) and you don&amp;rsquo;t want it to be a selection screen parameter, how do you do it?&lt;/p></description></item><item><title>Automatically close the doors you open</title><link>https://abapinho.com/en/2017/03/close-doors-automatically/</link><pubDate>Mon, 13 Mar 2017 09:00:21 +0000</pubDate><guid>https://abapinho.com/en/2017/03/close-doors-automatically/</guid><description>You&amp;rsquo;re in the editor. You type ( or [ or { or &amp;rsquo; and SAP is dumb and doesn&amp;rsquo;t close it right away like a proper IDE would.
Well,
Click on the lower right corner icon which gives you access to the SAPGui options where you configure code templates.
In the formatting option, activate Enable Auto Brackets and voilá, SAP will now automatically close any doors you open.
I don&amp;rsquo;t see why this isn&amp;rsquo;t set by default.</description></item><item><title>ASSERT vs Exception</title><link>https://abapinho.com/en/2017/01/excepcao-vs-assert/</link><pubDate>Mon, 23 Jan 2017 09:00:56 +0000</pubDate><guid>https://abapinho.com/en/2017/01/excepcao-vs-assert/</guid><description>&lt;p>If you read Abapinho you already know how much I like exception classes. But this is not the only ABAP mechanism for dealing with errors.&lt;/p>
&lt;p>There is another one, called ASSERT, which should be used more often.&lt;/p></description></item><item><title>The curious case of the partially protected structure</title><link>https://abapinho.com/en/2016/12/o-estranho-caso-da-estrutura-parcialmente-protegida/</link><pubDate>Mon, 26 Dec 2016 09:00:10 +0000</pubDate><guid>https://abapinho.com/en/2016/12/o-estranho-caso-da-estrutura-parcialmente-protegida/</guid><description>&lt;p>The other day I was trying (and failing) to modify a line of a SORTED TABLE.&lt;/p></description></item><item><title>Weird things happen when you pass SY-TABIX as a parameter</title><link>https://abapinho.com/en/2016/12/sy-tabix-por-parametro/</link><pubDate>Mon, 19 Dec 2016 09:00:47 +0000</pubDate><guid>https://abapinho.com/en/2016/12/sy-tabix-por-parametro/</guid><description>The other day a very strange thing happened to me. I was sending SY-TABIX as a parameter into a method. Before the call it contained 1 but, once inside, the parameter&amp;rsquo;s value was 0. Weird.
o_thingalizer-&amp;gt;very_strange_thing(sy-tabix). I was hearing &amp;ldquo;Why?! Why?!&amp;rdquo; repeatedly inside my head.
But suddenly I understood it!
When you send some field of the SYST as a by parameter you have to pass it by value and not by reference.</description></item><item><title>Convert class exception to BAPIRET2</title><link>https://abapinho.com/en/2016/12/converte-classe-excepcao-numa-bapiret2/</link><pubDate>Mon, 12 Dec 2016 09:00:06 +0000</pubDate><guid>https://abapinho.com/en/2016/12/converte-classe-excepcao-numa-bapiret2/</guid><description>&lt;p>Some time ago I wrote an article explaining a way to automatically &lt;a href="https://abapinho.com/en/2015/06/converter-excepcao-em-classe-de-excepcao/">convert classic exceptions to exception classes&lt;/a>. Today I use this technique in almost all the exception classes that I create (and I&amp;rsquo;ve even improved it, but I&amp;rsquo;ll leave that for another post).&lt;/p>
&lt;p>This tip explains the exact opposite.&lt;/p></description></item><item><title>Ignore indentions when comparing version</title><link>https://abapinho.com/en/2016/12/comparar-versoes-ignorando-as-indentacoes/</link><pubDate>Mon, 05 Dec 2016 09:00:31 +0000</pubDate><guid>https://abapinho.com/en/2016/12/comparar-versoes-ignorando-as-indentacoes/</guid><description>Sometimes, when comparing versions, several differences show up even when we did not make changes to the code. These differences may simply be a consequence of a Pretty Printer that altered code indentations. This makes comparing the versions confusing.
But ABAP Workbench lets you configure the diff tool to ignore indentations and even comments.
Just press F5 while there or go to the &amp;ldquo;Display Format&amp;gt; Settings&amp;rdquo; menu and adapt it to your needs:</description></item><item><title>Use a Standadrd GUI status without copying it</title><link>https://abapinho.com/en/2016/11/gui-status-standard/</link><pubDate>Mon, 28 Nov 2016 09:00:02 +0000</pubDate><guid>https://abapinho.com/en/2016/11/gui-status-standard/</guid><description>&lt;p>When you want to use CL_GUI_ALV_GRID in a CONTAINER you must copy a standard Status GUI from another program. For example, the GUI Status &amp;ldquo;STANDARD&amp;rdquo; of the function group SALV. And then, in the screen&amp;rsquo;s PAI you do:&lt;/p>
&lt;p>SET PF-STATUS &amp;lsquo;STANDARD&amp;rsquo;.&lt;/p>
&lt;p>And thus the little standard buttons show up on your screen.&lt;/p></description></item><item><title>Create templates in SE80 by dragging stuff into the code</title><link>https://abapinho.com/en/2016/11/modelos-na-se80-arrastando-para-o-codigo/</link><pubDate>Mon, 14 Nov 2016 09:00:26 +0000</pubDate><guid>https://abapinho.com/en/2016/11/modelos-na-se80-arrastando-para-o-codigo/</guid><description>&lt;p>While coding, it&amp;rsquo;s always good to have ways to speed up what we&amp;rsquo;re doing. A good one is automatic generation of templates for function and method calls.&lt;/p>
&lt;p>I know 3 ways to achieve this.&lt;/p></description></item><item><title>DDIC structure key</title><link>https://abapinho.com/en/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/en/2016/11/definir-a-chave-de-uma-estrutura-do-ddic/</guid><description>&lt;p>Today when I want to create a SALV I always create a DDIC structure with the data elements already set to show the texts I need. This avoids the need for code to manipulate the field catalog.&lt;/p></description></item><item><title>Find everything at once</title><link>https://abapinho.com/en/2016/10/find-everything-at-once/</link><pubDate>Mon, 24 Oct 2016 09:00:11 +0000</pubDate><guid>https://abapinho.com/en/2016/10/find-everything-at-once/</guid><description>&lt;p>The ABAP editor is full of functionalities yet to be discovered.&lt;/p>
&lt;p>When I do CTRL-F to search for text, the option I usually choose is &amp;ldquo;Find next&amp;rdquo;.&lt;/p></description></item><item><title>APPEND STRUCTURES do more stuff than I thought</title><link>https://abapinho.com/en/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/en/2016/10/append-structures-do-more-stuff-than-i-thought/</guid><description>&lt;p>During all my ABAPian life I was convinced that APPEND STRUCTURES had one single purpose: to add new extra fields to an existing standard table.&lt;/p>
&lt;p>But I recently learned that they let you do two more things after all:&lt;/p></description></item><item><title>Search form methods, attributes, types, events, etc</title><link>https://abapinho.com/en/2016/08/pesquisa-metodos-atributos-tipos-eventos-etc/</link><pubDate>Wed, 24 Aug 2016 09:00:51 +0000</pubDate><guid>https://abapinho.com/en/2016/08/pesquisa-metodos-atributos-tipos-eventos-etc/</guid><description>You remember having written a method some years ago which you need now. You know it had the word MALMEQUER somewhere in its name. But what now? How will you find it?
You could use transaction SE24 to look at every class you worked on since then. But that would probably keep you busy for ages. Don&amp;rsquo;t do that.
Try using transaction SE84 instead:</description></item><item><title>Yet another way to see a method's parameters</title><link>https://abapinho.com/en/2016/08/ver-parametros-metodo/</link><pubDate>Mon, 01 Aug 2016 09:00:26 +0000</pubDate><guid>https://abapinho.com/en/2016/08/ver-parametros-metodo/</guid><description>&lt;p>Let&amp;rsquo;s say you want to call a method for which you don&amp;rsquo;t know the parameters. What do you do?&lt;/p>
&lt;p>You used to have to use the &amp;ldquo;pattern&amp;rdquo; button. Or open the class in a new window to look at the method&amp;rsquo;s parameters. But then the ABAP Editor evolved and we got &lt;a href="https://abapinho.com/en/2014/09/modelo-automatico-so-com-ctrl-space/">auto-complete&lt;/a> which made everything much more easy.&lt;/p>
&lt;p>But there is yet another way.&lt;/p></description></item><item><title>Incremental search</title><link>https://abapinho.com/en/2016/07/pesquisa-incremental/</link><pubDate>Mon, 18 Jul 2016 09:00:21 +0000</pubDate><guid>https://abapinho.com/en/2016/07/pesquisa-incremental/</guid><description>&lt;p>When I want to search for a word in an ABAP program I usually press CTRL-F to use the normal search feature of the ABAP editor. I enter the word I want to find and then press &amp;ldquo;NEXT&amp;rdquo; to look for it.&lt;/p>
&lt;p>But there is another way. And it&amp;rsquo;s not better nor worse. Just different: the incremental search.&lt;/p></description></item><item><title>Pass internal tables by value is good</title><link>https://abapinho.com/en/2016/07/passar-tabelas-internas-valor-bom/</link><pubDate>Mon, 11 Jul 2016 09:00:21 +0000</pubDate><guid>https://abapinho.com/en/2016/07/passar-tabelas-internas-valor-bom/</guid><description>&lt;p>When a method returns a value as a RETURNING parameter this is always done by value and not by reference. Several of my methods return internal tables, some of them quite large. It always worried me the idea that, since it’s being passed by value, ABAP would be returning a copy of the internal table, impacting both performance and the program’s used memory.&lt;/p>
&lt;p>Fortunately, I recently learned that this is not​ a problem.&lt;/p></description></item><item><title>INSERT dbtab ACCEPTING DUPLICATE KEYS</title><link>https://abapinho.com/en/2016/07/insert-dbtab-accepting-duplicate-keys/</link><pubDate>Thu, 07 Jul 2016 09:00:10 +0000</pubDate><guid>https://abapinho.com/en/2016/07/insert-dbtab-accepting-duplicate-keys/</guid><description>When you try to insert a record with a key which already exists in the table the program dumps. This, in some cases, is not desirable because, even if you don&amp;rsquo;t care, it forces you to check if the keys already exist before trying to insert then.
But ABAP has a solution for these situations:
INSERT dbtab FROM TABLE itab [ACCEPTING DUPLICATE KEYS]. Don&amp;rsquo;t worry because this will not violate the first law of thermodynamics: the duplicate records are not inserted.</description></item><item><title>Export and import the ABAP Workbench settings</title><link>https://abapinho.com/en/2016/06/export-and-import-the-abap-workbench-settings/</link><pubDate>Mon, 13 Jun 2016 09:00:16 +0000</pubDate><guid>https://abapinho.com/en/2016/06/export-and-import-the-abap-workbench-settings/</guid><description>&lt;p>Sometimes a thing is right under your nose and your still don&amp;rsquo;t see it.&lt;/p>
&lt;p>At my current client I daily work with a lot of different systems. When I make a change in a setting of one system, either because I&amp;rsquo;m lazy or because I forget, I end up not applying it to all the others.&lt;/p>
&lt;p>But there is a simple way to copy all the ABAP Workbench settings at once from one system to the other.&lt;/p></description></item><item><title>Use the Split Screen Editor in the version comparison</title><link>https://abapinho.com/en/2016/06/usa-editor-tela-dividida-na-comparacao-versoes/</link><pubDate>Mon, 06 Jun 2016 09:00:57 +0000</pubDate><guid>https://abapinho.com/en/2016/06/usa-editor-tela-dividida-na-comparacao-versoes/</guid><description>By default, the ABAP version comparison tool is horrible. It displays both versions in a single column and, even though the differences are highlighted, it&amp;rsquo;s awfully confusing.
But it doesn&amp;rsquo;t have to be this way.
Press the &amp;ldquo;settings&amp;rdquo; button at the top and you&amp;rsquo;ll find that there are 3 different display modes (besides some other nice options): one-column, two-columns and, surprise, the Split Screen Editor. This is probably the option you&amp;rsquo;ll want to choose since it&amp;rsquo;s the most powerful.</description></item><item><title>Spot the differences with SE39</title><link>https://abapinho.com/en/2016/05/descobre-as-diferencas-se39/</link><pubDate>Mon, 30 May 2016 09:00:21 +0000</pubDate><guid>https://abapinho.com/en/2016/05/descobre-as-diferencas-se39/</guid><description>&lt;p>Earlier today I was doing a QC review to a new program named ZSDFAKSPE with almost 1000 lines and no comment whatsoever. An obvious clone of a standard program called SDFAKSPE.&lt;/p>
&lt;p>So I decided to use the Spli-screen editor, found in transaction SE39. Having entered both programs I could then compare them side-by-side.&lt;/p></description></item><item><title>Source-code based class development</title><link>https://abapinho.com/en/2016/05/programar-classes-baseado-texto-fonte/</link><pubDate>Mon, 23 May 2016 11:08:44 +0000</pubDate><guid>https://abapinho.com/en/2016/05/programar-classes-baseado-texto-fonte/</guid><description>Being used to develop in Java and C++, the way transaction SE24 forces you to navigate between each of its parts and the fact that every method has its own include was very confusing to me when I first started using it. Why does SAP always have to make things so complicated? I eventually got used to it.
At some point in time SE24 introduced the option source-code based which shows the class and all its methods in a single text.</description></item><item><title>Jump to your last change</title><link>https://abapinho.com/en/2016/05/jump-to-your-last-change/</link><pubDate>Wed, 18 May 2016 15:03:12 +0000</pubDate><guid>https://abapinho.com/en/2016/05/jump-to-your-last-change/</guid><description>&lt;p>Imagine that you&amp;rsquo;re editing one of those ancient programs with thousands of lines (yes because today you know that it&amp;rsquo;s wrong not to modularize (it&amp;rsquo;s a sin really) your methods (yes because today you always use methods) don&amp;rsquo;t have more than 200 lines).&lt;/p></description></item><item><title>I call you and you call me</title><link>https://abapinho.com/en/2016/05/i-call-you-and-you-call-me/</link><pubDate>Mon, 09 May 2016 18:36:30 +0000</pubDate><guid>https://abapinho.com/en/2016/05/i-call-you-and-you-call-me/</guid><description>&lt;p>You you call a function via RFC you need to provide the RFC DESTINATION for the remote system:&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">ZSNEEZED&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>What if, for some reason, the function running in the remote system needs to call a function in the original system? How would you do it?&lt;/p></description></item><item><title>Undo in debugger layout</title><link>https://abapinho.com/en/2016/05/debugger-layout-undo/</link><pubDate>Mon, 02 May 2016 09:00:56 +0000</pubDate><guid>https://abapinho.com/en/2016/05/debugger-layout-undo/</guid><description>&lt;p>Although a substantial part of an ABAP programmer time is spent debugging code, most programmers I know don&amp;rsquo;t invest much in getting to know the ABAP debugger. Maybe because they spent too many years working with its previous version which was truly archaic and worthless. But the new one can do much more than you usually ask of it. And Abapinho intends to teach you how.&lt;/p>
&lt;p>Today I&amp;rsquo;ll teach you just a simple key.&lt;/p></description></item><item><title>Debugging with baby steps</title><link>https://abapinho.com/en/2016/04/debugging-with-baby-steps/</link><pubDate>Mon, 25 Apr 2016 09:00:50 +0000</pubDate><guid>https://abapinho.com/en/2016/04/debugging-with-baby-steps/</guid><description>&lt;p>When you debug you use F5 key to move to the next statement (or go inside a sub-routine). But imagine an IF with multiple conditions:&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">IF&lt;/span> &lt;span style="color:#000">A&lt;/span> = &lt;span style="color:#3af">1&lt;/span> &lt;span style="color:#00f">AND&lt;/span> &lt;span style="color:#000">B&lt;/span> = &lt;span style="color:#3af">2&lt;/span> &lt;span style="color:#00f">AND&lt;/span> &lt;span style="color:#000">C&lt;/span> = &lt;span style="color:#3af">3&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WRITE&lt;/span> &lt;span style="color:#5a2">&amp;#39;I like the word glauc&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">ENDIF&lt;/span>.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>When you debug through that IF using F5 and one of the expressions is false you&amp;rsquo;ll step out of the IF without knowing which of the three was false.&lt;/p>
&lt;p>But the new debugger has a new very neat functionality which can help you to better understand what happened there.&lt;/p></description></item><item><title>SAP helps you translate to any language</title><link>https://abapinho.com/en/2016/04/sap-ajuda-te-traduzir-lingua/</link><pubDate>Mon, 18 Apr 2016 09:00:16 +0000</pubDate><guid>https://abapinho.com/en/2016/04/sap-ajuda-te-traduzir-lingua/</guid><description>Every once in a while I find yet another hidden SAP virtue. I just found out that there is a transaction which, for a given word in a given language, will help you translate it to another language by showing you which other translations already exist for that same word.
How cool is that? Ok, it&amp;rsquo;s not Google Translate, but it&amp;rsquo;s a nice help.
Oh, I almost forgot. The transaction is called STERM.</description></item><item><title>Native SQL</title><link>https://abapinho.com/en/2016/03/native-sql/</link><pubDate>Mon, 28 Mar 2016 09:00:01 +0000</pubDate><guid>https://abapinho.com/en/2016/03/native-sql/</guid><description>&lt;p>Sometimes ABAP SQL doesn&amp;rsquo;t allow you to do something you&amp;rsquo;d be able to do using the database&amp;rsquo;s native SQL. It can still be done.&lt;/p></description></item><item><title>Fix bug in SAP standard using an implicit enhancement</title><link>https://abapinho.com/en/2016/03/corrigir-erro-em-codigo-standard-com-enhancement-implicito/</link><pubDate>Mon, 14 Mar 2016 09:00:57 +0000</pubDate><guid>https://abapinho.com/en/2016/03/corrigir-erro-em-codigo-standard-com-enhancement-implicito/</guid><description>You just found a bug in a standard FORM (or FM or METHDO):
FORM EQUAL_VALUE CHANGING W_DATE TYPE SYDATUM. W_DATE = SY-DATUM - 1. ENDFORM. You report the error to SAP but you know it will take them several days, weeks or months to publish a correction. And you need it corrected right now.
You decide to act.
So you use the implicit enhancement at the start of the FORM to replace the standard code with your own (just until the correction arrives, of course):</description></item><item><title>Disable value history for a single field</title><link>https://abapinho.com/en/2016/02/inibe-o-historico-de-valores-para-um-so-campo/</link><pubDate>Mon, 08 Feb 2016 09:00:08 +0000</pubDate><guid>https://abapinho.com/en/2016/02/inibe-o-historico-de-valores-para-um-so-campo/</guid><description>&lt;p>SapGUI usually keeps a history of the last values entered on each field. This is usually a good thing. But you may very well not want it to happen (in case you&amp;rsquo;re entering pornographic values in a specific field for example). You could always turn it off globally in the SapGUI settings.&lt;/p>
&lt;p>But what if you just want to disable it in one particular field? Abapinho tells you how to do it.&lt;/p></description></item><item><title>Add parameters to standard methods and functions</title><link>https://abapinho.com/en/2016/02/acrescenta-parametros-a-metodos-e-funcoes-standard/</link><pubDate>Mon, 01 Feb 2016 09:00:50 +0000</pubDate><guid>https://abapinho.com/en/2016/02/acrescenta-parametros-a-metodos-e-funcoes-standard/</guid><description>&lt;p>We are all aware of SAP implicit enhancements which allow you to add code to the top or bottom of any block of standard code (methods, functions, etc). We&amp;rsquo;ve all used it to make a change to a BAPI or other standard piece of code.&lt;/p>
&lt;p>But only recently did I find that you can also use these implicit enhancements to add parameters to standard methods and functions.&lt;/p></description></item><item><title>ZTOAD - Editor de SQL</title><link>https://abapinho.com/en/2016/02/ztoad-editor-de-sql/</link><pubDate>Mon, 01 Feb 2016 09:00:10 +0000</pubDate><guid>https://abapinho.com/en/2016/02/ztoad-editor-de-sql/</guid><description>Toad is a very famous SQL tool which allows you to build and execute SQL queries in an easy and interactive way. And now, thanks to Mr. Sébastien HERMANN, SAP has a simplified version of this wonderful tool.
I&amp;rsquo;ll let him explain.
Thank you Sérgio Fraga for spotting this.
Greetings from Abapinho.</description></item><item><title>Program the program programming</title><link>https://abapinho.com/en/2016/01/programa-a-programacao-dos-programas/</link><pubDate>Mon, 18 Jan 2016 09:00:47 +0000</pubDate><guid>https://abapinho.com/en/2016/01/programa-a-programacao-dos-programas/</guid><description>&lt;p>One of the few things that separates us humans from all the other animals is our ability to think about thoughts.&lt;/p>
&lt;p>A sparrow may think &lt;em>I&amp;rsquo;m scared, I&amp;rsquo;ll say chirp chirp chirp&lt;/em> and, as a direct consequence, whoever stands close to it will hear &lt;em>chirp chirp chirp&lt;/em>.&lt;/p></description></item><item><title>Use the "where used" tool in a program</title><link>https://abapinho.com/en/2016/01/utilizar-a-lista-de-utilizacoes-programaticamente/</link><pubDate>Mon, 11 Jan 2016 09:00:11 +0000</pubDate><guid>https://abapinho.com/en/2016/01/utilizar-a-lista-de-utilizacoes-programaticamente/</guid><description>&lt;p>The &amp;ldquo;where used&amp;rdquo; tool is very dear to any ABAP developer. Through it one can find out where a given object is used. Doesn&amp;rsquo;t look like much but we all know how important this is.&lt;/p></description></item><item><title>Class CL_GUI_FRONTEND_SERVICES</title><link>https://abapinho.com/en/2016/01/a-classe-cl_gui_frontend_services/</link><pubDate>Mon, 04 Jan 2016 09:00:43 +0000</pubDate><guid>https://abapinho.com/en/2016/01/a-classe-cl_gui_frontend_services/</guid><description>&lt;p>Class CL_GUI_FRONTEND_SERVICES is commonly used to upload and download files from and to the user&amp;rsquo;s local computer. But it can do many more good things. For example:&lt;/p></description></item><item><title>SAP can take selfies!</title><link>https://abapinho.com/en/2015/12/o-sap-sabe-tirar-selfies/</link><pubDate>Mon, 28 Dec 2015 09:00:35 +0000</pubDate><guid>https://abapinho.com/en/2015/12/o-sap-sabe-tirar-selfies/</guid><description>&lt;p>I just found out that SAP can take selfies. I still don&amp;rsquo;t see why one would need it. But that&amp;rsquo;s understandable because I never really understood the need for selfies anyway.&lt;/p>
&lt;p>Here&amp;rsquo;s how SAP can take a selfie:&lt;/p></description></item><item><title>Do you know the ASCII code for CR_LF and its buddies?</title><link>https://abapinho.com/en/2015/12/nunca-te-lembras-do-codigo-ascii-do-cr_lf-e-seus-amigos/</link><pubDate>Mon, 21 Dec 2015 09:00:56 +0000</pubDate><guid>https://abapinho.com/en/2015/12/nunca-te-lembras-do-codigo-ascii-do-cr_lf-e-seus-amigos/</guid><description>&lt;p>I don&amp;rsquo;t.&lt;/p>
&lt;p>And I don&amp;rsquo;t want to. Why waste memory on stuff like that?&lt;/p>
&lt;p>And I don&amp;rsquo;t need to because ABAP has a class just for that.&lt;/p></description></item><item><title>SELECT from a set of known values</title><link>https://abapinho.com/en/2015/12/select-de-um-conjunto-de-valores-conhecidos/</link><pubDate>Mon, 14 Dec 2015 09:00:36 +0000</pubDate><guid>https://abapinho.com/en/2015/12/select-de-um-conjunto-de-valores-conhecidos/</guid><description>&lt;p>Someone asks you to select records based on a criteria for which you&amp;rsquo;ll have a small set of known values which you&amp;rsquo;re told will never change. Did you know you can do it directly in the SELECT?&lt;/p></description></item><item><title>You can save variants in SE16N</title><link>https://abapinho.com/en/2015/12/podes-gravar-variantes-na-se16n/</link><pubDate>Mon, 07 Dec 2015 09:00:18 +0000</pubDate><guid>https://abapinho.com/en/2015/12/podes-gravar-variantes-na-se16n/</guid><description>And that&amp;rsquo;s it really. That&amp;rsquo;s the whole tip right there at the title. This has always been right under your nose but you probably never thought about it: you can save variants in SE16N. And they can even be user-specific. So useful and so little known.
Thank you Sérgio Fraga for the tip. Thank you Cloudtail for the photo.
Greetings from Abapinho.</description></item><item><title>Limitar execução em background ou foreground</title><link>https://abapinho.com/en/2015/11/limitar-execucao-em-background-ou-foreground/</link><pubDate>Mon, 30 Nov 2015 09:00:36 +0000</pubDate><guid>https://abapinho.com/en/2015/11/limitar-execucao-em-background-ou-foreground/</guid><description>&lt;p>You&amp;rsquo;ve developed a report which you know will take over 12 hours to run. So you don&amp;rsquo;t want anyone to try to run it in foreground. I&amp;rsquo;ll show you a way to make sure it doesn&amp;rsquo;t happen.&lt;/p></description></item><item><title>Formating variables when concatenating strings using &lt;i>pipes&lt;/i></title><link>https://abapinho.com/en/2015/11/formata-as-variaveis-ao-concatenar-strings-com-pipes/</link><pubDate>Mon, 16 Nov 2015 09:00:22 +0000</pubDate><guid>https://abapinho.com/en/2015/11/formata-as-variaveis-ao-concatenar-strings-com-pipes/</guid><description>&lt;p>Pipes are the new trend when it comes to manipulating strings:&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">str&lt;/span> = |&lt;span style="color:#5a2">Hi &lt;/span>{ &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">uname&lt;/span> }&lt;span style="color:#5a2">, &lt;/span>| &amp;amp;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> |&lt;span style="color:#5a2">today&amp;#39;s date is &lt;/span>{ &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">datum&lt;/span> }&lt;span style="color:#5a2">.&lt;/span>|.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>Besides looking cool, it&amp;rsquo;s way more practical than using the dreaded CONCATENATE.&lt;/p>
&lt;p>But I only recently found out that you can directly apply formatting to the variables:&lt;/p></description></item><item><title>Is the GUI available?</title><link>https://abapinho.com/en/2015/11/o-gui-esta-disponivel/</link><pubDate>Mon, 09 Nov 2015 09:00:41 +0000</pubDate><guid>https://abapinho.com/en/2015/11/o-gui-esta-disponivel/</guid><description>&lt;p>To check if a program is running in background usually one takes a peek at SY-BATCH. SY-BINPT can also be used to check if the background program is a BDC session. You usually check one of these.&lt;/p>
&lt;p>There is a similar but not exactly equal question, though. How do you ask if the GUI is available? Most times both questions will have the same answer. But not always.&lt;/p>
&lt;p>It&amp;rsquo;s like saying the Sun can be seen during the day while the Moon can be seen during the night. If the sky is cloudy you won&amp;rsquo;t be seeing them.&lt;/p></description></item><item><title>How to avoid timeout when running a program</title><link>https://abapinho.com/en/2015/11/como-evitar-timeout-ao-correr-um-programa/</link><pubDate>Mon, 02 Nov 2015 09:00:52 +0000</pubDate><guid>https://abapinho.com/en/2015/11/como-evitar-timeout-ao-correr-um-programa/</guid><description>&lt;p>Usually SAP systems have a predefined time limit for running a program interactively. If the program takes longer to run than that you&amp;rsquo;ll get a runtime execution error. A dump.&lt;/p></description></item><item><title>Shortcuts for making small and big letters</title><link>https://abapinho.com/en/2015/10/letras-grandes-e-letras-pequeninas/</link><pubDate>Mon, 19 Oct 2015 09:00:05 +0000</pubDate><guid>https://abapinho.com/en/2015/10/letras-grandes-e-letras-pequeninas/</guid><description>You may not even know how to program but if you&amp;rsquo;re able to type fast and know enough keyboard shortcuts everyone will think you&amp;rsquo;re an expert.
In the ABAP editor write the following word: subdermatoglyphic
Now try the following shortcuts:
CTRL+U: SUBDERMATOGLYPHIC BIG LETTERS! UPPER CASE! CTRL+L: subdermatoglyphic small letters! lower case! CTRL+J: Subdermatoglyphic The First Letter Of Each Word In Upper case! CTRL+K: sUBDERMATOGLYPHIC tHe BiG aRe NoW sMaLl AnD tHe SmAlL ArE nOw BiG!</description></item><item><title>SE16H - Aggregate data without using Excel</title><link>https://abapinho.com/en/2015/10/se16h-agrega-dados-sem-precisares-do-excel/</link><pubDate>Mon, 12 Oct 2015 09:00:57 +0000</pubDate><guid>https://abapinho.com/en/2015/10/se16h-agrega-dados-sem-precisares-do-excel/</guid><description>&lt;p>A long time ago transaction SE17 was used to look at database tables content.
They quickly felt ashamed and decided to improve it, creating SE16.
When ALV was invented, SE16N was released (although until today many people still use SE16, go figure!).&lt;/p>
&lt;p>Today I present you SE16H.&lt;/p></description></item><item><title>CONCATENATE LINES OF itbl</title><link>https://abapinho.com/en/2015/10/concatenate-lines-of-itbl/</link><pubDate>Mon, 05 Oct 2015 09:00:50 +0000</pubDate><guid>https://abapinho.com/en/2015/10/concatenate-lines-of-itbl/</guid><description>&lt;p>If you want to serialize a set of strings stored in an internal table there are two ways to do it. One is dull, the other one is full of style.&lt;/p></description></item><item><title>Modify one field in all lines of an internal table</title><link>https://abapinho.com/en/2015/08/modificar-uma-campo-em-todas-as-linhas-de-uma-tabela-interna/</link><pubDate>Mon, 31 Aug 2015 09:00:25 +0000</pubDate><guid>https://abapinho.com/en/2015/08/modificar-uma-campo-em-todas-as-linhas-de-uma-tabela-interna/</guid><description>&lt;p>What I’m about to show you is not exactly new. It &lt;a href="https://abapinho.com/en/2011/07/range-instantaneo/">has even been used&lt;/a> in Abapinho before. But since there is still a lot of people out there using LOOP to change a single field of an internal table, I thought it would be worth talking about it.&lt;/p></description></item><item><title>Bye bye READ TABLE</title><link>https://abapinho.com/en/2015/08/o-read-table-vai-desaparecer/</link><pubDate>Mon, 24 Aug 2015 09:00:20 +0000</pubDate><guid>https://abapinho.com/en/2015/08/o-read-table-vai-desaparecer/</guid><description>Pré 7.4:
DATA l_idade type i. READ TABLE lt_folk INTO ls_folk WITH KEY name = l_name. l_age = ls_folk-age. Pós 7.4:
data(l_age) = lt_folk[ name = l_name ]-age ) Thanks Sérgio Fraga for the tip.
Greeetings from Abapinho.</description></item><item><title>So much new stuff in 7.4, I don't know where to begin</title><link>https://abapinho.com/en/2015/08/tanta-coisa-nova-no-7-4-que-nao-sei-por-onde-comecar/</link><pubDate>Wed, 19 Aug 2015 09:00:19 +0000</pubDate><guid>https://abapinho.com/en/2015/08/tanta-coisa-nova-no-7-4-que-nao-sei-por-onde-comecar/</guid><description>Abapinho will slowly start posting tips specific to AS ABAP 7.4. Slowly because there are still only a few people with access to this version. But there are so many new things to tell that I feel tempted to start posting all of them.
ABAP was a flabby middle aged guy with a beer belly. It underwent major plastic surgery and now looks like a lean 20 year old kid who can party until 9am, drink 7 gin tonics and then, before going to bed, do 100 burpees just to sleep better.</description></item><item><title>Breakpoint in message from inside the debugger</title><link>https://abapinho.com/en/2015/08/breakpoint-em-mensagem-a-partir-do-depurador/</link><pubDate>Mon, 10 Aug 2015 09:00:09 +0000</pubDate><guid>https://abapinho.com/en/2015/08/breakpoint-em-mensagem-a-partir-do-depurador/</guid><description>&lt;p>You&amp;rsquo;re in the middle of a debug and want it to stop at a specific message.&lt;/p>
&lt;p>What to do?&lt;/p></description></item><item><title>Multiple OR selections in SE16N</title><link>https://abapinho.com/en/2015/08/multiplas-seleccoes-or-na-se16n/</link><pubDate>Mon, 03 Aug 2015 09:00:15 +0000</pubDate><guid>https://abapinho.com/en/2015/08/multiplas-seleccoes-or-na-se16n/</guid><description>&lt;p>If you are one of those persons who still uses SE16, this article is not for you. If you keep reading, you might find yet another reason to finally start using SE16N (as if all others were not enough already).&lt;/p>
&lt;p>Imagine that you want to select all materials whose name contains &amp;ldquo;PREGO&amp;rdquo; and whose type is &amp;ldquo;FERRAGENS&amp;rdquo;, and all materials whose name contains &amp;ldquo;GUARDANAPO&amp;rdquo; and whose type is &amp;ldquo;COMIDA&amp;rdquo;. In other words, &amp;ldquo;PREGO_NO_PAO&amp;rdquo; or &amp;ldquo;GUARDANAPO_PAPEL&amp;rdquo; won&amp;rsquo;t be part of the result set. What you want is this:&lt;/p>
&lt;p>(MATNR = “PREGO%” AND MTART = “FERR” ) OR (MATNR = “GUARDANAPO%” AND MAKT = “COMI” )&lt;/p>
&lt;p>As you know, using SE16N in a regular way (which doesn&amp;rsquo;t use what I&amp;rsquo;m about to show you) you would need to execute it twice and manually compare data, because the selection screen does not allow you to make multiple OR selections.&lt;/p>
&lt;p>Or does it?&lt;/p></description></item><item><title>CASE inside a SELECT (available soon)</title><link>https://abapinho.com/en/2015/07/case-dentro-de-select-brevemente-em-todos-os-saps/</link><pubDate>Mon, 20 Jul 2015 09:00:42 +0000</pubDate><guid>https://abapinho.com/en/2015/07/case-dentro-de-select-brevemente-em-todos-os-saps/</guid><description>Get ready because you&amp;rsquo;ll soon be running into a lot of surprises. ABAP is learning new tricks. Look at this one:
CONSTANTS: lc_menina TYPE STRING VALUE ‘GIRL&amp;#39;, lc_menino TYPE STRING VALUE ‘BOY’, lc_senhor TYPE STRING VALUE ’GENTLEMAN’, lc_senhora TYPE STRING VALUE ‘LADY’. SELECT nome, CASE WHEN sexo_id = ‘M&amp;#39; AND idade &amp;lt; 18 THEN @lc_menino WHEN sexo_id = ‘F’ AND idade &amp;lt; 18 THEN @lc_menina WHEN sexo_id = ‘M&amp;#39; AND idade &amp;gt;=18 THEN @lc_senhor WHEN sexo_id = ‘F’ AND idade &amp;gt;=18 THEN @lc_senhora END AS titulo FROM zpessoa WHERE pessoa_id = @pessoa_id INTO CORRESPONDING FIELDS OF @lt_pessoas.</description></item><item><title>Search for notes directly in Google Chrome</title><link>https://abapinho.com/en/2015/07/procura-notas-directamente-no-google-chrome/</link><pubDate>Mon, 13 Jul 2015 09:00:20 +0000</pubDate><guid>https://abapinho.com/en/2015/07/procura-notas-directamente-no-google-chrome/</guid><description>Google Chrome has an app for searching SAP notes. It&amp;rsquo;s called SAP Notes finder.
You can install it here.
Thank you Fernanda Mirabile and Talita Polanczyk for the tip.
Greetings from Abapinho.</description></item><item><title>[:pt]CALL FUNCTION com DESTINATION ‘NONE' cria nova LUW[:]</title><link>https://abapinho.com/en/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/en/2015/06/call-function-com-destination-none-cria-nova-luw/</guid><description>[:pt]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>[:pt]Debug de um job[:]</title><link>https://abapinho.com/en/2015/06/debug-de-um-job/</link><pubDate>Mon, 15 Jun 2015 09:00:40 +0000</pubDate><guid>https://abapinho.com/en/2015/06/debug-de-um-job/</guid><description>&lt;p>[:pt]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>How to ask if the line exists without seeming fashioned</title><link>https://abapinho.com/en/2015/04/como-perguntar-se-a-linha-existe-sem-parecer-antiquado/</link><pubDate>Mon, 06 Apr 2015 14:08:12 +0000</pubDate><guid>https://abapinho.com/en/2015/04/como-perguntar-se-a-linha-existe-sem-parecer-antiquado/</guid><description>&lt;p>Long ago, you used the expression &amp;ldquo;groovy, man&amp;rdquo;. Later came &amp;ldquo;great, man&amp;rdquo;. Then there was &amp;ldquo;cool&amp;rdquo;. Today you say &amp;ldquo;awesome&amp;rdquo;. It&amp;rsquo;s important not to get confused and not make a fool of yourself.&lt;/p>
&lt;p>And how do you ask an internal table if a line exists exists?&lt;/p></description></item><item><title>Stop the functions module's error messages</title><link>https://abapinho.com/en/2015/03/calem-se-as-mensagens-das-funcoes/</link><pubDate>Mon, 30 Mar 2015 09:00:30 +0000</pubDate><guid>https://abapinho.com/en/2015/03/calem-se-as-mensagens-das-funcoes/</guid><description>&lt;p>There are standard functions that trigger messages where they shouldn’t. And they shouldn’t because we want to use these functions in non-interactive programs and then, instead of returning the error, an error message is triggered and ruins the whole process.&lt;/p>
&lt;p>However, being aware of this problem, SAP has provided a quite elegant (but not well documented) way of solving this problem.&lt;/p></description></item><item><title>Debugging an infinite loop already in execution</title><link>https://abapinho.com/en/2015/03/fazer-debug-a-um-ciclo-infinito-ja-em-execucao/</link><pubDate>Mon, 02 Mar 2015 09:00:22 +0000</pubDate><guid>https://abapinho.com/en/2015/03/fazer-debug-a-um-ciclo-infinito-ja-em-execucao/</guid><description>&lt;p>Imagine you have a program executing an infinite cycle or, at least, a cycle with 70x7 iterations. It is neverending, and you want to know what’s going on there.&lt;/p>
&lt;p>In the past you had to go to SM50, select the process and choose from the menu &amp;ldquo;Administration | Program | Debug&amp;rdquo;.&lt;/p>
&lt;p>But now there is a much easier way.&lt;/p></description></item><item><title>How many includes is a class made of?</title><link>https://abapinho.com/en/2015/02/de-quantos-includes-e-feita-uma-classe/</link><pubDate>Mon, 23 Feb 2015 09:00:55 +0000</pubDate><guid>https://abapinho.com/en/2015/02/de-quantos-includes-e-feita-uma-classe/</guid><description>&lt;p>No matter how many times things go around in ABAP, everything ends up in SE38. Even the methods of the ABAP classes are saved in includes.&lt;/p>
&lt;p>Sometimes, when there is a dump, it says the problem is, for example, here: CL_MESSAGE_HELPER=============CM001.&lt;/p></description></item><item><title>Unreleasing a released transport order</title><link>https://abapinho.com/en/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/en/2015/02/tornar-a-prender-uma-ordem-de-transporte-liberada/</guid><description>&lt;p>You’ve released a transport order because you thought everything was ready. However, one more minor modification was still missing. So now you will have to create a new order and transport both of them. What a drag.&lt;/p>
&lt;p>Don’t worry.&lt;/p></description></item><item><title>SELECT-OPTIONS default behavior</title><link>https://abapinho.com/en/2015/02/pre-definir-select-options/</link><pubDate>Mon, 09 Feb 2015 09:00:23 +0000</pubDate><guid>https://abapinho.com/en/2015/02/pre-definir-select-options/</guid><description>&lt;p>Abapinho received a letter.&lt;/p>
&lt;p>Mr. Abapinho,&lt;/p>
&lt;p>Everybody knows how to set default values in select options using the DEFAULT keyword. What some people may not know is that one can also set the default option, sign and even if allows for intervals or just fixed values.&lt;/p></description></item><item><title>Ignore function module exceptions</title><link>https://abapinho.com/en/2015/01/ignorar-excepcoes-de-um-modulo-de-funcao/</link><pubDate>Mon, 26 Jan 2015 09:00:25 +0000</pubDate><guid>https://abapinho.com/en/2015/01/ignorar-excepcoes-de-um-modulo-de-funcao/</guid><description>&lt;p>When calling a function module which returns exceptions you normally give them sequential numbers like this:&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:#5a2">&amp;#39;GO_BUT_PLEASE_COME_BACK&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">ali&lt;/span> = &lt;span style="color:#5a2">&amp;#39;To the moon&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXCEPTIONS&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">NOT_FOUND&lt;/span> = &lt;span style="color:#3af">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">GOT_LOST&lt;/span> = &lt;span style="color:#3af">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">OTHERS&lt;/span> = &lt;span style="color:#3af">3&lt;/span>.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>But Code Inspector may be configured to report a warning if afterwards you are not careful to add an IF or a CASE to look at SY-SUBRC,&lt;/p></description></item><item><title>Let's concatenate</title><link>https://abapinho.com/en/2015/01/concatenemos/</link><pubDate>Mon, 05 Jan 2015 09:00:35 +0000</pubDate><guid>https://abapinho.com/en/2015/01/concatenemos/</guid><description>&lt;p>We start with two variables:&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">DATA&lt;/span> &lt;span style="color:#000">word1&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">string&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">DATA&lt;/span> &lt;span style="color:#000">word2&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">string&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">phrase&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">string&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">word1&lt;/span> = &lt;span style="color:#f00">‘&lt;/span>&lt;span style="color:#000">this&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">word2&lt;/span> = &lt;span style="color:#f00">‘&lt;/span>&lt;span style="color:#000">that&lt;/span>&lt;span style="color:#f00">’&lt;/span>.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>And we want to concatenate them adding the word &amp;ldquo;plus&amp;rdquo; between them and, of course, separate them by space.&lt;/p></description></item><item><title>Write in multiple lines at the same time</title><link>https://abapinho.com/en/2014/12/escrever-em-muitas-linhas-ao-mesmo-tempo/</link><pubDate>Mon, 15 Dec 2014 09:00:42 +0000</pubDate><guid>https://abapinho.com/en/2014/12/escrever-em-muitas-linhas-ao-mesmo-tempo/</guid><description>&lt;p>The ABAP editor has many curious functionalities.
You can even write in multiple lines at the same time.&lt;/p></description></item><item><title>Where is the boolean?</title><link>https://abapinho.com/en/2014/12/onde-esta-o-booleano/</link><pubDate>Wed, 10 Dec 2014 18:12:58 +0000</pubDate><guid>https://abapinho.com/en/2014/12/onde-esta-o-booleano/</guid><description>&lt;p>It&amp;rsquo;s not.&lt;/p>
&lt;p>But they - the people who make and remake the ABAP itself - are trying to mend this unfortunate situation.&lt;/p>
&lt;p>Look at this new functionality:&lt;/p></description></item><item><title>LOOP AT tbl ASSIGNING &amp;lt;line&amp;gt; CASTING</title><link>https://abapinho.com/en/2014/12/loop-at-tbl-into-linha-casting/</link><pubDate>Mon, 01 Dec 2014 09:50:19 +0000</pubDate><guid>https://abapinho.com/en/2014/12/loop-at-tbl-into-linha-casting/</guid><description>&lt;p>Did you know that you can do a LOOP on an internal table of one type into a structure of a different type?&lt;/p></description></item><item><title>Block indent</title><link>https://abapinho.com/en/2014/11/indentar-em-bloco/</link><pubDate>Mon, 03 Nov 2014 09:00:21 +0000</pubDate><guid>https://abapinho.com/en/2014/11/indentar-em-bloco/</guid><description>&lt;p>To indent a block of lines do the following:&lt;/p></description></item><item><title>Clearing the buffers of an SAP session</title><link>https://abapinho.com/en/2014/10/limpar-os-buffers-de-uma-sessao-sap/</link><pubDate>Mon, 13 Oct 2014 09:00:25 +0000</pubDate><guid>https://abapinho.com/en/2014/10/limpar-os-buffers-de-uma-sessao-sap/</guid><description>&lt;p>I keep learning new transaction commands. Today I learned some which solve a problem which, although rarely, has happened to me in the past.&lt;/p>
&lt;p>Did this happen to you? You make a change to a text of a data element you’re using in a table to be edited through SM30. But when you go and edit that table in SM30 the old text is still there. You activate objects, close windows, open windows, no matter what you do, the new text is not shown.&lt;/p></description></item><item><title>Automatic model just using CTRL-SPACE</title><link>https://abapinho.com/en/2014/09/modelo-automatico-so-com-ctrl-space/</link><pubDate>Mon, 22 Sep 2014 09:00:04 +0000</pubDate><guid>https://abapinho.com/en/2014/09/modelo-automatico-so-com-ctrl-space/</guid><description>&lt;p>Of course you already know the &amp;ldquo;Model&amp;rdquo; button in the ABAP editor that allows you to automatically add models for function modules, calls for methods and others.&lt;/p>
&lt;p>The new editor has now grown a bit (it’s now only 10 years behind Eclipse instead of 20) and it allows you to automatically complete some commands through the CTRL-SPACE shortcut.&lt;/p></description></item><item><title>Unlocking objects in a transport request</title><link>https://abapinho.com/en/2014/08/desbloquear-objectos-numa-ordem-de-transporte/</link><pubDate>Mon, 25 Aug 2014 09:00:26 +0000</pubDate><guid>https://abapinho.com/en/2014/08/desbloquear-objectos-numa-ordem-de-transporte/</guid><description>&lt;p>When you touch an object and add it to a transport request, it becomes locked there by default. In a transport request you can also lock objects which are not yet locked in another order. But, once locked, how to unlock them?&lt;/p></description></item><item><title>Put it between parentheses</title><link>https://abapinho.com/en/2014/08/mete-o-entre-parentesis/</link><pubDate>Mon, 18 Aug 2014 09:00:09 +0000</pubDate><guid>https://abapinho.com/en/2014/08/mete-o-entre-parentesis/</guid><description>Sweet little trick: when in SE38 you need to surround a word or expression with () or [] or ‘’, just select it and press ( or [ or &amp;rsquo; and it immediately becomes (it) or [it] or &amp;lsquo;it&amp;rsquo;.
Thank you Sérgio Fraga for the tip.</description></item><item><title>Contemplating the package</title><link>https://abapinho.com/en/2014/07/contemplar-o-pacote/</link><pubDate>Mon, 14 Jul 2014 08:00:25 +0000</pubDate><guid>https://abapinho.com/en/2014/07/contemplar-o-pacote/</guid><description>&lt;p>You are looking at a class in SE24, a table in SE11 or a program in SE80. Now you want to see the package of this object and its content. Until recently, I would do this: first I would look in the object&amp;rsquo;s characteristics to see its package, then open a new session, go to SE80 and write the package there.&lt;/p>
&lt;p>Now I&amp;rsquo;ve learned a much easier way.&lt;/p></description></item><item><title>Find out who transported a request</title><link>https://abapinho.com/en/2014/07/descobre-quem-transportou-uma-ordem/</link><pubDate>Mon, 07 Jul 2014 08:30:15 +0000</pubDate><guid>https://abapinho.com/en/2014/07/descobre-quem-transportou-uma-ordem/</guid><description>&lt;p>The other day, a series of things crashed in our test machine. All of a sudden, no one could work on it. We found a series of transport requests improperly transported to STMS. The user who appears to be associated with each of these requests is its owner. But is it the owner’s fault? Didn’t someone else do the transport?&lt;/p>
&lt;p>How can we find out?&lt;/p></description></item><item><title>SE16N's technical view</title><link>https://abapinho.com/en/2014/06/vista-tecnica-se16n/</link><pubDate>Mon, 30 Jun 2014 09:00:43 +0000</pubDate><guid>https://abapinho.com/en/2014/06/vista-tecnica-se16n/</guid><description>Hi. How&amp;rsquo;ve you been? How&amp;rsquo;s life? All cool? This tip is so simple that if we don&amp;rsquo;t talk for a while it will all end too quickly. The sun is shinning. It rained in the morning but now it stopped.
Moving on.
Every time I see someone still using SE16 I wonder why, since SE16N is so much better and already exists for so long. But this is not the tip.</description></item><item><title>Deleting packages that do not want to be deleted</title><link>https://abapinho.com/en/2014/06/apagar-pacotes-que-nao-querem-ser-apagados/</link><pubDate>Mon, 23 Jun 2014 08:30:48 +0000</pubDate><guid>https://abapinho.com/en/2014/06/apagar-pacotes-que-nao-querem-ser-apagados/</guid><description>&lt;p>When you try to delete a package where you have created objects that have meanwhile been deleted, and the package looks empty in SE80, when you try to delete it, it won’t work because it says the package still contains objects.&lt;/p>
&lt;p>For some silly reason, SE80 does not show every type of object associated with packages. In addition, when an object is deleted, its entry is often times not deleted correctly. SAP is full of shortcomings. But it’s what we have, and it’s what brings us the bacon, so let’s not say too many bad things about it.&lt;/p>
&lt;p>Abapinho has the solution for you.&lt;/p></description></item><item><title>0 is Private, 1 is Protected, 2 is Public</title><link>https://abapinho.com/en/2014/06/0-e-private-1-e-protected-2-e-public/</link><pubDate>Mon, 16 Jun 2014 08:30:50 +0000</pubDate><guid>https://abapinho.com/en/2014/06/0-e-private-1-e-protected-2-e-public/</guid><description>&lt;p>Simple tip to speed up entering data in (some) fields.&lt;/p></description></item><item><title>Read the texts of a program</title><link>https://abapinho.com/en/2014/06/le-os-textos-de-um-programa/</link><pubDate>Mon, 09 Jun 2014 08:30:00 +0000</pubDate><guid>https://abapinho.com/en/2014/06/le-os-textos-de-um-programa/</guid><description>An easy way of programmatically accessing the texts of any program:
DATA: t_textos TYPE TABLE OF textpool. READ TEXTPOOL sy-repid INTO t_textos LANGUAGE sy-langu STATE &amp;#39;A’. Now, you have all of the texts available in the internal table T_TEXTOS.
As if this were not enough, you can also change the texts programmatically with the following commands:
INSERT TEXTPOOL sy-repid FROM t_textos LANGUAGE sy-langu. DELETE TEXTPOOL PROGRAM LANGUAGE &amp;#39;E’. According to SAP, these last two commands are for internal use only.</description></item><item><title>SELECT within SELECT</title><link>https://abapinho.com/en/2014/05/select-dentro-de-select/</link><pubDate>Mon, 26 May 2014 09:00:03 +0000</pubDate><guid>https://abapinho.com/en/2014/05/select-dentro-de-select/</guid><description>&lt;p>ABAP programmers don&amp;rsquo;t explore the possibilities of SQL, probably for historical reasons. There are many who instead of using INNER JOINs still think it&amp;rsquo;s faster to do several SELECTs for internal tables and then process the data in ABAP. But the truth is that even if there are exceptions, the rule is: the lower the number of accesses to the database, the better the performance. And it makes sense because, after all, they were written explicitly for this; relational databases are much more adept at processing relational data than an ABAP program.&lt;/p>
&lt;p>There are of course things that, due to their complexity, cannot be done with a simple INNER JOIN. Nevertheless, some of these things can be done in a single SELECT.&lt;/p></description></item><item><title>Get information on a remote system by RFC</title><link>https://abapinho.com/en/2014/05/obter-informacao-sobre-um-sistema-remoto-por-rfc/</link><pubDate>Mon, 19 May 2014 09:00:16 +0000</pubDate><guid>https://abapinho.com/en/2014/05/obter-informacao-sobre-um-sistema-remoto-por-rfc/</guid><description>Here&amp;rsquo;s a cool mini-function to obtain some details of a remote system accessible by RFC:
RFC_SYSTEM_INFO
I cannot give any example here because it would reveal very important secret information about my client which would certainly be used by the baddies to perform industrial espionage. But it is easy to test in SE37.
Thanks to kingofthebigmacs for the photo.
Greetings from Abapinho.</description></item><item><title>Class with loads of methods to deal with dates</title><link>https://abapinho.com/en/2014/05/classe-com-montes-de-metodos-para-lidar-com-datas/</link><pubDate>Mon, 05 May 2014 09:00:16 +0000</pubDate><guid>https://abapinho.com/en/2014/05/classe-com-montes-de-metodos-para-lidar-com-datas/</guid><description>&lt;p>There are countless standard functions to make calculations with dates. There are too many of them, they are redundant and, in many cases, they are obscure or impossible to understand. I&amp;rsquo;ve been meaning to insert an article here with a list of the most useful ones. But now it&amp;rsquo;s no longer necessary.&lt;/p></description></item><item><title>How to debug a job</title><link>https://abapinho.com/en/2014/04/faz-debug-a-um-job/</link><pubDate>Mon, 21 Apr 2014 09:00:23 +0000</pubDate><guid>https://abapinho.com/en/2014/04/faz-debug-a-um-job/</guid><description>Here&amp;rsquo;s a simple way to start debugging a job:
Go to transaction SM37;
Click on the job you want to debug;
type JDBG in the command line (without /) and press ENTER;
and&amp;hellip; bang! you&amp;rsquo;re now debugging the job.
Thank you Ricardo Monteiro for the tip. And thank you Ingolf for the photo.
Greetings from Abapinho</description></item><item><title>Shortcut for time travelling</title><link>https://abapinho.com/en/2014/04/atalho-para-viajar-no-tempo/</link><pubDate>Mon, 07 Apr 2014 09:00:35 +0000</pubDate><guid>https://abapinho.com/en/2014/04/atalho-para-viajar-no-tempo/</guid><description>Some months ago I showed how to transform the debugger into a time machine.
Today&amp;rsquo;s tip is simple but useful: there is a keyboard shortcut which makes it even simple to travel in time:
shift + F12
Just place the cursor in the line you want to travel to and then&amp;hellip; shift+F12.
Thank you Maxsuel Maia for the tip.
Greetings from Abapinho.</description></item><item><title>Use a password manager in your life</title><link>https://abapinho.com/en/2014/03/gestor-de-passwords/</link><pubDate>Mon, 24 Mar 2014 09:00:52 +0000</pubDate><guid>https://abapinho.com/en/2014/03/gestor-de-passwords/</guid><description>&lt;p>And there you go, if you read the title you know the hint.&lt;/p>
&lt;p>Now, here are some hints about the hint:&lt;/p></description></item><item><title>Close the frozen window</title><link>https://abapinho.com/en/2014/03/fecha-a-janela-encalhada/</link><pubDate>Mon, 03 Mar 2014 17:30:56 +0000</pubDate><guid>https://abapinho.com/en/2014/03/fecha-a-janela-encalhada/</guid><description>&lt;p>How many times have you been left with a “hanging” window when you end a debug?&lt;/p></description></item><item><title>Exemplary example of SALV</title><link>https://abapinho.com/en/2014/02/exemplar-exemplo-de-salv/</link><pubDate>Mon, 10 Feb 2014 09:00:25 +0000</pubDate><guid>https://abapinho.com/en/2014/02/exemplar-exemplo-de-salv/</guid><description>&lt;p>Unless you want to do data editing, the only dignified way to use ALVs these days is through SALV classes. They are more modern and more elegant, and those who use them can achieve a social status until now only available to owners of a &lt;a href="https://www.youtube.com/watch?v=JtN35OUIu0g">license plate&lt;/a>.&lt;/p></description></item><item><title>Hold on… but not yet</title><link>https://abapinho.com/en/2014/02/para-la-mas-nao-ja/</link><pubDate>Mon, 03 Feb 2014 09:00:56 +0000</pubDate><guid>https://abapinho.com/en/2014/02/para-la-mas-nao-ja/</guid><description>&lt;p>You are doing a LOOP AT in a 1000-line table, and you know that you want line 853. Until recently, you had two options: either hit F8 852 times, running the risk of hitting it 853 times and having to start all over again, or create a &lt;em>watchpoint&lt;/em> with the condition SY-TABIX = 852 or something close, and pray that it worked.&lt;/p>
&lt;p>Now you have a third option.&lt;/p></description></item><item><title>APPEND LINES OF class->method() TO itbl</title><link>https://abapinho.com/en/2014/01/append-lines-of-classe-metodo-to-itbl/</link><pubDate>Mon, 27 Jan 2014 22:33:25 +0000</pubDate><guid>https://abapinho.com/en/2014/01/append-lines-of-classe-metodo-to-itbl/</guid><description>&lt;p>ABAP is getting smarter all the time. Back in my day, no one did anything with it. And now, slowly, more than a fifth of a century late, it’s trying to imitate C and Java, and becoming more flexible.&lt;/p>
&lt;p>I was going to do something like this:&lt;/p></description></item><item><title>Automatic keyboard</title><link>https://abapinho.com/en/2014/01/teclado-automatico/</link><pubDate>Mon, 20 Jan 2014 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2014/01/teclado-automatico/</guid><description>&lt;p>Every programmer knows about the intimate relationship between batch-inputs and paperweights, staplers and similar heavy objects. These precious little helpers can keep us from spending up to eight hours hitting the “ENTER” key with one finger.&lt;/p>
&lt;p>Although these objects have a certain charm, the law of gravity - the same one that makes them useful - sometimes makes them fall over and stop pushing this key.&lt;/p></description></item><item><title>Adding values to a standard domain</title><link>https://abapinho.com/en/2014/01/adicionar-valor-a-dominio-standard/</link><pubDate>Mon, 13 Jan 2014 09:00:58 +0000</pubDate><guid>https://abapinho.com/en/2014/01/adicionar-valor-a-dominio-standard/</guid><description>&lt;p>If you think it’s impossible to add values to a standard SAP domain without requesting an activation key, you’re wrong.&lt;/p></description></item><item><title>Always use message classes in exception classes.</title><link>https://abapinho.com/en/2013/12/classes-de-mensagens-nas-classe-de-excepcao/</link><pubDate>Mon, 16 Dec 2013 09:00:49 +0000</pubDate><guid>https://abapinho.com/en/2013/12/classes-de-mensagens-nas-classe-de-excepcao/</guid><description>&lt;p>Exception classes let you state multiple texts describing the different possible errors that they can represent.&lt;/p>
&lt;p>However, there exists an option to associate it with a message class (SE91). This allows texts to be defined as classic SE91 messages instead of being defined directly in the exception class. And it has advantages.&lt;/p></description></item><item><title>The ABAP editor has a good memory</title><link>https://abapinho.com/en/2013/12/o-editor-de-abap-tem-boa-memoria/</link><pubDate>Mon, 02 Dec 2013 09:00:55 +0000</pubDate><guid>https://abapinho.com/en/2013/12/o-editor-de-abap-tem-boa-memoria/</guid><description>&lt;p>Select a word in the ABAP editor and choose CTRL-C. Then select another word and choose CTRL-C again. Then another word and so on. You have copied words several times to the &lt;em>clipboard&lt;/em>. Experience and common sense tells us that if you choose CTRL-V you can only paste the last word you copied to the clipboard.
But that is not quite right. You may not be aware of it, but the ABAP editor has a good memory.&lt;/p></description></item><item><title>Compare a table across two systems</title><link>https://abapinho.com/en/2013/11/compara-uma-tabela-entre-dois-sistemas/</link><pubDate>Mon, 25 Nov 2013 09:00:45 +0000</pubDate><guid>https://abapinho.com/en/2013/11/compara-uma-tabela-entre-dois-sistemas/</guid><description>The SCMP transaction compares the content of a table across two systems. It is very useful, especially for parameterization tables.
It is very easy to use. It allows for the pre-selection of the registers and fields to compare. It also allows you to only display the differences, which is convenient for tables with lots of data. I don’t think any more explaining is required. Ite et videte.
This tip recently appeared in the ex SAPtricks blog and I think it is so useful that I have reposted it here, in case you haven’t already seen it.</description></item><item><title>SELECT... ...ORDER BY PRIMARY KEY</title><link>https://abapinho.com/en/2013/11/select-order-by-primary-key/</link><pubDate>Mon, 18 Nov 2013 09:00:43 +0000</pubDate><guid>https://abapinho.com/en/2013/11/select-order-by-primary-key/</guid><description>Although I have been using ABAP since 1998, I learn new features or options every week, and sometimes even new commands. It’s hard to believe.
Today, I’ll share a little SQL option that I recently discovered.
SELECT * FROM T001 INTO TABLE T_T001 ORDER BY PRIMARY KEY. I have known SELECT, FROM, INTO, TABLE and even ORDER BY for a long time. I just didn’t know of PRIMARY KEY.
It orders the internal table by its key.</description></item><item><title>Function to create cartoons</title><link>https://abapinho.com/en/2013/11/funcao-para-gerar-bonecada/</link><pubDate>Mon, 11 Nov 2013 09:00:47 +0000</pubDate><guid>https://abapinho.com/en/2013/11/funcao-para-gerar-bonecada/</guid><description>&lt;p>Cartoons always look good in a report. In a SAPGui that is boredom in blue, the more colours and cartoons there are the better it is. Luís Rocha showed me a very convenient function to fill up a report with icons.&lt;/p></description></item><item><title>SELECT comparing 2 fields of the same table</title><link>https://abapinho.com/en/2013/11/select-propria-tabela/</link><pubDate>Mon, 04 Nov 2013 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2013/11/select-propria-tabela/</guid><description>&lt;p>This tip is simple and quick, but I bet 200.482 Portuguese escudos that few know it.&lt;/p></description></item><item><title>Syntax error when returning tables of a method</title><link>https://abapinho.com/en/2013/10/erro-ao-retornar-tabela-num-metodo/</link><pubDate>Mon, 21 Oct 2013 09:00:37 +0000</pubDate><guid>https://abapinho.com/en/2013/10/erro-ao-retornar-tabela-num-metodo/</guid><description>&lt;p>When you create a return parameter in a method of a class that is a TABLE TYPE based on a type declared in the class proper, an error sometimes pops up that says:&lt;/p>
&lt;p>&amp;ldquo;Type of RETURNING parameters must be fully specified.&amp;rdquo;&lt;/p></description></item><item><title>/HS Command</title><link>https://abapinho.com/en/2013/07/comando-hs/</link><pubDate>Mon, 22 Jul 2013 09:00:36 +0000</pubDate><guid>https://abapinho.com/en/2013/07/comando-hs/</guid><description>&lt;p>Most functionals, and even the hardcore functionals, knows that in order to start debugging an ABAP program, we use the /H command. But few programmers, even the hardcode programmers, will know the purpose of the /HS command.&lt;/p></description></item><item><title>Dynamically call classes and methods</title><link>https://abapinho.com/en/2013/07/chamada-dinamicamente-classes-e-metodos/</link><pubDate>Mon, 08 Jul 2013 09:00:12 +0000</pubDate><guid>https://abapinho.com/en/2013/07/chamada-dinamicamente-classes-e-metodos/</guid><description>&lt;p>Now, learn how to dynamically invoke a method.&lt;/p>
&lt;p>Let’s go for it.&lt;/p></description></item><item><title>Don't mix Z functions with maintenance views!</title><link>https://abapinho.com/en/2013/06/funcoes-z-com-vistas-de-manutencao-nao/</link><pubDate>Mon, 24 Jun 2013 09:00:02 +0000</pubDate><guid>https://abapinho.com/en/2013/06/funcoes-z-com-vistas-de-manutencao-nao/</guid><description>&lt;p>Today’s hint is not a hint - it’s an advice.&lt;/p>
&lt;p>After creating a table, you create its maintenance views. The maintenance views dwell within a group of functions. This group of functions is requested from you at the time of their creation. Since, after all, that’s no more than a set of generated code, and most of it is, nonetheless, standard includes. Loads.&lt;/p>
&lt;p>I give you the problem: there are those who create their own Z functions and put them in groups of functions with maintenance views. It&amp;rsquo;s true. Some do this.&lt;/p></description></item><item><title>I like LIKE</title><link>https://abapinho.com/en/2013/06/gosto-do-like/</link><pubDate>Mon, 17 Jun 2013 09:00:16 +0000</pubDate><guid>https://abapinho.com/en/2013/06/gosto-do-like/</guid><description>&lt;p>In the ‘bad old days’ when the ABAP was even more old-fashioned than today, variable statements were all made through LIKE and were referenced to table fields:&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">DATA&lt;/span>: &lt;span style="color:#000">V_KUNNR&lt;/span> &lt;span style="color:#00f">LIKE &lt;/span>&lt;span style="color:#000">KNA1&lt;/span>-&lt;span style="color:#000">KUNNR&lt;/span>.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>QUICKINFO: tip on how to give tips.</title><link>https://abapinho.com/en/2013/06/quickinfo/</link><pubDate>Mon, 03 Jun 2013 09:00:46 +0000</pubDate><guid>https://abapinho.com/en/2013/06/quickinfo/</guid><description>In my opinion, this tip has arrived a few years too late, as it is now rare to use the WRITE command to directly write things to the screen. Therefore, we can say it&amp;rsquo;s a retro tip. A vintage tip. But let&amp;rsquo;s assume we are still in the twentieth century grappling with ABAP’s most Baroque command, WRITE.
Then, imagine yourself sitting in front of SAP, listening to Pearl Jam, wearing black headphones and writing WRITEs of a series of values on the screen, which you would like the user to have more information on.</description></item><item><title>Is that RFC system alive?</title><link>https://abapinho.com/en/2013/05/aquele-sistema-rfc-esta-vivo/</link><pubDate>Mon, 27 May 2013 09:00:03 +0000</pubDate><guid>https://abapinho.com/en/2013/05/aquele-sistema-rfc-esta-vivo/</guid><description>You want to call an RFC function in another system but, because you’re not a carrion eater, you only want to do it if it’s alive.
Hence, you need a way of checking whether that particular destination RFC system is alive.
How do you do that?
Charles Santana does it like this:
DATE: rfcdest TYPE rfcdest, ping_status TYPE /sdf/e2e_traffic_light_numeric. CALL FUNCTION &amp;#39;/SDF/RFC_CHECK&amp;#39; EXPORTING iv_destination = rfcdest iv_ping = &amp;#39;X&amp;#39; * iv_logon = &amp;#39;X&amp;#39; * iv_latency = &amp;#39;X&amp;#39; IMPORTING ev_ping_status = ping_status.</description></item><item><title>Does the function exist?</title><link>https://abapinho.com/en/2013/05/a-funcao-existe/</link><pubDate>Mon, 20 May 2013 09:00:07 +0000</pubDate><guid>https://abapinho.com/en/2013/05/a-funcao-existe/</guid><description>&lt;p>You call a function.
Imagine it doesn’t answer.
It may be that it’s staying silent.
Or it’s shy.
Or dumb.
Or, of all the misfortunes, it doesn’t exist.&lt;/p>
&lt;p>To make sure and put your mind to rest you then do:&lt;/p></description></item><item><title>Writing money without any decimal worries</title><link>https://abapinho.com/en/2013/05/escrever-dinheiro-sem-preocupacoes-decimais/</link><pubDate>Mon, 13 May 2013 09:00:50 +0000</pubDate><guid>https://abapinho.com/en/2013/05/escrever-dinheiro-sem-preocupacoes-decimais/</guid><description>&lt;p>Some people read the TCURX to find out the number of decimal places of a CURRENCY when they need to write a money field to an alphanumeric variable.&lt;/p>
&lt;p>Are you one of those people? Don’t be.&lt;/p></description></item><item><title>Finally, expressions can be concatenated</title><link>https://abapinho.com/en/2013/04/expressoes-encadeadas/</link><pubDate>Mon, 15 Apr 2013 09:00:33 +0000</pubDate><guid>https://abapinho.com/en/2013/04/expressoes-encadeadas/</guid><description>&lt;p>Finally, the &lt;em>SAP NetWeaver 7.0 Enhancement Package 2&lt;/em> makes ABAP start to seem like a normal programming language.&lt;/p>
&lt;p>It even allows expressions to be concatenated, no less!&lt;/p></description></item><item><title>Decimal to alphanumeric without depending on the user</title><link>https://abapinho.com/en/2013/04/decimais-para-alfa-numericos-sem-depender-do-utilizador/</link><pubDate>Mon, 08 Apr 2013 09:00:46 +0000</pubDate><guid>https://abapinho.com/en/2013/04/decimais-para-alfa-numericos-sem-depender-do-utilizador/</guid><description>&lt;p>When reading a file with numeric values to an internal table or vice versa, the success of the conversion depends on whether the user has defined the dot or comma as the decimal separator. It is customary to then go and read the user setting and then adjust the values from the file with a dot or a comma as required.&lt;/p>
&lt;p>But this is unfortunate and rather inelegant. There should be a way of not making this depend on the user.&lt;/p>
&lt;p>And there is.&lt;/p></description></item><item><title>SORTED instead of STANDARD in the cache tables</title><link>https://abapinho.com/en/2013/04/sorted-em-vez-de-standard/</link><pubDate>Mon, 01 Apr 2013 16:11:22 +0000</pubDate><guid>https://abapinho.com/en/2013/04/sorted-em-vez-de-standard/</guid><description>Some time ago I wrote a post here showing the advantages of using internal tables with defined indexes instead of simple STANDARD tables.
Confession: that habit is so ingrained that since then, almost all the internal tables I have created have continued to be STANDARD TABLE.
It’s very common to create internal tables to cache data that I know I&amp;rsquo;ll often use inside LOOPS to avoid having to SELECT SINGLES inside them.</description></item><item><title>Share constants among several classes</title><link>https://abapinho.com/en/2013/03/partilhar-constantes-entre-varias-classes/</link><pubDate>Mon, 25 Mar 2013 09:00:35 +0000</pubDate><guid>https://abapinho.com/en/2013/03/partilhar-constantes-entre-varias-classes/</guid><description>&lt;p>Imagine you have a herd of related classes sharing between them a whole bunch of constants. Saying the same thing a different way, would you like all the classes of the herd to have easy access to the bunch of constants?&lt;/p>
&lt;p>(If you’re confused, then let me tell you that the “herd” thing was just to baffle you)&lt;/p>
&lt;p>Carrying on&amp;hellip;..&lt;/p></description></item><item><title>SAP for rent</title><link>https://abapinho.com/en/2013/03/sap-de-aluguer/</link><pubDate>Mon, 18 Mar 2013 09:00:21 +0000</pubDate><guid>https://abapinho.com/en/2013/03/sap-de-aluguer/</guid><description>&lt;p>If you really need to access an SAP and nobody lets you, and you don’t have a computer where you can install it or you don’t have enough know-how or patience to do it, you can always rent.&lt;/p></description></item><item><title>Colour hallucination</title><link>https://abapinho.com/en/2013/03/alucinacao-as-cores/</link><pubDate>Mon, 11 Mar 2013 09:00:56 +0000</pubDate><guid>https://abapinho.com/en/2013/03/alucinacao-as-cores/</guid><description>&lt;p>This is not really an article. It’s hardly a tip. It’s closer to getting something off my chest in all the colours of the rainbow.&lt;/p></description></item><item><title>Create RANGEs in DDIC without getting all wound up</title><link>https://abapinho.com/en/2013/03/ranges-no-ddic/</link><pubDate>Mon, 04 Mar 2013 18:26:40 +0000</pubDate><guid>https://abapinho.com/en/2013/03/ranges-no-ddic/</guid><description>&lt;p>I am using RANGEs more and more. I use them at breakfast, lunch, and dinner and outside meal times. It’s like soy sauce. A few spoonfuls and everything is instantly tastier.&lt;/p></description></item><item><title>Lock data in Z-tables without a locking object</title><link>https://abapinho.com/en/2013/01/bloquear-dados-em-tabelas-z-sem-objecto-de-bloqueio/</link><pubDate>Mon, 28 Jan 2013 09:00:54 +0000</pubDate><guid>https://abapinho.com/en/2013/01/bloquear-dados-em-tabelas-z-sem-objecto-de-bloqueio/</guid><description>&lt;p>If I needed to create locking entries in a ZCOISO table I had created, up to two days ago I would have gone to SE11 to create a locking object for the ZCOISO table so that I could then use the function module generated by the locking object to lock the data.&lt;/p>
&lt;p>But not anymore.&lt;/p></description></item><item><title>SAP system name in the window title</title><link>https://abapinho.com/en/2013/01/titulo-da-janela/</link><pubDate>Mon, 21 Jan 2013 09:00:20 +0000</pubDate><guid>https://abapinho.com/en/2013/01/titulo-da-janela/</guid><description>&lt;p>The client where I&amp;rsquo;m working at the moment owns more SAP systems than the number of volcanoes in Chile. And, of course, it&amp;rsquo;s inevitable to have multiple sessions open for several of those systems. With the windows minimized it&amp;rsquo;s impossible to know the matching between systems and sessions. I mean, it was impossible, because today that&amp;rsquo;s already possible:&lt;/p></description></item><item><title>Execute commands in the user’s computer</title><link>https://abapinho.com/en/2012/12/comandos-no-computador-do-utilizador/</link><pubDate>Mon, 10 Dec 2012 09:00:41 +0000</pubDate><guid>https://abapinho.com/en/2012/12/comandos-no-computador-do-utilizador/</guid><description>It’s been a while since Abapinho played with fire. Today he will.
Because today he’ll show you how to execute DOS commands on the user’s local machine. After you finish reading this article, you’ll be ready to format the hard disks of all your users. Dealing with danger helps make us aware of the power we have and the responsibility that comes with it. Dear reader, listen to your conscience.</description></item><item><title>Benefits of LIKE LINE OF</title><link>https://abapinho.com/en/2012/11/vantagens-do-like-line-of/</link><pubDate>Mon, 26 Nov 2012 09:00:40 +0000</pubDate><guid>https://abapinho.com/en/2012/11/vantagens-do-like-line-of/</guid><description>&lt;p>Let&amp;rsquo;s start by assuming that you have some dignity and so you don&amp;rsquo;t use internal tables with HEADER LINE anymore ;)&lt;/p>
&lt;p>Given this, let&amp;rsquo;s suppose you declare an internal table:&lt;/p></description></item><item><title>Maintaining table maintenance authorisation groups</title><link>https://abapinho.com/en/2012/11/se54/</link><pubDate>Mon, 19 Nov 2012 09:00:24 +0000</pubDate><guid>https://abapinho.com/en/2012/11/se54/</guid><description>&lt;p>There are some projects in which the authorisations group associated with table maintenance is always &amp;amp;NC;&amp;amp;, that is, Not Classified. It signals that everything there is friendly and nobody is hurting anyone else. But there are other projects where authorisation groups are taken seriously. But this is not synonymous with saying that they are organised. Serious or not, usually it all ends in a big mess, with nobody knowing who is authorised to do what.&lt;/p>
&lt;p>This tip may help.&lt;/p></description></item><item><title>INSERT and APPEND with ASSIGNING FIELD-SYMBOL</title><link>https://abapinho.com/en/2012/11/insert-initial-line-into-table/</link><pubDate>Mon, 05 Nov 2012 09:00:11 +0000</pubDate><guid>https://abapinho.com/en/2012/11/insert-initial-line-into-table/</guid><description>&lt;p>The harsh truth, at all costs, is that structures are out of date. Nowadays FIELD-SYMBOLS are in.&lt;/p>
&lt;p>When you make a LOOP to an internal table of course that you also &lt;a href="https://abapinho.com/en/2011/07/assigning-vs-into/">use ASSIGNING FIELD-SYMBOL instead of INTO Structure&lt;/a>,correct?&lt;/p>
&lt;p>But what was screwing everything over was APPEND and INSERT. I did not know how to use a structure to add records&lt;/p></description></item><item><title>No one cares for LISTBOX</title><link>https://abapinho.com/en/2012/10/ninguemligaaolistbox/</link><pubDate>Mon, 29 Oct 2012 09:00:07 +0000</pubDate><guid>https://abapinho.com/en/2012/10/ninguemligaaolistbox/</guid><description>&lt;p>For some strange reason, LISTBOX is rarely used in report selection screens. Even though it&amp;rsquo;s widely used throughout the web. Who knows why.&lt;/p>
&lt;p>Dear reader, I suggest you pay attention to its advantages:&lt;/p></description></item><item><title>SAParrot</title><link>https://abapinho.com/en/2012/10/sapagaio/</link><pubDate>Mon, 15 Oct 2012 09:00:47 +0000</pubDate><guid>https://abapinho.com/en/2012/10/sapagaio/</guid><description>Go to SE38 and create a program with the code below. Then turn the computer sound on and press F8.
INCLUDE ole2incl. DATA : ole TYPE ole2_object, voz TYPE ole2_object, texto TYPE string. CREATE OBJECT voz &amp;#39;SAPI.SpVoice&amp;#39;. texto = &amp;#39;Olá eu sou o SAP e falo português com sotaque estrangeiro&amp;#39;. CALL METHOD OF voz &amp;#39;Speak&amp;#39; = ole EXPORTING #1 = texto. Note: the parrot not in the photo, just the macaw with which he was talking :)</description></item><item><title>Are you serious or just joking?</title><link>https://abapinho.com/en/2012/10/a-serio-ou-a-brincar/</link><pubDate>Mon, 08 Oct 2012 09:00:16 +0000</pubDate><guid>https://abapinho.com/en/2012/10/a-serio-ou-a-brincar/</guid><description>&lt;p>Some things can only happen in production.
While with some others it&amp;rsquo;s quite the opposite.&lt;/p></description></item><item><title>If you still don't use ABAP Objects you're chicken</title><link>https://abapinho.com/en/2012/10/mariquinhas-pe-de-salsa/</link><pubDate>Mon, 01 Oct 2012 09:00:20 +0000</pubDate><guid>https://abapinho.com/en/2012/10/mariquinhas-pe-de-salsa/</guid><description>SAP has a book called Official ABAP Programming Guidelines which describes rules and best practices on how to program in ABAP. In there you can read:
Page 42: Rule 3.1: Use ABAP Objects whenever possible for new and further developments. Classic processing blocks may be newly created in exceptional cases only.
Page 45: Within such a [classic] processing block, however, you should immediately delegate the execution to a suitable method (see Rule 6.</description></item><item><title>Beautiful table relationships diagrams</title><link>https://abapinho.com/en/2012/09/diagrama-relacoes-tabelas/</link><pubDate>Mon, 24 Sep 2012 09:00:39 +0000</pubDate><guid>https://abapinho.com/en/2012/09/diagrama-relacoes-tabelas/</guid><description>Nice relation diagrams for standard tables. Rui Dias revealed me a site where you can check the relation between any standard table with each other.
For instance for T012. And if you try KNA1 it gets even better.
Do you like it? I do.
Thanks Rui Dias.
Greetings from Abapinho.</description></item><item><title>Keyboard shortcut to transaction field</title><link>https://abapinho.com/en/2012/09/atalho-campo-transaccao/</link><pubDate>Mon, 10 Sep 2012 09:00:09 +0000</pubDate><guid>https://abapinho.com/en/2012/09/atalho-campo-transaccao/</guid><description>And there you are madly typing with SAP when suddenly you need to go to the transaction field and write /OS37 or whatever. But you are writing with so much passion that the thought of leaving the keyboard for a moment to use your mouse seems catastrophic. Instead, you just press 3 keyboard keys: CTRL-SHIFT-7.
Thank you Renato Sousa for the tip.
Greetings from Abapinho.</description></item><item><title>Create sessions with the keyboard</title><link>https://abapinho.com/en/2012/09/cria-sessoes-com-o-teclado/</link><pubDate>Mon, 03 Sep 2012 09:00:02 +0000</pubDate><guid>https://abapinho.com/en/2012/09/cria-sessoes-com-o-teclado/</guid><description>You need to start a new session but your mouse was stolen. No problem. Press CTRL and then the + key and you will see a new session coming in.
Thank you Renato Sousa for the tip.
And thank you freeimageslive / gratuit for the photo.
Greetings from Abapinho.</description></item><item><title>Digital narcissism</title><link>https://abapinho.com/en/2012/08/narcisismo-digital/</link><pubDate>Mon, 27 Aug 2012 09:00:38 +0000</pubDate><guid>https://abapinho.com/en/2012/08/narcisismo-digital/</guid><description>&lt;p>&lt;em>Reflection&lt;/em> is the ability of a program to see itself. ABAP has a series of reflective capabilities, such as RTTS or the ability to dynamically generate code. There are also a few other so-and-so functions that do this and that. Today I present one of them to you:&lt;/p>
&lt;p>GET_GLOBAL_SYMBOLS&lt;/p></description></item><item><title>Good program to find user-exits</title><link>https://abapinho.com/en/2012/08/encontrar-user-exits/</link><pubDate>Mon, 20 Aug 2012 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2012/08/encontrar-user-exits/</guid><description>Every now and then we’ll be looking for user-exits and BADIs, BTEs and the like. SAP doesn’t help. But programs appear here and there, almost always called Z_USEREXIT, which help with this unappreciated search. Recently I learned of another one. I share it here because it is the best I have ever seen:
https://wiki.sdn.sap.com/wiki/display/Snippets/Find+User-exits,+BADIs,+BTEs,+Etc+by+TCode+or+Program
Thanks to Bruno Esperança for the tip. And thank you rverscha for the photo.
Greetings from Abapinho.</description></item><item><title>Class for converting STRINGs</title><link>https://abapinho.com/en/2012/08/classe-para-converter-strings/</link><pubDate>Mon, 13 Aug 2012 09:00:56 +0000</pubDate><guid>https://abapinho.com/en/2012/08/classe-para-converter-strings/</guid><description>&lt;p>You know how you sometimes have a STRING-type variable and you need to send it to a function that needs it in SOLIX-type? It often happens to me. Well, I have found this great class that converts strings into a wide range of formats:&lt;/p>
&lt;p>CL_BCS_CONVERT&lt;/p></description></item><item><title>Jump The Wall</title><link>https://abapinho.com/en/2012/08/salta-a-parede/</link><pubDate>Mon, 06 Aug 2012 09:00:31 +0000</pubDate><guid>https://abapinho.com/en/2012/08/salta-a-parede/</guid><description>&lt;p>Turn down the music.
Close the door.
Look around.
Is anyone looking at you?
Are you being watched?
Are there any security cameras?
If not, we can go on.&lt;/p></description></item><item><title>Preventing competition in an ABAP program</title><link>https://abapinho.com/en/2012/07/evitando-a-concorrencia-num-programa-abap/</link><pubDate>Mon, 30 Jul 2012 09:00:27 +0000</pubDate><guid>https://abapinho.com/en/2012/07/evitando-a-concorrencia-num-programa-abap/</guid><description>&lt;p>They say that competition in trade is good. Good for consumers, that is. It lowers prices and so on. But inside computers it creates problems for those using them.&lt;/p>
&lt;p>Usually, competition is contained in ABAP at the data level, blocking ( &lt;em>euqueue&lt;/em> ) certain tables based on their key. But sometimes, something more violent may be required to ensure that a program may not run more than once at the same time. The ESINDX lock object can be used to do this.&lt;/p></description></item><item><title>Diving into Chaos with the CL_ABAP_RANDOM* classes</title><link>https://abapinho.com/en/2012/07/numeros-aleatorios/</link><pubDate>Mon, 23 Jul 2012 09:00:07 +0000</pubDate><guid>https://abapinho.com/en/2012/07/numeros-aleatorios/</guid><description>&lt;p>ABAP programs are all too well behaved, too predictable.&lt;/p>
&lt;p>As demiurges, we have a moral obligation to give them a little free will, give them a scent of chaos, show them the trees of life and of knowledge, and in a passage through &lt;em>kenosis&lt;/em> , give them free reign to take a bite from the apple. Only in this way will we feel complete and fulfilled, only by this means will we be able to rest on the seventh day.&lt;/p>
&lt;p>There is nothing better to achieve this than random numbers.&lt;/p></description></item><item><title>Complex parameters in remote functions</title><link>https://abapinho.com/en/2012/07/parametros-complexos-por-rfc/</link><pubDate>Mon, 16 Jul 2012 09:00:01 +0000</pubDate><guid>https://abapinho.com/en/2012/07/parametros-complexos-por-rfc/</guid><description>&lt;p>Remote function calls (by RFC) do not support parameters with complex structures (deep structures). In other words, if any of the parameters has a structure in which one of the fields is another structure or an internal table then, hard luck, it won’t work.&lt;/p>
&lt;p>Do you give up? No, you don’t. Abapinho provides the solution: serialization.&lt;/p></description></item><item><title>F1 in the selection screen fields</title><link>https://abapinho.com/en/2012/07/f1-ecra-seleccao/</link><pubDate>Mon, 09 Jul 2012 09:00:07 +0000</pubDate><guid>https://abapinho.com/en/2012/07/f1-ecra-seleccao/</guid><description>&lt;p>You have just produced a wonderful report headed by a selection screen crammed full of very interesting fields. But usually those running the report will not know, if it has some complexity, what each of the fields does. There are, of course, the technical and functional specifications for this. But are there? And even if there are, wouldn’t it be easier if you could press F1 on top of each field and find out there and then what it’s for?&lt;/p>
&lt;p>I&amp;rsquo;ll show you two possible ways to give individualized information about the fields of a selection screen.&lt;/p></description></item><item><title>Happily jumping from line to line</title><link>https://abapinho.com/en/2012/06/saltar-para-linha/</link><pubDate>Mon, 25 Jun 2012 09:00:09 +0000</pubDate><guid>https://abapinho.com/en/2012/06/saltar-para-linha/</guid><description>At the bottom right corner of ABAP editor, right in the status line, you can check in which line and column the cursor is. By double clicking over that information a dialog box is shown and you will be able to introduce a line number to it skip directly. The short key is CTRL-O. It&amp;rsquo;s very helpful.
Thank you Fábio Branquinho for the tip.
And thank you to juandesant for the photo.</description></item><item><title>Menu search</title><link>https://abapinho.com/en/2012/06/pesquisar-em-menus/</link><pubDate>Mon, 18 Jun 2012 09:00:02 +0000</pubDate><guid>https://abapinho.com/en/2012/06/pesquisar-em-menus/</guid><description>Did you know that is possible to search in SAP menus? Probably yes. Well, I didn&amp;rsquo;t. I&amp;rsquo;ve spent years looking through menu S000 searching for the most random stuff imaginable. I&amp;rsquo;m sure that if I had done menu search I would have found most of them in seconds. Sometimes you just don´t think of the obvious.
Thank you Sérgio Fraga for the tip.
Greetings from Abapinho.</description></item><item><title>Dot and comma or comma and dot?</title><link>https://abapinho.com/en/2012/06/ponto-e-virgula-ou-virgula-e-ponto/</link><pubDate>Mon, 11 Jun 2012 09:00:34 +0000</pubDate><guid>https://abapinho.com/en/2012/06/ponto-e-virgula-ou-virgula-e-ponto/</guid><description>Some numbers have dots, some numbers have commas and some numbers have dots and commas. The problem is that there are also numbers that have commas and dots. The thing is, there are commas that are dots and dots that are commas, depending on where you are from, in other words, depending on user’s configurations. When importing a file with decimal numbers, these numbers’ alpha-numeric fields must be converted into numeric fields.</description></item><item><title>More RANGEs, less SELECTs</title><link>https://abapinho.com/en/2012/06/mais-ranges-menos-selects/</link><pubDate>Mon, 04 Jun 2012 09:00:33 +0000</pubDate><guid>https://abapinho.com/en/2012/06/mais-ranges-menos-selects/</guid><description>&lt;p>The dictionary has the following entry for &amp;ldquo;style&amp;rdquo;: &amp;ldquo;set of formal aspects and expressive resources that characterise a text.&amp;rdquo;&lt;/p>
&lt;p>It is preferable to read a text with style than one without. If ABAP were a language, a program in ABAP would be a text. When it comes to style, there are programs that seem to have been written by the feet, while there are others that one would swear the quill that wrote them was guided by the pure hand of an eighteenth century lady plagued by the troubles of love. Fortunately, I think it’s not possible to write programs in ABAP as tacky as the last sentence.&lt;/p>
&lt;p>The &amp;ldquo;style&amp;rdquo; label is used here in Abapinho to identify articles that talk about just that: style. These articles try to find ways to improve the style of ABAP programs. This is one of Abapinho’s favourite labels, as you can see &lt;a href="https://abapinho.com/tags/estilo/">here&lt;/a>. And what you are reading is another of those articles.&lt;/p>
&lt;p>Moving on.&lt;/p></description></item><item><title>Slash O</title><link>https://abapinho.com/en/2012/05/barra-o/</link><pubDate>Mon, 21 May 2012 10:00:00 +0000</pubDate><guid>https://abapinho.com/en/2012/05/barra-o/</guid><description>Throughout all my &amp;ldquo;SAP life&amp;rdquo; I’ve used the command /olalala to initiate the lalala transaction in a new GUI window. Until now I had never tried just writing /o. I did today. The result was interesting.
Meaning, it’s the same as going to SM04 and then choosing our user. But much easier.
Greetings from Abapinho</description></item><item><title>Gregarious constants</title><link>https://abapinho.com/en/2012/05/constantesgregarias/</link><pubDate>Mon, 14 May 2012 10:00:28 +0000</pubDate><guid>https://abapinho.com/en/2012/05/constantesgregarias/</guid><description>&lt;p>If you are one of those who insert the values directly in code instead of using constants, then read no more and go and stand over there in the corner on punishment for 1 hour to learn not to be lazy. If you&amp;rsquo;ve come back from punishment or you usually use constants, then please continue reading.&lt;/p></description></item><item><title>Your password has expired. Change it 5 times.</title><link>https://abapinho.com/en/2012/05/a-sua-password-expirou/</link><pubDate>Mon, 07 May 2012 10:00:08 +0000</pubDate><guid>https://abapinho.com/en/2012/05/a-sua-password-expirou/</guid><description>It is not uncommon for us to be emotionally attached to our passwords. Therefore, it is always rather painful to receive those despicable threatening notices that say &amp;ldquo;your password is going to expire”. Soon followed by the blow we receive to our heart on the appearance of the inevitable vile invective that &amp;ldquo;your password has expired.&amp;rdquo; At such times, the hurt is so great that all the muses leave us, we have imagination cramp and remain stuck there, staring and drained, emptied of any idea to help us choose our next password.</description></item><item><title>Client or Customer?</title><link>https://abapinho.com/en/2012/04/cliente-ou-fregues/</link><pubDate>Mon, 23 Apr 2012 10:00:05 +0000</pubDate><guid>https://abapinho.com/en/2012/04/cliente-ou-fregues/</guid><description>Wherever you use the data element KUNNR, its descriptions is “Client”. And what if we wanted to change this field description from &amp;ldquo;Client&amp;rdquo; to &amp;ldquo;Customer&amp;rdquo;? “Customer&amp;quot; is so much nicer! Or let&amp;rsquo;s suppose that the company you work for is trafficking in drugs and tells you that they want &amp;ldquo;Dealer&amp;rdquo; rather than “Supplier” to appear in the LIFNR field. Obviously we can label it as we wish on screens and Z reports but what about standard transactions?</description></item><item><title>Adding buttons to the selection screen</title><link>https://abapinho.com/en/2012/04/botoes-no-ecra-de-seleccao/</link><pubDate>Mon, 16 Apr 2012 10:00:45 +0000</pubDate><guid>https://abapinho.com/en/2012/04/botoes-no-ecra-de-seleccao/</guid><description>&lt;p>Normally, when buttons must be generated for users to click, Screen Painter is used to create a screen which is then invoked by the report using CALL SCREEN. But, unless the screen being designed is already quite complex it is pointless creating a screen which will have no further use. Screens have always annoyed me.&lt;/p>
&lt;p>I will demonstrate an example of using buttons on a completely normal selection screen resorting to a button called PUSHBUTTON and a very clever trick called ONLI.&lt;/p></description></item><item><title>Fill up the selection screen with cartoons</title><link>https://abapinho.com/en/2012/04/bonecada-no-ecra-seleccao/</link><pubDate>Mon, 09 Apr 2012 10:00:58 +0000</pubDate><guid>https://abapinho.com/en/2012/04/bonecada-no-ecra-seleccao/</guid><description>&lt;p>Was SAP born miserable or are SAP-users simply unable to cheer it up?&lt;/p>
&lt;p>The truth is that SAP GUI is no rainbow and neither does looking at it bring happiness. Even so, it puts at our disposal a bunch of cartoons that we may use to make it just a little more uplifting.&lt;/p>
&lt;p>And take a look at just how easy it is.&lt;/p></description></item><item><title>Oh time turn back</title><link>https://abapinho.com/en/2012/04/o-tempo-volta-para-tras/</link><pubDate>Mon, 02 Apr 2012 10:00:08 +0000</pubDate><guid>https://abapinho.com/en/2012/04/o-tempo-volta-para-tras/</guid><description>&lt;p>“Oh time turn back
Give me everything I have lost
Take pity and give me the life
The life I have already lived
Oh time turn backward
Kill off my futile hopes
Look how even the sun itself
Returns every morning” – António Mourão&lt;/p>
&lt;p>Hey &lt;a href="https://www.youtube.com/watch?v=LOtAfLvhSZo">Tony&lt;/a>, right away. I will show you how you can turn back time.&lt;/p></description></item><item><title>F1 + F9 = Technical Information</title><link>https://abapinho.com/en/2012/03/f1-f9-informacoes-tecnicas/</link><pubDate>Mon, 05 Mar 2012 16:18:59 +0000</pubDate><guid>https://abapinho.com/en/2012/03/f1-f9-informacoes-tecnicas/</guid><description>In a functional screen I often feel the need to see technical information about a particular field. I place the cursor on the field I want, then I click on F1 and a dialog screen will appear with help for that field. Then I click on the button that says &amp;ldquo;technical information&amp;rdquo;.But there is a quick way to do the same thing using only the keyboard.
There are two possible ways for F1 to display the help for one specific field:</description></item><item><title>When an internal table is not structured</title><link>https://abapinho.com/en/2012/02/tabela-interna-nao-estruturada/</link><pubDate>Mon, 27 Feb 2012 10:00:06 +0000</pubDate><guid>https://abapinho.com/en/2012/02/tabela-interna-nao-estruturada/</guid><description>When you want to select some lines in an internal table you normally do something like this:
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. But what if the table is not structured and you want to search on the line as a whole?</description></item><item><title>Create test variants within functions from the debugger</title><link>https://abapinho.com/en/2012/02/variantes-de-teste-em-debug/</link><pubDate>Mon, 20 Feb 2012 10:00:42 +0000</pubDate><guid>https://abapinho.com/en/2012/02/variantes-de-teste-em-debug/</guid><description>&lt;p>Imagine that you are debugging a transaction, you enter into a function and find something interesting. So interesting that you have to debug it several times. The conventional way is to start the debug of the transaction again from the beginning. How tedious.&lt;/p>
&lt;p>But there is a more direct route. When you are debugging a function you can create test data for this function directly from the debugger, using the values with which the function had been called at that time. For instance:&lt;/p></description></item><item><title>The SAPGui history does not work even when active?</title><link>https://abapinho.com/en/2012/02/sapgui-historico/</link><pubDate>Mon, 06 Feb 2012 10:00:01 +0000</pubDate><guid>https://abapinho.com/en/2012/02/sapgui-historico/</guid><description>&lt;p>Has it ever happened to you that SAPGui does not store a history of values that you input to various fields even though the History option is actived in the settings?&lt;/p></description></item><item><title>SE80 has favourites</title><link>https://abapinho.com/en/2012/01/favoritos-se80/</link><pubDate>Mon, 30 Jan 2012 10:00:39 +0000</pubDate><guid>https://abapinho.com/en/2012/01/favoritos-se80/</guid><description>The SE80 transaction contains everything. It seems like those village grocery stores crammed with junk where you can buy toothpaste, bread, shoes, perfume and rice in bulk. I like these grocery stores. But to go there you need to know where you are going, otherwise you&amp;rsquo;ll walk from pillar to post.
But this is what it&amp;rsquo;s like in these grocery stores but in SE80&amp;hellip;. there are favourites.
Yes indeed there are.</description></item><item><title>If a stranger offers you values, this is Input</title><link>https://abapinho.com/en/2012/01/call-selection-screen/</link><pubDate>Mon, 23 Jan 2012 10:00:08 +0000</pubDate><guid>https://abapinho.com/en/2012/01/call-selection-screen/</guid><description>&lt;p>In a report, the values are normally requested from the user at the first selection screen before the program is run. But what if you want to interactively ask for more values in the middle of running the program?&lt;/p></description></item><item><title>Selection screen with tabs</title><link>https://abapinho.com/en/2012/01/ecra-seleccao-abas/</link><pubDate>Mon, 16 Jan 2012 10:00:23 +0000</pubDate><guid>https://abapinho.com/en/2012/01/ecra-seleccao-abas/</guid><description>&lt;p>The selection screens of ABAP programs have several features that, although complex and easy to use, are generally ignored. Here, I will show you how easy it is to create tabs to better organise the parameters of a program. This time though, and uncommonly, I&amp;rsquo;ll spare you the verbal onslaught. It’s a practical class.&lt;/p></description></item><item><title>Debugging while in modal dialogue boxes</title><link>https://abapinho.com/en/2012/01/debug-em-popups/</link><pubDate>Mon, 09 Jan 2012 10:00:29 +0000</pubDate><guid>https://abapinho.com/en/2012/01/debug-em-popups/</guid><description>&lt;p>There are times when you can’t do /H to launch &lt;em>debugger&lt;/em>. The most common one is when a pop-up window is open. However there is a simple, if Heath-Robinson, way to do it:&lt;/p></description></item><item><title>What does a message say?</title><link>https://abapinho.com/en/2012/01/texto-mensagem/</link><pubDate>Mon, 02 Jan 2012 10:00:15 +0000</pubDate><guid>https://abapinho.com/en/2012/01/texto-mensagem/</guid><description>Do you want to obtain the text from a message when you only know the ID and the number, but you don’t know how? Find out here:
DATA text TYPE string. MESSAGE ID &amp;#39;00&amp;#39; TYPE &amp;#39;E&amp;#39; NUMBER &amp;#39;163&amp;#39; WITH &amp;#39;123&amp;#39; INTO text. That’s all it is. Now inside the text variable, you find the following text:
&amp;ldquo;Client 123 does not exist in the system&amp;rdquo;
Thanks to Peteris B for the photo.</description></item><item><title>Be lazy when you write in ABAPese</title><link>https://abapinho.com/en/2011/12/modelos-de-codigo/</link><pubDate>Mon, 26 Dec 2011 00:11:42 +0000</pubDate><guid>https://abapinho.com/en/2011/12/modelos-de-codigo/</guid><description>&lt;p>To find out which professions attract the laziest people, I googled the following:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Profession&lt;/th>
&lt;th>Results&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;/table>
&lt;p>&amp;ldquo;médico preguiçoso (lazy doctor)&amp;quot;| 2,140,000&lt;/p>
&lt;p>&amp;ldquo;advogado preguiçoso (lazy lawyer)&amp;quot;| 1,430,000&lt;/p>
&lt;p>&amp;ldquo;gestor preguiçoso (lazy business administrator)&amp;quot;| 1,020,000&lt;/p>
&lt;p>&lt;em>&amp;ldquo;engenheiro preguiçoso (lazy engineer)&amp;rdquo;&lt;/em>| &lt;em>647,000&lt;/em>&lt;/p>
&lt;p>&amp;ldquo;político preguiçoso (lazy politician)&amp;quot;| 602,000&lt;/p>
&lt;p>&amp;ldquo;economista preguiçoso (lazy economist)&amp;quot;| 284,000&lt;/p>
&lt;p>&amp;ldquo;pedreiro preguiçoso (lazy builder)&amp;quot;| 91,200&lt;/p>
&lt;p>As this conclusively proves, engineers are not lazy enough as they are beaten by lawyers and doctors. This must change. And this tip will help. But not without making the following difference clear: lazy is not work-shy. I am talking here about noble laziness, the behaviour of those who like doing things but with the least possible effort. Lazy slobs are not included here.&lt;/p>
&lt;p>SAP is something that evolves slowly, and it launched a new editor a few years ago that is full of &lt;a href="https://wiki.sdn.sap.com/wiki/display/ABAP/New+ABAP+Editor">capabilities&lt;/a> many of which, while handy, are barely used. One of them is called ‘Code templates’ which I will now demonstrate:&lt;/p></description></item><item><title>Multiple choice ALV in a modal dialogue box</title><link>https://abapinho.com/en/2011/12/alv-popup/</link><pubDate>Mon, 19 Dec 2011 10:00:31 +0000</pubDate><guid>https://abapinho.com/en/2011/12/alv-popup/</guid><description>&lt;p>Do you know how to present an ALV with a list of records in a dialogue box allowing multiple choice? I didn’t. But I do now. Let me explain how.&lt;/p></description></item><item><title>&lt;!--:pt-->Pasta temporária do SAP Gui&lt;!--:--></title><link>https://abapinho.com/en/2011/12/pasta-temporaria-sap-gui/</link><pubDate>Mon, 05 Dec 2011 10:00:09 +0000</pubDate><guid>https://abapinho.com/en/2011/12/pasta-temporaria-sap-gui/</guid><description>Sometimes a program wants to save a file locally on the user&amp;rsquo;s computer via the SAP Gui. In these cases it is usual that one of the fields of the selection screen is the location of the folder on the local disk.
This is a way of initialising this field with the temporary folder of the SAP Gui:
PARAMETERS: p_path TYPE string. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. CALL METHOD cl_gui_frontend_services=&amp;gt;directory_browse EXPORTING initial_folder = p_path CHANGING selected_folder = p_path.</description></item><item><title>Partial Analyses in SE30</title><link>https://abapinho.com/en/2011/11/se30-parciais/</link><pubDate>Mon, 28 Nov 2011 11:37:25 +0000</pubDate><guid>https://abapinho.com/en/2011/11/se30-parciais/</guid><description>Obviously you already know the SE30 transaction (run time analysis) and obviously you use it often to analyse standard programs and to discover tables, functions, BADIs and similar contained within them.
But if you are like me, then you have a love-hate relationship with this transaction – on the one hand you love it because it enables you to see the guts of a program without having to debug it, yet on the other hand you hate it because normally the list of guts tends to have thousands of lines and becomes unmanageable.</description></item><item><title>Multilingual programs that know what they are talking about</title><link>https://abapinho.com/en/2011/11/programas-poliglotas/</link><pubDate>Mon, 21 Nov 2011 10:00:20 +0000</pubDate><guid>https://abapinho.com/en/2011/11/programas-poliglotas/</guid><description>SAP is multilingual. But ABAP not always. ABAP does have some ability to learn and speak a few languages, but sometimes the programmers do not let it.
A lot of programmers whack literal texts directly into the program, leaving it forever unable to communicate in multiple languages. I can think of two reasons for shackling a program to just one language:
Laziness, the main reason for doing things badly;
Legibility. In fact the way to make an ABAP program localizable is to pack it full of text references, like TEXT-001, which can get a bit illegible.</description></item><item><title>Fair thee well DESCRIBE TABLE. And good riddance.</title><link>https://abapinho.com/en/2011/11/lines/</link><pubDate>Mon, 07 Nov 2011 10:20:18 +0000</pubDate><guid>https://abapinho.com/en/2011/11/lines/</guid><description>For twelve long years When I wanted to count The lines of an itab I did what everyone does: DESCRIBE TABLE itab LINES linhas.
Until the other day When (my eyes didn’t deceive me) I saw something so new, You wouldn’t believe me: LINES( itab ).
It gives the same outcome And does away with declaring The damn variable.
So instead of:
DATA: linhas TYPE i. DESCRIBE TABLE itabl LINES linhas.</description></item><item><title>The drag queen message</title><link>https://abapinho.com/en/2011/10/mensagem-travesti/</link><pubDate>Mon, 31 Oct 2011 10:00:55 +0000</pubDate><guid>https://abapinho.com/en/2011/10/mensagem-travesti/</guid><description>The AT SELECTION-SCREEN modules of a report can throw error messages and send you back to the selection screen. But once you get past the START-OF-SELECTION, if you get an error message, the program ends. The solution to getting an error and returning to the selection screen, is to disguise the message:
START-OF-SELECTION. IF condicao_desejada. MESSAGE S208(00) with &amp;#39;Erro!&amp;#39; DISPLAY LIKE &amp;#39;E&amp;#39;. EXIT. ENDIF. WRITE &amp;#39;Olá, eu sou o resto do programa&amp;#39;.</description></item><item><title>The round-about routes of VALUE CHECK</title><link>https://abapinho.com/en/2011/10/value-check/</link><pubDate>Mon, 24 Oct 2011 10:00:24 +0000</pubDate><guid>https://abapinho.com/en/2011/10/value-check/</guid><description>Have you ever come up against something in ABAP that seems to be one thing but is in fact another? The documentation says it is this and everything seems to indicate that it is, but after all it isn’t.
You&amp;rsquo;ve probably needed to, when setting a parameter in the report selection screen, check the possibilities of what the user can input to the available values in the data type of that parameter, right?</description></item><item><title>Automatic variants in reports</title><link>https://abapinho.com/en/2011/10/variantes-automaticas/</link><pubDate>Mon, 17 Oct 2011 10:00:57 +0000</pubDate><guid>https://abapinho.com/en/2011/10/variantes-automaticas/</guid><description>When developing a report with a selection screen it is very annoying that every time we test it we have to input the test data to the selection screen. We usually end up creating a variant of the test to save us from this hassle. But, every time we run the report we still have to manually call this variant.
Here is a simple way to automatically call a variant. This code can be inserted into the INITIALIZATION event during the development of the program:</description></item><item><title>Stand up, all victims of oppression</title><link>https://abapinho.com/en/2011/10/importar-classes-locais/</link><pubDate>Tue, 11 Oct 2011 10:55:54 +0000</pubDate><guid>https://abapinho.com/en/2011/10/importar-classes-locais/</guid><description>Classes. They have always existed among people. But there are still few who take them into consideration in ABAP. While being a supporter of classes in society can result in pedantry, the only class struggle in ABAP is that some fight for them to be used more.
There are two types of classes: global and local. The global ones are created in the SE24 transaction. Local classes, which by the way I find myself using more and more, are done declaratively in SE38.</description></item><item><title>Forget it!</title><link>https://abapinho.com/en/2011/10/esquece/</link><pubDate>Fri, 07 Oct 2011 10:00:49 +0000</pubDate><guid>https://abapinho.com/en/2011/10/esquece/</guid><description>O SAP GUI tem boa memória. Vai decorando os valores que lhe vamos metendo nos campos e depois sugere-os quando, mais tarde, voltamos a esses campos. Mas às vezes decora coisas que mais valia esquecer. Como por exemplo quando introduzimos um valor errado e a seguir ele insiste em sugerir-nos esse valor errado.
Há uns tempos descobri que este pequeno drama tem solução. Quando, no campo, aparece a combo box com as várias hipóteses, usa as setas do teclado para te posicionares no valor que queres esquecer e depois carrega na tecla DELETE.</description></item><item><title>SPLIT INTO TABLE</title><link>https://abapinho.com/en/2011/10/split-into-table/</link><pubDate>Mon, 03 Oct 2011 10:00:13 +0000</pubDate><guid>https://abapinho.com/en/2011/10/split-into-table/</guid><description>I’m going to show you a creative way of filling out an internal table with constants that I learned in a standard program. Imagine you want to create an internal table with the following kinds of financial documents:
AB AF CH DG DZ EX F3 F4.
The more conventional way would be this:
DATA: t_blart TYPE STANDARD TABLE OF blart, wa_blart LIKE LINE OF t_blart. wa_blart = &amp;#39;AB&amp;#39;. APPEND wa_blart TO t_blart.</description></item><item><title>Vertical text selection in ABAP editor - really? Really.</title><link>https://abapinho.com/en/2011/09/seleccao-vertical-de-texto/</link><pubDate>Mon, 26 Sep 2011 10:00:06 +0000</pubDate><guid>https://abapinho.com/en/2011/09/seleccao-vertical-de-texto/</guid><description>As everyone knows, you can select vertical or horizontal blocks of text almost anywhere in SAPGUI, typing CTRL-Y and then dragging the mouse to make the selection. Everyone also knows that this does not work in ABAP editor. But perhaps what some people don&amp;rsquo;t know is that there is a way of making this kind of selection in ABAP editor: press and hold ALT. Now you can select blocks of text.</description></item><item><title>Unparameterisable parameters</title><link>https://abapinho.com/en/2011/09/parametros-nao-parametrizaveis/</link><pubDate>Mon, 12 Sep 2011 10:00:52 +0000</pubDate><guid>https://abapinho.com/en/2011/09/parametros-nao-parametrizaveis/</guid><description>Every now and then you get a client who asks a programmer to create a write-protected parameter on the program selection screen. It’s a bit dumb given that the whole idea of parameters is that they are parameterisable.
But there you go, it takes all sorts.
Clients have so much imagination that SAP should create a cinema module, SAP CI, especially so they can screen all the films they carry around in their heads.</description></item><item><title>Hopping merrily from ELSE to ELSE</title><link>https://abapinho.com/en/2011/08/alt-clique-para-saltar/</link><pubDate>Mon, 22 Aug 2011 11:02:30 +0000</pubDate><guid>https://abapinho.com/en/2011/08/alt-clique-para-saltar/</guid><description>You have in front of you one of those giant IF ELSEIF ELSEIF ELSEIF ELSEIF ELSE ENDIF that runs through hundreds of lines of code.
If you double click on the IF or any of the ELSEIF you jump to the ENDIF. If you double click on the ENDIF down below you go to the IF up above. Everybody knows this. It is handy with a small IF ENDIF. However, it’s not much use with the large ones.</description></item><item><title>Jumping within ABAP editor</title><link>https://abapinho.com/en/2011/08/saltos-no-editor-abap/</link><pubDate>Mon, 15 Aug 2011 10:06:39 +0000</pubDate><guid>https://abapinho.com/en/2011/08/saltos-no-editor-abap/</guid><description>Have you ever found yourself programming in one of those ABAP programs that’s as long as the Bible with hundreds and hundreds of lines where you always have to jump from one code area to another?
Until a few days ago, in my ignorance I was using PageUp and PageDown to jump between the two locations and I wasted loads of time looking for the exact place in the code that I was interested in.</description></item><item><title>Upside down CASE</title><link>https://abapinho.com/en/2011/08/case-de-pernas-para-o-ar/</link><pubDate>Mon, 08 Aug 2011 10:00:47 +0000</pubDate><guid>https://abapinho.com/en/2011/08/case-de-pernas-para-o-ar/</guid><description>What is your favourite colour?
SELECTION-SCREEN BEGIN OF BLOCK b1. PARAMETERS: p_azul BUTTONGROUP GROUP COR DEFAULT &amp;#39;X&amp;#39;, p_verde BUTTONGROUP GROUP COR, p_roxo BUTTONGROUP GROUP COR. SELECTION-SCREEN END OF BLOCK b1. If you said ‘blue’ you live and can cross the bridge.
In any case, the following normally happens in ABAP to discover the colour the user chose:
IF p_azul = &amp;#39;X&amp;#39;. lv_cor = &amp;#39;AZUL&amp;#39;. ELSE IF p_verde = &amp;#39;X&amp;#39;. lv_cor = &amp;#39;VERDE&amp;#39;.</description></item><item><title>I CTRL-clicked to select a word</title><link>https://abapinho.com/en/2011/07/ctrl-clique/</link><pubDate>Mon, 18 Jul 2011 11:19:51 +0000</pubDate><guid>https://abapinho.com/en/2011/07/ctrl-clique/</guid><description>A simple but valuable tip: anywhere in the SAP GUI - including the ABAP Editor - to select a word all you have to do is CTRL-click above it. Cool, no?
Unfortunately it doesn&amp;rsquo;t work on the Mac Java GUI :-(
(Thank you Sérgio Fraga for the tip)
Greetings from Abapinho.</description></item><item><title>Instant RANGE - just add water</title><link>https://abapinho.com/en/2011/07/range-instantaneo/</link><pubDate>Mon, 11 Jul 2011 11:07:07 +0000</pubDate><guid>https://abapinho.com/en/2011/07/range-instantaneo/</guid><description>I&amp;rsquo;m going to teach you a magic formula for creating a RANGE that is almost as easy as just adding water.
Imagine that you want to create a RANGE from a database selection to then use it in another SELECT. Obviously you can do it like this:
DATA: lt_kunnr TYPE STANDARD TABLE OF kunnr, lr_kunnr TYPE RANGE OF kunnr, wa_kunnr LIKE LINE OF lr_kunnr. FIELD-SYMBOLS: &amp;lt;kunnr&amp;gt; LIKE LINE OF lt_kunnr. SELECT kunnr INTO TABLE lt_kunnr FROM kna1.</description></item><item><title>Taking a nap</title><link>https://abapinho.com/en/2011/06/soneca/</link><pubDate>Fri, 17 Jun 2011 11:43:28 +0000</pubDate><guid>https://abapinho.com/en/2011/06/soneca/</guid><description>Whatever the case, it is necessary to put a program to sleep. And, as with almost everything else, there are several ways to do this, some better than others.
The most standard way to do this in ABAP is as follows:
WAIT UP TO 10 SECONDS. The advantage of WAIT UP TO N SECONDS is that the process is freed up during these 10 seconds, thereby making it available for those who want it.</description></item><item><title>Different versions of the same story</title><link>https://abapinho.com/en/2011/06/versoes-sap/</link><pubDate>Thu, 09 Jun 2011 13:41:50 +0000</pubDate><guid>https://abapinho.com/en/2011/06/versoes-sap/</guid><description>Everyone knows that the SAP versions are a big mess. The lords of Heidelberg who play around with the names they give their things are either an impulsive bunch, are making fun of us, or they must always be in uproar.
Here is a little table to help to unravel them:
Ano | UI | Edition | Version | Version | BASIS | WebAS | ECC | NetWeaver
&amp;mdash;|&amp;mdash;|&amp;mdash;|&amp;mdash;|&amp;mdash;|&amp;mdash;|&amp;mdash;|&amp;mdash;|&amp;mdash;
| Terminal</description></item><item><title>Global macros</title><link>https://abapinho.com/en/2011/05/macros-globais/</link><pubDate>Thu, 19 May 2011 18:02:41 +0000</pubDate><guid>https://abapinho.com/en/2011/05/macros-globais/</guid><description>In a previous article we talked about macros, a relatively obscure and little used feature that can be both useful as well as create a huge mess. But these aren’t the only ABAP macros. There are others that are even more obscure and with even greater potential to mix up a system: the global macros.
I don’t know if I should tell you this, as it’s so strange… But, I don’t think it’s a good idea to hide it… Therefore, I’ll tell all.</description></item><item><title>Start on the right footing</title><link>https://abapinho.com/en/2011/04/transaccao-inicial/</link><pubDate>Sat, 23 Apr 2011 09:27:25 +0000</pubDate><guid>https://abapinho.com/en/2011/04/transaccao-inicial/</guid><description>Normally when you log on to SAP the SAP menu appears. But you can use the function module NAVIGATION_SET_START_TCODE to pre-set an initial transaction. Anyway, it’s better to know it’s there than not to know it’s there, and even better than knowing that it’s not there. Who knows – it could be good for some users. There’s also the function module NAVIGATION_GET_START_TCODE to see what is pre-set.
Greetings from Abapinho.</description></item><item><title>Not even David Copperfield would do better</title><link>https://abapinho.com/en/2011/04/call-transaction/</link><pubDate>Thu, 21 Apr 2011 11:26:14 +0000</pubDate><guid>https://abapinho.com/en/2011/04/call-transaction/</guid><description>Sometimes we want to access a transaction and we don’t have permission. That’s annoying. Luckily there’s the function module ALINK_CALL_TRANSACTION which makes things better. But use it with care or someone will get angry. Welcome to the dark side of Abapinho. If they say it was me that said it, I deny everything.
Update: this function module will also do the trick: CALL_TRANSACTION_FROM_TABLE.
New update: if all the above fail try this other function module: RS_HDSYS_CALL_TC_VARIANT (clearing flag AUTHORITY_CHECK).</description></item><item><title>ABAP Ninja</title><link>https://abapinho.com/en/2011/03/abapninja/</link><pubDate>Fri, 25 Mar 2011 18:51:10 +0000</pubDate><guid>https://abapinho.com/en/2011/03/abapninja/</guid><description>One of the major new features in ERP 6.0 is the Enhancement Framework, a kind of “landlord’s friend” that allows you to hammer on all the SAP walls without chipping the paintwork. Unfortunately there’s still very little documentation about this and it’s always difficult to find the right Enhancement Point for the hammering you want.
The a ABAP Ninja site tries to help. It’s an Enhancement search engine. They say they have more than 13,000 Enhancement Points waiting to be found.</description></item><item><title>St. Isidore of Seville</title><link>https://abapinho.com/en/2011/03/santo-isidoro-de-sevilha/</link><pubDate>Sun, 20 Mar 2011 17:29:14 +0000</pubDate><guid>https://abapinho.com/en/2011/03/santo-isidoro-de-sevilha/</guid><description>Don’t know who to pray to in moments of desperation? Now you can relax. Programmers have a saint – St. Isidore of Seville.
A very learned and intelligent gentleman who lived in Spain in the 6th and 7th centuries and, to quote Wikipedia, “wrote about mathematics, astronomy, medicine, human anatomy, zoology, geography, meteorology, geology, mineralogy, botany and agriculture. He added nothing innovative or original, carried out no experiment, made no new observations or reinterpretations and discovered nothing, but his influence on the Middle Ages and the Renaissance was great”.</description></item><item><title>LOOP FROM INDEX</title><link>https://abapinho.com/en/2011/03/loop-from-index/</link><pubDate>Thu, 10 Mar 2011 12:15:12 +0000</pubDate><guid>https://abapinho.com/en/2011/03/loop-from-index/</guid><description>It’s very easy to get tied up in knots where performance is concerned when you’re working with internal tables – especially when they’re getting really big. In fact these problems often only arise after a few months, when the tables tend to grow as time goes by.
For example, when you’re looping two tables, one of headers and another of entries, do you do this?
LOOP AT itab1 ASSIGNING &amp;lt;fs1&amp;gt;. LOOP AT itab2 ASSGNING &amp;lt;fs2&amp;gt; WHERE field1 = &amp;lt;fs1&amp;gt;-field1.</description></item><item><title>Progress indicator</title><link>https://abapinho.com/en/2011/03/indicador-de-progresso/</link><pubDate>Mon, 07 Mar 2011 12:04:18 +0000</pubDate><guid>https://abapinho.com/en/2011/03/indicador-de-progresso/</guid><description>You know those progress bars that show how long it will take for a process to end? The ones that sometimes go back to the beginning when they reach the end and leave you frustrated and confused and wondering what use they are anyway? Here’s how you can use them in an ABAP program.
DATA: lv_texto TYPE char40, lv_valor type i. DO 10 TIMES. WAIT UP TO 1 SECONDS. CLEAR lv_texto.</description></item><item><title>&lt;!--:pt-->Executa um comando no teu computador&lt;!--:--></title><link>https://abapinho.com/en/2011/02/executar-comando-local/</link><pubDate>Wed, 16 Feb 2011 21:33:38 +0000</pubDate><guid>https://abapinho.com/en/2011/02/executar-comando-local/</guid><description>Imagina que queres executar um programa no teu PC a partir de um programa ABAP. Não sei porque carga de água quererás tu fazer isto mas ok, se queres mesmo fazer, é assim:
DATA: i_returncode TYPE i. CALL FUNCTION &amp;#39;GUI_EXEC&amp;#39; EXPORTING command = &amp;#39;Notepad.exe&amp;#39; parameter = &amp;#39;eu_sou_um_texto.txt&amp;#39; IMPORTING returncode = i_returncode. É provável que dê para fazer coisas boas com isto. Mas está à vista a grande javardice que se pode fazer por isso pensa bem antes de começares para aí a escangalhar os computadores dos utilizadores todos.</description></item><item><title>SAT – The new execution analysis tool</title><link>https://abapinho.com/en/2011/02/sat/</link><pubDate>Wed, 16 Feb 2011 14:31:40 +0000</pubDate><guid>https://abapinho.com/en/2011/02/sat/</guid><description>Since I was small I have been using the SE30 transaction for two different things:
To analyze a (normally standard) program I don’t know in order to find out what functions it uses, what BADIs it offers, etc;
To analyze a program of mine to search for performance problems.
The simple truth is that the SE30 transaction is a total mess. It’s extremely limited and inflexible and it’s useless for any more complex analysis.</description></item><item><title>&lt;!--:pt-->As estruturas PRE-a-porter&lt;!--:--></title><link>https://abapinho.com/en/2011/01/pre-a-porter/</link><pubDate>Tue, 11 Jan 2011 11:51:37 +0000</pubDate><guid>https://abapinho.com/en/2011/01/pre-a-porter/</guid><description>Quantas vezes não é necessária uma pequena estrutura para guardar, por exemplo, uma lista que relacione materiais e centros. Mas perder tempo a inventar a roda é sempre de evitar.
No reino do MM há uma pequena família de estruturas que uso amiúde: são elas as PRE*, uma série de estruturas que vai desde a PRE01 à PRE50, com uns saltos pelo meio. Embora sejam, na sua maioria, específicas demais para servirem algum propósito, há algumas úteis.</description></item><item><title>&lt;!--:pt-->A Ressurreição de um programa&lt;!--:--></title><link>https://abapinho.com/en/2010/12/ressurreicao/</link><pubDate>Thu, 16 Dec 2010 13:23:34 +0000</pubDate><guid>https://abapinho.com/en/2010/12/ressurreicao/</guid><description>Batendo impetuoso com seus braços no peito, o famoso guerreiro gritava desesperado: &amp;ldquo;Oh meu Zeus! Apaguei um grande programa , um programa precioso, feito de bronze, forjado por vós deuses no próprio Olimpo. Que será de mim quando isto for descoberto! Oh, ignomínia! Oh, funesto infortúnio! Zeus pai, não te enfureças com tal revés, Se és mesmo meu pai, acode-me ao invés.&amp;rdquo;
Assim falou; e Zeus compadeceu-se dele que chorava, garantindo que seu programa se salvaria e não pereceria.</description></item><item><title>&lt;!--:pt-->Imprimir para PDF local&lt;!--:--></title><link>https://abapinho.com/en/2010/12/imprimir-pdf/</link><pubDate>Wed, 01 Dec 2010 04:25:12 +0000</pubDate><guid>https://abapinho.com/en/2010/12/imprimir-pdf/</guid><description>Receita rápida:
Manda-se imprimir o que se quer, dizendo ao SAP para guardar a ordem de impressão no spool e não a imprimir imediatamente. Reserva-se o número da ordem de impressão num recipiente à parte.
A seguir, corre-se o programa RSTXPDFT4 , junta-se-lhe o número da ordem de impressão, mistura-se bem e executa-se o dito.
Por fim escolhe-se onde, no computador local, se quer desenformar o ficheiro PDF com o conteúdo da ordem de impressão.</description></item><item><title>&lt;!--:pt-->Depuração telepática&lt;!--:--></title><link>https://abapinho.com/en/2010/11/depuracaotelepatica/</link><pubDate>Fri, 26 Nov 2010 10:55:58 +0000</pubDate><guid>https://abapinho.com/en/2010/11/depuracaotelepatica/</guid><description>Imagine o seguinte cenário: um utilizador (ou utilizadora) está sentado no escritório dele, a correr uma transacção ou não sei o quê. Tem um problema e chama um programador (ou programadora) para o (ou a) ajudar a entender o que se passa. Normalmente o programador (ou programadora) teria de se deslocar lá, à sala do senhor utilizador (ou senhora utilizadora) e das duas uma: fazer debug no computador dele (ou dela) ou aprender como recriar o problema e depois fazer debug no seu computador.</description></item><item><title>&lt;!--:pt-->SE37.com&lt;!--:--></title><link>https://abapinho.com/en/2010/11/se37-com/</link><pubDate>Wed, 10 Nov 2010 12:52:03 +0000</pubDate><guid>https://abapinho.com/en/2010/11/se37-com/</guid><description>Neste site pode-se consultar documentação de módulos de função ABAP:
www.se37.com
Basta escolher continue as guest pois a inscrição só é necessária para edição ou adição de conteúdos. E depois é só introduzir um grupo de funções ou um módulo de função para ver a sua documentação.
Actualização: já não existe.
O Abapinho saúda-vos.</description></item><item><title>&lt;!--:pt-->Pede ajuda aos PDFs da SAP&lt;!--:--></title><link>https://abapinho.com/en/2010/11/pdfs-sap/</link><pubDate>Wed, 10 Nov 2010 12:39:55 +0000</pubDate><guid>https://abapinho.com/en/2010/11/pdfs-sap/</guid><description>A SAP disponibiliza uma série de documentos PDF que contém ajuda e informação preciosa nas mais variadas áreas. Estes PDFs estão dispersos pelos vários sites da SAP, mas alguém no site Easy Service Marketplace compilou todos numa conveniente lista:
www.easymarketplace.de/online-pdfs.php
Obriado Sérgio Fraga por este outro link com mais uma série de PDFs:
sapignite.com/download-sap-pdf-material-abap/
Espero que vos ajude!
Actualização: Isto parece já não existir.
O Abapinho saúda-vos.</description></item><item><title>&lt;!--:pt-->Downloadar e uploadar programas e afins&lt;!--:--></title><link>https://abapinho.com/en/2010/09/downloadupload/</link><pubDate>Tue, 28 Sep 2010 11:16:37 +0000</pubDate><guid>https://abapinho.com/en/2010/09/downloadupload/</guid><description>Há palavras em inglês que o português de Portugal não se dá ao trabalho de traduzir. O verbo inglês download vira downloadar ou fazer download. A seu tempo, há-de seguir o caminho que beef seguiu até conseguir chegar a bife , transformando-se lentamente em algo tipo daunelaudar. Mas até lá&amp;hellip; fazem-se downloads.
Já que a SAP nunca se preocupou em permitir o download e upload de objectos do DDIC e do ABAP Workbench, foram sempre aparecendo umas almas caridosas com uns programas mais ou menos medíocres que o permitiam.</description></item><item><title>&lt;!--:pt-->Pesquisar em tabelas internas simplórias&lt;!--:--></title><link>https://abapinho.com/en/2010/09/tabelas-internas-simplorias/</link><pubDate>Tue, 21 Sep 2010 10:36:51 +0000</pubDate><guid>https://abapinho.com/en/2010/09/tabelas-internas-simplorias/</guid><description>Imagina uma tabela interna tão simplória que nem sequer tem uma estrutura de dados com campos:
DATA: t_simploria TYPE STANDARD TABLE OF char30. Agora imagina que queres fazer uma pesquisa nessa tabela para saber se contém o valor &amp;lsquo;sumo de melão&amp;rsquo;. mas como não tem campos, como a fazes? Normalmente usarias algo tipo WITH KEY campo = valor. Mas ela não tem campos. O ABAP disponibiliza uma palavra especial que resolve este problema: TABLE_LINE.</description></item><item><title>&lt;!--:pt-->Transacção I18N = Internacionalização&lt;!--:--></title><link>https://abapinho.com/en/2010/09/i18n/</link><pubDate>Mon, 06 Sep 2010 13:54:15 +0000</pubDate><guid>https://abapinho.com/en/2010/09/i18n/</guid><description>Os americanos são tão bons como os tibetanos a arranjar mnemónicas e abreviaturas para tornar as coisas fáceis de decorar.
Internationalization é uma palavra inglesa com 20 letras. Então, a abreviatura adoptada foi I18N, constituida pela primeira e última letras entremeadas por um 18 que representa as 18 letras do meio. Meio maluco mas giro e a verdade é que pegou.
Pegou tanto que o SAP tem uma transacção chamada I18N.</description></item><item><title>&lt;!--:pt-->É meu, só meu e de mais ninguém&lt;!--:--></title><link>https://abapinho.com/en/2010/09/e-meu-so-meu-e-de-mais-ninguem/</link><pubDate>Wed, 01 Sep 2010 14:25:53 +0000</pubDate><guid>https://abapinho.com/en/2010/09/e-meu-so-meu-e-de-mais-ninguem/</guid><description>Imagina que estás a trabalhar num sistema partilhado por muitos outros utilizadores que não conheces. Como no IDESACCESS por exemplo. Nada impede que, por distracção ou perfídia, algum desses outros utilizadores altere ou mesmo apague os teus programas.
Na SE38, nas características técnicas do programa, existe um pisco chamado &amp;ldquo;Bloqueio do editor&amp;rdquo; que, se o activares, só tu próprio passarás a poder modificá-lo.
O Abapinho saúda-vos.</description></item><item><title>&lt;!--:pt-->Mensagens entre utilizadores&lt;!--:--></title><link>https://abapinho.com/en/2010/08/mensagens-entre-utilizadores/</link><pubDate>Fri, 13 Aug 2010 09:35:39 +0000</pubDate><guid>https://abapinho.com/en/2010/08/mensagens-entre-utilizadores/</guid><description>Muitas vezes precisamos de aceder aos dados de uma tabela através da SM30 ou a um qualquer documento e esbarramos com uma mensagem a dizer que os dados estão bloqueados por outro utilizador.
Há várias hipóteses:
Ter muita paciência e esperar;
Ter bastante paciência, enviar uma mensagem do SAPOffice e esperar que um dia o utilizador a vá ver;
Ter alguma paciência, enviar um e-mail e esperar;
Ser impaciente, ir ter com o outro e pedir-lhe para por favor sair dali;</description></item><item><title>&lt;!--:pt-->Enfiar um browser dentro do SAPGui&lt;!--:--></title><link>https://abapinho.com/en/2010/06/browser-no-sap/</link><pubDate>Thu, 10 Jun 2010 20:01:45 +0000</pubDate><guid>https://abapinho.com/en/2010/06/browser-no-sap/</guid><description>Quem não gosta de uma promiscuidadezita de vez em quando? Até o Abapinho. É por isso que hoje vos sugerimos que se deleitem a enfiar um browser dentro do SAPGui. E para conseguir isso basta correr este programa na SE38: SAPHTML_R3HTTP_DEMO.
Pronto, ficam a saber. E como há clientes para tudo, quem sabe não se encontre aí pelo mundo algum cliente que invente um problema para esta solução.
O Abapinho saúda-vos.</description></item><item><title>&lt;!--:pt-->ZTETRIS&lt;!--:--></title><link>https://abapinho.com/en/2010/05/ztetris/</link><pubDate>Sun, 09 May 2010 15:56:34 +0000</pubDate><guid>https://abapinho.com/en/2010/05/ztetris/</guid><description>O Abapinho aconselha todos os ABAPers a, pelo sim, pelo não, instalarem o programa ZTETRIS no seu ambiente de desenvolvimento. A versão do Tetris para ABAP é da autoria de Sergey Shumakov.
Quando te fartares de jogar podes sempre investigar como é que o programa faz para ir várias vezes ao servidor sem intervenção do utilizador.
O Abapinho saúda-vos.</description></item><item><title>&lt;!--:pt-->ALV Grid Control - Manuais de referência&lt;!--:--></title><link>https://abapinho.com/en/2010/05/alv/</link><pubDate>Tue, 04 May 2010 06:15:24 +0000</pubDate><guid>https://abapinho.com/en/2010/05/alv/</guid><description>Os ALVs são poderosos. Mas esse poder vem à custa de alguma complexidade. Além disso, como quase tudo em SAP, funcionam de forma obscura. Aqui ficam dois manuais de referência em PDF. São muito parecidos mas suficientemente diferentes para referir os dois.
Este chama-se BCSRVALV, é da SAP e data de 2001. No site da SAP encontra-se aqui. E aqui também se aprende sobre isto.
Já este chama-se ALV_Grid_Control, é de 2004 e está assinado por um senhor chamado Serdar ŞİMŞEKLER que diz ser turco.</description></item><item><title>&lt;!--:pt-->Transportar conteúdo de uma tabela&lt;!--:--></title><link>https://abapinho.com/en/2010/04/conteudo-tabela/</link><pubDate>Thu, 29 Apr 2010 11:26:54 +0000</pubDate><guid>https://abapinho.com/en/2010/04/conteudo-tabela/</guid><description>Fazes assim:
Vais à transacção SE01;
Crias uma nova ordem de workbench;
Editas a lista de objectos;
Adicionas-lhe o objecto R3TR-TABU-[nome_tabela];
Clicas na chave que aparece na coluna a seguir;
Metes um asterisco * na primeira linha;
Gravas a ordem de transporte;
Pedes a quem de direito para a passar para onde te aprouver;
Vais beber um sumo de melão;
Quando voltas, já está.
O Abapinho saúda-vos.</description></item><item><title>&lt;!--:pt-->Glossário SAP&lt;!--:--></title><link>https://abapinho.com/en/2010/04/glossario-sap/</link><pubDate>Tue, 27 Apr 2010 10:09:32 +0000</pubDate><guid>https://abapinho.com/en/2010/04/glossario-sap/</guid><description>É frequente em SAP cruzarmo-nos com um conceito desconhecido. Às vezes esqueço-me de que há ferramentas disponíveis muito fáceis de consultar. E o glossário SAP é um exemplo disso. Pode ser acedido de várias formas:
No próprio SAP: através da transacção STERM;
Online: num site da SAP: https://help.sap.com/saphelp_glossary/en/;
No nosso computador: usando o programa ABAP GLOS_DOWNLOAD_HTML para fazer download de todo o seu conteúdo.
Tenho a certeza de que, agora que sei onde está, o vou consultar muito mais vezes.</description></item><item><title>&lt;!--:pt-->Onde é que eu vi aquilo?&lt;!--:--></title><link>https://abapinho.com/en/2009/11/busca-abap/</link><pubDate>Wed, 04 Nov 2009 04:09:36 +0000</pubDate><guid>https://abapinho.com/en/2009/11/busca-abap/</guid><description>A pesquisa de objectos em ABAP e por todo o SAP é normalmente feita de duas formas: listando objectos de um tipo através de search helps ou procurando objectos em que um determinado objecto é usado, através da opção where used.
Só que às vezes o que buscamos não se trata de um objecto mas sim de uma frase qualquer ou mesmo um comentário que sabemos existir no código mas não fazemos ideia de onde.</description></item><item><title>&lt;!--:pt-->A técnica das Matrioskas&lt;!--:--></title><link>https://abapinho.com/en/2009/10/matrioskas/</link><pubDate>Fri, 09 Oct 2009 13:00:55 +0000</pubDate><guid>https://abapinho.com/en/2009/10/matrioskas/</guid><description>É sabido que quando é necessário fazer uma pequena alteração a uma função standard para a qual não há nenhum tipo de user-exit, o mais normal é fazer uma cópia dela para uma função Z e lá proceder à alteração necessária.
No entanto, quando esta alteração pode ser feita no início ou no final do programa, há uma forma mais elegante de conseguir o mesmo resultado: a técnica das Matrioskas. Criar uma função Z com os mesmos parâmetros que lá dentro invoca a função standard e que, além disso, antes ou depois de a invocar, tem o código para implementar a alteração necessária.</description></item><item><title>&lt;!--:pt-->Evitar mensagens dinâmicas&lt;!--:--></title><link>https://abapinho.com/en/2009/09/evitar-mensagens-dinamicas/</link><pubDate>Mon, 07 Sep 2009 17:40:15 +0000</pubDate><guid>https://abapinho.com/en/2009/09/evitar-mensagens-dinamicas/</guid><description>Qual é, digam lá, a melhor coisinha que o ABAP tem? É, digo eu, poder fazer where used em cima de tudo o que mexe.
E no entanto, esta maravilhosa funcionalidade só funciona maravilhosamente quando as coisas não são invocadas dinamicamente. Eu uso o where used amiúde para descobrir onde uma determinada mensagem está a ser usada. Ora não é nada incomum encontrar chamadas dinâmicas a mensagens, principalmente em casos onde as mensagens não são enviadas directamente para o utilizador mas sim, por exemplo, para o Application Log.</description></item><item><title>&lt;!--:pt-->READ TABLE blablabla TRANSPORTING NO FIELDS&lt;!--:--></title><link>https://abapinho.com/en/2009/08/transporting-no-fields/</link><pubDate>Thu, 20 Aug 2009 04:51:19 +0000</pubDate><guid>https://abapinho.com/en/2009/08/transporting-no-fields/</guid><description>Por vezes ao fazer READ TABLE a uma tabela interna queremos apenas verificar se um determinado registo existe, e não nos preocupamos com os dados retornados. Algo tipo:
READ TABLE lt_kna1 INTO wa_kna1 WITH KEY kunnr = l_kunnr. CHECK SY-SUBRC = 0. Ora já que a estrutura WA_KNA1 não vai ser necessária de qualquer forma, mais vale não a usar, usando antes a opção TRANSPORTING NO FIELDS:
READ TABLE lt_kna1 TRANSPORTING NO FIELDS WITH KEY kunnr = l_kunnr.</description></item><item><title>&lt;!--:pt-->Pesquisa SAP no Firefox e no Internet Explorer&lt;!--:--></title><link>https://abapinho.com/en/2009/06/pesquisa-sap-firefox/</link><pubDate>Thu, 18 Jun 2009 14:44:23 +0000</pubDate><guid>https://abapinho.com/en/2009/06/pesquisa-sap-firefox/</guid><description>Quando se faz desenvolvimentos em ABAP, pesquisar na SAP Community ou nas notas e na documentação da SAP é uma actividade recorrente. Como tal, quanto mais fácil for fazê-lo, melhor. Ideal seria que fazê-lo fosse tão fácil como pesquisar no Google. Ora uns senhores chamados JNYSolutions tornaram isso possível criando plugins de pesquisa para o Firefox e o Internet Explorer que adicionam a SDN, as notas e a documentação da SAP como motores de busca.</description></item><item><title>&lt;!--:pt-->Verificar pasta&lt;!--:--></title><link>https://abapinho.com/en/2009/06/verificarpasta/</link><pubDate>Sat, 13 Jun 2009 20:40:29 +0000</pubDate><guid>https://abapinho.com/en/2009/06/verificarpasta/</guid><description>Eis uma função para verificar se uma pasta existe e se nela temos permissões de escrita.
PARAMETERS: p_dir TYPE btctext80 DEFAULT &amp;#39;/usr/sap/trans&amp;#39;. CALL FUNCTION &amp;#39;PFL_CHECK_DIRECTORY&amp;#39; EXPORTING directory = p_dir write_check = &amp;#39;X&amp;#39; * FILNAME = &amp;#39; &amp;#39; EXCEPTIONS pfl_dir_not_exist = 1 pfl_permission_denied = 2 pfl_cant_build_dataset_name = 3 pfl_file_not_exist = 4 others = 5. CASE sy-subrc. WHEN 0. WRITE /: &amp;#39;Directory:&amp;#39;, p_dir, &amp;#39; exists&amp;#39;. WHEN 1. WRITE /: &amp;#39;Directory does not exist:&amp;#39;, p_dir.</description></item><item><title>&lt;!--:pt-->Testar na SE37 não grava dados? Grava.&lt;!--:--></title><link>https://abapinho.com/en/2009/05/se37-gravar/</link><pubDate>Wed, 20 May 2009 10:40:40 +0000</pubDate><guid>https://abapinho.com/en/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>&lt;!--:pt-->A transacção N&lt;!--:--></title><link>https://abapinho.com/en/2009/05/transaccao-n/</link><pubDate>Thu, 14 May 2009 12:44:21 +0000</pubDate><guid>https://abapinho.com/en/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><item><title>&lt;!--:pt-->O Abapinho saúda-vos&lt;!--:--></title><link>https://abapinho.com/en/2009/03/inicio/</link><pubDate>Thu, 19 Mar 2009 10:51:11 +0000</pubDate><guid>https://abapinho.com/en/2009/03/inicio/</guid><description>Bem-vindo ao Abapinho, um blog sobre ABAP em português.</description></item></channel></rss>