- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Clase de SETS
- CLASS zini_cl_rango DEFINITION.
- PUBLIC SECTION.
- CLASS-METHODS: get_rango IMPORTING p_name TYPE string
- p_wildcards TYPE xfeld OPTIONAL
- EXPORTING p_data TYPE ANY TABLE.
- PRIVATE SECTION.
- CONSTANTS: c_version type c LENGTH 05 VALUE '01.00',
- c_date type datum value '20240517',
- c_copyleft type c LENGTH 25 value 'http://www.bergonzini.com'.
- ENDCLASS.
- CLASS zini_cl_rango IMPLEMENTATION.
- METHOD get_rango.
- DATA: t_R_RANGO TYPE STANDARD TABLE OF setnode,
- obj type ref to data.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Optimización
- DATA(l_name) = CONV char70( p_name ).
- IMPORT p_data TO p_data FROM MEMORY ID l_name.
- IF sy-subrc EQ 0.
- EXPORT p_data FROM p_data TO MEMORY ID l_name.
- EXIT.
- ENDIF.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Creacion de la tabla dinamica
- DATA(l_wildcards) = abap_true.
- DATA(l_setname) = p_name.
- IF p_wildcards IS SUPPLIED.
- l_wildcards = p_wildcards.
- ENDIF.
- ***** SELECT SINGLE rollname INTO @DATA(l_rollname) FROM setheader WHERE setname = @l_setname.
- *****
- ***** IF sy-subrc NE 0.
- ******--[ Aquí podemos salir o dejar que de el DUMP la linea posterior para detectar que falta
- ******--[ el SET... DUMP! DUMP! DUMP! DUMP!
- ***** ENDIF.
- *****
- ***** DATA(t_components) = VALUE cl_abap_structdescr=>component_table(
- ***** ( name = 'SIGN' type = cl_abap_elemdescr=>get_c( 1 ) )
- ***** ( name = 'OPTION' type = cl_abap_elemdescr=>get_c( 2 ) )
- ***** ( name = 'LOW' type = CAST #( cl_abap_elemdescr=>describe_by_name( l_rollname ) ) )
- ***** ( name = 'HIGH' type = CAST #( cl_abap_elemdescr=>describe_by_name( l_rollname ) ) )
- ***** ).
- *****
- ***** DATA(table_desc) = cl_abap_tabledescr=>create(
- ***** p_line_type = cl_abap_structdescr=>create( t_components )
- ***** p_table_kind = cl_abap_tabledescr=>tablekind_std
- ***** ).
- *****
- ***** DATA: table TYPE REF TO data.
- ***** CREATE DATA table TYPE HANDLE table_desc.
- ***** FIELD-SYMBOLS <table> TYPE ANY TABLE.
- ***** ASSIGN table->* TO <table>.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Buscamos el rango
- t_R_RANGO = VALUE #( ( subsetname = l_setname ) ).
- *--[ Creamos la Working Area por si peta el Select de abajo
- create data obj like LINE OF p_data.
- ASSIGN obj->* TO FIELD-SYMBOL(<fs_wa>).
- LOOP AT t_R_RANGO INTO DATA(l_R_RANGO).
- SELECT subsetname FROM setnode APPENDING CORRESPONDING FIELDS OF TABLE t_R_RANGO
- WHERE setname = l_R_RANGO-subsetname .
- TRY.
- SELECT valsign AS sign
- valoption AS option
- valfrom AS low
- valto AS high
- FROM setleaf APPENDING CORRESPONDING FIELDS OF TABLE p_data
- WHERE setname = l_R_RANGO-subsetname..
- CATCH cx_sy_dynamic_osql_semantics.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[
- *--[ Segunda oportunidad por problemas de formato
- CLEAR sy-subrc.
- SELECT valsign AS sign,
- valoption AS option,
- valfrom AS low,
- valto AS high
- FROM setleaf INTO TABLE @DATA(x_data)
- WHERE setname = @l_R_RANGO-subsetname.
- *--[ Más lento
- loop at x_data into data(ax).
- clear <fs_wa>.
- MOVE-CORRESPONDING ax to <fs_wa>.
- insert <fs_wa> into table p_data.
- endloop.
- ENDTRY.
- ENDLOOP.
- IF l_wildcards = abap_true.
- LOOP AT p_data "<table>
- ASSIGNING FIELD-SYMBOL(<f_R_RANGO>).
- ASSIGN ('<F_R_RANGO>-LOW') TO FIELD-SYMBOL(<f_LOW>).
- ASSIGN ('<F_R_RANGO>-OPTION') TO FIELD-SYMBOL(<f_option>).
- ASSIGN ('<F_R_RANGO>-HIGH') TO FIELD-SYMBOL(<f_high>).
- IF <f_LOW> CA '*'. <f_option> = if_fsbp_const_range=>option_contains_pattern. CLEAR <f_high>. ENDIF.
- ENDLOOP.
- ENDIF.
- * p_DATA[] = <table>[].
- EXPORT p_data FROM p_data TO MEMORY ID l_name.
- ENDMETHOD.
- ENDCLASS.
- ***end-of-SELECTION.
- ** DATA: r_rango LIKE RANGE OF BKPF-blart.
- ** zini_cl_rango=>get_rango( EXPORTING p_name = 'ZNOMBRE_DEL_SET'
- *** p_wildcards = abap_false
- ** IMPORTING p_data = r_rango ).
Última modificación de la página el 03 May 2026 a las 07h18
Powered by
PmWiki