Indicador de progresso
2011-03-07

Sabes aquelas barras de progresso que vão indicando quanto falta para terminar um processo? Aquelas que às vezes quando chegam ao fim voltam ao princípio e te deixam frustrado e baralhado sem entender para que servem afinal? Eis como as podes usar num programa ABAP.
DATA: lv_texto TYPE char40,
lv_valor type i.
DO 10 TIMES.
WAIT UP TO 1 SECONDS.
CLEAR lv_texto.
lv_valor = sy-index * 10.
lv_texto(3) = lv_valor.
CONCATENATE lv_texto '%!' INTO lv_texto.
CONCATENATE 'Já só falta' lv_texto INTO lv_texto SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = lv_valor
text = lv_texto.
ENDDO.
Nota que o cronómetro vai ficando preenchido. Infelizmente o comando WAIT UP TO N SECONDS está limitado a inteiros e por isso não sei como se pode fazer uma contagem mais rápida. Mas já é melhor que nada.
E atenção ao comando WAIT porque faz um COMMIT à base de dados.
O Abapinho saúda-vos.
3 de Outubro de 2011 às 16:04
Olá, acompanho seu site durante a algum tempo já, pois me ajudou a esclarecer algumas dúvidas que eu possuia.
Agora possuo uma outra.
Há a possibilidade de interromper a execução de um programa durante um tempo determinado sem a utilização do WAIT?
Não posso usar o WAIT justamente pelo COMMIT que ele faz.
Obrigado pela ajuda.
3 de Outubro de 2011 às 16:14
Olá Rodrigo,
Escrevi há uns tempos um artigo sobre isso. Vê lá se te ajuda:
https://abapinho.com/2011/06/soneca/
Abraço,
Nuno
5 de Outubro de 2011 às 12:55
Olá Nuno,
esso me ajudou perfeitamente.
A função ENQUE_SLEEP foi perfeita no meu caso.
Estava pensando em utilizar um DO 20000000 TIMES que levava em torno de 1 segundo e alguns milésimos.
Muito obrigado.
5 de Outubro de 2011 às 17:21
Que bom que o Abapinho te ajudou!