"
Apoiado por

Arquivo da categoria ‘Dicas’

Constantes gregárias

fernandopessoa

Se és daqueles que, em vez de usarem constantes, espetam com os valores directamente no código, então pára de ler isto e vai ali para o canto de castigo durante 1 hora que é para aprenderes a não ser mandrião. Quando voltares podes continuar a ler.

Ler o resto do artigo »

A sua password expirou. Mude-a 5 vezes.

dori

Não é incomum criarmos uma relação emocional com as nossas passwords. Por isso, é sempre com alguma dor que se recebe aqueles abjectos avisos ameaçadores que dizem que “a sua password vai expirar”. Brevemente seguidos pelo duro golpe que recebemos no coração quando surge a inevitável ignóbil invectiva que diz que “a sua password expirou”. Nesses momentos a mágoa é tanta que todas as musas nos abandonam, temos uma cãibra na imaginação e ficamos ali, especados, esquecidos, esvaziados de qualquer ideia que nos ajude a escolher a nossa próxima palavra-chave.

Mas isso era dantes.

Para o futuro, proponho o seguinte: usa um dos maravilhosos métodos manhosos que o Abapinho te ensinou para editar a tabela USR02. Vai ao registo do teu utilizador e apaga o conteúdo dos campos OCOD1, OCOD2, OCOD3, OCOD4 e OCOD5. E o SAP esqueceu. Foi um ar que lhe deu. Agora já podes tornar a usar a palavra-chave-do-teu-coração.

Obrigado Allan Oliveira pela dica.

O Abapinho saúda-vos.

Atender o cliente ou aviar o freguês?

vinhosepetiscos

Em todo o lado onde se use o elemento de dados KUNNR, a sua descrição diz “Cliente”. E se quiseres mudar a descrição deste campo de “Cliente” para “Freguês”? “Freguês” é tão mais bonito! Ou imagina que a empresa para quem trabalhas trafica droga e te diz que gostava que no LIFNR aparecesse “Dealer” em vez de “Fornecedor”. Claro que nos ecrãs e relatórios Z podemos descrevê-lo como quisermos mas… e nas transacções standard?

Fazes isto: vai à transacção CMOD e escolhes o menu “Ir para > Ampliações Globais > Palavras-chave > Modificar”. Depois introduzes o elemento de dados cuja descrição pretendes alterar. Aparece-te então uma caixa de diálogo na qual podes redefinir todas as descrições desse elemento de dados. A seguir gravas e já está. A partir de agora, em todo o lugar onde este elemento de dados é usado aparece a tua nova descrição. Poderoso!

Ah, e na opção de menu mesmo ao lado (aquele que diz “exibir”) podes ver a lista de elementos de dados que foram já alterados nesse sistema.

Simples? Pois, mas tem calma, não te ponhas a chamar “coisa” ao MATNR nem “amiguinho” ao UNAME e por aí adiante. O SAP é uma coisa séria.

Obrigado ao Miguel Freitas pela dica.

(E obrigado a David Rodrigues pela foto).

O Abapinho saúda-vos.

Mete botões no ecrã de selecção

botaopanico

Quando num relatório é preciso criar botões para os utilizadores carregarem, normalmente recorre-se ao Screen Painter para criar um ecrã que depois é invocado pelo report com CALL SCREEN. Mas, a não ser que o ecrã a desenhar tenha já alguma complexidade, não é preciso apanhar a valente seca de fazer um ecrã que depois fica para lá. Ecrãs sempre me irritaram.

Mostro aquí um exemplo de utilização de botões num normalíssimo ecrã de selecção recorrendo a um botão chamado PUSHBUTTON e a um truque muito esperto chamado ONLI.

Ler o resto do artigo »

Atafulha o ecrã de selecção de bonecada

icones

Foi o SAP que nasceu tristonho ou são os SAPeiros que não o alegram?

É verdade que o SAPGui não é nenhum arco-íris nem inspira felicidade ao olhar para ele. Mas ainda assim põe uma catrefada de bonequinhos ao nosso dispôr que podemos usar para o tornar nem que seja um pouquinho mais animado.

E vê como é tão fácil.

Ler o resto do artigo »

Ó Tempo Volta Para Trás

delorean

“Ó tempo volta para trás
Dá-me tudo o que eu perdi
Tem pena e dá-me a vida
A vida que eu já vivi
Ò tempo volta p’ra trás
Mata as minhas esperanças vãs
Vê que até o próprio sol
Volta todas as manhãs” – António Mourão

Ó Tony, é para já. Vou mostrar-te como podes voltar atrás no tempo.

Ler o resto do artigo »

F1 + F9 = Informações técnicas

boia

Amiúde sinto necessidade de, num ecrã funcional, ver as informações técnicas de um determinado campo. Coloco o cursor sobre o campo desejado, depois carrego em F1 e aparece um ecrã de diálogo com ajuda sobre esse campo. A seguir carrego no botão que diz “informações técnicas”. Mas há uma forma rápida de fazer o mesmo recorrendo apenas ao teclado.

É que há dois modos possíveis para o F1 mostrar ajuda de um campo:

  • no assistente de performance
  • em janela modal

Por defeito o modo escolhido é o “no assistente de performance”. Mas o modo “em janela modal” tem uma grande vantagem: o botão “informações técnicas” está associado à tecla F9. Uma vez definido o modo “em janela modal”, basta fazer F1 seguido de F9 em cima de qualquer campo para obter as informações técnicas.

Este modo pode ser configurado no menu Ajuda | Opções | Ajuda F1. E tem de ser feito em cada sistema.

F1+F9!

Obrigado a Ana Pinto pela dica.

E obrigado a the okapi pela foto.

O Abapinho saúda-vos.

Quando a tabela interna não é estruturada

arranha-ceus

Quando queres seleccionar linhas numa tabela interna normalmente fazes algo assim:


DATA: BEGIN OF itbl,
            campo1 TYPE c,
            campo2 TYPE c,
          END OF itbl.

READ TABLE itbl WITH KEY campo1 = 'X' campo2 = 'Y'.

LOOP AT itbl WHERE campo1 = 'X' and campo2 = 'Y'.
  COISO.
ENDLOOP.

Mas, e se a tabela não for estruturada e quiseres pesquisar na linha como um todo? Bem, nesse caso, fica aqui a dica: usas a palavra especial TABLE_LINE:


DATA: itbl TYPE STANDARD TABLE OF string,
            wa LIKE LINE OF itbl.

READ TABLE itbl WITH KEY table_line = 'X'.

LOOP AT itbl INTO wa WHERE table_line = 'X'.
  COISO.
ENDLOOP.

(Obrigado a Aaron Escobar pela foto.)

O Abapinho saúda-vos.

Cria variantes de teste em funções a partir do debugger

maquina_lavar_roupa

Imagina que estás a fazer debug de uma transacção e entras numa função e encontras algo interessante. Tão interessante que tens de lhe fazer debug várias vezes. A via convencional é tornar a iniciar o debug da transacção desde o início. Que seca.

Mas há uma via mais directa. Quando estás a fazer debug de uma função podes, directamente a partir do debugger, criar dados de teste para essa função com os valores com que a função tiver sido chamada nessa instância. É assim:

Ler o resto do artigo »

O histórico do SAPGui não funciona ainda que activo?

torre-belem

Já te aconteceu o SAPGui não guardar um histórico dos valores que vais introduzindo nos vários campos ainda que, nas configurações, a opção de Histórico esteja activa?

Ler o resto do artigo »

A SE80 tem favoritos

Marcador

Na transacção SE80 há de tudo. Parece aquelas mercearias de aldeia atafulhadas de tralha onde se compra pasta de dentes, pão, sandálias, perfume e arroz a granel. Eu gosto dessas mercearias. Mas para lá ir é preciso saber ao que se vai, senão anda-se ao tio ao tio.

Mas isso é nesses mercearias, porque na SE80… há favoritos.

Pois é. Só soube há uns dias que a transacção SE80 tem a capacidade de guardar favoritos. É um botãozinho logo ali à mão. Vejam a foto:

Favoritos na SE80

De cada vez que se visita um objecto que se acredita vir a visitar mais vezes no futuro, é só inseri-lo na lista de favoritos e assim nunca mais se tem de andar à procura dele.

Obrigado Nuno Morais pela dica.

E obrigado a ~suchitra~ pela foto.

O Abapinho saúda-vos.

Se um desconhecido te oferecer valores, isso é Input

Interrogação

Num relatório, os valores são normalmente pedidos ao utilizador no ecrã de selecção inicial, antes da execução do programa. Mas e se quiseres pedir-lhe mais alguns valores, interactivamente, a meio da execução do programa?

Uma forma de o fazer é criar um ecrã com os campos desejados e depois invocá-lo com CALL SCREEN. Mas desenhar o ecrã e definir o PAI e o PBO é uma valente maçada.

Outra solução é recorrer às funções POPUP_GET_VALUES ou POPUP_GET_VALUES_DB_CHECKED. São bastante versáteis mas ainda assim algo chatas de utilizar e com algumas limitações.

Mas há uma forma mais simples de o fazer. É através do CALL SELECTION-SCREEN. Passo a explicar:

Primeiro há que definir o ecrã de selecção. A sua definição é praticamente igual à do ecrã de selecção inicial de um relatório:


TABLES: t001.

SELECTION-SCREEN BEGIN OF SCREEN 3000.
PARAMETERS: p_uname TYPE syuname.
SELECT-OPTIONS: p_bukrs FOR t001-bukrs.
SELECTION-SCREEN END OF SCREEN 3000.

Depois, onde quer que te apeteça invocar o ecrã é só… invocares o ecrã:


START-OF-SELECTION.

* faz não sei quê antes

  CALL SELECTION-SCREEN 3000 STARTING AT 5 5.

* e mais não sei quê depois

E dá nisto:

CALL SELECTION-SCREEN

Se meteres o STARTING AT ele vai criar uma janela de diálogo modal. Se não meteres nada, o ecrã ocupará a janela toda. O ecrã de selecção pode ser tão complicado quanto quiseres, podendo incluir abas e tudo o mais. Além disso, porque para o SAP ele não passa de um ecrã de selecção como os outros, poderás gravar variantes e tudo.

Nota que esta abordagem pode também ser usada em transacções, sendo a única desvantagem o facto de exigir F8 em vez de ENTER para submeter os valores.

Obrigado a cristinacosta pela foto.

O Abapinho saúda-vos.

Ecrãs de selecção com abas

abas

Os ecrãs de selecção dos programas ABAP têm várias funcionalidades que, embora sofisticadas e simples de usar, são geralmente ignoradas. Aqui mostrar-te-ei quão simples é criar abas para melhor organizar os parâmetros de um programa. Desta vez, excepcionalmente, vou poupar-te à verborreia. É uma aula prática.
Ler o resto do artigo »

Debug em janelas de diálogo modais

atirar-para-cima

Há determinados momentos em que não é possível fazer /H para iniciar o debugger. O caso mais comum é durante uma janela de diálogo modal (aquilo que os estrangeiros chamam de popup). Mas há uma forma simples, ainda que rocambolesca, para o conseguires:

Ler o resto do artigo »

O que diz uma mensagem?

postit

Queres obter o texto de uma mensagem da qual só sabes o ID e o número e não sabes como? Aprende aqui:


DATA texto TYPE string.
MESSAGE ID '00' TYPE 'E' NUMBER '163' WITH '123' INTO texto.

É só isto. Agora do lado de dentro da variável texto encontras o seguinte texto:

“O mandante 123 não existe no sistema”

Obrigado a Peteris B pela foto.

O Abapinho saúda-vos.

Sê preguiçoso quando escreves em ABAPês

praia_bali

Para tentar determinar quais as profissões com gente mais preguiçosa fiz as seguintes pesquisas no Google:

Profissão Resultados
“médico preguiçoso” 2.140.000
“advogado preguiçoso” 1.430.000
“gestor preguiçoso” 1.020.000
“engenheiro preguiçoso” 647.000
“político preguiçoso” 602.000
“economista preguiçoso” 284.000
“pedreiro preguiçoso” 91.200

Como se pode concluir inequivocamente, os engenheiros não são suficientemente preguiçosos pois são ultrapassados pelos advogados e pelos médicos. Isto tem de mudar. E esta dica vai ajudar. Mas não sem deixar clara a seguinte diferença: preguiça não é ergasiofobia. Falo aqui da preguiça nobre, a de quem gosta de fazer as coisas mas procura fazê-las com o mínimo esforço possível. Já os preguiçosos mandriões, esses não são para aqui chamados.

O SAP, que lá vai evoluindo lentamente, lançou já há uns anos um editor novo que vem cheio de capacidades muitas das quais, ainda que convenientes, são pouco aproveitadas. Uma delas chama-se “Modelos de código” que passo a apresentar:

Ler o resto do artigo »

ALV com múltipla escolha num ecrã de diálogo modal

pipocas

Sabes apresentar, numa janela de diálogo, uma ALV com uma lista de registos permitindo escolha múltipla? Eu não sabia e agora já sei. Vou explicar como é.
Ler o resto do artigo »

Pasta temporária do SAP Gui

pasta

Por vezes um programa quer gravar um ficheiro localmente, no computador do utilizador através do SAP Gui. Nesses casos é comum que um dos campos do ecrã de selecção seja a localização da pasta no disco local.

Eis uma forma de inicializar esse campo com a pasta temporária do SAP Gui:


PARAMETERS: p_path TYPE string.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
  CALL METHOD cl_gui_frontend_services=>directory_browse
    EXPORTING
      initial_folder  = p_path
    CHANGING
      selected_folder = p_path.

INITIALIZATION.
  CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
    CHANGING
      sapworkdir = p_path.
  CALL METHOD cl_gui_cfw=>flush.

Obrigado Sérgio Fraga pela dica.

E obrigado HatM pela foto.

O Abapinho saúda-vos.

Análises parciais na SE30

regua

Claro que já conheces a transacção SE30 (Análise de tempo de execução) e claro que a usas amiúde para analisar programas standard e descobrir nele tabelas, funções, BADIs e quejandos.

Ora se fores como eu, manténs uma relação de amor-ódio com esta transacção: se por um lado a amas por graças a ela consegues ver as entranhas de um programa sem ter de fazer debug, por outro lado odeia-la porque normalmente a lista de entranhas costuma ter milhares de linhas e tornar-se ingerível.

Mas eu já não sou como eu porque, desde que descobri que a SE30 permite fazer análises parciais, a minha relação com ela passou a ser de puro amor. E a partir de agora também tu poderás amá-la na sua totalidade porque vou ensinar-te este segredo.

  1. Transacção SE30;
  2. No bloco “Restrições de medição” cria uma variante com um nome qualquer diferente do DEFAULT;
  3. Na variante activa o pisco “Unidades determinadas”;
  4. Insere a transacção ou programa ou módulo de função a analisar;
  5. Carrega em “Executar” (normalmente agora a análise começaria mas, como escolhemos “unidades determinadas”, começa desligada e é preciso ligá-la explicitamente);
  6. Navega dentro do programa que estás a analisar até chegares ao ponto que queres analisar;
  7. Activa a análise escrevendo /ron lá em cima no campo de comandos;
  8. Faz o que tens a fazer;
  9. Desactiva a análise escrevendo lá em cima /roff;
  10. Sai do programa, voltando ao ecrã da SE30.

Acabaste de fazer uma análise parcial que, em vez dos típicos milhares de linhas, tem apenas as dezenas ou centenas de linhas que ocorreram entre os comandos /ron e /roff. Mais útil, não?

Aproveita o balanço e explora as outras possibilidades disponibilizadas pelas variantes de “restrição de medição”.

Obrigado a Michael Opoczynski pelo ensinamento.

E obrigado a * Cati Kaoe * pela foto.

O Abapinho saúda-vos.

Programas poliglotas que sabem o que dizem

papagaio

O SAP é um grande poliglota. Mas o ABAP nem sempre. O ABAP até tem muita facilidade em aprender e falar várias línguas, mas às vezes os programadores não o deixam.

Muitos programadores cinzelam os textos literais directamente no programa, deixando-o irremediavelmente incapaz de comunicar em vários idiomas. Imagino duas razões para se agrilhoar um programa a uma única língua:

  • A preguiça, que é a principal razão para se fazerem as coisas mal feitas;
  • A legibilidade. Realmente a forma de tornar um programa ABAP localizável é pejá-lo com referências a textos, tipo TEXT-001, o que pode torná-lo bastante ilegível.

Então aqui fica uma dica para ter o melhor dos dois mundos: um programa localizável que não perca a legibilidade:

Em vez de seres preguiçoso e fazeres:


WRITE: 'Eu quero ver auroras boreais'.

E em vez de seres obscuro e fazeres:


WRITE: TEXT-001.

Sê esperto e faz:


WRITE: 'Eu quero ver auroras boreais'(001).

E já está.

Se o text TEXT-001 estiver definido na língua em que o programa estiver a correr este TEXT-001 será usado. Caso contrário, o texto literal escrito directamente no programa será usado. Assim mantém-se a legibilidade do código, pode traduzir-se os textos à vontade e ainda por cima temos a certeza de que, mesmo quando faltar traduzir algum texto, mesmo assim aparecerá o texto que está no programa.

Obrigado Sérgio Lopes pela dica.

(E obrigado doug88888 pela foto)

O Abapinho saúda-vos.


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).