Declariones para que funcione el batch input
* Estructuratye_mensaje TYPE bdcmsgcoll.
* TABLAS INTERNASTYPES tyt_mensaje TYPE STANDARD TABLE OF tye_mensaje,
tyt_bdcdata TYPE STANDARD TABLE OF bdcdata,
* TABLAS INTERNASDATA: gt_mensaje TYPE tyt_mensaje, " se muestra mensajes de error
gt_bdcdata TYPE tyt_bdcdata, " Se graba las grabaciones
FORM f_batch_input (se pasan los valores necesarios).
DATA: lv_trans TYPE char4 VALUE 'FB03'.
* Diferentes pantallas
PERFORM f_fill_bdcdata USING:
'X' 'SAPMF05L' '0100',
' ' 'BDC_CURSOR' 'RF05L-GJAHR',
' ' 'BDC_OKCODE' '/00',
' ' 'RF05L-BELNR' pvi_documento,
' ' 'RF05L-BUKRS' pvi_sociedad,
' ' 'RF05L-GJAHR' ' '.
* Se ejecuta el proceso por cada documento
PERFORM f_call_transaction USING gt_bdcdata
lv_trans
CHANGING gt_mensaje.
CLEAR gt_bdcdata.
ENDFORM. "f_ba_contable
FORM f_fill_bdcdata USING pvi_dynbegin TYPE c
pvi_name TYPE c
pvi_value TYPE c.
DATA: le_bdcdata TYPE bdcdata.
* "X" Indica si es una pantalla
IF pvi_dynbegin = 'X'.
CLEAR le_bdcdata.
le_bdcdata-program = pvi_name.
le_bdcdata-dynpro = pvi_value .
le_bdcdata-dynbegin = pvi_dynbegin.
APPEND le_bdcdata TO gt_bdcdata.
ELSE.
CLEAR le_bdcdata.
le_bdcdata-fnam = pvi_name.
le_bdcdata-fval = pvi_value.
APPEND le_bdcdata TO gt_bdcdata.
ENDIF.
ENDFORM. "f_fill_bdcdata
FORM f_call_transaction USING pvi_tipo_tran TYPE char4
CHANGING pte_messages TYPE tyt_mensaje.
*A=Visualizar Todo
*E=Visualizar pantallas sólo si hay errores
*N=No visualizar pantallas
DATA: lv_mode TYPE c VALUE 'N',
lv_update TYPE c VALUE 'L'.
CALL TRANSACTION pvi_tipo_tran USING gt_bdcdata
MODE lv_mode
UPDATE lv_update
MESSAGES INTO pte_messages.
ENDFORM. "f_call_transaction
FORM f_show_messages USING pti_messages TYPE tyt_mensaje
CHANGING pte_error TYPE tyt_error .
DATA: lv_error TYPE c VALUE 'E', "Error
lv_correcto TYPE c VALUE 'S', "Correcto
lv_n_error TYPE char3 VALUE '126',"Número Error
lv_n_advertencia TYPE char3 VALUE '060'."Número advertencia
DATA: lv_msgid TYPE sy-msgid,
lv_msgno TYPE sy-msgno,
le_messages TYPE tye_mensaje,
le_final_message TYPE message.
DATA: le_error TYPE tye_error.
LOOP AT pti_messages INTO le_messages.
lv_msgid = le_messages-msgid.
lv_msgno = le_messages-msgnr.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = lv_msgid
msgno = lv_msgno
msgty = le_messages-msgtyp
msgv1 = le_messages-msgv1
msgv2 = le_messages-msgv2
msgv3 = le_messages-msgv3
msgv4 = le_messages-msgv4
IMPORTING
messg = le_final_message.
IF sy-Subrc = 0.
WRITE: / le_final_message
ENDIF.
ENDFORM. " f_show_messages
f_call_transaction ejecuta la transacción que estas necesitando y la tabla cargada con el batch input . la rutina f_fill_bdcdata se encarga de hacer un append de las secuencias del batch input, la rutina f_show_messages se encarga de guardar los mensajes de error o éxito
Pasos.
1 - f_fill_bdcdata
2 - f_call_transaction
3 - f_show_messages
Bueno espero que te sirva.
Saludos
Diego G.
|