martes, 13 de junio de 2017

Programa ejemplo manejo FIELD SYMBOLS (ABAP, FIELD SYMBOLS)

He aquí un ejemplo sencillo que puede tener diversas aplicaciones.

REPORT  ztest_field_symbol.

PARAMETERS:
p_bukrs TYPE bseg-bukrs,
p_gjahr TYPE bseg-gjahr,
p_belnr TYPE bseg-belnr.

DATA:
t_bsak TYPE STANDARD TABLE OF bsak,
t_bsik TYPE STANDARD TABLE OF bsik,
BEGIN OF t_data OCCURS 0,
  belnr  TYPE belnr_d,
  augbl  TYPE augbl,
END OF t_data,
s_data LIKE LINE OF t_data.
FIELD-SYMBOLS:
<bs*k_tab> TYPE ANY TABLE,
<bs*k> TYPE any,
<any> TYPE any.

REFRESHt_bsak[]t_bsik[].
SELECT FROM bsak INTO TABLE t_bsak
WHERE augbl EQ p_belnr
AND bukrs EQ p_bukrs
AND belnr NE p_belnr.
IF sy-subrc NE 0.
  SELECT FROM bsik INTO TABLE t_bsik
  WHERE bukrs EQ p_bukrs
  AND belnr EQ p_belnr
  AND gjahr EQ p_gjahr.
  IF sy-subrc EQ 0.
  ENDIF.
ENDIF.

BREAK-POINT.

IF t_bsak[] IS NOT INITIAL.
  ASSIGN TABLE FIELD t_bsak TO <bs*k_tab>.
ELSE.
  ASSIGN TABLE FIELD t_bsik TO <bs*k_tab>.
ENDIF.

REFRESHt_data[]CLEARs_data.
UNASSIGN <bs*k>.
LOOP AT <bs*k_tab> ASSIGNING <bs*k>.

  UNASSIGN<any>.
  ASSIGN COMPONENT 'BELNR' OF STRUCTURE <bs*k> TO <any>.
  IF sy-subrc EQ 0.
    MOVE <any> TO s_data-belnr.
  ENDIF.

  UNASSIGN<any>.
  ASSIGN COMPONENT 'AUGBL' OF STRUCTURE <bs*k> TO <any>.
  IF sy-subrc EQ 0.
    MOVE <any> TO s_data-augbl.
  ENDIF.
  APPEND s_data TO t_data.
  CLEARs_data.

ENDLOOP.

BREAK-POINT.

Llenar RANGO con valores de SET DE DATOS (ABAP, GS01,GS02)

Otra forma de llenar un RANGO con los valores que agregamos a un SET DE DATOS creados mediante la transacción GS01 y GS02.

REPORT  ztest_set.

DATA:
v_setname TYPE setheader-setname VALUE 'Z_DS_EXTZONE',
s_setheader TYPE setheader,
t_setleaf TYPE STANDARD TABLE OF setleaf.
FIELD-SYMBOLS:
<sl> TYPE setleaf.
RANGESr_zexcd FOR t7cl13-zexcd.

CLEARs_setheaderr_zexcdREFRESHt_setleaf[]r_zexcd[].
SELECT SINGLE FROM setheader INTO s_setheader
WHERE setname EQ v_setname.
IF sy-subrc EQ 0.
  SELECT FROM setleaf INTO TABLE t_setleaf
  WHERE setclass EQ s_setheader-setclass
  AND subclass EQ s_setheader-subclass
  AND setname EQ s_setheader-setname.
  IF sy-subrc EQ 0.
    UNASSIGN<sl>.
    LOOP AT t_setleaf ASSIGNING <sl>.
      r_zexcd-sign <sl>-valsign.
      r_zexcd-option <sl>-valoption.
      r_zexcd-low <sl>-valfrom.
      r_zexcd-high <sl>-valto.
      APPEND r_zexcd.
      CLEAR r_zexcd.
    ENDLOOP.
  ENDIF.
ENDIF.