Tema: Batch input
Ver Mensaje Individual
  #2  
Viejo 19/01/11, 12:52:11
diegogui diegogui is offline
Member
 
Fecha de Ingreso: dic 2010
Mensajes: 33
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.
Responder Con Cita