✒️ABAP El Batch Input utilizando el Juego de datos
ABAP El Batch Input utilizando el Juego de datos
Crear Batch Input utilizando Juego de Datos:
--------------------------------------------------------------------------------------------
1- Declaración de datos propios del Batch Input:
* Tabla del BI con la estructura 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 usuarios
DATA: BEGIN OF ti_archivo OCCURS 0,
dni(8) TYPE c, "Dni
nombre_ape(35) TYPE c, "Nombre y Apellido
estado_usu(1) TYPE c, "Estado del usuario
direccion(30) TYPE c, "Dirección
codigo_postal(4) TYPE c, "Código Postal
f_nacimiento(8) TYPE c, "Fecha Nacimiento
estado_civil(1) TYPE c, "Estado civil
END OF ti_archivo.
DATA: st_archivo LIKE LINE OF ti_archivo.
* Variables
DATA: v_campo(35) TYPE c,
v_indice(2) TYPE c,
v_qid TYPE apq_quid,
v_group TYPE apq_grpn.
--------------------------------------------------------------------------------------------
2- Lectura de datos de archivo de entrada:
Ejecutamos GUI_UPLOAD para levantar el archivo de entrada con la información para generar el Batch Input.
--------------------------------------------------------------------------------------------
3- Apertura de la sesión del Juego de Datos:
v_group = sy-repid.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = v_group
keep = 'X'
user = sy-uname
IMPORTING
qid = v_qid
EXCEPTIONS
client_invalid = 1
destination_invalid = 2
group_invalid = 3
group_is_locked = 4
holddate_invalid = 5
internal_error = 6
queue_error = 7
running = 8
system_lock_error = 9
user_invalid = 10
OTHERS = 11.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
--------------------------------------------------------------------------------------------
4- Carga de la tabla BDCDATA:
Se utiliza la subrutina BDC_FIELD.
Al ingresar mas de un registro, será necesario utilizar indices.
Ejemplo:
* Cargo datos del usuario
PERFORM bdc_field USING 'X' 'SAPLZTABLA_USUARIOS' '0001'.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-DNI(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-dni.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-NOMBRE_APE(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-nombre_ape.
--------------------------------------------------------------------------------------------
5- Inserción del Juego de Datos:
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = 'SM30'
TABLES
dynprotab = ti_bdc_data
EXCEPTIONS
internal_error = 1
not_open = 2
queue_error = 3
tcode_invalid = 4
printing_invalid = 5
posting_invalid = 6
OTHERS = 7.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
* Se ha lanzado el juego de datos, verificarlo en la trx SM35
MESSAGE s000(z_prueba) WITH text-010.
ENDIF.
--------------------------------------------------------------------------------------------
6- Cierre de la sesión del Juego de Datos:
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
--------------------------------------------------------------------------------------------
7- Ejecución del Juego de Datos:
------------------------------------------------------------------------------------
A través de SM35:
Dentro de SM35, seleccionamos el Juego de Datos y presionamos 'Ejecutar' o 'Process'.
Luego, en la nueva ventana, seleccionamos 'Invisible' o 'Background' y presionamos 'Ejecutar' o 'Process'.
------------------------------------------------------------------------------------
A través del modo 'Online':
Se basa en la creación de un JOB y la ejecución del programa estándar RSBDCBTC.
Ejemplo:
SUBMIT rsbdcbtc
USER sy-uname
VIA JOB v_jobgroup
NUMBER v_jobcount
WITH queue_id = v_qid
WITH mappe = v_jobgroup
WITH modus = 'N' "No display
WITH logall = ''
AND RETURN.
--------------------------------------------------------------------------------------------
Diferencias entre modo Online y modo Juego de Datos:
------------------------------------------------------------------------------------
Modo Online:
Se realiza de forma síncrona.
Se transfieren datos a una sola transacción en cada CALL TRANSACTION.
No se generan logs.
------------------------------------------------------------------------------------
Modo Juego de Datos:
Se realiza de forma asíncrona.
Se transfieren datos a múltiples transacciones.
Se generan logs en cada sesión.
 
 
 
Sobre el autor
Publicación académica de Martin Alejandro Goya, en su ámbito de estudios para la Carrera Consultor ABAP.
Martin Alejandro Goya
Profesión: Ingeniero en Computacion - Argentina - Legajo: CJ13E
✒️Autor de: 49 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Martin Goya