Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

How to loop at internal table

Former Member
0 Likes
976

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 OCCURS 0,

PUR_REQ_NO(10) TYPE C ,

  • data element: BBSRT

BSART_001(004),

  • data element: LPEIN

LPEIN_002(001),

  • data element: MATNR

MATNR_01_003(018),

  • data element: BAMNG

MENGE_01_004(017),

  • data element: BAMEI

MEINS_01_005(003),

  • data element: EEIND

EEIND_01_006(010),

  • data element: EWERK

WERKS_01_007(004),

  • data element: TXZ01

TXZ01_008(040),

  • data element: LGORT_D

LGORT_009(004),

  • data element: BAMNG

MENGE_010(017),

  • data element: EEIND

EEIND_011(010),

  • data element: LPEIN

LPEIN_012(001),

  • data element: EKGRP

EKGRP_013(003),

  • data element: BADAT

BADAT_014(010),

  • data element: DISPO

DISPO_015(003),

  • data element: FRGDT

FRGDT_016(010),

  • data element: WEBAZ

WEBAZ_017(003),

  • data element: BAPRE

PREIS_018(014),

  • data element: WAERS

WAERS_019(005),

  • data element: EPEIN

PEINH_020(005),

  • data element: REPOS

REPOS_021(001),

  • data element: AUFEB

BNFPO_022(005),

END OF RECORD.

      • End generated data section ***

DATA COUNT TYPE I .

START-OF-SELECTION.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'C:/THARA.PRN'

  • FILETYPE = 'DAT'

  • HAS_FIELD_SEPARATOR = ' '

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = RECORD

  • EXCEPTIONS

  • FILE_OPEN_ERROR = 1

  • FILE_READ_ERROR = 2

  • NO_BATCH = 3

  • GUI_REFUSE_FILETRANSFER = 4

  • INVALID_TYPE = 5

  • NO_AUTHORITY = 6

  • UNKNOWN_ERROR = 7

  • BAD_DATA_FORMAT = 8

  • HEADER_NOT_ALLOWED = 9

  • SEPARATOR_NOT_ALLOWED = 10

  • HEADER_TOO_LONG = 11

  • UNKNOWN_DP_ERROR = 12

  • ACCESS_DENIED = 13

  • DP_OUT_OF_MEMORY = 14

  • DISK_FULL = 15

  • DP_TIMEOUT = 16

  • OTHERS = 17

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

*perform open_dataset using dataset.

SORT RECORD BY PUR_REQ_NO .

PERFORM OPEN_GROUP.

DATA PUR_REQ_NO LIKE RECORD-PUR_REQ_NO .

LOOP AT RECORD.

IF RECORD-PUR_REQ_NO NE PUR_REQ_NO .

COUNT = 0 .

LOOP AT RECORD WHERE PUR_REQ_NO = RECORD-PUR_REQ_NO .

COUNT = COUNT + 1 .

ENDLOOP .

*read dataset dataset into record.

IF SY-SUBRC <> 0. EXIT. ENDIF.

PERFORM BDC_DYNPRO USING 'SAPMM06B' '0100'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RM06B-LPEIN'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'EBAN-BSART'

RECORD-BSART_001.

PERFORM BDC_FIELD USING 'RM06B-LPEIN'

RECORD-LPEIN_002.

DO COUNT TIMES .

PERFORM BDC_DYNPRO USING 'SAPMM06B' '0106'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'EBAN-WERKS(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'EBAN-MATNR(01)'

RECORD-MATNR_01_003.

PERFORM BDC_FIELD USING 'EBAN-MENGE(01)'

RECORD-MENGE_01_004.

PERFORM BDC_FIELD USING 'EBAN-MEINS(01)'

RECORD-MEINS_01_005.

PERFORM BDC_FIELD USING 'RM06B-EEIND(01)'

RECORD-EEIND_01_006.

PERFORM BDC_FIELD USING 'EBAN-WERKS(01)'

RECORD-WERKS_01_007.

PERFORM BDC_DYNPRO USING 'SAPMM06B' '0102'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'EBAN-MENGE'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'EBAN-TXZ01'

RECORD-TXZ01_008.

PERFORM BDC_FIELD USING 'EBAN-LGORT'

RECORD-LGORT_009.

PERFORM BDC_FIELD USING 'EBAN-MENGE'

RECORD-MENGE_010.

PERFORM BDC_FIELD USING 'RM06B-EEIND'

RECORD-EEIND_011.

PERFORM BDC_FIELD USING 'RM06B-LPEIN'

RECORD-LPEIN_012.

PERFORM BDC_FIELD USING 'EBAN-EKGRP'

RECORD-EKGRP_013.

PERFORM BDC_FIELD USING 'EBAN-BADAT'

RECORD-BADAT_014.

PERFORM BDC_FIELD USING 'EBAN-DISPO'

RECORD-DISPO_015.

PERFORM BDC_FIELD USING 'EBAN-FRGDT'

RECORD-FRGDT_016.

PERFORM BDC_FIELD USING 'EBAN-WEBAZ'

RECORD-WEBAZ_017.

PERFORM BDC_FIELD USING 'EBAN-PREIS'

RECORD-PREIS_018.

PERFORM BDC_FIELD USING 'EBAN-WAERS'

RECORD-WAERS_019.

PERFORM BDC_FIELD USING 'EBAN-PEINH'

RECORD-PEINH_020.

PERFORM BDC_FIELD USING 'EBAN-REPOS'

RECORD-REPOS_021.

ENDDO .

PERFORM BDC_DYNPRO USING 'SAPMM06B' '0106'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RM06B-BNFPO'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=BACK'.

PERFORM BDC_FIELD USING 'RM06B-BNFPO'

RECORD-BNFPO_022.

PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0100'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=YES'.

PERFORM BDC_TRANSACTION USING 'ME51'.

CLEAR RECORD .

ENDIF .

ENDLOOP .

*ELSE .

*DATA COUNT(10) TYPE C VALUE '1' .

*COUNT = COUNT + 1 .

*

**ELSE .

**CONTINUE .

*

*

PERFORM CLOSE_GROUP.

*perform close_dataset using dataset.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
879

Hi pradeep,

See looping the internal table will loop as per the datas in the internal table...Here u want to use two loops for this particular BDC..

data : temp_num type i.

Loop at <internal table> into <wa>

Loop at <internal table> where num = <wa>-num

if temp_var ne <wa>-num.

put all details part coding here

endif.

endloop

temp_var = <wa>-num.

endloop

REWARD IF USEFUL

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 OCCURS 0,

PUR_REQ_NO(10) TYPE C ,

  • data element: BBSRT

BSART_001(004),

  • data element: LPEIN

LPEIN_002(001),

  • data element: MATNR

MATNR_01_003(018),

  • data element: BAMNG

MENGE_01_004(017),

  • data element: BAMEI

MEINS_01_005(003),

  • data element: EEIND

EEIND_01_006(010),

  • data element: EWERK

WERKS_01_007(004),

  • data element: TXZ01

TXZ01_008(040),

  • data element: LGORT_D

LGORT_009(004),

  • data element: BAMNG

MENGE_010(017),

  • data element: EEIND

EEIND_011(010),

  • data element: LPEIN

LPEIN_012(001),

  • data element: EKGRP

EKGRP_013(003),

  • data element: BADAT

BADAT_014(010),

  • data element: DISPO

DISPO_015(003),

  • data element: FRGDT

FRGDT_016(010),

  • data element: WEBAZ

WEBAZ_017(003),

  • data element: BAPRE

PREIS_018(014),

  • data element: WAERS

WAERS_019(005),

  • data element: EPEIN

PEINH_020(005),

  • data element: REPOS

REPOS_021(001),

  • data element: AUFEB

BNFPO_022(005),

END OF RECORD.

      • End generated data section ***

DATA COUNT TYPE I .

START-OF-SELECTION.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'C:/THARA.PRN'

  • FILETYPE = 'DAT'

  • HAS_FIELD_SEPARATOR = ' '

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = RECORD

  • EXCEPTIONS

  • FILE_OPEN_ERROR = 1

  • FILE_READ_ERROR = 2

  • NO_BATCH = 3

  • GUI_REFUSE_FILETRANSFER = 4

  • INVALID_TYPE = 5

  • NO_AUTHORITY = 6

  • UNKNOWN_ERROR = 7

  • BAD_DATA_FORMAT = 8

  • HEADER_NOT_ALLOWED = 9

  • SEPARATOR_NOT_ALLOWED = 10

  • HEADER_TOO_LONG = 11

  • UNKNOWN_DP_ERROR = 12

  • ACCESS_DENIED = 13

  • DP_OUT_OF_MEMORY = 14

  • DISK_FULL = 15

  • DP_TIMEOUT = 16

  • OTHERS = 17

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

*perform open_dataset using dataset.

SORT RECORD BY PUR_REQ_NO .

PERFORM OPEN_GROUP.

DATA PUR_REQ_NO LIKE RECORD-PUR_REQ_NO .

LOOP AT RECORD.

IF RECORD-PUR_REQ_NO NE PUR_REQ_NO .

COUNT = 0 .

LOOP AT RECORD WHERE PUR_REQ_NO = RECORD-PUR_REQ_NO .

COUNT = COUNT + 1 .

ENDLOOP .

*read dataset dataset into record.

IF SY-SUBRC <> 0. EXIT. ENDIF.

PERFORM BDC_DYNPRO USING 'SAPMM06B' '0100'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RM06B-LPEIN'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'EBAN-BSART'

RECORD-BSART_001.

PERFORM BDC_FIELD USING 'RM06B-LPEIN'

RECORD-LPEIN_002.

DO COUNT TIMES .

PERFORM BDC_DYNPRO USING 'SAPMM06B' '0106'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'EBAN-WERKS(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'EBAN-MATNR(01)'

RECORD-MATNR_01_003.

PERFORM BDC_FIELD USING 'EBAN-MENGE(01)'

RECORD-MENGE_01_004.

PERFORM BDC_FIELD USING 'EBAN-MEINS(01)'

RECORD-MEINS_01_005.

PERFORM BDC_FIELD USING 'RM06B-EEIND(01)'

RECORD-EEIND_01_006.

PERFORM BDC_FIELD USING 'EBAN-WERKS(01)'

RECORD-WERKS_01_007.

PERFORM BDC_DYNPRO USING 'SAPMM06B' '0102'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'EBAN-MENGE'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'EBAN-TXZ01'

RECORD-TXZ01_008.

PERFORM BDC_FIELD USING 'EBAN-LGORT'

RECORD-LGORT_009.

PERFORM BDC_FIELD USING 'EBAN-MENGE'

RECORD-MENGE_010.

PERFORM BDC_FIELD USING 'RM06B-EEIND'

RECORD-EEIND_011.

PERFORM BDC_FIELD USING 'RM06B-LPEIN'

RECORD-LPEIN_012.

PERFORM BDC_FIELD USING 'EBAN-EKGRP'

RECORD-EKGRP_013.

PERFORM BDC_FIELD USING 'EBAN-BADAT'

RECORD-BADAT_014.

PERFORM BDC_FIELD USING 'EBAN-DISPO'

RECORD-DISPO_015.

PERFORM BDC_FIELD USING 'EBAN-FRGDT'

RECORD-FRGDT_016.

PERFORM BDC_FIELD USING 'EBAN-WEBAZ'

RECORD-WEBAZ_017.

PERFORM BDC_FIELD USING 'EBAN-PREIS'

RECORD-PREIS_018.

PERFORM BDC_FIELD USING 'EBAN-WAERS'

RECORD-WAERS_019.

PERFORM BDC_FIELD USING 'EBAN-PEINH'

RECORD-PEINH_020.

PERFORM BDC_FIELD USING 'EBAN-REPOS'

RECORD-REPOS_021.

ENDDO .

PERFORM BDC_DYNPRO USING 'SAPMM06B' '0106'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RM06B-BNFPO'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=BACK'.

PERFORM BDC_FIELD USING 'RM06B-BNFPO'

RECORD-BNFPO_022.

PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0100'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=YES'.

PERFORM BDC_TRANSACTION USING 'ME51'.

CLEAR RECORD .

ENDIF .

ENDLOOP .

*ELSE .

*DATA COUNT(10) TYPE C VALUE '1' .

*COUNT = COUNT + 1 .

*

**ELSE .

**CONTINUE .

*

*

PERFORM CLOSE_GROUP.

*perform close_dataset using dataset.

4 REPLIES 4
Read only

Former Member
0 Likes
879

Use loop at itab this will help you in ur program

Read only

Former Member
0 Likes
879

Hi,

what's your question as I see you do loop at your internal tab with the loop at statement.

Regards

Jürgen

Read only

Former Member
0 Likes
879

HI.

loop at itab.

as your rquirement.....

endloop.

Dont put the PERFORM with in loop.it will crearte performance issue so please aviod perform with in loop.

rewards all helpfull answers.

regards.

Jay.

Read only

Former Member
0 Likes
880

Hi pradeep,

See looping the internal table will loop as per the datas in the internal table...Here u want to use two loops for this particular BDC..

data : temp_num type i.

Loop at <internal table> into <wa>

Loop at <internal table> where num = <wa>-num

if temp_var ne <wa>-num.

put all details part coding here

endif.

endloop

temp_var = <wa>-num.

endloop

REWARD IF USEFUL