‎2007 Apr 30 5:07 PM
my querry is ..... after doing recording for MM01 t-code in SHDB i am clicking the 'FUNCTION MODULE ' tab in the aplication bar and creating the function module as ZBDC_MM01, under a function group.I want to use this FM instead of my data transfer program...... .
let me say step by step what i did.
1. I have created an internal table as the same structure of my flat file.
that is Matnr and maktx.
2. then i used a function module 'GUI_UPLOAD' to upload my flat file into my internal table.
3.then i am calling my own function module called ZBDC_MM01.There i changed the mode from 'N' to 'A', and i changed update from 'L' to 'S' ..
I dont know how to proceed then,it is taking me to dump..... where to put loop.? should i change the fields in funtion module which is present in my internal table ? please guide me.....
prakashvpm@gmail.com is my mail id...
‎2007 Apr 30 5:23 PM
1. I have created an internal table as the same structure of my flat file.
that is Matnr and maktx.
2. then i used a function module 'GUI_UPLOAD' to upload my flat file into my internal table.
loop at itab.
call function 'ZBDC_MM01'.
.
.
..
endloop.
Don't forget to pass al the mandatory fields.
Even if some field has no values, pass a space .
Or other wise, make that field as optional in the Functio module's interface.
Regards,
Ravi
‎2007 Apr 30 5:28 PM
‎2007 May 01 5:26 PM
Hi Prakash,
After using the FM GUI_UPLOAD and loading the flat file data into internal table loop that internaltable and call the function module by changing the field values given in the recording with the corresponding Itab values. For example if your table is ITAB. then try like this..
Loop at ITAB,
Call function 'ZBDC_MM01.'.
exporting matnr = itab-matnr
.....
....
endfunction.
End loop.
Regards,
Jayaram...
‎2007 May 01 8:06 PM
Hi
I think your step-3 is wrong. Why are you calling your function module in itself?
After uploading data into an into an internal table, just call the respective transaction MM01.
Hope I am clear.
Reward points if helpful
Regards
‎2007 May 02 5:52 AM
hi,
you have to pass all the mandatory fields for the transaction MM01. Mandatory fields are those if you don't provide the values for them system won't allow to proceed futher.
For knowing manditory fileds go to MM01->create one material there .
check below coding ,it will be useful for u.
&----
*& Report ZBDC_EXR1 *
&----
REPORT ZBDC_MM01 MESSAGE-ID ZZ .
TYPES : BEGIN OF itab,
MBRSH(1),
MTART(4),
KZSEL1(1),
KZSEL2(1),
MAKTX(40),
MEINS(3),
MATKL(9),
BRGEW(13),
GEWEI(3),
NTGEW(13),
NORMT(18),
END OF itab.
DATA: V_FILE TYPE STRING.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.
PARAMETERS: FNAM TYPE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK BL1.
V_FILE = FNAM.
*DATA: I_F TYPE itab OCCURS 0 WITH HEADER LINE.
DATA : I_F1 TYPE itab OCCURS 0 WITH HEADER LINE.
DATA : I_F2 TYPE itab OCCURS 0 WITH HEADER LINE.
BDC Data
DATA: I_BDC LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
BDC Messages
DATA: I_MSG LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME =
AT SELECTION-SCREEN ON VALUE-REQUEST FOR FNAM.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = 'ZBDC_EXR3_COMBINED'
DYNPRO_NUMBER = '1000'
FIELD_NAME = 'FNAM'
IMPORTING
FILE_NAME = FNAM.
START-OF-SELECTION.
Get Flat file Data
PERFORM GET_DATA.
PERFORM GENERATE.
PERFORM SESSION.
END-OF-SELECTION.
&----
*& Form GET_DATA
&----
FORM GET_DATA .
CLEAR I_F.
REFRESH I_F.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = V_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
HEADER_LENGTH = 0
READ_BY_LINE = 'X'
DAT_MODE = ' '
IMPORTING
FILELENGTH =
HEADER =
TABLES
DATA_TAB = I_F
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.
ENDIF.
ENDFORM. " GET_DATA
&----
*& Form GENERATE
&----
FORM GENERATE .
DATA MSG(255).
LOOP AT I_F.
PERFORM POPULATE USING: 'X' 'SAPLMGMM' '0060',
'' 'BDC_OKCODE' '/00',
'' 'RMMG1-MBRSH' I_F-MBRSH,
'' 'RMMG1-MTART' I_F-MTART,
'X' 'SAPLMGMM' '0070',
'' 'BDC_OKCODE' '=ENTR',
'' 'MSICHTAUSW-KZSEL(01)' 'X',
'' 'MSICHTAUSW-KZSEL(02)' 'X',
'X' 'SAPLMGMM' '4004',
'' 'BDC_OKCODE' '=SP02',
'' 'MAKT-MAKTX' I_F-MAKTX,
'' 'MARA-MEINS' I_F-MEINS,
'' 'MARA-MATKL' I_F-MATKL,
'' 'MARA-BRGEW' I_F-BRGEW,
'' 'MARA-GEWEI' I_F-GEWEI,
'' 'MARA-NTGEW' I_F-NTGEW,
'X' 'SAPLMGMM' '4004',
'' 'BDC_OKCODE' '=SP02',
'' 'MAKT-MAKTX' I_F-MAKTX,
'' 'MARA-MEINS' I_F-MEINS,
'' 'MARA-MATKL' I_F-MATKL,
'' 'MARA-BRGEW' I_F-BRGEW,
'' 'MARA-GEWEI' I_F-GEWEI,
'' 'MARA-NTGEW' I_F-NTGEW,
'X' 'SAPLMGMM' '4004',
'' 'BDC_OKCODE' '=BU',
'' 'MAKT-MAKTX' I_F-MAKTX.
'' 'MARA-NORMT' I_F-NORMT.
CALL TRANSACTION 'MM01' USING I_BDC MODE 'N' UPDATE 'S' MESSAGES INTO
I_MSG.
IF SY-SUBRC <> 0.
I_F1 = I_F.
APPEND I_F1.
CLEAR I_F1.
ELSE.
IF NOT I_MSG[] IS INITIAL.
LOOP AT I_MSG.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = I_MSG-MSGID
LANG = SY-LANGU
NO = I_MSG-MSGNR
V1 = I_MSG-MSGV1
V2 = I_MSG-MSGV2
V3 = I_MSG-MSGV3
V4 = I_MSG-MSGV4
IMPORTING
MSG = MSG
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE:/ MSG.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR: I_BDC[],I_MSG[].
ENDLOOP.
ENDFORM. " GENERATE
&----
*& Form POPULATE
&----
FORM POPULATE USING VALUE(P_A)
VALUE(P_B)
VALUE(P_C).
IF P_A = 'X'.
I_BDC-PROGRAM = P_B.
I_BDC-DYNPRO = P_C.
I_BDC-DYNBEGIN = 'X'.
ELSE.
I_BDC-FNAM = P_B.
I_BDC-FVAL = P_C.
ENDIF.
APPEND I_BDC.
CLEAR I_BDC.
ENDFORM. " POPULATE
&----
*& Form SESSION
&----
FORM SESSION .
DATA : LV_DATE LIKE SY-DATUM.
LV_DATE = SY-DATUM - 1.
IF NOT I_F1[] IS INITIAL.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
DEST = FILLER8
GROUP = 'SN01'
HOLDDATE = LV_DATE
KEEP = 'X'
USER = SY-UNAME
RECORD = FILLER1
PROG = SY-CPROG
IMPORTING
QID =
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11
.
IF SY-SUBRC = 0.
LOOP AT I_F1.
PERFORM POPULATE USING: 'X' 'SAPLMGMM' '0060',
'' 'BDC_OKCODE' '/00',
'' 'RMMG1-MBRSH' I_F-MBRSH,
'' 'RMMG1-MTART' I_F-MTART,
'X' 'SAPLMGMM' '0070',
'' 'BDC_OKCODE' '=ENTR',
'' 'MSICHTAUSW-KZSEL(01)' 'X',
'' 'MSICHTAUSW-KZSEL(02)' 'X',
'X' 'SAPLMGMM' '4004',
'' 'BDC_OKCODE' '=SP02',
'' 'MAKT-MAKTX' I_F-MAKTX,
'' 'MARA-MEINS' I_F-MEINS,
'' 'MARA-MATKL' I_F-MATKL,
'' 'MARA-BRGEW' I_F-BRGEW,
'' 'MARA-GEWEI' I_F-GEWEI,
'' 'MARA-NTGEW' I_F-NTGEW,
'X' 'SAPLMGMM' '4004',
'' 'BDC_OKCODE' '=SP02',
'' 'MAKT-MAKTX' I_F-MAKTX,
'' 'MARA-MEINS' I_F-MEINS,
'' 'MARA-MATKL' I_F-MATKL,
'' 'MARA-BRGEW' I_F-BRGEW,
'' 'MARA-GEWEI' I_F-GEWEI,
'' 'MARA-NTGEW' I_F-NTGEW,
'X' 'SAPLMGMM' '4004',
'' 'BDC_OKCODE' '=BU',
'' 'MAKT-MAKTX' I_F-MAKTX,
'' 'MARA-NORMT' I_F-NORMT.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'MM01'
POST_LOCAL = NOVBLOCAL
PRINTING = NOPRINT
SIMUBATCH = ' '
CTUPARAMS = ' '
TABLES
DYNPROTAB = I_BDC
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7.
CLEAR I_BDC[].
ENDLOOP.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
ENDIF.
ENDIF.
ENDFORM. " SESSION