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

Breaking values into ranges

Former Member
0 Likes
1,261

Hi I presently I am using CFM1 transaction where I have to upload values into Material number field which are individual material numbers

But I run this with more than 6000 records this goes for a dump as it cannot takeup individual values more than 6K....

In this way I may sometimes have 60, 000 records... is there any way that I can make break these values into ranges...

example....

1000001

1000002

1000003

1000004

1100006

1100007

I want these individual values to be broken into ranges like

1000001-100004 and 1100006-1100007

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,161

here i m sending u one example.. i have used this kind of code when i have a problem like this....

this code is for upload data in T.Code : MB1C

REPORT YSH_MB1C_UPLOAD_LAST

NO STANDARD PAGE HEADING LINE-SIZE 255.

TABLES: MARA.

INCLUDE BDCRECX1.

DATA: BEGIN OF IT OCCURS 0,

BLDAT(8) TYPE C, "Document Date

BUDAT(8) TYPE C, "Posting Date

WERKS(4) TYPE C, "plant

MATNR(18) TYPE C, "material

ERFMG(13) TYPE C, "qty

ERFME(13) TYPE C, "unit

EXBWR(13) TYPE C, "value

CHARG(10) TYPE C, "batch

SGTXT(30) TYPE C, "Item Level text

LGORT(4) TYPE C, "storage locnt

END OF IT.

DATA: IT1 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT2 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT3 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT4 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT5 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT6 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT7 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT8 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT9 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT10 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT11 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA:FINAL LIKE IT OCCURS 0 WITH HEADER LINE.

DATA:FINAL1 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: N TYPE I,

I TYPE I.

*----


  • Parameter / Selection - screens

*----


PARAMETERS : P_FILE LIKE IBIPPARMS-PATH OBLIGATORY.

*----


  • At selection-screen.

*----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

CALL FUNCTION 'F4_FILENAME'

IMPORTING

FILE_NAME = P_FILE.

START-OF-SELECTION.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

FILENAME = P_FILE

FILETYPE = 'DAT'

TABLES

DATA_TAB = IT.

LOOP AT IT.

SELECT SINGLE * FROM MARA

WHERE MATNR = IT-MATNR.

*if mara-mtart = 'ZFER' or mara-mtart = 'ZHAW'.

*it-lgort = 'FGST'.

*elseif mara-mtart = 'ZROH' or mara-mtart = 'ZVER'.

*it-lgort = 'RMST'.

*elseif mara-mtart = 'ZHIB'.

*it-lgort = 'CONS'.

*elseif mara-mtart = 'ZERS'.

*it-lgort = 'SPAR'.

*elseif mara-mtart = 'ZHAL'.

*it-lgort = 'PRDN'.

*endif.

MODIFY IT TRANSPORTING LGORT.

ENDLOOP.

  • SEPRATE THE DATA FOR PLANT....

FINAL[] = IT[].

FINAL1[] = IT[].

SORT FINAL BY WERKS.

SORT FINAL1 BY WERKS.

DELETE ADJACENT DUPLICATES FROM FINAL COMPARING WERKS.

LOOP AT FINAL.

    • AS ONE DOCUMENT CAN TAKE ONLY 499 ITEMS AT A TIME , SPLIT THE FILE IN

*11 FILES OF 450 EACH

CLEAR:IT,IT1,IT2,IT3,IT4,IT5,IT6,IT7,IT8,IT9,IT10,IT11.

REFRESH:IT,IT1,IT2,IT3,IT4,IT5,IT6,IT7,IT8,IT9,IT10,IT11.

IT[] = FINAL1[].

DELETE IT WHERE WERKS <> FINAL-WERKS.

APPEND LINES OF IT FROM 1 TO 450 TO IT1.

APPEND LINES OF IT FROM 451 TO 900 TO IT2.

APPEND LINES OF IT FROM 901 TO 1350 TO IT3.

APPEND LINES OF IT FROM 1351 TO 1800 TO IT4.

APPEND LINES OF IT FROM 1801 TO 2250 TO IT5.

APPEND LINES OF IT FROM 2251 TO 2700 TO IT6.

APPEND LINES OF IT FROM 2701 TO 3150 TO IT7.

APPEND LINES OF IT FROM 3151 TO 3600 TO IT8.

APPEND LINES OF IT FROM 3601 TO 4050 TO IT9.

APPEND LINES OF IT FROM 4051 TO 4500 TO IT10.

APPEND LINES OF IT FROM 4501 TO 4950 TO IT11.

IF NOT IT1[] IS INITIAL.

PERFORM BDC TABLES IT1.

ENDIF.

IF NOT IT2[] IS INITIAL.

PERFORM BDC TABLES IT2.

ENDIF.

IF NOT IT3[] IS INITIAL.

PERFORM BDC TABLES IT3.

ENDIF.

IF NOT IT4[] IS INITIAL.

PERFORM BDC TABLES IT4.

ENDIF.

IF NOT IT5[] IS INITIAL.

PERFORM BDC TABLES IT5.

ENDIF.

IF NOT IT6[] IS INITIAL.

PERFORM BDC TABLES IT6.

ENDIF.

ENDLOOP.

FORM BDC TABLES IT STRUCTURE IT1.

CLEAR: I,N.

PERFORM OPEN_GROUP.

DESCRIBE TABLE IT LINES N.

READ TABLE IT INDEX 1.

PERFORM BDC_DYNPRO USING 'SAPMM07M' '0400'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'MKPF-BKTXT'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=NPE'.

*IF IT-WERKS = '1001' OR IT-WERKS = '1501'

  • OR IT-WERKS = '1502' OR IT-WERKS = '2001'

  • OR IT-WERKS = '2002'.

PERFORM BDC_FIELD USING 'MKPF-BLDAT'

IT-BLDAT.

PERFORM BDC_FIELD USING 'MKPF-BUDAT'

IT-BUDAT.

PERFORM BDC_FIELD USING 'MKPF-BKTXT'

'CLOSING STOCK-30TH APR 06'.

*ELSE.

*perform bdc_field using 'MKPF-BLDAT'

  • '31.03.2006'.

*perform bdc_field using 'MKPF-BUDAT'

  • '31.03.2006'.

*perform bdc_field using 'MKPF-BKTXT'

  • 'OPENING STOCK-1ST OCT 05'.

*

*ENDIF.

PERFORM BDC_FIELD USING 'RM07M-BWARTWA'

'561'.

PERFORM BDC_FIELD USING 'RM07M-WERKS'

IT-WERKS. "'1501'.

PERFORM BDC_FIELD USING 'RM07M-LGORT'

IT-LGORT.

PERFORM BDC_FIELD USING 'XFULL'

'X'.

PERFORM BDC_FIELD USING 'RM07M-WVERS2'

'X'.

LOOP AT IT.

I = I + 1.

PERFORM BDC_DYNPRO USING 'SAPMM07M' '0410'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'MSEG-EXBWR'.

IF N <> I.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=NPE'.

ELSE.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=BU'.

ENDIF.

PERFORM BDC_FIELD USING 'MSEG-MATNR'

IT-MATNR. "'rdnk031'.

PERFORM BDC_FIELD USING 'MSEG-ERFMG'

IT-ERFMG. "'10'.

PERFORM BDC_FIELD USING 'MSEG-ERFME'

IT-ERFME. "'kg'.

PERFORM BDC_FIELD USING 'MSEG-WERKS'

IT-WERKS. "'1501'.

PERFORM BDC_FIELD USING 'MSEG-LGORT'

IT-LGORT. "'RMST'.

PERFORM BDC_FIELD USING 'MSEG-EXBWR'

IT-EXBWR. "'12390'.

PERFORM BDC_FIELD USING 'DKACB-FMORE'

'X'.

*IF IT-WERKS = '1001' OR IT-WERKS = '1501'

  • OR IT-WERKS = '1502' OR IT-WERKS = '2001'

  • OR IT-WERKS = '2002'.

PERFORM BDC_FIELD USING 'MSEG-SGTXT'

IT-SGTXT.

*ELSE.

*perform bdc_field using 'MSEG-SGTXT'

  • 'OPENING STOCK-1ST OCT 05'.

*ENDIF.

PERFORM BDC_FIELD USING 'MSEG-CHARG'

IT-CHARG. "'rmst'.

PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTE'.

ENDLOOP.

PERFORM BDC_TRANSACTION USING 'MB1C'.

PERFORM CLOSE_GROUP.

ENDFORM.

regards,

shardul shah

6 REPLIES 6
Read only

Former Member
0 Likes
1,162

here i m sending u one example.. i have used this kind of code when i have a problem like this....

this code is for upload data in T.Code : MB1C

REPORT YSH_MB1C_UPLOAD_LAST

NO STANDARD PAGE HEADING LINE-SIZE 255.

TABLES: MARA.

INCLUDE BDCRECX1.

DATA: BEGIN OF IT OCCURS 0,

BLDAT(8) TYPE C, "Document Date

BUDAT(8) TYPE C, "Posting Date

WERKS(4) TYPE C, "plant

MATNR(18) TYPE C, "material

ERFMG(13) TYPE C, "qty

ERFME(13) TYPE C, "unit

EXBWR(13) TYPE C, "value

CHARG(10) TYPE C, "batch

SGTXT(30) TYPE C, "Item Level text

LGORT(4) TYPE C, "storage locnt

END OF IT.

DATA: IT1 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT2 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT3 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT4 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT5 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT6 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT7 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT8 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT9 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT10 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: IT11 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA:FINAL LIKE IT OCCURS 0 WITH HEADER LINE.

DATA:FINAL1 LIKE IT OCCURS 0 WITH HEADER LINE.

DATA: N TYPE I,

I TYPE I.

*----


  • Parameter / Selection - screens

*----


PARAMETERS : P_FILE LIKE IBIPPARMS-PATH OBLIGATORY.

*----


  • At selection-screen.

*----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

CALL FUNCTION 'F4_FILENAME'

IMPORTING

FILE_NAME = P_FILE.

START-OF-SELECTION.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

FILENAME = P_FILE

FILETYPE = 'DAT'

TABLES

DATA_TAB = IT.

LOOP AT IT.

SELECT SINGLE * FROM MARA

WHERE MATNR = IT-MATNR.

*if mara-mtart = 'ZFER' or mara-mtart = 'ZHAW'.

*it-lgort = 'FGST'.

*elseif mara-mtart = 'ZROH' or mara-mtart = 'ZVER'.

*it-lgort = 'RMST'.

*elseif mara-mtart = 'ZHIB'.

*it-lgort = 'CONS'.

*elseif mara-mtart = 'ZERS'.

*it-lgort = 'SPAR'.

*elseif mara-mtart = 'ZHAL'.

*it-lgort = 'PRDN'.

*endif.

MODIFY IT TRANSPORTING LGORT.

ENDLOOP.

  • SEPRATE THE DATA FOR PLANT....

FINAL[] = IT[].

FINAL1[] = IT[].

SORT FINAL BY WERKS.

SORT FINAL1 BY WERKS.

DELETE ADJACENT DUPLICATES FROM FINAL COMPARING WERKS.

LOOP AT FINAL.

    • AS ONE DOCUMENT CAN TAKE ONLY 499 ITEMS AT A TIME , SPLIT THE FILE IN

*11 FILES OF 450 EACH

CLEAR:IT,IT1,IT2,IT3,IT4,IT5,IT6,IT7,IT8,IT9,IT10,IT11.

REFRESH:IT,IT1,IT2,IT3,IT4,IT5,IT6,IT7,IT8,IT9,IT10,IT11.

IT[] = FINAL1[].

DELETE IT WHERE WERKS <> FINAL-WERKS.

APPEND LINES OF IT FROM 1 TO 450 TO IT1.

APPEND LINES OF IT FROM 451 TO 900 TO IT2.

APPEND LINES OF IT FROM 901 TO 1350 TO IT3.

APPEND LINES OF IT FROM 1351 TO 1800 TO IT4.

APPEND LINES OF IT FROM 1801 TO 2250 TO IT5.

APPEND LINES OF IT FROM 2251 TO 2700 TO IT6.

APPEND LINES OF IT FROM 2701 TO 3150 TO IT7.

APPEND LINES OF IT FROM 3151 TO 3600 TO IT8.

APPEND LINES OF IT FROM 3601 TO 4050 TO IT9.

APPEND LINES OF IT FROM 4051 TO 4500 TO IT10.

APPEND LINES OF IT FROM 4501 TO 4950 TO IT11.

IF NOT IT1[] IS INITIAL.

PERFORM BDC TABLES IT1.

ENDIF.

IF NOT IT2[] IS INITIAL.

PERFORM BDC TABLES IT2.

ENDIF.

IF NOT IT3[] IS INITIAL.

PERFORM BDC TABLES IT3.

ENDIF.

IF NOT IT4[] IS INITIAL.

PERFORM BDC TABLES IT4.

ENDIF.

IF NOT IT5[] IS INITIAL.

PERFORM BDC TABLES IT5.

ENDIF.

IF NOT IT6[] IS INITIAL.

PERFORM BDC TABLES IT6.

ENDIF.

ENDLOOP.

FORM BDC TABLES IT STRUCTURE IT1.

CLEAR: I,N.

PERFORM OPEN_GROUP.

DESCRIBE TABLE IT LINES N.

READ TABLE IT INDEX 1.

PERFORM BDC_DYNPRO USING 'SAPMM07M' '0400'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'MKPF-BKTXT'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=NPE'.

*IF IT-WERKS = '1001' OR IT-WERKS = '1501'

  • OR IT-WERKS = '1502' OR IT-WERKS = '2001'

  • OR IT-WERKS = '2002'.

PERFORM BDC_FIELD USING 'MKPF-BLDAT'

IT-BLDAT.

PERFORM BDC_FIELD USING 'MKPF-BUDAT'

IT-BUDAT.

PERFORM BDC_FIELD USING 'MKPF-BKTXT'

'CLOSING STOCK-30TH APR 06'.

*ELSE.

*perform bdc_field using 'MKPF-BLDAT'

  • '31.03.2006'.

*perform bdc_field using 'MKPF-BUDAT'

  • '31.03.2006'.

*perform bdc_field using 'MKPF-BKTXT'

  • 'OPENING STOCK-1ST OCT 05'.

*

*ENDIF.

PERFORM BDC_FIELD USING 'RM07M-BWARTWA'

'561'.

PERFORM BDC_FIELD USING 'RM07M-WERKS'

IT-WERKS. "'1501'.

PERFORM BDC_FIELD USING 'RM07M-LGORT'

IT-LGORT.

PERFORM BDC_FIELD USING 'XFULL'

'X'.

PERFORM BDC_FIELD USING 'RM07M-WVERS2'

'X'.

LOOP AT IT.

I = I + 1.

PERFORM BDC_DYNPRO USING 'SAPMM07M' '0410'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'MSEG-EXBWR'.

IF N <> I.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=NPE'.

ELSE.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=BU'.

ENDIF.

PERFORM BDC_FIELD USING 'MSEG-MATNR'

IT-MATNR. "'rdnk031'.

PERFORM BDC_FIELD USING 'MSEG-ERFMG'

IT-ERFMG. "'10'.

PERFORM BDC_FIELD USING 'MSEG-ERFME'

IT-ERFME. "'kg'.

PERFORM BDC_FIELD USING 'MSEG-WERKS'

IT-WERKS. "'1501'.

PERFORM BDC_FIELD USING 'MSEG-LGORT'

IT-LGORT. "'RMST'.

PERFORM BDC_FIELD USING 'MSEG-EXBWR'

IT-EXBWR. "'12390'.

PERFORM BDC_FIELD USING 'DKACB-FMORE'

'X'.

*IF IT-WERKS = '1001' OR IT-WERKS = '1501'

  • OR IT-WERKS = '1502' OR IT-WERKS = '2001'

  • OR IT-WERKS = '2002'.

PERFORM BDC_FIELD USING 'MSEG-SGTXT'

IT-SGTXT.

*ELSE.

*perform bdc_field using 'MSEG-SGTXT'

  • 'OPENING STOCK-1ST OCT 05'.

*ENDIF.

PERFORM BDC_FIELD USING 'MSEG-CHARG'

IT-CHARG. "'rmst'.

PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTE'.

ENDLOOP.

PERFORM BDC_TRANSACTION USING 'MB1C'.

PERFORM CLOSE_GROUP.

ENDFORM.

regards,

shardul shah

Read only

Former Member
0 Likes
1,161

hi

good

i think you can use the number ranges to solve this kind of problem

go through this which ll give you complete idea about the number ranges

call function 'NUMBER_RANGE_ENQUEUE'

exporting

object = 'ZOWNNO' "Create with SNUM

exceptions

foreign_lock = 1

object_not_found = 2

system_failure = 3

others = 4.

if sy-subrc ne 0.

  • message e086 with 'Lock error' sy-subrc.

endif.

call function 'NUMBER_GET_NEXT'

exporting

nr_range_nr = wnorange

object = 'ZOWNNO'

subobject = wsubobj

importing

number = wdocno "Number generated by SAP

exceptions

interval_not_found = 1

number_range_not_intern = 2

object_not_found = 3

quantity_is_0 = 4

quantity_is_not_1 = 5

internal_overflow = 6

others = 7.

if sy-subrc ne 0.

  • message e086 with 'Number Range' sy-subrc.

endif.

call function 'NUMBER_RANGE_DEQUEUE'

exporting

object = 'ZOWNNO'.

if sy-subrc <> 0.

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

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

endif.

http://www.sap-img.com/ge003.htm

thanks

mrutyun^

Read only

Former Member
0 Likes
1,161

doesnt work still

Read only

0 Likes
1,161

hi Grame,

I had the same question some time ago, pls. have a look:

hope this helps

ec

PS.: and don't mark the question as answered, when it is not answered yet

Read only

0 Likes
1,161

right what about when material numbers contain even characters in them... so that doesnt resolve it completely in my case...

anyways i used another approach to solve the problem

Read only

0 Likes
1,161

it works with letters as well, there is just an example with numbers only. I personally use that logic for cost centers and there are sometimes letters as well.