Skip to Content
0
Former Member
Jul 16, 2008 at 06:18 PM

call transaction BDC

134 Views

Hi SAPians,

I have a text file with data of the document number and the PO number and checking whether the document number is an order or a quote the PO number should be updated accordingly in VA02 and VA22 transactions.

Here the data is been uploaded but no values are been passed and updated into the PO field. Below is my code. Could u please check and let me know whether that works or not and if possible please do let me know where i need to correct the code.

Thanks and regards,

TABLES: vbak,

vbap,

vbkd.

DATA: BEGIN OF t_vbak OCCURS 0,

vbeln LIKE vbak-vbeln,

vbtyp LIKE vbak-vbtyp,

END OF t_vbak.

DATA: BEGIN OF str_itab OCCURS 0,

str(255),

END OF str_itab.

DATA: BEGIN OF t_input OCCURS 0,

vbeln LIKE vbak-vbeln,

bstkd LIKE vbkd-bstkd,

END OF t_input.

DATA: bdcdata TYPE TABLE OF bdcdata. "BDC Data Table

DATA: wa_bdcdata TYPE bdcdata. "BDC Data Work Area

DATA: itab TYPE TABLE OF bdcmsgcoll. "BDC Message Collection table

DATA: wa_itab TYPE bdcmsgcoll. "BDC Message Collect work area

DATA: messagetext(256) TYPE c. "Message text variable

DATA: msgno LIKE sy-msgno. "Message number variable

DATA: date(10) TYPE c. "Text form or MAD Date

DATA: zbeln(10) TYPE n.

DATA: zbtyp TYPE c.

DATA: tcode LIKE sy-tcode VALUE 'VA22', "Transaction Code

tcode1 LIKE sy-tcode VALUE 'VA02', "Transaction Code

g_mode(1) TYPE c VALUE 'N'.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-010.

PARAMETERS: p_file LIKE rlgrap-filename. "File Name

SELECTION-SCREEN END OF BLOCK blk1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  • Get filename

CALL FUNCTION '/SAPDMC/LSM_F4_FRONTEND_FILE'

EXPORTING

pathname = p_file

CHANGING

pathfile = p_file

EXCEPTIONS

canceled_by_user = 1

system_error = 2

OTHERS = 3.

START-OF-SELECTION.

  • Check input parameters

IF p_file IS INITIAL.

MESSAGE i020.

LEAVE LIST-PROCESSING.

ENDIF.

  • Get input file

CALL FUNCTION 'UPLOAD'

EXPORTING

filename = p_file

filetype = 'DAT'

silent = 'S'

TABLES

data_tab = str_itab

EXCEPTIONS

conversion_error = 1

invalid_table_width = 2

invalid_type = 3

no_batch = 4

unknown_error = 5

gui_refuse_filetransfer = 6

OTHERS = 7.

IF sy-subrc <> 0.

MESSAGE i021.

LEAVE LIST-PROCESSING.

ELSE.

  • Delete Column Headers

CLEAR t_input.

DELETE t_input INDEX 1.

ENDIF.

LOOP AT str_itab.

SPLIT str_itab-str AT ' ' INTO

t_input-vbeln t_input-bstkd.

APPEND t_input.

ENDLOOP.

  • Process input file

LOOP AT t_input.

  • Process main

PERFORM sub_process_main.

ENDLOOP.

FORM sub_process_main .

SELECT SINGLE vbtyp FROM vbak

INTO zbtyp

WHERE vbeln = t_input-vbeln.

  • Call proper transaction

IF zbtyp = 'B'.

tcode = 'VA22'.

PERFORM va22.

ELSEIF zbtyp = 'C'.

tcode = 'VA02'.

PERFORM va02.

ENDIF.

ENDFORM.

FORM bdc_field USING value(p_program)

value(p_dynpro)

value(p_dynbegin)

value(p_fnam)

value(p_fval).

  • Populate BDC table

CLEAR wa_bdcdata.

wa_bdcdata-program = p_program.

wa_bdcdata-dynpro = p_dynpro.

wa_bdcdata-dynbegin = p_dynbegin.

wa_bdcdata-fnam = p_fnam.

wa_bdcdata-fval = p_fval.

APPEND wa_bdcdata TO bdcdata.

ENDFORM.

FORM va22 .

  • Create BDC table

CLEAR bdcdata.

REFRESH bdcdata.

  • Loop at item table

  • LOOP AT t_vbak.

    • Change PO number

    PERFORM bdc_field USING:

    'SAPMV45A' '4001' 'X' space space,

    space space space 'VBKD-BSTKD(01)' t_input-bstkd,

    space space space 'BDC_OKCODE' 'ITEMS'.

    • ENDLOOP.

    • Save changes

    PERFORM bdc_field USING

    • 'SAPVB45A' '4001' 'X' space space,

    space space space 'BDC_OKCODE' '=SICH'.

    • Call VA22

    CALL TRANSACTION tcode USING bdcdata MODE g_mode

    MESSAGES INTO itab.

    LOOP AT t_input.

    IF sy-subrc = 0.

    WRITE: / 'PO Numbers', t_input-vbeln, 'have been changed!'.

    ELSE.

    WRITE: / 'Quotation number', t_input-vbeln, 'has NOT been changed!'.

    LOOP AT itab INTO wa_itab.

    CLEAR msgno.

    msgno = wa_itab-msgnr.

    CALL FUNCTION '/SAPTRX/GET_MESSAGE_TEXT'

    EXPORTING

    msgid = wa_itab-msgid

    msgno = msgno

    msgv1 = 'X'

    msgv2 = 'X'

    msgv3 = 'X'

    msgv4 = 'X'

    IMPORTING

    messagetext = messagetext

    EXCEPTIONS

    no_message_retrieved = 1

    OTHERS = 2.

    WRITE / messagetext.

    ENDLOOP.

    ENDIF.

    ENDLOOP.

    ENDFORM.

    FORM va02 .

    • Create BDC table

    CLEAR bdcdata.

    REFRESH bdcdata.

    • Loop at item table

  • LOOP AT t_vbak.

    • Change PO number

    PERFORM bdc_field USING:

    'SAPMV45A' '4001' 'X' space space,

    space space space 'VBKD-BSTKD(01)' t_input-bstkd,

    space space space 'BDC_OKCODE' 'ITEMS'.

    • ENDLOOP.

    • Save changes

    PERFORM bdc_field USING

    • 'SAPVB45A' '4001' 'X' space space,

    space space space 'BDC_OKCODE' '=SICH'.

    • Call VA22

    CALL TRANSACTION tcode1 USING bdcdata MODE g_mode

    MESSAGES INTO itab.

    LOOP AT t_input.

    IF sy-subrc = 0.

    WRITE: / 'PO Numbers for:', t_input-vbeln, ' Order number have been changed!'.

    ELSE.

    WRITE: / 'PO Numbers for:', t_input-vbeln, 'Quotation number has NOT been changed!'.

    LOOP AT itab INTO wa_itab.

    CLEAR msgno.

    msgno = wa_itab-msgnr.

    CALL FUNCTION '/SAPTRX/GET_MESSAGE_TEXT'

    EXPORTING

    msgid = wa_itab-msgid

    msgno = msgno

    msgv1 = 'X'

    msgv2 = 'X'

    msgv3 = 'X'

    msgv4 = 'X'

    IMPORTING

    messagetext = messagetext

    EXCEPTIONS

    no_message_retrieved = 1

    OTHERS = 2.

    WRITE / messagetext.

    ENDLOOP.

    ENDIF.

    ENDLOOP.

    ENDFORM.