lunes, 18 de mayo de 2009

Barra de Progreso (ejemplo clasico)

La barra de Progreso es muy util cuando se quiere informar al usuario que un proceso esta tardando , pero que pronto llegara a su fin... (para que no pierda la paciencia...jejej).

internamente sirve tambien para evitar dumps por time out.

Aqui va un ejemplo :

*&**********************************************************************

*& DESCRIPTION: Demonstrate Progress indicator *
*&**********************************************************************

REPORT zprogind.

TYPES: BEGIN OF t_mara,
  matnr LIKE mara-matnr,
  END OF t_mara.
DATA: it_mara TYPE STANDARD TABLE OF t_mara INITIAL SIZE 0,
  wa_mara TYPE t_mara.
DATA: mara_lines TYPE i,
  gd_percent TYPE i.



START-OF-SELECTION.

  SELECT matnr
  INTO TABLE it_mara
  FROM mara.

  CHECK sy-subrc EQ 0.
  mara_lines = sy-dbcnt.
  clear: gd_percent.

  LOOP AT it_mara INTO wa_mara.
  PERFORM progress_bar USING 'Retrieving data...'(001)
  sy-tabix
  mara_lines.
* WAIT UP TO 2 SECONDS.
  ENDLOOP.

  WRITE: /20 'Report is "Complete" OK'.


*&---------------------------------------------------------------------*
*& Form PROGRESS_BAR
*&---------------------------------------------------------------------*

FORM progress_bar USING p_value
  p_tabix
  p_nlines.

  DATA: w_text(40),
  w_percentage TYPE p,
  w_percent_char(3).

  w_percentage = ( p_tabix / p_nlines ) * 100.
  w_percent_char = w_percentage.
  SHIFT w_percent_char LEFT DELETING LEADING ' '.
  CONCATENATE p_value w_percent_char '% Complete'(002) INTO w_text.

* This check needs to be in otherwise when looping around big tables
* SAP will re-display indicator too many times causing report to run

* very slow. (No need to re-display same percentage anyway)

  if w_percentage gt gd_percent or p_tabix eq 1.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  EXPORTING
  percentage = w_percentage
  text = w_text.
  gd_percent = w_percentage.
  endif.
endform. 

3 comentarios:

  1. cabe aclarar que si no tiene el parámetro activado en el perfil de usuario no funciona...

    Saludos

    ResponderEliminar
  2. Como asi? explicate mejor Desmoquattro.

    ResponderEliminar
  3. Ni recordaba esto....2 años tiene! je

    vas a la trx SU3, solapa Parámetros, y cargás el parámetro SIN y lo ponés en 1 o X, y te muestra el relojito, si lo seteás en cero, no te lo va a mostrar.

    ResponderEliminar