Crear tabla interna de forma dinámica

27 11 2020

Con la siguiente porción de código se puede crear una tabla interna de forma dinámica a partir de un Field Catalog (fieldcat).

DATA:
FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE,
                    <fs_wa>    TYPE any.
DATA: dyn_table        TYPE REF TO data,
           dyn_line          TYPE REF TO data,
           ltb_field_cat  TYPE lvc_t_fcat.

*Lo primero es cargar el Field Catalog (la tabla interna ltb_field_cat) por ejemplo con la función ‘LVC_FIELDCATALOG_MERGE

*Y a continuación podemos modificar el Field Catalog como queramos. Por ejemplo quedarnos únicamente con los campos/columnas visibles:

SORT ltb_field_cat BY no_out.
DELETE ltb_field_cat WHERE no_out = abap_true.

SORT ltb_field_cat BY col_pos.

*Luego entonces creamos la tabla interna dinámica y se asigna al Field Symbol:

        CALL METHOD cl_alv_table_create=>create_dynamic_table
          EXPORTING
            it_fieldcatalog = ltb_field_cat
          IMPORTING
            ep_table        = dyn_table.
        ASSIGN dyn_table->* TO <fs_table>.

*Y también creamos su respectiva work area dinámica y se asigna al Field Symbol

 CREATE DATA dyn_line LIKE LINE OF <fs_table>.
 ASSIGN dyn_line->* TO <fs_wa>.

*Finalmente cargamos con datos la tabla dinámica que creamos en el paso anterior. Se puede hacer un select into a la tabla <fs_table>.
O bien con un código como el siguiente con datos de otra tabla interna previa:

  LOOP AT tb_report ASSIGNING FIELDSYMBOL(<lwa_report>).
          MOVE-CORRESPONDING <lwa_report> TO <fs_wa>.
          APPEND <fs_wa> TO <fs_table>.
  ENDLOOP.


Technorati tags:





Tabla de datos maestros de los usuarios

26 02 2013

Mediante la tabla USR01 podemos visualizar las parametrizaciones de datos maestros de los usuarios SAP.

Esta tabla nos será de utilidad por ejemplo cuando necesitemos saber cuál es el formato de fecha o cuál es separador decimal de un usuario SAP.

A esta tabla se ingresa simplemente colocando el nombre de usuario en el campo BNAME.

USR01


Technorati tags:





Transportar registros de una tabla sin diálogo de actualización

14 03 2012

Cuando una tabla no tiene diálogo de actualización no se pueden realizar los transportes de registros mediante la transacción SM30.

Ante estos casos, la manera de transportar entradas a otro ambiente es la siguiente: 

                1. Ir a la transacción SE10 y crear una orden nueva de tipo workbench:image image
                2. Una vez creada la orden damos doble click sobre la misma. Y en la solapa “Objetos” completamos la siguiente información:
                  image
                  NOTA: el campo Objeto lo completamos con la tabla que queremos transportar. En este ejemplo se transportarán registros de la tabla SFLIGHT.
                3. A continuación hacer click en la llave (image) y en la ventana que se abre hacer doble click en la primera línea en blanco:
                  image
                  Completando los distintos campos podremos elegir los registros que queremos transportar. Para este ejemplo transportaremos la tabla completa del mandante 100
                  image

                4. Ya creada la entrada sólo resta hacer click en el botón remarcado en rojo para verificar el contenido que vamos a transportar:
                  image
                  image
                  image 

Finalmente hay que volver atrás, guardar (image) y cuando aparece el mensaje de advertencia elegimos que SÍ.
Con esto tendremos lista la orden para poder transportar.


Technorati tags:





Crear Matchcodes (ayudas) con una tabla interna.

28 11 2007

El próximo ejemplo sirve para crear ayudas (matchcodes) con una tabla interna de nuestro programa.
Así de simple, hacemos una búsqueda a alguna tabla y el resultado lo guardamos en una tabla interna que se la pasamos a la función F4IF_INT_TABLE_VALUE_REQUEST que nos va a mostrar la ayuda.

Quiero agradecer esta forma de crear ayudas a mi compañero y amigo Rodrigo (http://ramgv-sap.blogspot.com).


*En este ejemplo creo un select-option para un material. Cuya ayuda será *el nº de material para VBELN =  ‘0000000001’ y POSNR = ‘000010’.

TABLES: VBAP,
             DDSHRETVAL.

DATA: BEGIN OF IT_MATNR OCCURS 0,
               MATNR LIKE VBAP-MATNR,
               ARKTX LIKE VBAP-ARKTX,
           END OF IT_MATNR.

DATA: BEGIN OF IT_MATCH OCCURS 0,  «Esta tabla nos devuelve la ayuda
               SHLPNAME  LIKE DDSHRETVAL-SHLPNAME,
               FIELDNAME LIKE DDSHRETVAL-FIELDNAME,
               RECORDPOS LIKE DDSHRETVAL-RECORDPOS,
               FIELDVAL  LIKE DDSHRETVAL-FIELDVAL,
               RETFIELD  LIKE DDSHRETVAL-RETFIELD,
           END OF IT_MATCH.

SELECTION-SCREEN BEGIN OF BLOCK BLQ1 WITH FRAME TITLE TEXT-T01.
  SELECT-OPTIONS: S_MATNR FOR VBAP-MATNR NO-EXTENSION NO INTERVALS.
SELECTION-SCREEN END OF BLOCK BLQ1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.
  SELECT MATNR
              ARKTX
      FROM VBAP
        INTO TABLE IT_MATNR
        WHERE VBELN EQ ‘0000000001’ AND
                    POSNR EQ ‘000010’.

  CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
    EXPORTING
      RETFIELD        = ‘MATNR’
      WINDOW_TITLE    = ‘Material’
      VALUE_ORG       = ‘S’
    TABLES
      VALUE_TAB       = IT_MATNR
      RETURN_TAB      = IT_MATCH
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.

  IF SY-SUBRC EQ 0.
    READ TABLE IT_MATCH INDEX 1.
    MOVE IT_MATCH-FIELDVAL TO S_MATNR-LOW.
  ENDIF.


Technorati tags:





Transportar registros de una tabla de un ambiente a otro

28 10 2007

Lo siguiente sirve para transportar los datos de una tabla de un ambiente a otro. Por ejemplo de desarrollo a calidad, o bien de calidad a producción.

Esto es muy simple, debemos ingresar a la transacción SM30 y elegir la tabla de la cual queremos pasar la información. Clickeamos en el botón Transporte y creamos una orden de customizing.

Ahora sólo nos resta seleccionar los registros que queremos transportar, apretar el botón Incluir en la orden y luego el botón GUARDAR.

Con esto ya tenemos nuestra orden creada para ser transportada (transacción SE10) a otro ambiente.


Technorati tags:





Editar registros de una tabla sin permisos

27 10 2007

diablo.jpg El usuario es responsable del mal uso de lo siguiente diablo.jpg

Lo que voy a explicar a continuación permite modificar cualquier registro de una tabla desde la transacción SE16 siempre y cuando los campos no sean claves. Con esto no es necesario pasar por alguna transacción ni tener permisos especiales para cambiar un campo del algún registro específico.


Pasos a seguir:
Ir a la transacción SE16 (Browser de datos), ingresar a la tabla que se quiera y buscar el registro que se quiere modificar.
Una vez que estamos visualizando el registro en cuestión, seleccionarlo… poner /h y hacer doble click sobre el registro.
Avanzar en el debugg hasta llegar al Form SET_STATUS_VAL. Encontrarán un IF para la variable CODE. Antes de entrar al ciclo IF, modificarle el valor a la variable CODE de SHOW a EDIT utilizando el ícono del lapiz.
Solo resta apretar F8 para terminar el debugg. Y en la siguiente pantalla vamos a poder editar los campos del registro. Por último apretar el botón guardar para conservar los cambios.


Technorati tags: