✒️ABAP El Batch Input utilizando Call transaction
ABAP El Batch Input utilizando Call transaction
BATCH INPUT MEDIANTE CALL TRANSACTION
Primero: hay que crear una archivo de texto con la estructura de la tabla que queremos cargar sin el campo MANDT
Segundo: ya que hacemos una carga de datos desde cero, hacemos una limpieza de la tabla
Tercero: declaraciones de tablas y estructuras
1 tabla del tiopo BDCDATA
1 estructura del tipo BDCDATA
1 tabla del tipo BDCMSGCOLL (almacenan mensajes que se produzcan cuando ejecutemos el CALL transacción
1 estructura del tipo BDCMSGCOLL
La tabla interna que rellenaremos con los datos y su estructura
1 tabla para mostrar los errores
NOTA: La estructura BDCMSGCOLL es una estructura estándar del sistema, es utilizada para definir la tabla interna que almacenará los mensajes del batch input.
EJEMPLO:
* TABLA DEL BATCH INPUT CON LA ESCTRUCTURA DE BDCDATA
DATA: BEGIN OF ti_bdc_data OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF ti_bdc_data.
* ESTRUCTURA DEL BI
DATA: st_bdc_data TYPE bdcdata.
*TABLA DE MENSAJES
DATA: BEGIN OF ti_messages OCCURIS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF ti_messages.
*ESTRUCTURA DE MENSAJES
DATA: st_messages TYPE bdcmsgcoll.
* Taba que rellenamos
DATA: ti_archivo TYPE STANDARD TABLE OF ztabla_usuarios,
st_archivo LIKE LINE OF ti_archivo.
* Tabla de errores
DATA: BEGIN OF ti_errores OCCURS 0.
dni TYPE z_dni,
descripcion(100) TYPE c,
END OF ti_errores.
Cuarto: lectura de los datos de archivo de entrada, mediante el método GUI_UPLOAD
Quinto: Cargar la tabla BDCDATA.
Ya que se van a rellenar muchos datos, deberemos utilizar índices, pera ello tendremos que contatenar al nombre del campo el numero de fila que le corresponde en la pantalla entre paréntesis, como muestra el ejemplo:
PERFORM bdc_field USING ‘X’ ‘SAPLZTABLA_USUARIOS’ ‘0002’.
CLEAR v_campo.
CONCATENATE ‘ZTABLA_USUARIOS-DIN(‘ v-indice ’)’ INTO v_vampo.
PERFORM bdc_field USING ‘ ‘ vcampo st_archivo-dni.
Sexto: ejecución de la sentencia CALL TRANSACTION
Sintaxis:
CALL TRANSACTION v_cod_trans USING ti_bdc_data
MODE v_modo
UPDATE v_update
MESSAGES INTO ti_messages.
IF NOT sy_subrc EQ 0.
v_error = ‘X’.
ENDIF.
MODIFICADORES:
USING: aquí especificamos la tabla BDCDATA que se usará.
MODE: determina el modo de procesamiento que usará el BATCH INPUT
A: Procesamiento con la visualización de todas las pantallas, es el valor por defecto.
E: Procesamoiento donde solo se muestran las pantalla soso si ocurre un error. Si se alcanza un breakpoint, se termina el procesmiento con SY-SUBRC iaugal a 1001. El campo SY_MSGTY contendraá “S”. SY_MSGID contendrá “00”, SY_MSGNO contendrá “344”, SY_MSGV1 contendra “SAPMSSY3” y SY_MSGV2 contendrá el “0131”
N: Procesamiento donde no se muestran las pantalla.
P: Procesamiento donde se muestran las pantallas. Si se alcanza un breakpont, se pasa el control al debugger.
NOTA: Es conveniente utilizar una variable para asignar el modo de procesamiento, de esta forma podremos modificar su valor dinámicamente, durante la ejecución del mismo.
UPDATE: determina el modo de actualización de los cambios
A: Actulizacion Asincronoa, la actualización se produce de igual forma a la que sucede si utilizamos la sentencia COMMIT WORK. Este es el valor por defecto.
S: Actualizacion Sincrona. La actualización síncrona se produce de igual forma a la que sucede si utilizamos la senentcia COMMIT WORK AND WAIT.
L: Actualizacion Local
MESSAGES INTO: todos los mensajes generados durante el procesamiento del batch son almacenados en una tabla interna. Para construir los mensajes vamos a utilizar la función MESSAGE_PREPARE tal y como se muestra aquí:
v_msg_id = st_messages_msgid.
v_msg_no = st_messages_msgnr.
v_msg_v1 = st_messages_msgv1.
v_msg_v2 = st_messages_msgv2.
v_msg_v3 = st_messages_msgv3.
v_msg_v4 = st_messages_msgv4.
CALL FUNCTION ‘MESSAGE_PREPARE’
EXPORTING
msg_id = v_msg_id
msg_no = v_msg_no
msg_var1 = v_msg_v1
msg_var2 = v_msg_v2
msg_var3 = v_msg_v3
msg_var4 = v_msg_v4
IMPORTING
msg_text = v_mensaje
EXCEPTIONS
function_not_completed = 1
message_not_found = 2
OTHERS = 3.
IF sy_sburc <> 0.
MESSAGE ID sy-msdgind TYPE sy.msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
NOTA: La sentencia CALL TRANSACION es muy utilizada en reportes para acceder a una transacción determinada, a partir de los datos presionados en pantalla, con el agregado de la clausula AND SKIP FIRST SCREEN.
 
 
 
Agradecimiento:
Ha agradecido este aporte: Cristina Fraile Del Rio
Sobre el autor
Publicación académica de Josep Antoni Lopez Moyano, en su ámbito de estudios para la Carrera Consultor ABAP.
Josep Antoni Lopez Moyano
Profesión: It Manager - España - Legajo: QP26P
✒️Autor de: 375 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor en SAP HCM Nivel Inicial
- Carrera Consultor Basis NetWeaver Nivel Avanzado
- Carrera Consultor Basis NetWeaver Nivel Inicial
- Máster Funcional ABAP
- Máster ABAP Orientado a Objetos
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial