Você está na página 1de 10

Regras e Normas de Programação ABAP

Versão 1
Março/2015

Uso exclusivo Focus Têxtil e empresas associadas


Regras e Normas de Programação ABAP

Conteúdo
1 FINALIDADE __________________________________________________________________ 3
2 NORMAS ____________________________________________________________________ 3
2.1 HARD CODES ___________________________________________________________________ 3
2.2 ORDEM DAS SESSÕES NO CÓDIGO__________________________________________________ 5
2.3 COMENTÁRIOS _________________________________________________________________ 5
2.4 SÍMBOLOS DE TEXTO ____________________________________________________________ 5
2.5 MENSAGENS ___________________________________________________________________ 5
2.6 VARIÁVEIS AUX OU FLAG _________________________________________________________ 5
2.7 ALTERAÇÕES ___________________________________________________________________ 5
2.8 COMANDOS OBSOLETOS _________________________________________________________ 6
2.9 NÃO É PERMITIDO ______________________________________________________________ 6
2.10 CODE INSPECTOR _______________________________________________________________ 6
3 RECOMENDAÇÕES DE PERFORMANCE E BOAS PRATICAS______________________________ 7
3.1 TABELAS INTERNAS ______________________________________________________________ 7
3.2 DECLARAÇÃO DE VARIÁVEIS ______________________________________________________ 7
3.3 DECLARAÇÃO DE SUBROTINAS (FORMS) _____________________________________________ 7
3.4 COMANDO MOVE-CORRESPONDING________________________________________________ 7
3.5 COMANDO LOOP _______________________________________________________________ 8
3.6 COMANDO SORT ________________________________________________________________ 8
3.7 COMANDO SELECT ______________________________________________________________ 9
3.8 COMANDO INTO TABLE __________________________________________________________ 9
3.9 COMANDO FREE ________________________________________________________________ 9
3.10 ÍNDICE _______________________________________________________________________ 10
3.11 CÓDIGO MORTO _______________________________________________________________ 10
3.12 COMANDO READ TABLE _________________________________________________________ 10
3.13 TAMANHO PADRÃO DE COLUNAS (73 CARACTERES) __________________________________ 10
3.14 VERIFICAÇÃO EXTENDIDA DE SINTAXE _____________________________________________ 10

Regras e Normas de Programação ABAP Página 2 de 10


Regras e Normas de Programação ABAP

1 FINALIDADE

Orientar os desenvolvedores de códigos em ABAP sobre as práticas e padrões de programação a serem


seguidas para qualquer desenvolvimento.

2 NORMAS

2.1 HARD CODES


O programa não deve conter em hipótese alguma hard codes. Para qualquer valor que o funcional não
definiu um parâmetro na Tabela de Parâmetros deve ser criada uma constante.

Importante: Colocar nomes sugestivos para constantes. Exemplo: Se a constante é para o tipo de
documento, ou seja, o campo BLART, e o valor deve ser FA, nunca criar a constante com o nome c_fa, pois
se um dia o valor mudar para PO não vai precisar alterar o nome da constante também, mas R_BLART,
R_TPDOC e assim por diante. Criar um Perform no INICIALIZATION do Programa e colocar a chamada da
Função das Constantes. Criar um Item na tabela de Constantes para todas as constantes necessárias no
programa.
O parâmetro CHAVE deve ser criado com o Modulo + Nome do Programa (Função, Classe, Enhancemente,
etc)

Exemplo:

Criação dos Ranges:

DATA:
r_uf TYPE RANGE OF a948-regio,
r_fknum TYPE RANGE OF ztb_sd_conemb_01-fknum,
r_msgtyp TYPE RANGE OF ztb_sd_conemb_01-msgtyp,
r_conta TYPE RANGE OF bapimepoaccount-gl_account,
e_conta LIKE LINE OF r_conta,
r_ccusto TYPE RANGE OF bapimepoaccount-costcenter,
e_ccusto LIKE LINE OF r_ccusto,
r_lgort TYPE RANGE OF bapimepoitem-tax_code,
e_lgort LIKE LINE OF r_lgort,
r_matnr TYPE RANGE OF bapimepoitem-material,
e_matnr LIKE LINE OF r_matnr,
r_matnr_iss TYPE RANGE OF bapimepoitem-material,
e_matnr_iss LIKE LINE OF r_matnr,
r_taxcode TYPE RANGE OF bapimepoitem-tax_code,
e_taxcode LIKE LINE OF r_taxcode,
r_iva_iss TYPE RANGE OF bapimepoitem-tax_code,
e_iva_iss LIKE LINE OF r_taxcode,
r_toler TYPE RANGE OF ztbbc_para-val1,
e_toler LIKE LINE OF r_toler.

Regras e Normas de Programação ABAP Página 3 de 10


Regras e Normas de Programação ABAP

INITIALIZATION.
PERFORM busca_constantes.

*&---------------------------------------------------------------------*
*& Form BUSCA_CONSTANTES
*&---------------------------------------------------------------------*
* Seleciona Constantes para o programa
*----------------------------------------------------------------------*
FORM busca_constantes .

FREE:
r_uf, r_conta, r_ccusto, r_lgort, r_matnr, r_taxcode,
r_msgtyp, r_fknum, r_matnr_iss, r_iva_iss.

CALL FUNCTION 'ZFBC_LER_PARA'


EXPORTING
chave = 'TM_ZECCSDR0051'
TABLES
r_val1 = r_conta
r_val2 = r_ccusto
r_val3 = r_fknum
r_val4 = r_msgtyp
r_val5 = r_lgort
r_val6 = r_matnr
r_val7 = r_taxcode
r_val8 = r_matnr_iss
r_val9 = r_iva_iss
r_val10 = r_uf
r_val11 = r_toler
EXCEPTIONS
erro = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " BUSCA_CONSTANTES

Regras e Normas de Programação ABAP Página 4 de 10


Regras e Normas de Programação ABAP

2.2 ORDEM DAS SESSÕES NO CÓDIGO


A ordem das sessões (tipos, tela de seleção, variáveis, etc) devem ser exatamente como no Manual de
Referencia de Nomenclatura.

2.3 COMENTÁRIOS
Os comentários devem ser colocados sempre que necessário para facilitar o entendimento do programa. Os
comentários devem estar alinhados de acordo com a endentação do código.

Importante: Código comentado NÃO É COMENTARIO, é Código Morto e deve ser evitado, então no caso
de alterações excluir sempre o “código morto”, pois é inútil, sendo que se o programador quiser saber o que
foi alterado de uma versão para outra, ele pode fazer a comparação e também observar o resumo no inicio
do código.

2.4 SÍMBOLOS DE TEXTO


Sempre utilizar os símbolos de texto evitando textos que não poderão ser traduzidos ou que para serem
modificados necessitem alterações diretamente no código fonte.

2.5 MENSAGENS
Utilizar mensagens genéricas ( &1 &2 &3 &4 ) somente quando não houver outra alternativa. Sempre criar
mensagens na classe de mensagens correspondente a área de negócios do programa, principalmente em
Exits, Enhancements, Field-Exits, Screen-Exits, etc.

Importante: Antes de criar uma nova mensagem procure uma semelhante que tenha o mesmo significado,
evitando redundância e consumo de recursos do sistema.

2.6 VARIÁVEIS AUX OU FLAG


É expressamente proibido criar uma variável com o nome X_FLAG ou X_AUX. Utilizar o bom sendo e dar um
nome intuitivo para a variável. Exemplo: G_CALCULO_OK, GT_MARA_DUPL, G_ERRO, e assim por diante.

2.7 ALTERAÇÕES
Ao realizar alterações, após confirmar que estão todas corretas, fazer o seguinte checklist:

 Eliminar todo o código morto (código comentado), pois é inútil e deixa o código “poluído”.
 Atualizar o resumo das modificações no início do código, indicando de forma simples, inteligível e
resumida as alterações efetuadas.
 Caso haja muitas requests, verificar a possibilidade de unificar em uma só request, facilitando o
transporte e evitando possíveis erros pela falta de alguma request ou erro na sequência de
transporte.

Regras e Normas de Programação ABAP Página 5 de 10


Regras e Normas de Programação ABAP

2.8 COMANDOS OBSOLETOS


Sempre estar atento e não utilizar comandos obsoletos, pois será acusado erro na liberação da request na
execução do Code Inspector.

2.9 NÃO É PERMITIDO


 Colocar COMMIT WORK dentro de qualquer tipo de EXIT/ENHANCEMENT
 Atualizar tabelas standard (UPDATE, MODIFY, INSERT, DELETE);
 Select * sem necessidade;
 Selects encadeados;
 Select dentro de LOOP, mesmo sendo Select Single;
 Select single sem chave completa. Obs.: Nesta situação utilizar UP TO 1 ROWS.
 Sort sem indicar as colunas.

2.10 CODE INSPECTOR


Sempre que uma request for liberada, automaticamente será executado o Code Inspector e este fará uma
varredura no código procurando codificações fora dos padrões da FOCUS TEXTIL e uso incorreto da
linguagem, caso alguma verificação falhe a liberação da request somente será possível após as devidas
correções.

Regras e Normas de Programação ABAP Página 6 de 10


Regras e Normas de Programação ABAP

3 RECOMENDAÇÕES DE PERFORMANCE E BOAS PRATICAS

3.1 TABELAS INTERNAS


Nas versões mais recentes do SAP não é recomenda criar tabelas internas com header line. Por está razão
nenhuma tabela interna declarada em um desenvolvimento deve conter header line. Abaixo exemplo de
como declaração uma tabela interna sem header line: (Seguir as normas de criação de comentários já
definidas).

DATA: gt_mara type standard table of mara_type.

3.2 DECLARAÇÃO DE VARIÁVEIS


Sempre que possível utilizar o complemento TYPE para declarar variáveis, constantes, estruturas, tabelas
internas e assim por diante.

3.3 DECLARAÇÃO DE SUBROTINAS (FORMS)


Blocos de código que são executados mais de uma vez devem ser colocados numa sub-rotina (“form”). Tal
procedimento deve ser adotado para eliminar trechos de código redundante e para facilitar a depuração do
programa. Uma sub-rotina deve realizar apenas um processo. Se existir alguma sub-rotina que realize mais
de um processo, então deve-se dividi-la em múltiplas sub-rotinas. O nome de uma sub-rotina deve ser
mnemônico. A sub-rotina que poderá ser usada em outros programas deverá ser colocada em um módulo de
função.

Importante: Quando se tratar de desenvolvimentos dentro de Exit’s, Enhancements, declarar um Include


com a codificação dentro para maior clareza e organização dos códigos.

3.4 COMANDO MOVE-CORRESPONDING


Não é indicado utilizar este comando dentro de loops ou em seleções de dados. Mover campo a campo é
sempre mais indicado (leia-se performático), para isto declarar uma estrutura ou tabela interna na mesma
sequência dos campos que devem ser movidos.

Regras e Normas de Programação ABAP Página 7 de 10


Regras e Normas de Programação ABAP

3.5 COMANDO LOOP


Por questões de performance não é recomendo utilizar o comando LOOP com o complemento WHERE.
Caso seja necessário encontrar um grupo de registros em vez de utilizar o complemento WHERE utilizar o
complemento FROM conforme o exemplo abaixo:

* Ordenar os registros
SORT: gt_vbak BY vbeln ascending,
gt_vbap BY vbeln ascending.
* Ler todos os cabeçalhos das cotações
LOOP AT gt_vbak ASSIGNING <vbak>.
* Localizar os itens da cotação
READ TABLE gt_vbap ASSIGNING <vbap> WITH KEY vbeln = <vbak>-vbeln
BINARY SEARCH.

* Ler todos os itens da cotação


LOOP AT gt_vbap ASSIGNING <vbap> FROM sy-tabix.

* Verifica se modificou o número da cotação


IF <vbap>-vbeln <> <vbak>-vbeln.
EXIT.
ENDIF.

* Escrever mensagem
WRITE: <vbap>-vbeln,
<vbap>-posnr.

ENDLOOP.

ENDLOOP.

3.6 COMANDO SORT


Quando utilizar o comando SORT para ordenar tabelas internas, especifique quais os campos utilizados
como referência. Ou seja, é mais eficiente.

SORT GT_ITAB BY FIELD_1 ASCENDING


FIELD_2 DESCENDING que apenas SORT ITAB.

Regras e Normas de Programação ABAP Página 8 de 10


Regras e Normas de Programação ABAP

3.7 COMANDO SELECT


Evite a utilização do comando SELECT sob a forma “SELECT * FROM <TABLE> WHERE ...”.
Ao utilizarmos “ * ” para busca de campos estaremos trazendo do servidor de banco de dados todas as
colunas da tabela TABLE. Ao invés disto, utilize a forma:

SELECT FLD1 FLD2 FLD3


FROM <TABLE>
INTO (GC_FLD1, GC_FLD2, GC_FLD3)
WHERE ....”.

Quando o consultor for utilizar o FOR ALL ENTRIES em uma seleção de dados atentar para os fatos:

• Sempre verificar se a tabela do FOR ALL ENTRIES não está vazia, pois se for utilizado uma tabela interna
vazia para realizar uma seleção de dados será selecionado todos os registros da tabela informada no FROM.

• Sempre ordenar e excluir os registros duplicados da tabela interna do FOR ALL ENTRIES.
Caso a tabela interna não possa ter os registros duplicados excluídos, criar uma tabela interna temporária
mover os dados e realizar as operações.

• Sempre selecionar os campos conforme a ordem das tabelas transparentes.

• Sempre procurar utilizar índices primários ou secundários nas seleções de dados (e sempre na mesma
ordem da tabela transparente ou da criação do índice secundário). Caso algum campo não chave tenha que
ser filtrado é preferível selecionar tal campo e após a seleção excluir o mesmo da tabela interna.

3.8 COMANDO INTO TABLE


O comando INTO TABLE é sempre mais rápido que os comandos INTO e APPEND para inserção de dados
numa tabela interna. Desta forma prefira sempre a forma:

SELECT *
FROM <TABELA>
INTO TABLE GT_ITAB .

À forma:

SELECT *
FROM <TABELA>
INTO GT_ITAB.
APPEND GT_ITAB.
ENDSELECT”.

3.9 COMANDO FREE


Quando os registros de uma tabela interna não forem mais utilizados no decorrer do programa utilizar o
comando FREE para liberar espaço em memória.

Regras e Normas de Programação ABAP Página 9 de 10


Regras e Normas de Programação ABAP

3.10 ÍNDICE
Cada índice criado diminui a performance dos “inserts” e dos “updates” nas tabelas. No geral, tabelas onde
são feitos muitos “inserts” e “updates”, deverão ter poucos índices. Da mesma forma, tabelas onde há muitos
“selects”, poderão ter mais índices. Uma média de 3-4 índices por tabela é aceitável.

3.11 CÓDIGO MORTO


Evite a existência de código morto ao longo dos programas. Remova definições de campos que nunca serão
usados e códigos que nunca serão executados.

3.12 COMANDO READ TABLE


Sempre que possível ordenar a tabela interna pelos campos que serão utilizados no complemento WITH
KEY, nestes casos será possível utilizar o complemento BINARY SEARCH tornando a busca de registros
mais performática. Outro ponto importante é utilizar o complemento ASSIGNING também por questões de
performance. Exemplo:

* Selecionar um pedido
READ TABLE gt_vbak ASSIGNING <vbak> WITH KEY vbeln = vbeln
BINARY SEARCH.

3.13 TAMANHO PADRÃO DE COLUNAS (73 CARACTERES)


Sempre respeitar a digitação de no máximo 73 caracteres por linha. Por exemplo, caso um comentário
ultrapasse 73 caracteres, continuar na linha subseqüente a digitação do mesmo.

O SAP já possui uma opção para realizar tal verificação, com isto caso o limite de caracteres (73) for
ultrapassado, o editor ABAP do SAP automaticamente irá quebrar os caracteres excedentes em uma nova
linha. Para ativar esta opção ir em Utilitários -> Configuração e arcar a opção Compri. Linha Standard.

3.14 VERIFICAÇÃO EXTENDIDA DE SINTAXE


Todos os desenvolvedores deverão utilizar a funcionalidade de Verificação Estendida de Sintaxe dos
programas criados.

Esta funcionalidade executa uma série de verificações no código fonte, normalmente não verificadas na
checagem simplificada de sintaxe. Entre os erros detectados com esta funcionalidade encontraremos:
definição de variáveis não utilizadas pelo programa, declaração desnecessária de parâmetros, forms não
chamados, etc.

Para executar a Verificação Estendida, a partir do Edit ABAP, selecione Programa -> Verificar -> Verificação
de Programa Ampliada | Executar Verificação.
Ou utilize a transação SLIN.

Regras e Normas de Programação ABAP Página 10 de 10

Você também pode gostar