Como sabotar textos standard
Às vezes não gosto dos nomes que a SAP deu às coisas. E então mudo-os.
Por exemplo, um dia estava muito zangado e achava que os clientes eram todos uns parasitas.
Então fiz o seguinte:
Às vezes não gosto dos nomes que a SAP deu às coisas. E então mudo-os.
Por exemplo, um dia estava muito zangado e achava que os clientes eram todos uns parasitas.
Então fiz o seguinte:
Normalmente os sistemas SAP têm definido um tempo limite para que um programa possa correr interactivamente. Se o programa demorar mais ocorre um erro de execução (vulgo dump ).
No início dos tempos usava-se a transacção SE17 para ver o conteúdo de tabelas. Rapidamente sentiram vergonha e decidiram fazer uma coisa melhorzinha a que chamaram SE16. Depois inventaram a ALV e surgiu a SE16N (e muita gente continuou até hoje a usar a SE16, algo que me ultrapassa).
Hoje apresento-vos a SE16H.
Se tu és daquelas pessoas que ainda usa a SE16, este artigo não é para ti. Se continuares a ler corres o risco de encontrar ainda mais uma razão para finalmente passares a usar a SE16N (como se todas as outras não fossem já suficientes).
Imagina que queres seleccionar todos os materiais que tenham “PREGO" no nome e que sejam do tipo FERRAGENS e além disso todos os materiais que tenham “GUARDANAPO" no nome e que sejam do tipo COMIDA. Ou seja, não deverá aparecer o “PREGO_NO_PAO” nem o “GARDANAPO_PAPEL”. O que tu queres é isto (faz de conta):
(MATNR = “PREGO%” AND MTART = “FERR” ) OR (MATNR = “GUARDANAPO%” AND MAKT = “COMI” )
Como bem sabes, numa utilização normal (sem recorrer a isto que te vou mostrar) da SE16N terias de a executar duas vezes e cruzar manualmente a informação porque o ecrã de selecção não dá para fazer ORs.
Ou dá?
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.
Há módulos de função standard que lançam mensagens e não deviam. Não deviam porque depois queremos usá-las em programas não interactivos e, em vez de devolverem o erro, atiram com uma mensagem para o ecrã que dá cabo do processo.
Mas, provavelmente por ter tomado consciência deste problema, a SAP disponibilizou uma forma elegante (mas muito mal documentada) de resolver o problema.
A SAP não sabe fazer as coisas bem à primeira. As WebDynpros são um bom exemplo disso. Aquilo nem sequer permite pesquisar texto. É triste.
Felizmente o Sérgio Fraga descobriu uma forma, ainda que rebuscada:
Por muitas voltas que eles dêem no ABAP, acaba tudo por ir dar à SE38. Até os métodos das classes ABAP são guardados em includes.
Às vezes quando há um dump diz que o problema está, por exemplo, aqui: CL_MESSAGE_HELPER=============CM001.
Liberaste uma ordem de transporte porque achavas que estava tudo pronto. Mas afinal ainda faltava fazer mais uma pequena modificação. E agora vais ter de criar uma nova ordem e transportar as duas. Que grande chatice.
Calma.