• Nenhum resultado encontrado

Dicas e macetes

No documento GPS ABAP Para Analista Funcional (páginas 35-48)

Palavras chaves

As vezes debugando um programa pode acontecer de ter chamadas de varios programas, funções, métodos, forms, ai ficamos na dúvida se entramos em todos eles para debugar ou não. Nestes casos vale a pena primeiro procurar as palavras chaves e dar uma atenção maior para os módulos que tenham alguma palavra relacionada ao que estamos procurando.

Pular linhas de códigos

As vezes é necessário pular uma parte do programa, porque não queremos que o sistema passe por ali só para saber como ele vai se comportar dali para frente ou forçar ele entrar em uma condição que não está entrando.

Para fazermos isso é só posicionar na linha em que queremos que ele esteja e clicar Shift+F12 e pronto o sistema irá “pular” todas linhas do ponto onde estava até o ponto onde paramos o cursor, isso funciona para frente e para trás, mas cuidado, por ele não passar em algumas linhas, pode não alimentar algumas variáveis, só preste atenção nisso.

No exemplo abaixo, estamos na linha 312, se eu for com o mouse e clicar na linha 318 e pressionar shift+F12, o debuger irá pular as 2 condições de IF, não vai fazer a verificação e ir direto para a linha 318.

Chegar mais rápido onde queremos

Normalmente quando debugamos utilizamos as teclas F5 ou F6, mas quando não sabemos ainda onde está nosso “endereço”, deixo uma dica:

Sempre utilize F6 primeiro assim chegaremos mais rápido onde queremos, porque o F6 executa a linha sem “entrar” nela, assim podemos passar em uma linha que

pode ser uma chamada de uma função, uma include ou um Perform, se passou daquela linha e deu o erro, ou o valor da nossa variavel conter a informação

esperada, ou a tabela foi preenchida, opa, é ali que está o que estamos procurando, ai sim, voltamos debugando novamente e naquele ponto, utilizamos o F5.

Acessar programas rapidamente

Normalmente se usa o /H para ativar o debug, mas vou deixar uma dica importante: Antes de ativar o /H acesse o programa via SE38 e veja o código antes, procure alguma palavra chave no programa, muitas vezes eu nem precisei debugar, somente olhando o código achei a tabela que eu queria encontrar e se fosse debugando iria demorar uma eternidade para chegar no ponto em que a tabela estava.

Procurar qualquer texto dentro de códigos ABAP

O programa RPR_ABAP_SOURCE_SCAN acessado via SE38, permite encontrar qualquer texto, tabela, campo, comentário dentro de um código abap, muito útil quando temos um nome já em mente.

A transação EWK1 tem a mesma finalidade, e mais simples de se usar e o resultado é mais simples também. Veja o exemplo abaixo onde vamos procurar em todo programa Z o texto “Hora Extra”.

Pontos de parada com condição simples

As vezes pode surgir a necessidade de saber quando uma variavel ou tabela está sendo alimentada, de onde está vindo a informação e o ponto de parada com condição será muito util para nos ajudar a saber isso.

Para colocar um ponto de parada com condição, primeiro temos que estar

executando o programa e nesse caso o ideal é colocarmos um ponto de parada fixa próximo do START-OF-SELECTION porque é onde começa a seleção dos dados , ou seja, antes da nossa variavel ou tabela receber qualquer informação.

Clicando no Watchpoint é aberta a janela para colocarmos a condição simples que desejamos. Podemos colocar uma tabela, uma variavel, uma work-area, qualquer tipo de dado que esteja “viva”, ou seja, o sistema precisa enxergar o tipo de dado, tem que estar criado.

Assim que o tipo de dado receber um valor o sistema para na próxima linha. No exemplo abaixo a work-area gs_saida acabou de receber um valor em um de seus campos e o debug parou imediatamente na linha seguinte.

Pontos de parada com condição complexa

Muitas vezes precisamos chegar em um valor especifico de um tipo de dado, e para conseguir isso precisamos criar uma condição mais complexa, onde informamos condições mais especificas.

Vamos supor que desejamos encontrar o momento em que o sistema grava uma data especifica em uma tabela, porque neste dia é que está nossa informação. Para isso vamos repetir o processo da condição simples, ou seja, o programa deve estar sendo executado e a work-area e o campo deve existir.

Lembre-se de colcoar um ponto de parada fixo próximo do START-OF-SELECTION, só para conseguirmos fazer nossa parada com condição complexa.

No Watchpoint precisamos informar o nome do tipo de dado e na condição livre temos que colocar nossa condição desejada, lembrando que a condição precisa ter espaços em branco entre o nome do tipo de dado o operador e o valor.

Depois é só executar com F8 e esperar a condição ser satisfeita, caso não seja, o sistema irá executar até terminar o processo, caso encontre ele para na linha imediatamente depois da condição satisfeita.

Debugar regras do log da folha

Agora que ja estamos “fera” em debugar programas vamos para nosso maior desafio, aprender a debugar a regra de folha de pagamento que para os analistas funcionais SAP HR é uma dica valiozissima.

Porque é necessário aprender debugar regra de folha ? As vezes olhamos para uma regra e não conseguimos identificar no help de onde vem a informação e as vezes existem condições internas que não estão explicitas. Para aprendermos a debugar a regra, vamos fazer um exemplo real.

Nosso objetivo será saber o valor que o sistema está atribuindo no campo

“NUM=F01T A” da regra ZBB1, porque ja tentamos ver pelo help e não conseguimos entender o que está sendo feito nessa linha.

Para isso precisamos abrir o programa RPCMAS09_FUPIT pela transação SE38 que faz acesso as regras de calculo das folhas de pagamentos.

Selecione Exibir e quando abrir o programa clique na linha 14 .

Quando clicar na linha indicada o sistema irá solicitar qual programa que fará referencia ao seu ponto de parada, isso acontece porque nosso programa RPCMAS09_FUPIT é usado por varios programas.

Pronto, agora vamos simular uma folha (pode ser qualquer folha) mas em uma nova janela.

No momento em que o sistema parar no ponto de parada fixo, devemos criar o watchpoint com condição como abaixo, informando o nome da regra na condição, no nosso exemplo famos debugar a regra ZBB1.

Depois de ter criado o watchpoint e salvo, retire o ponto de parada fixo, e pressione F8 até que a variavel ccycl seja = ZBB1, para facilitar coloque a variavel no panel ao lado para vermos o valor dela.

Assim que o debug parar na regra colocada no watchpoint, vamos entrar no LOOP AT, e ja vimos que o LOOP fica rodando uma tabela, no nosso caso é a tabela IT e vamos ter que chegar até a rubrica que precisamos, no nosso exemplo é a rubrica / 199.

Assim que chegarmos na rubrica, com F5 entre na PERFORM regel.

Agora, precisamos encontrar a PERFORM boper. (utilize CTRL+F e digite FORM boper) e coloque um ponto de parada fixo na chamada da PERFORM boper, e clique em F8 para chegar ao ponto de parada fixado.

Chegando no ponto, entre na PERFORM boper com F5.

Agora, precisamos encontrar a PERFORM process_oper. (utilize CTRL+F e digite FORM process) e coloque um ponto de parada fixo na chamada da PERFORM process_oper., e clique em F8 para chegar ao ponto de parada fixado.

Assim que chegar no ponto, coloque a variavel OP no painel de variavel.

Agora com o ponto de parada fixado na PERFORM process_oper. Com F8 debug até a variavel OP ficar com a linha que deseja saber o valor no nosso caso NUM=F01T A

Assim que o valor da variavel ficar igual a linha da regra que desejamos, vamos entrar com F5 dentro da PERFORM process_oper.

A partir deste ponto não existe mais um caminho fixo, pois pode variar para cada linha da regra, no nosso exemplo vamos entrar dentro de uma perform chamada vget, mas poderia ser outra, conforme a linha da regra.

E nesse ponto abaixo encontramos o momento do calculo que estamos procurando e o valor que nosso NUM vai receber. A variavel pfeld normalmente recebe o valor calculado e transfere para o NUM, RTE ou AMT.

No documento GPS ABAP Para Analista Funcional (páginas 35-48)

Documentos relacionados