Función que obtiene el contenido/datos de un LAYOUT de ALV

17 12 2020

LT_DBDATA_READ_FROM_LTDX es una función que nos devuelve todo el contenido/datos que tiene un LAYOUT de un reporte ALV.

Para su ejecución hay que llenar la estructura IS_VARKEY con:
– Campo REPORT: completar nombre técnico del programa/reporte ALV.
– Campo VARIANT: completar con el nombre del LAYOUT.
– Campo Type: completar con F.

Tras la ejecución la función devuelve 4 tablas:

  • T_DBFIELDCAT: Devuelve toda la información del Field Catalog de ese Layout en particular. Por ejemplo qué columnas son visibles y cuáles ocultas, posición de las columnas, etc.
  • T_DBSORTINFO: Devuelve si para ese Layout en particular se aplicó algún tipo de SORT (ordenamiento) en el reporte.
  • T_DBFILTER: Devuelve si para ese Layout en particular se aplicó algún tipo de filtro en el reporte.
  • T_DBLAYOUT: Devuelve si el ALV tiene alguna configuración especial como ser la opción ZEBRA o Column Width Optimization, etc.


Technorati tags:





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:





Agregar íconos en pantalla de selección

21 06 2016

En nuestra pantalla de selección podemos agregar íconos al costado de cada parámetro:
Dibujo

 

Para esto simplemente hay que agregar una «combinación de caracteres» (código ID) al comienzo de los textos de selección:
Dibujo
Ruta: Goto –> Text Elements –> Selection texts

 

Cada ícono tiene su propia combinación de caracteres:
Dibujo

 

Y con este programa podemos conocer todos los íconos y su respectivo ID:
DATA :
gs_icon TYPE ICON,
gt_icon TYPE TABLE OF ICON.
SELECT * FROM icon INTO TABLE gt_icon.
LOOP AT gt_icon INTO gs_icon.
WRITE :/
gs_icon-name,
33 '@',
34 gs_icon-id+1(2),
36 '@',
40 gs_icon-id.
ENDLOOP.

 


Technorati tags:





Circuito de subcontratación

17 10 2008

Planteo del problema:
Nuestra empresa requiere poder enviar un material semielaborado o materia prima a un proveedor. Para que luego el proveedor devuelva el material terminado con una factura por el costo del servicio.

Solución mediante SAP:
En este ejemplo se utiliza el material 200011 que es una lista de material que tiene como componente el material 100043.
Por lo tanto, para este ejemplo nuestra empresa entregará a un tercero las unidades correspondientes de la materia prima (material 100043) para luego recibir el producto terminado (material 200011).


1º PASO: Ingresar a la transacción ME21N y crear un pedido de tipo NB (estándar), en este caso cree un el tipo ZSUB (Sol. Subcontratación) que es una copia del tipo NB. Y elegir el proveedor que realizará el trabajo:
image

En la parte de las posiciones colocar el material terminado que se recibirá del proveedor. Completar con los datos que se usan comúnmente (fecha de entrega, cantidad, precio, etc).
Y en la columna de tipo de posición colocar L (subcontratación).
image

Luego completar, como hacen comúnmente con cualquier pedido, los campos que consideren necesarios de la parte de Cabecera.
image
En la parte de Detalles de la posición se podrán ver los componentes del material. En este caso el material 100043.

Finalmente se debe grabar el pedido:
clip_image002

 

2º PASO: El segundo paso es hacer entrega del material al proveedor relacionado al pedido que creamos en el paso anterior. En este ejemplo el material que se entregará es el 100043.
Para esto hay que ir a la transacción MB1B
Y completar con Clase de movimiento 541, centro y tildar la opción Impr para que se imprima un remito.
Acto siguiente apretar el botón de Por pedido…
clip_image002[5]

Nos aparecerá una ventana donde debemos completar con el número del pedido creado en el primer paso. Y clickear en el botón Tomar + Detalle.
clip_image002[7]
Por último apretar el botón de grabar para que se contabilice el traspaso y se imprima el remito.

 

3º PASO: Finalmente, el tercer y último paso es, una vez que se recibe el material terminado del proveedor. Hay que darlo de alta y dar de baja el material entregado.

Ir a la transacción MIGO
Eligiendo: Entrada de mercancía, pedido, número de pedido, y el movimiento 101.
image

Luego tildar la opción de Posición OK, completar la fecha de contabilidad y Nota de entrega. Apretar el botón Verificar.
Si todo da bien, apretar en el botón guardar.
image

Con esto, el circuito de subcontratación queda terminado.


Technorati tags:







Cambiar la denominación de las clases de órdenes

23 04 2008

Este documento explica cómo cambiar la denominación de las clases de órdenes para una orden de trabajo (OT).

La modificación se debe realizar desde el mandante de desarrollo. Para luego transportar una orden hasta el mandante de producción.

Pasos a seguir:

1º) Ingresar al Customizing:

clip_image002 y clickear en botón clip_image004

 

2º) Seguir el camino:

Mantenimiento y servicio al cliente -> Gestión de mantenimiento y servicio -> Órdenes de mantenimiento y de servicios -> Funciones y parametrizaciones de clases de orden -> Parametrizar clases de órdenes

clip_image006

 

3º) Modificar los textos de las Clases de órdenes que deseamos y luego apretar el botón de guardar

clip_image008

Nos pedirá que grabemos los cambios en una orden de transporte

 

4º) El último paso es agregar las modificaciones en nuestra orden de transporte:

Hay que pasar al modo de visualización: clip_image010

Seleccionamos las filas que queremos transportar:

clip_image012

Y vamos al menú: Tratar -> Transporte -> Incluir en la orden

Finalmente, sólo nos resta pedir que pasen la orden de transporte hasta el ambiente de producción.


Technorati tags:





Bases de datos lógica – HR

19 04 2008

¿Qué es una base de datos lógica?

Una base de datos lógica (BDL) es un programa SAP especial abap/4 que lee y procesa información de tablas de una base de datos. Puede incluirse como atributo de un programa abap/4 de usuario, y se compila conjuntamente con él.
Desde la transacción SE36 podemos crear o administrar base de datos lógica.
Más información sobre BDL

 

¿Cómo utilizar base de datos lógica en nuestros programas?

Voy a mostrar como usamos BDL en nuestros reportes. Este es un ejemplo para un programa para el módulo de HR (Human Resources), ya que para ese módulo se utilizan mucho las bases de datos lógica.

Para agregar una BDL en un programa hay que ir a la transacción SE38 donde colocamos el nombre de nuestro reporte, nos posicionamos en la opción Atributos y clickeamos en Modificar.

image 

Tenemos que modificar las siguientes opciones:

Aplicación: elegimos el tipo de aplicación, en este caso por ser de HR elegí Gestión de personal.
Base de datos lógica: completamos con el nombre de una BDL, las mismas se pueden visualizar desde la SE36.
Vers.imagen selecc: Acá se elige el tipo de pantalla de selección que queremos para nuestro reporte.

 

Se pueden crear o modificar los filtros de selección:
Clickeando en el botón Clase report HR

image 
En este caso PY_DEF es un tipo de pantalla de selección, para ver las opciones de la misma o crear una nueva definición de filtros vamos a la opción Clase report.
Se abrirá una tabla donde vamos a poder crear nuevas entradas y elegir los filtros de selección que queramos que aparezcan en nuestra pantalla inicial.

 

Finalmente para traer los datos de la BDL; desde nuestro código fuente utilizamos la sentencia GET más el nombre de la tabla. Ej: GET PAYROLL. 

En este link podrán encontrar más detalles sobre el uso de base de datos lógica y HR.


Technorati tags:





Transacción SM04 – Lista de usuarios

18 04 2008

Con la transacción SM04 vamos a poder visualizar los usuarios conectados en el mandante.

Podemos ver entre otras cosas:

  • la terminal de donde esta conectado el usuario
  • la cantidad de modos que tiene abierto
  • el consumo de memoria

 

Desde esta transacción también podemos cerrar el modo/transacción/programa de un usuario. Para eso debemos seleccionar al usuario, clickear en el botón Modos. Esto nos abrirá un pop up donde nos posicionamos en la transacción y apretamos en Borrar modo.


Technorati tags:





Transacción SU01 – Actualización de usuarios

17 04 2008

Con la transacción SU01 podemos crear, copiar, eliminar o modificar la clave de cualquier usuario.

También se puede modificar un usuario:

  • los datos personales
  • los datos logon
  • los parámetros
  • los roles

 


Technorati tags:





Transacción SCC4 – Vista de Mandantes

16 04 2008

La transacción SCC4 nos lista los mandantes de un ambiente. Nos muestra el Nro de mandante, la denominación, población y moneda.


Technorati tags:





Transacción SM66 – Resumen general de procesos

15 04 2008

SM66 es la transacción que nos muestra todos los procesos que se están corriendo en el servidor.

Esta transacción nos detalla lo siguiente:

  • Nombre del servidor
  • Número y Tipo del proceso de trabajo
  • Identificación del proceso del sistema operativo
  • Status del proceso de trabajo
  • Motivo de espera
  • Tiempo de CPU consumido
  • Nombre del usuario cuya orden está siendo ejecutada
  • Report ejecutado actualmente
  • Actividad actual del proceso de trabajo
  • Tabla BD a la que accedió por última vez el proceso trabajo

Otra opción importante que tenemos es la de poder activar el modo debugging en cualquiera de los procesos que se estén ejecutando. Para esto sólo hay que elegir el proceso y clickear en el botón Debugging.


Technorati tags:





Transacción SU53 – Datos de autorización de usuarios

14 04 2008

Es usual que nos falte autorización para ejecutar alguna transacción, reporte o cualquier tipo de permiso.

Para saber cuál es el objeto de autorización que nos falta, lo que podemos hacer es correr la transacción SU53. Allí se mostrará el objeto de autorización que nos falta. Sabiendo cual es el objeto podemos avisarle a nuestro administrador (BASIS) para que lo agregue en nuestro perfil.

Cabe aclarar que esta transacción la debemos correr inmediatamente después de que sale el error de falta de autorización. 


Technorati tags:





Tabla TNAPR – tratamiento de mensajes

11 12 2007

La tabla transparente TNAPR contiene toda la información referida al tratamiento de clase de mensajes.

Se puede buscar u obtener información de:

  • Clase de mensaje
  • Medio de envío
  • Aplicación
  • Programa impresor
  • Rutina form
  • Formulario

Es muy útil cuando hay que modificar formularios, ya sean sapscripts o smartforms.


Technorati tags:





TRY-CATCH para ABAP

8 12 2007

El otro día viendo la documentación de SAP me encontré que existe la posibilidad de utilizar en ABAP el TRY-CATCH (muy usado en Java).
TRY-CATCH sirve para el manejo de errores y excepciones. Y nos puede ser muy útil para evitar los odiosos Short Dumps.


Dejo un ejemplo donde trato de insertar un registro en una tabla Z usando try-catch para evitar errores de SQL:

*Intento insertar un registro en la tabla ZPROYECTOS, si hay algún tipo de error de SQL (que generalmente arroja un dump)… manejo la excepción con un mensaje de advertencia.
                TRY.
                    INSERT INTO ZPROYECTOS VALUES WA_ZPROYEC.  
                  CATCH CX_SY_DYNAMIC_OSQL_ERROR.
                    MESSAGE ‘Error al actualizar la tabla ZPROYECTOS’ TYPE ‘I’.
                ENDTRY.


Technorati tags:





Campo password (******) en pantalla de selección

11 11 2007

Si deseamos mostrar un campo de entrada como password o contraseña. Es decir que aparezcan asteriscos (****).

Entonces debemos ingresar lo siguiente:

  SELECTION-SCREEN BEGIN OF BLOCK BLQ1 WITH FRAME TITLE TEXT-T01.
    PARAMETERS: P_PASSWD(8).
  SELECTION-SCREEN END OF BLOCK BLQ1.

  AT SELECTION-SCREEN OUTPUT.
    LOOP AT SCREEN.
      IF SCREEN-NAME EQ ‘P_PASSWD’.
        SCREEN-INVISIBLE = ‘1’.
       MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  END-OF-SELECTION.

El resultado es:

image


Technorati tags: