Skip to Content
0
Former Member
Dec 12, 2006 at 09:43 AM

"BDC for multiple line items of PO"

553 Views

I am using this code to move data for multiple line items of a PO. But only one is getting transferred. I am using BDC for this.

FORM transaction_bdc .

DATA :

v_cnt(2) TYPE n,

v_bst(2) TYPE n,

v_bn TYPE i,

v_bstpo(25),

v_ebtyp(25),

v_menge(25),

v_eeind(25),

v_xblnr(25),

v_xblnr1(25),

v_ebelp(2) TYPE n,

v_ebelpt(2),

v_menge1(11),

v_ebt TYPE i,

v_vebtyp LIKE ekes-ebtyp,

v_eb(2) TYPE n,

v_tcselflag(40),

v_tem(2) TYPE n,

v_correct TYPE i,

v_file TYPE string.

DATA: ls_outtab TYPE tb_struc.

DATA: l_valid TYPE c,

l_locked TYPE c.

CALL METHOD g_grid->check_changed_data

IMPORTING

e_valid = l_valid.

IF l_valid EQ 'X'.

LOOP AT tb_output WHERE check EQ 'X' .

MOVE-CORRESPONDING tb_output TO itab_output.

APPEND itab_output.

CLEAR itab_output.

ENDLOOP.

IF tb_output-check <> 'X'.

MESSAGE e003 WITH text-004.

ENDIF.

ENDIF.

IF itab_output[] IS NOT INITIAL.

PERFORM open_group.

***looping at purchase order level.

LOOP AT itab_output where ebelp is not initial .

CLEAR v_bn.

CLEAR v_ebt.

PERFORM bdc_dynpro USING 'SAPMM06E' '0105'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RM06E-BSTNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'RM06E-BSTNR'

itab_output-ebeln.

***Changing alphanumeric fields and quantity fields to character type**

*

*v_ebelp = tB_OUTPUT-ebelp.

*clear v_ebelpt.

*v_menge1 = tB_OUTPUT-menge.

*v_ebelpt = v_ebelp.

*

***End Of Changing**

*Checking for the exact number of the item**

LOOP AT tb_output where ebeln = itab_output-ebeln.

READ TABLE itab_output INDEX 1.

IF tb_output-ebelp = itab_output-ebelp.

exit.

ELSE.

v_bn = v_bn + 1.

ENDIF.

ENDLOOP.

v_bst = v_bn + 1.

*End Of Checking**

**Mapping items**

v_tem = 1.

CONCATENATE 'RM06E-BSTPO(' v_bst ')' INTO v_bstpo.

CONCATENATE 'RM06E-TCSELFLAG(' v_tem ')' INTO v_tcselflag.

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

v_bstpo.

PERFORM bdc_field USING 'BDC_OKCODE'

'=DETA'.

PERFORM bdc_field USING 'RM06E-EBELP'

v_ebelpt.

PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-BSTAE'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

v_bstpo.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BSTA'.

PERFORM bdc_field USING 'RM06E-EBELP'

v_ebelpt.

PERFORM bdc_field USING v_tcselflag

'X'.

**Checking weather Confirmation category already exists**

SELECT ebtyp FROM ekes INTO v_vebtyp WHERE ebelp =

itab_output-ebelp AND ebeln = itab_output-ebeln.

ENDSELECT.

IF sy-dbcnt > 0.

v_ebt = sy-dbcnt.

ENDIF.

v_eb = v_ebt + 1.

**End Of Checking**

**For Line items**

CONCATENATE 'EKES-EBTYP(' v_eb ')' INTO v_ebtyp.

CONCATENATE 'EKES-MENGE(' v_eb ')' INTO v_menge.

CONCATENATE 'RM06E-EEIND(' v_eb ')' INTO v_eeind.

CONCATENATE 'EKES-XBLNR(' v_eb ')' INTO v_xblnr.

**End**

PERFORM bdc_dynpro USING 'SAPLEINB' '0200'.

PERFORM bdc_field USING 'BDC_CURSOR'

v_xblnr.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BU'.

PERFORM bdc_field USING v_ebtyp

itab_output-ebtyp.

PERFORM bdc_field USING v_eeind

itab_output-eindt.

PERFORM bdc_field USING v_menge

v_menge1.

PERFORM bdc_field USING v_xblnr

itab_output-xblnr.

**End Of Mappings**

*loop at itab_output.

MOVE-CORRESPONDING itab_output TO ekes.

modify ekes.

  • MOVE-CORRESPONDING itab_output TO eket.

  • MODIFY eket.

  • MOVE-CORRESPONDING tb_output TO ekpo.

  • MODIFY ekpo.

  • ENDLOOP.

  • CALL TRANSACTION 'ME22N'

  • USING itbdc

  • MODE 'E'.

  • commit work.

perform bdc_transaction using 'ME22N'.

**End Of Purchase Order Loop**

PERFORM close_group.

endloop.

endif.