‎2007 May 31 12:13 PM
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
‎2007 May 31 12:20 PM
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
‎2007 May 31 12:20 PM
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
‎2007 May 31 12:24 PM
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^
‎2008 Aug 08 10:56 AM
‎2008 Aug 08 10:59 AM
‎2008 Aug 08 11:02 AM
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
‎2008 Aug 08 11:04 AM
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.