✒️ABAP El Batch Input utilizando el Juego de datos
ABAP El Batch Input utilizando el Juego de datos
Mi primer Batch Input utilizando juego de datos
Vamos a crear nuestro primer Batch Input utilizando la técnica de Juego de datos.
El objetivo del Batch Input será la carga inicial de datos de la tabla ZTABLA_USUARIOS.
Para ello, vamos a crear un archivo de texto con registros que cumplan con la estructura de la tabla ZTABLA_USUARIOS,
sin tener en cuenta el campo mandante.
Creamos un archivo de entrada sin el campo mandante
* Archivo para correcto funcionamiento
*00121567432Joaquin Perez ALarreo Alvarez 3454 134512081967S
*00131987623Barbara Pereira ALavalleja 543 145623091987S
*00127982134Eugenia Herrera AGuido 56 167507041979S
Como lo que vamos a hacer será la carga inicial de la tabla de usuarios, borraremos su contenido previamente a la ejecución de este ejemplo.
Ahora seguiremos los pasos que establecimos en la primer lección de la unidad.
Paso 1ero. : La declaración de los datos propios del Batch Input
Declaramos una tabla interna y una estructura, ambas del tipo BDCDATA y otra tabla interna de usuarios que contendrá los registros que levantemos del archivo de entrada.
* 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,
mandt TYPE mandt,
dni TYPE zcvs_dni,
nombre_ape TYPE zcvs_nombre_ape,
estado_usu TYPE zcvs_estado_usu,
direccion TYPE zcvs_direccion,
codigo_postal TYPE zcvs_codigo_postal,
fecha_nac TYPE zcvs_fecha_nac,
estado_civil TYPE zcvs_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.
Paso 2do. : La lectura de datos de archivo de entrada
Ejecutamos el método GUI_UPLOAD para levantar el archivo de entrada con la información para generar el batch input.
* Se abre el archivo de entrada para lectura
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = vl_file
filetype = 'ASC'
has_field_separator = ''
CHANGING
data_tab = ti_archivo[]
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
Paso 3ero. : La apertura de la sesión del juego de datos
Para realizar la apertura de la sesión del Juego de Datos, vamos a utilizar la función BDC_OPEN_GROUP,
especificando el mandante, el grupo y el usuario.
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.
Paso 4to. : La carga de la tabla BDCDATA
Para cargar la tabla BDCDATA utilizaremos la subrutina BDC_FIELD, que vimos en la lección dos.
Antes debemos inicializar la tabla interna del Batch Input.
Paso 5to. : La inserción del juego de datos
Para realizar la inserción del Juego de Datos vamos a utilizar la función BDC_INSERT, tal como vemos a continuación.
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(zcvs_mensajes) WITH text-010.
ENDIF.
Paso 6to. : El cierre de la sesión del juego de datos
Para cerrar el Juego de Datos vamos a utilizar la función BDC_CLOSE_GROUP, tal como vemos a continuación.
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.
Paso 7mo. : La ejecución del juego de datos
Para realizar la ejecución del Juego de Datos vamos a entrar a la transacción SM35.
Vamos a seleccionar el Juego de Datos y lo ejecutamos presionando el botón Ejecutar (Process).
En la siguiente ventana de díalogo marcamos la opción Invisible (Background) y presionamos Ejecutar (Process).
Finalmente la sesión cambiará de status dependiendo del resultado de la ejecución y los datos se actualizarán en la tabla ZTABLA_USUARIOS.
Confío en que hayas interpretado y seguido cada uno de los pasos realizados.
De lo contrario ... no dudes en consultarme al realizar la práctica !!
La utilización del programa RSBDCBTC para la ejecución del juego de datos
Podemos ejecutar el Juego de Datos en forma Online mediante la ejecución del programa estándar RSBDCBTC.
Para ello, vamos a tener que crear un job, submitir la ejecución del programa RSBDCBTC y cerrar el job, tal como vemos a continuación.
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.
Luego, si vamos a la transacción SM35, vemos que el juego de datos se procesó sin la necesidad de hacerlo manualmente.
 
 
 
Sobre el autor
Publicación académica de Alex Francisco Lemos Collazos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alex Francisco Lemos Collazos
Profesión: Ingeniero en Sistemas - Colombia - Legajo: QS36A
✒️Autor de: 174 Publicaciones Académicas
🎓Cursando Actualmente: Master S/4HANA Material Management
🎓Egresado de los módulos:
- Máster Material Management en SAP S/4HANA LOGISTIC
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP SD Nivel Inicial