"
Categoria > Dicas
Apoiado por

Insere sem excepções em tabelas internas com chave única

Quantas vezes na tua vida de consultor tiveste de lidar com dumps que aconteceram em consequência de um programa tentar inserir duas linhas com a mesma chave numa tabela interna definida com UNIQUE KEY?

Chega.

Ler o resto do artigo! »

Popula manulamente uma LISTBOX

Em 2012 lamentei que a LISTBOX fosse tão pouco usada. Ensinei a usá-la com elementos de dado standard, que a populam automaticamente. Hoje vou-te ensinar como a podes popular tu próprio se quiseres listar opções que não venham de um elemento de dados.

Ler o resto do artigo! »

SELECTION-SCREEN FUNCTION KEY N

Há tantas coisas que se podem fazer nos ecrãs de selecção. Aqui está mais uma: cinco botões na barra de ferramentas.

Ler o resto do artigo! »

Envia emails para uma lista de distribuição

Quando tens de enviar o mesmo email para mais do que um endereço, o mais comum é guardar a lista de endereços numa tabela qualquer e depois adicionar todos os endereços como recipientes.

Mas aprendi recentemente uma forma muito mais bonita para conseguir o mesmo resultado.

Ler o resto do artigo! »

Manipula textos de selecção sem os fixar no programa

Embora muitos ABAPers ainda se esqueçam disto, quanto menos textos forem fixados no programa mais fácil será traduzi-lo.

Aqui está uma forma simples mas relativamente obscura de alterar os textos para, por exemplo, adicionar-lhes ícones, mantendo-os traduzíveis.

Ler o resto do artigo! »

Chama função remotas AS SEPARATE UNIT

Imagina que chamas um módulo de função por RFC várias vezes seguidas. Se calhar julgas que cada chamada é completamente independente. Mas não é. O grupo de funções fica carregado em memória no sistema remoto e os mesmos dados globais serão reutilizados em todas as chamadas.

Isto não deverá constituir um problema na maior parte dos casos. Mas haverá cenários em que, por uma razão ou outra, o módulo de funções chamado guarda dados em variáveis globais que podem interferir negativamente com as chamadas subsequentes.

Se quiseres garantir que isto não acontece e que tens dados fresquinhos de cada vez que a função é chamada, acrescenta AS SEPARATE UNIT à chamada. Simples.


CALL FUNCTION 'Z_FAZ_MAS_TEM_VARIAVEIS_GLOBAIS'
DESTINATION rfcdest
AS SEPARATE UNIT.

O Abapinho saúda-vos.

Funções manequins

Como é que se há-de traduzir dummy? Fica manequim.

Comecei a trabalhar recentemente num cliente novo e reparei que fazem aqui uma coisa que me agradou. Quando precisam de invocar por RFC módulos de função em outros sistemas SAP, criam localmente um módulo de função com o mesmo nome mas sem código, apenas com um comentário explicando que é uma função remota noutro sistema.

A virtude disto é que assim pode usar-se a ferramenta where-used para descobrir todos os sítios onde é invocada. Só isso. E não é pouco!

Chamemos-lhes funções manequins.

O Abapinho saúda-vos.

Desfazer implementação de nota SAP

Sou do tempo em que as notas da SAP se introduziam à mão. Copy paste e rezar para não errar. Granda maluquice.

Lembro-me de um projecto que, por alguma razão que nunca ficou clara, em vez de se fazer upgrade, decidiu-se implementar várias centenas de notas à mão. Imprimiram as notas todas, fizeram num monte gigante com elas e uns 10 consultores passaram um fim-de-semana inteiro a tentar acabar com o monte. Conseguímos. Não faço ideia do que aconteceu a seguir mas de certeza que criámos montes de bugs.

Ler o resto do artigo! »

Lookup em tabela sem ter de lidar com a excepção CX_SY_ITAB_LINE_NOT_FOUND

Antes do 7.40 ter modernizado o ABAP, um lookup a uma tabela obrigava a declarar uma variável auxiliar e a pelo menos 4 linhas de código.

Ler o resto do artigo! »

Converter montante para formato externo numérico

Como é conhecido, o SAP guarda internamente os montantes e variáveis com 2 casas decimais. Quando queremos convertê-los no formato externo costumamos usar o WRITE com a opção CURRENCY. Mas o WRITE escreve numa variável alfa-numérica. E se quisermos escrever numa variável numérica?

Ler o resto do artigo! »

Cortar e inserir rapidamente

Lá aprendi mais uma pequena funcionalidade obscura do SAPGui. Como acelerar o corte e costura.

Ler o resto do artigo! »

Clean ABAP

Durante muitos anos, quando entrava em discussões sobre ABAP OO ser melhor do que FORMs, INCLUDEs e CALL FUNCTIONs, o mais comum é a pessoa do lado de lá continuar convencida de que OO é bom nas outras linguagens mas não traz vantagens para o ABAP. Logo a começar pelo atroz código standard SAP que parece ter sido escrito para provar que é possível fazer algo que viola todas as boas prácticas de programação e mesmo assim funciona.

Ler o resto do artigo! »

NÃO

Não,
o ABAP
nunca vai ter
o operador NOT.

Ler o resto do artigo! »

MOVE-CORRESPONDING entre duas tabelas respeitando a chave

O Abapinho não tem falado muito sobre o 7.40 porque as suas novidades têm já sido amplamente descritas em vários sites. Tentamos não inventar a roda.

Mas há pequenas pérolas úteis que ainda são pouco conhecidas. Esta é sobre uma delas.

Ler o resto do artigo! »

Obtém valores únicos de campo de tabela interna

Em SQL consegue-se obter os valores únicos de um campo recorrendo ao DISTINCT. Quando os dados já estão numa tabela interna, antes do ABAP 7.40 tinha de se fazer um LOOP e um COLLECT.

Mas agora que vivemos em tempos mais modernos, há uma forma simples e elegante que consegue o mesmo com um único comando.

Ler o resto do artigo! »


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