Escolar Documentos
Profissional Documentos
Cultura Documentos
Versão 1
Março/2015
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
1 FINALIDADE
2 NORMAS
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:
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.
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.
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.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.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.
* 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.
* Escrever mensagem
WRITE: <vbap>-vbeln,
<vbap>-posnr.
ENDLOOP.
ENDLOOP.
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 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.
SELECT *
FROM <TABELA>
INTO TABLE GT_ITAB .
À forma:
SELECT *
FROM <TABELA>
INTO GT_ITAB.
APPEND GT_ITAB.
ENDSELECT”.
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.
* Selecionar um pedido
READ TABLE gt_vbak ASSIGNING <vbak> WITH KEY vbeln = vbeln
BINARY SEARCH.
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.
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.