W Pub: ABAP Rut ERRORES

  1. report programa.
  2.  
  3. define e_create_data. "Declaration of vars only 1 Call!
  4. types: begin of e_db,
  5.         tab(30),
  6.         field(30),
  7.         value(30),
  8.       end of e_db.
  9.  
  10. data: begin of t_error occurs 0,
  11.         prg(30),  "Cdigo de programa
  12.         src(30),  "Rutina de error
  13.         db type e_db occurs 0,
  14.         txt(255),
  15.       end of t_error,
  16.       my_db type e_db,
  17.       _syst like syst,
  18.       _my_txt(25).
  19. end-of-definition.
  20.  
  21. define e_adderror. "Add header of errors
  22.    t_error-Prg = &1.
  23.    t_error-src = &2.
  24.    t_error-txt = &3.
  25.    append t_error.
  26.    clear t_error.
  27.    refresh t_error-db.
  28. end-of-definition.
  29.  
  30. define e_addfield. "Add TAB error
  31.   my_db-tab   = &1.
  32.   my_db-field = &2.
  33.   my_db-value = &3.
  34.   translate my_db-tab to upper case.
  35.   translate my_db-field to upper case.
  36.   append my_db to t_error-db.
  37. end-of-definition.
  38.  
  39. define e_addsyst. "ADD most used syst vars
  40.    _syst = syst.
  41.    e_addfield: 'SYST' 'TCODE' _syst-TCODE,
  42.                'SYST' 'cprog' _syst-cprog,
  43.                'SYST' 'REPID' _syst-REPID,
  44.                'SYST' 'XFORM' _syst-XFORM,
  45.                'SYST' 'UNAME' sy-UNAME,
  46.                'SYST' 'datum' _syst-datum,
  47.                'SYST' 'uzeit' _syst-uzeit,
  48.                'SYST' 'subrc' _syst-subrc,
  49.                'SYST' 'tabix' _syst-tabix,
  50.                'SYST' 'index' _syst-index,
  51.                'SYST' 'UCOMM' _syst-UCOMM,
  52.                'SYST' 'MSGV1' sy-MSGV1,
  53.                'SYST' 'MSGV2' sy-MSGV2,
  54.                'SYST' 'MSGV3' sy-MSGV3,
  55.                'SYST' 'MSGV4' sy-MSGV4.
  56. end-of-definition.
  57.  
  58. define e_listdata.
  59.   loop at t_error.
  60.     at first.
  61.      write: / 'Listado de errores'.
  62.      uline /1(18).
  63.     endat.
  64.      if not t_error-prg is initial. write: / t_error-prg. endif.
  65.      if t_error-prg is initial. write: /001 ''. endif.
  66.      write: t_error-src.
  67.      loop at t_error-db into my_db.
  68.         if not my_db-tab is initial and not my_db-field is initial.
  69.            concatenate my_db-tab '-' my_db-field into _my_txt.
  70.         elseif not my_db-tab is initial.
  71.             _my_txt =  my_db-tab.
  72.         elseif not my_db-field is initial.
  73.             _my_txt =  my_db-field.
  74.         endif.
  75.         condense _my_txt no-gaps.
  76.         if not _my_txt is initial.
  77.            write: /010 _my_txt+0(25).
  78.         else.
  79.            write: /010 ''.
  80.         endif.
  81.         write: my_db-value.
  82.      endloop.
  83.   endloop.
  84. end-of-definition.
  85.  
  86. * Ejemplo
  87. end-of-selection.
  88.    e_create_data.
  89.    e_addsyst.
  90.    e_adderror '' 'end-of-selection' 'Error de sistema'.
  91.    e_listdata.