Padrão para Escrita de Fontes AdvPl
Nome dos Fontes
Exemplo: R FAT R 01
01 = seqüencial de acordo com a máscara formada pelos dígitos anteriores
R = relatório; A = atualização; C = consulta; M = miscelânea e job
FAT = módulo de faturamento; outras possibilidades: EST, COM, CTB, FIN, FIS, PCP, ATF, GPE, etc.
R = rdmake (chamada por menu); E = execblock (chamada por CNAB, lançamento padrão, outro fonte,
validações, gatilhos, fórmulas, etc.)
Cabeçalho
Corresponde à documentação básica do fonte, caracterizando o desenvolvedor, a descrição sumário do que o fonte faz e sua(s)
aplicação(ões). Adotamos o modelo disponível no próprio IDE (opção Inserir/Documentação de Cabeçalho). Também é
interessante documentar blocos do fonte, descrevendo o que fazem, e utilizando para isso o outro modelo também disponível no
IDE (opção Inserir/Documentação de Explicação).
Escrita de Query
Sempre criar as condições utilizando chave de filtragem o mais próximo possível de algum índice existente na tabela, não
esquecendo de colocar o campo de filial na chave; para os casos de query com objetivo de buscar registros de todas as filiais e
caso seja uma tabela com muitos registros, avaliar a necessidade de criar um índice sem a filial para ganho de performance.
Com Somente 1 Tabela:
Exemplo errado:
SELECT A1_COD, A1_LOJA, A1_NOME
FROM SA1010 SA1
WHERE A1_COD = ‘000001’
AND SA1.D_E_L_E_T_ <> ‘*’
Ou
SELECT A1_COD, A1_LOJA, A1_NOME
FROM SA1010 SA1
WHERE A1_COD = ‘000001’
AND A1_FILIAL = ‘’
AND SA1.D_E_L_E_T_ <> ‘*’
Nesse caso, o SQL executará o que chamamos de full scan, ou seja, fará uma busca em toda a
tabela para localizar um único registro.
Exemplo correto:
SELECT A1_COD, A1_LOJA, A1_NOME
FROM SA1010 SA1
WHERE A1_FILIAL = ‘ ‘
AND A1_COD = ‘000001’
AND SA1.D_E_L_E_T_ <> ‘*’
Desta forma, o SQL utilizará o índice para localizar os registros conforme a condição, sem executar full
scan e gerando o resultado mais rapidamente.
Com 2 ou mais Tabelas:
Exemplo errado:
SELECT C5_NUM, C5_CLIENTE, C5_LOJA, C6_PRODUTO, C6_QTDVEN
FROM SC5010 SC5, SC6010 SC6
WHERE C5_NUM BETWEEN ‘
’ AND ‘ZZZZZZ’
AND C6_NUM = C5_NUM
AND C5_FILIAL = ‘ ’
AND C6_FILIAL = ‘ ’
AND SC5.D_E_L_E_T_ <> ‘*’
AND SC6.D_E_L_E_T_ <> ‘*’
ou
SELECT C5_NUM, C5_CLIENTE, C5_LOJA, C6_PRODUTO, C6_QTDVEN
FROM SC5010 SC5, SC6010 SC6
WHERE C5_NUM BETWEEN ‘
’ AND ‘ZZZZZZ’
AND C6_NUM = C5_NUM
AND SC5.D_E_L_E_T_ <> ‘*’
AND SC6.D_E_L_E_T_ <> ‘*’
Nesse caso, o SQL executará o que chamamos de full scan, ou seja, fará uma busca em toda a
tabela para localizar um único registro.
Exemplo correto:
SELECT C5_NUM, C5_CLIENTE, C5_LOJA, C6_PRODUTO, C6_QTDVEN
FROM SC5010 SC5, SC6010 SC6
Página: 1
Padrão para Escrita de Fontes AdvPl
WHERE C5_FILIAL = ‘ ’
AND C5_NUM BETWEEN ‘
’ AND ‘ZZZZZZ’
AND SC5.D_E_L_E_T_ <> ‘*’
AND C6_FILIAL = ‘ ’
AND C6_NUM = C5_NUM
AND SC6.D_E_L_E_T_ <> ‘*’
Desta forma, o SQL utilizará o índice para localizar os registros conforme a condição, sem executar full
scan e gerando o resultado mais rapidamente.
Outra dica que otimiza a performance no uso de querys diz respeito a quantidade de campos retornados na cláusula SELECT. Coso
você utilize muitos campos de 1 ou mais tabelas, é indicado retornar o R_E_C_N_O_ de cada tabela e posicioná-lo dentro de um
While, por exemplo. Segue exemplo:
Não se esqueça de utilizar os comandos RetSqlName(Tabela) e xFilial(Alias) nas querys.
Nome de Variáveis
Utilizar sempre a letra com o tipo de conteúdo como primeiro dígito da variável: c para string, n para numérico, l para lógico, d
para data e a para arrays.
Não iniciar a variável com underline (sublinhado). Caso se esteja criando uma variável, em ponto de entrada, que possa existir
como private ou pública no fonte chamador, utilize nome mais específico. Por exemplo: cLocPadE ao invés de _cLocal ou cLocal.
Escrita de Campos e Comandos
1.
Nome de Campo: sempre em letra maiúscula;
Página: 2
Padrão para Escrita de Fontes AdvPl
2.
3.
Utilizar o mesmo padrão de desenvolvimento da Microsiga: dbSelectArea(), dbSkip(), dbCloseArea(), etc;
Encerre o While com EndDo e o If com EndIf; não use apenas End
Projetos de Fontes
Mantenha sempre os fontes organizados dentro de um mesmo diretório. Como padrão utilizamos as pastas Rdmake (até a versão
7.10) oo My Projects (8.11 e superiores). Evite criar novos arquivos de projetos (.prj), mantendo somente um projeto no cliente. Isso
facilita quando atualizamos o repositório e necessitamos recompilar todos os fontes específicos do cliente.
Tabulação
Utilizar sempre 4 caracteres como tabulação.
Fonte de exibição no IDE
Utilizar a fonte padrão MS Line Draw. Assim todos os recursos de exibição no IDE serão padronizados.
Cuidados Especiais para os Pontos de Entrada
Utilizar sempre GetArea e RestArea para todas as tabelas envolvidas no ponto de entrada.
LINEDRAW.TTF
Códigos ou Valores fixos
Nunca deixar informações como conteúdos de códigos de produtos, TES, clientes, etc., fixos no fonte. Sempre que essa atribuição
for necessária, criar parâmetros correspondentes no SX1, SX5 ou SX6.
Página: 3
Download

Padrão para Escrita de Fontes AdvPl