✒️ABAP El Batch Input utilizando el Juego de datos
ABAP El Batch Input utilizando el Juego de datos
El objetivo principal será la carga inicial de datos de la tabla ZTABLA_USUARIOS. Para eso se tiene que crear un archivo txt con la misma estructura que la tabla.
Siguiendo los pasos para el call Transaction seria :
1ro. Declaracion de datos propios del Batch Input:
*Tabla del BI con la estructura del 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 ,
nombre-ape(35) TYPE c,
estado_usu(1) TYPE c,
direccion(30) TYPE c,
codigo_postal(4) TYPE c,
f_nacimiento(8) TYPE c,
estado_civil(1) TYPE c,
DATA: 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_gid TYPE apq_guid,
v_group TYPE apq_grpn.
2 Do Paso. Lectura de datos de Entrada
Ejecutamos el Método Cl_GUI_FRONTEND_SERVICES=>GUI_UPLOAD para levantar al archivo txt de entrada con la información.
· 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.
3er Paso Apertura de la Sesion 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
holdate_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.
4to Paso Carga de la Tabla BDCDATA
· Cargo datos del usuario
PERFORM bdc_field USING ‘X’ ‘SAPLZTABLA_USUARIOS’ ‘0002’ .
CLEAR v-campo.
CONCATENATE ‘ZTABLA_USUARIO-DNI’ (‘v_indice’)’ INTO v_campo.
PERFORM bdc_field USING ‘ ‘ v_campo st_usuario-dni.
CLEAR v-campo.
CONCATENATE ‘ZTABLA_USUARIO-NOMBRE_APE’ (‘v_indice’)’ INTO v_campo.
PERFORM bdc_field USING ‘ ‘ v_campo st_usuario-nombre_ape.
CLEAR v-campo.
CONCATENATE ‘ZTABLA_USUARIO-ESTADO_USU’ (‘v_indice’)’ INTO v_campo.
PERFORM bdc_field USING ‘ ‘ v_campo st_usuario-estado_usu.
CLEAR v-campo.
CONCATENATE ‘ZTABLA_USUARIO-DIRECCION’ (‘v_indice’)’ INTO v_campo.
PERFORM bdc_field USING ‘ ‘ v_campo st_usuario-direccion.
CLEAR v-campo.
CONCATENATE ‘ZTABLA_USUARIO-CODIGO_POSTAL’ (‘v_indice’)’ INTO v_campo.
PERFORM bdc_field USING ‘ ‘ v_campo st_usuario-codigo_postal.
CLEAR v-campo.
CONCATENATE ‘ZTABLA_USUARIO-F_NACIMIENTO’ (‘v_indice’)’ INTO v_campo.
PERFORM bdc_field USING ‘ ‘ v_campo st_usuario-f_nacimiento.
CLEAR v-campo.
CONCATENATE ‘ZTABLA_USUARIO-ESTADO_CIVIL’ (‘v_indice’)’ INTO v_campo.
PERFORM bdc_field USING ‘ ‘ v_campo st_usuario-estado_civil.
5To Paso Inserción del Juego de Datos
CALL FUNCTION ‘BDC_INSERT’
EXPORTING
Tcode = ‘SM30’
IMPORTING
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.
ENDIF.
6To Paso Cierre de la Sesion de 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.
7mo Paso Ejecución del Juego de Datos
Se ingresa a la transacción SM35 y seleccionamos el juego de datos y lo ejecutamos con Boton Ejecutar. En la ventana siguiente marcamos Invisible y luego Ejecutar.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
Audio:
Las principales diferencias entre CALL TRANSACTION y JUEGO DE DATOS son: mediante CALL TRANSACTION el proceso es síncrono es decir ONLINE, Se transfieren datos solo a una transacción, No se generan LOGS y Juego de datos el proceso es Asíncrono es decir de FONDO, Se transfieren datos a múltiples transacciones, Si se generan LOGS por cada sesión.
Utilización del programa RSBDCBTC para la ejecución del Juego de Datos
Podemos ejecutar el Juego de datos ONLIne mediante el programa Estándar RSBDCBTC, para eso se crea un JOB , submitir la ejecución del pgm estándar y cerrar el Job
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 al SM35 veremos que se ejecutó sin la necesidad hacerlo manualmente
 
 
 
Sobre el autor
Publicación académica de Carlos Alberto Carreira, en su ámbito de estudios para la Carrera Consultor ABAP.
Carlos Alberto Carreira
Profesión: Consultor Técnico en Jde W.s. - Argentina - Legajo: KC15G
✒️Autor de: 92 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Inicial
🎓Egresado de los módulos:
Certificación Académica de Carlos Carreira