✒️ABAP El Batch Input utilizando Call transaction
ABAP El Batch Input utilizando Call transaction
Mi primer Batch Input utilizando CALL TRANSACTION
1er Paso -Declaracion de los datos propios del batch input.
La tabla interna y estructura BDCMSGCOLL serviran para almacenar los errores del CALL TRANSACTION
TYPE-POOLS: slis.
* 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 mensajes
DATA: BEGIN OF ti_messages OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF ti_messages.
* Estructura de mensajes
DATA: st_messages TYPE bdcmsgcoll.
* Tabla de usuarios
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.
* Estructura de errores
DATA: st_errores LIKE LINE OF ti_errores.
2do Paso -Lectura de datos de archivos de entrada
Ejecutamos CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD para levantar el archivo con los datos.
DATA: vl_file TYPE string.
IF p_path IS INITIAL.
MESSAGE s000(z_prueba) WITH text-003.
ELSE.
vl_file = p_path.
* 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.
IF sy-subrc NE 0.
MESSAGE e000(z_prueba) WITH text-004.
ENDIF.
IF ti_archivo[] IS INITIAL.
MESSAGE s000(z_prueba) WITH text-005.
ENDIF.
ENDIF.
3er Paso - Carga de la tabla BDCDATA
Cargamos la informacion con la subrutina BDC_FIELD
*&---------------------------------------------------------------------*
*& Form CARGO_TABLA_BDCDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cargo_tabla_bdcdata .
CLEAR: ti_bdc_data, ti_messages.
REFRESH: ti_bdc_data, ti_messages.
* Ingreso a la Primer pantalla y presiono boton de mantenimiento
PERFORM bdc_field USING 'X' 'SAPMSVMA' '0100'.
PERFORM bdc_field USING ' ' 'VIEWNAME' 'ZTABLA_USUARIOS'.
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '=UPD'.
* Presiono boton de nuevas entradas
PERFORM bdc_field USING 'X' 'SAPLZTABLA_USUARIOS' '0001'.
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '=NEWL'.
ADD 1 TO v_indice.
PERFORM completo_ceros_izq.
* 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.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-ESTADO_USU(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-estado_usu.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-DIRECCION(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-direccion.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-CODIGO_POSTAL(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-codigo_postal.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-FECHA_NAC(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-fecha_nac.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-ESTADO_CIVIL(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-estado_civil.
* Grabo los Registros
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '=SAVE'.
* Cierro la segunda pantalla
PERFORM bdc_field USING 'X' 'SAPLZTABLA_USUARIOS' '0001'.
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '=ENDE'.
* Cierro la primer pantalla
PERFORM bdc_field USING 'X' 'SAPMSVMA' '0100'.
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '/EENDE'.
ENDFORM. " CARGO_TABLA_BDCDATA
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
FORM bdc_field USING dyn_begin TYPE c
campo1
campo2.
CLEAR st_bdc_data.
IF dyn_begin = 'X'.
st_bdc_data-program = campo1.
st_bdc_data-dynpro = campo2.
st_bdc_data-dynbegin = dyn_begin.
ELSE.
st_bdc_data-fnam = campo1.
st_bdc_data-fval = campo2.
ENDIF.
APPEND st_bdc_data TO ti_bdc_data.
ENDFORM. " bdc_field
3er Paso - Ejecucion de la sentencia CALL TRANSACTION
* Call transaction
CALL TRANSACTION v_cod_trans USING ti_bdc_data MODE v_modo
MESSAGES INTO ti_messages.
IF NOT sy-subrc IS INITIAL.
v_error = 'X'.
ENDIF.
USING .- Especificamos la tabla BDCDATA
MODE .- El modo de procesamiento que utilizara el Batch Input
Modo Efecto
A Procesamiento con la visualizacion de todas las pantallas.Es el valor por Default.
E Procesamiento donde se muestran las pantallas solo si ocurre un error.
Si se alcanza un breakPoint, se termina el proocesamiento con SY-SUBRC igual a 1001. El campo SY-MSGTY contendra "S", SY-MSGID contendra "00", SY-MSGNO contendra "344",SY-MSGV1 contendra "SAPMSSY3" y SY-MSGV2 contendra el "0131"
N Procesamiento donde no se muestran las pantallas.
P Procesamiento donde no se muestran las pantallas.
Si se alcanza un BreakPoint , se pasa el control al debugger.
Es importante utilizar MODO en una variable. ya que nos permitira cambiarlo en momento de ejecucion.
Inicialmente se ejecuta el Batch Input en Modo "A" , ya que si se produce un error SAP se quedara en la pantalla donde ocurrio, Luego de corregir podemos pasar a "N"
UPDATE .-Determina el modo de actualizacion de los cambios que producira el BatchInput.
UPDATE EFECTO
A Actualizacion Asincrona . La actualizacion se produce de igual forma a la que sucede si no utilizamos la sentencia COMMIT WORK AND WAIT. (Valor por defecto)
S Actualizacion Sincronica. La actualizacion se produce de igual forma a la que sucede si utilizamos la sentencia COMMIT WORK AND WAIT
L Actualizacion Local
MESSAGES INTO .- los mensajes generados durante el procesamiento son almacenados en una tabla interna de tipo BDCMSGCOLL. Para armar los mensajes , vamos a utilizar la funcion MESSAGE PREPARE
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-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Ejecutaremos en modo A, Primero ingresamos al SM30 con el nombre y tabla y presionamos el boton (Actualizar) Maintain
Luego entradas nuevas.
Se cargan todos los datos del registro y presionamos grabar.
Finalmente,salimos de la transaccion y repetiremos esta secuencia de datos por cuantos registros ingresemos a la tabla
**CALL TRANSACTION es muy utulizada en reportes,para acceder a una transaccion determinada , a partir de los datos presionados en pantalla con el agregado de la clausula AND SKIP FIRTS SCREEN
 
 
 
Sobre el autor
Publicación académica de Fabian Samir Geldres Del Carpio, en su ámbito de estudios para la Carrera Consultor ABAP.
Fabian Samir Geldres Del Carpio
Profesión: Computación E Informatica - Peru - Legajo: XT66M
✒️Autor de: 51 Publicaciones Académicas
🎓Cursando Actualmente: Consultor Funcional Módulo PP
🎓Egresado del módulo:
Certificación Académica de Fabian Geldres