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

regarding function module in BDC

Former Member
0 Likes
837

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...

5 REPLIES 5
Read only

Former Member
0 Likes
803

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

Read only

Former Member
0 Likes
803

I am not getting you mr Ravi.can you be more clear?

Read only

Former Member
0 Likes
803

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...

Read only

Former Member
0 Likes
803

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

Read only

Former Member
0 Likes
803

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