martes, 30 de abril de 2013

Función para llenar un "Rango" con un "Set de Datos". (SAP-ABAP)

Se  creara una función.



1.- Crear "Grupo de Funciones" (se80).



2.- Crear "Módulo de Funciones".

     En la pestaña "Import" agregar los nombre de parámetros mostrados en la figura.

           IV_SET_NAME (nombre del set de datos)
           IV_DATA_ELEMENT (nombre del elemento de datos relacionado al set de datos)







3.- En la pestaña "Tablas", ingresar nombre de parámetro...

       ET_RANGE (es un rango, contendrá los datos del set datos)




4.- Finalmente en la pestaña "Código fuente" copiar el siguiente código:


 DATAlv_new_setid        TYPE sethier-setid,
        lt_set_lines_basic  TYPE STANDARD TABLE OF rgsbv,
        ls_set_lines_basic  TYPE rgsbv.

  DATAls_tab  TYPE REF TO cl_rs_struc,

        lo_data TYPE REF TO data.

  FIELD-SYMBOLS<tabla> TYPE STANDARD TABLE,

                 <linea> TYPE any,
                 <campo> TYPE any.

  CREATE OBJECT ls_tab.


  CALL METHOD ls_tab->add_element

    EXPORTING
      i_sconame 'SIGN'
      i_type    'CHAR01'.

  CALL METHOD ls_tab->add_element

    EXPORTING
      i_sconame 'OPTION'
      i_type    'CHAR02'.

  CALL METHOD ls_tab->add_element

    EXPORTING
      i_sconame 'LOW'
      i_type    iv_data_element.

  CALL METHOD ls_tab->add_element

    EXPORTING
      i_sconame 'HIGH'
      i_type    iv_data_element.

  CALL METHOD ls_tab->create

    EXPORTING
      i_dynamic              rs_c_false
    RECEIVING
      r_r_data               lo_data
    EXCEPTIONS
      wrong_struc_definition 1
      no_struc_definition    2
      OTHERS                 3.

  ASSIGN lo_data->TO <linea>.

  CREATE DATA lo_data LIKE TABLE OF <linea>.
  ASSIGN lo_data->TO <tabla>.

  REFRESHet_range[].

  PERFORM f_get_set_data TABLES <tabla>
                          USING iv_set_name.

  MOVE <tabla>[] TO et_range[].

*&--------------------------------------------------------------*
*&      Form  F_GET_SET_DATA
*&--------------------------------------------------------------*
FORM f_get_set_data TABLES p_t_range
                     USING p_v_set.
  REFRESHp_t_range[].
  SELECT  setleaf~valsign   AS sign
          setleaf~valoption AS option
          setleaf~valfrom   AS low
          setleaf~valto     AS high
  INTO CORRESPONDING FIELDS OF TABLE p_t_range
  FROM  setheader INNER JOIN setleaf
    ON  setleaf~setclass  EQ setheader~setclass
   AND  setleaf~subclass  EQ setheader~subclass
   AND  setleaf~setname   EQ setheader~setname
  WHERE setheader~setname EQ p_v_set.

ENDFORM.                    "f_get_set_data



4.- Utilización:


  RANGESlr_auart FOR vbak-auart.

  REFRESHlr_auart[].

  CALL FUNCTION 'ZCFCL_FILL_SET'
    EXPORTING
      iv_set_name     'ZCFCL_SD_AUART_KIT'
      iv_data_element 'AUART'
    TABLES
      et_range        lr_auart.


     En el rango "LR_AUART" tenemos los datos del set.