Gracias si imprime en pantalla los campos…
Lo que yo busco es: poder acceder a algunos elementos de la tabla que paso por referencia, de la forma como explica el Libro
<fs_wa>-matnr
Yo lo que me imagino es poder tener una tabla interna, PROPIETARIA, NO TABLA ESTÁNDAR, formada con Objetos de datos estándar.
Por ejemplo:
TYPES: BEGIN OF TY_DATA_TO_PRINT,
GESME TYPE LQUA-GESME, "Cantidad
MEINS TYPE T006A-MSEH3, "Unidad de medida
WDATU TYPE LQUA-WDATU, "Fecha de entrada
MATNR TYPE LQUA-MATNR, "Clave de material
LENUM TYPE LQUA-LENUM, "Número de unidad de almacén
LGPLA TYPE LQUA-LGPLA, "Ubicación
MAKTX TYPE MAKT-MAKTX, "Descripción del material
END OF TY_DATA_TO_PRINT.
DATA it_toprint TYPE STANDARD TABLE OF ty_data_to_print.
Una vez teniendo esta tabla O CUALQUIER OTRA Des esto se trata.
Pasarle esta tabla como parte de un atributo a un método.
Y este método pueda hacer cosas con esta tabla:
Cosas como:
Agregar los textos de los materiales.
Enviarla a una impresión de un SapScript que imprime etiquetas
etc…
Lo que busco es escribir un código que se pueda usar Muchas veces, el mismo código, NO COPIAR Y PEGAR el mismo código en muchos programas.
Continuando.
Entonces no se le puede pasar la tabla al método porque tendría que poner la estructura en su firma y esto no permitirá que el método funcione cuando cambio la tabla.
Resulta que los las referencias pueden ser pasadas como parámetro. Pero los FIELD-SYMBOLS No.
Y no se puede acceder a la tabla tabla como, tal desde una referencia. Entonces dentro de la función se asigna la referencia a un Field-symbols.
Adjunto este ejemplo en donde lo intento:
La Clase:
* INLCUDE zlcl_dinamic
CLASS lcl_dinamic DEFINITION create PRIVATE.
PUBLIC SECTION.
CLASS-METHODS write_tabla IMPORTING p_ref_itable TYPE REF TO data.
ClASS-METHODS mat_desc_text IMPORTING matnr type matnr
RETURNING VALUE(MAKTX) type MAKTX.
ENDCLASS."-----------------------------------------------------------"
CLASS lcl_dinamic IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------+
* | Instance Public Method lcl_dinamic=>write_tabla(p_ref_itable )
* +-------------------------------------------------------------------+
* | [--->] INPUT ref_itable TYPE REF TO data
* +--------------------------------------------------------</SIGNATURE>
METHOD write_tabla."*********************
DATA ref_wa_itable TYPE REF TO data.
FIELD-SYMBOLS:
<fs_itable> TYPE ANY TABLE,
<fs_wa_itable> TYPE ANY,
<fs_comp> TYPE ANY.
ASSIGN p_ref_itable->* TO <fs_itable>.
CREATE DATA ref_wa_itable LIKE LINE OF <fs_itable>.
ASSIGN ref_wa_itable->* TO <fs_wa_itable>.
LOOP AT <fs_itable> ASSIGNING <fs_wa_itable>.
<fs_wa_itable>-MAKT = mat_desc_text( <fs_wa_itable>-matnr ). "<=================
MODIFY <fs_itable> FROM <fs_wa_itable>.
ENDLOOP.
ENDMETHOD."--------------------------------------
* <SIGNATURE>---------------------------------------------------------+
* | Instance Public Method LCL_dinamic=>mat_desc_text(matnr)
* +-------------------------------------------------------------------+
* | [--->] INPUT matnr TYPE matnr
* | [<-()] RETURNING MAKTX TYPE MAKTX
* +--------------------------------------------------------</SIGNATURE>
METHOD mat_desc_text.
DATA: MAKT TYPE MAKT. "TABLA TIPO MAKT
CALL FUNCTION 'MAKT_SINGLE_READ'
EXPORTING
MATNR = matnr
SPRAS = SY-LANGU
IMPORTING
WMAKT = MAKT
EXCEPTIONS
WRONG_CALL = 1
NOT_FOUND = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
MAKTX = MAKT-MAKTX.
WHEN OTHERS.
CONCATENATE 'TEXTO NO ENCONTRADO PARA: ' matnr INTO MAKTX.
ENDCASE.
ENDMETHOD. "---------unit_text-----------------------------------------
ENDCLASS.
El Problema:
El programa que lo llama:
REPORT zdinamic.
INCLUDE zlcl_dinamic.
**********************************************************************
* DECLARACION DE VARIABLES *
**********************************************************************
TYPES: BEGIN OF TY_DATA_TABLE,
GESME TYPE LQUA-GESME, "Cantidad
MEINS TYPE T006A-MSEH3, "Unidad de medida
WDATU TYPE LQUA-WDATU, "Fecha de entrada
MATNR TYPE LQUA-MATNR, "Clave de material
LENUM TYPE LQUA-LENUM, "Número de unidad de almacén
LGPLA TYPE LQUA-LGPLA, "Ubicación
MAKTX TYPE MAKT-MAKTX, "Descripción del material
END OF TY_DATA_TABLE.
DATA it_table TYPE STANDARD TABLE OF ty_data_table.
DATA wa_it_table TYPE ty_data_table.
DATA ref_itable TYPE ref to data. " Referencia para pasar tablas como parametros
START-OF-SELECTION.
SELECT GESME MEINS
WDATU MATNR
LENUM LGPLA
FROM LQUA
INTO CORRESPONDING FIELDS OF TABLE it_table
UP TO 10 ROWS.
Loop at it_table into wa_it_table.
WRITE: / wa_it_table-maktx.
ENDLOOP.
GET REFERENCE OF it_table INTO ref_itable.
lcl_dinamic=>write_tabla( ref_itable ).
Loop at it_table into wa_it_table.
WRITE: / wa_it_table-maktx.
ENDLOOP.
END-OF-SELECTION.