PDA

Ver la Versión Completa : Batch input


Carlitros36
17/01/11, 17:43:27
Hola tengo este batch input:

report ZDAGO_VL02
no standard page heading line-size 255.

include bdcrecx1.

parameters: dataset(132) lower case.
*** DO NOT CHANGE - the generated data section - DO NOT CHANGE ***
*
* If it is nessesary to change the data section use the rules:
* 1.) Each definition of a field exists of two lines
* 2.) The first line shows exactly the comment
* '* data element: ' followed with the data element
* which describes the field.
* If you don't have a data element use the
* comment without a data element name
* 3.) The second line shows the fieldname of the
* structure, the fieldname must consist of
* a fieldname and optional the character '_' and
* three numbers and the field length in brackets
* 4.) Each field must be type C.
*
*** Generated data section with specific formatting - DO NOT CHANGE ***
data: begin of record,
* data element: VBELN_VL
VBELN_001(025),
* data element: BLDAT
BLDAT_002(010),
* data element: WADAK
WADAT_003(010),
* data element: WAUHR
WAUHR_004(008),
* data element: GSGEW
BTGEW_005(019),
* data element: GEWEI
GEWEI_006(003),
* data element: ANZPK
ANZPK_007(005),
* data element: BLDAT
BLDAT_008(010),
* data element: WADAK
WADAT_009(010),
* data element: WAUHR
WAUHR_010(008),
* data element: GSGEW
BTGEW_011(019),
* data element: GEWEI
GEWEI_012(003),
* data element: ANZPK
ANZPK_013(005),
end of record.

*** End generated data section ***

start-of-selection.

perform open_dataset using dataset.
perform open_group.

do.

read dataset dataset into record.
if sy-subrc <> 0. exit. endif.

perform bdc_dynpro using 'SAPMV50A' '4004'.
perform bdc_field using 'BDC_CURSOR'
'LIKP-VBELN'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'LIKP-VBELN'
record-VBELN_001.
perform bdc_dynpro using 'SAPMV50A' '1000'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'LIKP-BLDAT'
record-BLDAT_002.
perform bdc_field using 'BDC_CURSOR'
'LIKP-ANZPK'.
perform bdc_field using 'LIKP-WADAT'
record-WADAT_003.
perform bdc_field using 'LIKP-WAUHR'
record-WAUHR_004.
perform bdc_field using 'LIKP-BTGEW'
record-BTGEW_005.
perform bdc_field using 'LIKP-GEWEI'
record-GEWEI_006.
perform bdc_field using 'LIKP-ANZPK'
record-ANZPK_007.
perform bdc_dynpro using 'SAPMV50A' '1000'.
perform bdc_field using 'BDC_OKCODE'
'=SICH_T'.
perform bdc_field using 'LIKP-BLDAT'
record-BLDAT_008.
perform bdc_field using 'BDC_CURSOR'
'LIPS-MATNR(02)'.
perform bdc_field using 'LIKP-WADAT'
record-WADAT_009.
perform bdc_field using 'LIKP-WAUHR'
record-WAUHR_010.
perform bdc_field using 'LIKP-BTGEW'
record-BTGEW_011.
perform bdc_field using 'LIKP-GEWEI'
record-GEWEI_012.
perform bdc_field using 'LIKP-ANZPK'
record-ANZPK_013.
perform bdc_transaction using 'VL02N'.

enddo.

perform close_group.
perform close_dataset using dataset.

Debo hacer un programa que mediante 2 parametros:
p_guia like likp-vbeln.
p_bultos like likp-anzpk.

modifique esos valores usando esa transaccion antrior de batch input, que hice cree un nuevo programa agregue esos parámetros y copie ese mismo programa, no se si ma falta algo mas porque no me ejecuta bien, alguien me podria ayudar por favor?...

diegogui
19/01/11, 12:52:11
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.