Group by con una tabla interna en SAP (ABAP)

Hay muchas maneras de realizar un group by en ABAP, generalmente se usa un select para leer la tabla y después se realiza una instrucción loop con los datos para agruparlos individualmente. por lo cual se ejecutan dos ciclos. En el siguiente ejemplo realizaremos un reporte utilizando un  group by en un solo ciclo, luego insertaremos los datos en una tabla interna para su posterior descarga en formato .txt con tabulación. El código a continuación muestra el proceso para esta tarea:

REPORT ywm001.

"structure of internal table
TYPES:  BEGIN OF ty_item ,
        lgnum   TYPE lqua-lgnum,
        matnr   TYPE lqua-matnr,
        can_mat TYPE i,
        END OF ty_item.


DATA it_lqua TYPE TABLE OF ty_item. "internal table
DATA wa_lqua TYPE ty_item. "work area


START-OF-SELECTION.

"simple variables to make an into
  DATA: matnr   TYPE lqua-matnr,
        can_mat TYPE i,
        lgnum   TYPE lqua-lgnum.

"select with group by into simple variables
  SELECT matnr COUNT( * ) lgnum
         FROM lqua
         INTO (matnr, can_mat, lgnum)
         WHERE lgnum =  'CAD' GROUP BY matnr lgnum.
"taking values
    CLEAR wa_lqua.
    wa_lqua-lgnum = lgnum.
    wa_lqua-matnr = matnr.
    wa_lqua-can_mat = can_mat.
    "insert in an internal table
    APPEND wa_lqua TO it_lqua.

  ENDSELECT.

"function to export to txt tabulation
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename                = 'lcl_filename'
      filetype                = 'ASC'
      write_field_separator   = 'X'
    TABLES
      data_tab                = it_lqua
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16
      OTHERS                  = 17.

Comentarios

Entradas populares