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

call transaction method

Former Member
0 Likes
746

hello can anyone send me how to handle errors in bdc call transaction method

. if possible send me coding.

2. and also if errors found in call transaction method what is the sy-subrc value.

regards,

uttam.

4 REPLIES 4
Read only

Former Member
0 Likes
663

hi,

try this.

REPORT zbdc_call

NO STANDARD PAGE HEADING LINE-SIZE 255.

DATA: BEGIN OF record OCCURS 0,

  • data element: MATNR

matnr_001(018),

  • data element: BRGEW

brgew_008(017),

END OF record.

      • End generated data section ***

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.

PARAMETER:file LIKE rlgrap-filename.

SELECTION-SCREEN END OF BLOCK blk1.

DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR file.

CALL FUNCTION 'F4_FILENAME'

IMPORTING

file_name = file.

START-OF-SELECTION.

PERFORM data_upload.

PERFORM bdcdata.

CALL TRANSACTION 'MM02' USING BDCDATA MODE 'A' UPDATE 'A'.

&----


*& Form data_upload

&----


  • text

----


FORM data_upload.

DATA:loc_file TYPE string.

loc_file = file.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = loc_file

filetype = 'ASC'

has_field_separator = 'X'

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.

ENDFORM. "data_upload

&----


*& Form bdc_dynpro

&----


  • text

----


  • -->PROGRAM text

  • -->DYNPRO text

----


FORM bdc_dynpro USING program dynpro.

CLEAR bdcdata.

bdcdata-program = program.

bdcdata-dynpro = dynpro.

bdcdata-dynbegin = 'X'.

APPEND bdcdata.

ENDFORM. "bdc_dynpro

&----


*& Form bdc_field

&----


  • text

----


  • -->FNAM text

  • -->FVAL text

----


FORM bdc_field USING fnam fval.

CLEAR bdcdata.

bdcdata-fnam = fnam.

bdcdata-fval = fval.

APPEND bdcdata.

ENDFORM. "bdc_field

&----


*& Form bdcdata

&----


  • text

----


FORM bdcdata.

LOOP AT record.

PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RMMG1-MATNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=AUSW'.

PERFORM bdc_field USING 'RMMG1-MATNR'

record-matnr_001.

PERFORM bdc_dynpro USING 'SAPLMGMM' '0070'.

PERFORM bdc_field USING 'BDC_CURSOR'

'MSICHTAUSW-DYTXT(01)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ENTR'.

PERFORM bdc_dynpro USING 'SAPLMGMM' '4004'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BU'.

PERFORM bdc_field USING 'BDC_CURSOR'

'MARA-BRGEW'.

PERFORM bdc_field USING 'MARA-BRGEW'

record-brgew_008.

ENDLOOP.

ENDFORM. "bdcdata

reward if useful.

Read only

Former Member
0 Likes
663

u need to declare one table :

data : it type table of BDCMSGCOLL With header line.

now in call transaction...

call trandaction 'xxxx' mode 'x' update 'x' messages into IT.

now at

end-of-selection.

loop at it.

if it-msgtyp = 'e'.

write:/ 'message'.

endif.

endloop.

reward points if useful....

Read only

Sougata
Active Contributor
0 Likes
663

If call transaction fails, the value of sy-subrc will be 1001.

Sougata.

Read only

Former Member
0 Likes
663

Hi Uttam,

Chk the prg given below.

&----


&

  • THIS PROGRAM SERVES AS A REUSABLE TEMPLATE AND IS FREE FOR USE *

  • HOWEVER, USERS ARE REQUESTED TO PRESERVE THIS PART *

&----


&

  • Program Name : ZRP_BDC_MM01 *

  • Description : Material Master (MM01 BDC) *

  • Description : *

  • *

  • PROGRAM FLOW *

  • 1. Read input file *

  • 2. Check the mandatory fields and if any one of them is missing *

  • move the record to error file. *

  • 3. Fill the bdcdata and call MM01 transaction *

  • 4. If any errors format the message and send it for reporting *

  • 5. If any errors, it downloads the error file *

  • 6. Based on user input, this program does the following *

  • a) Call transaction and in case of errors add to a session *

  • b) Create session *

  • 7. Display the Audit report *

*&----


&----


&

  • INTERNAL TABLE & STRUCTURE DEFINITIONS

&----


&

*- Internal table for input file for ASCII data load

&----


&

  • The ASCII file is uploaded and the lines in it are read as strings *

  • Later on, they are converted by separating fields using offsets *

&----


&

DATA:

BEGIN OF I_INFILE_ASC OCCURS 0,

STRING(1300) TYPE C,

END OF I_INFILE_ASC.

DATA:

*- Internal table to store messages from Call Transaction

I_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE,

*- Internal table for BDC data

IT_BDCTAB TYPE BDCDATA OCCURS 0 WITH HEADER LINE,

*- Internal table to hold standard text (for long text)

I_TDLINES LIKE TLINE OCCURS 0 WITH HEADER LINE.

*- Internal to hold converted records from the text file for BDC data

*- upload (typical structure for MM01)

DATA :

BEGIN OF IT_DATA OCCURS 10,

MATNR(18), " Material Code

MBRSH(1), " Industry sector

MTART(4), " Material Type

WERKS(4), " Plant

LGORT(4), " Storage Location

MAKTX(40), " Material Description

MEINS(3), " Base unit of Measure

MATKL(9), " Material Group

BISMT(18), " Old Material Number

EKGRP(3), " Purchase grp

MFRPN(40), " Manufacturer part number

LGPBE(10), " Storage bin

DISMM(2), " MRP Type

DISPO(3), " MRP controller

MINBE(13), " Reorder Point

DISLS(2), " Lot size (materials planning)

MABST(17), " Maximum stock level

BESKZ(1), " Procurement type

PLIFZ(3), " Planned delivery time in days

FHORI(3), " Scheduling Margin Key for Floats

MTVFP(2), " Availability check

BKLAS(4), " Valuation Class

VPRSV(1), " Price Control

EKALR(1), " Mat. Is Costed with Qty Structure

HKMAT(1), " Material-related origin

LTEXT(1000), " Variable to hold Long Text

END OF IT_DATA.

*- Internal table to hold the long text

DATA:

BEGIN OF IT_LTEXT OCCURS 0,

MATNR(18),

LTEXT(982),

END OF IT_LTEXT.

*- Internal table to hold the error records

DATA:

BEGIN OF IT_ERROR OCCURS 0.

INCLUDE STRUCTURE IT_DATA.

DATA:

MESSAGE(80) TYPE C,

END OF IT_ERROR.

*- Internal table for session names

DATA:

BEGIN OF IT_SESSION OCCURS 0,

NAME(12),

END OF IT_SESSION.

*- Internal table to hold Collecting messages in the SAP System

DATA:

IT_MSG LIKE BDCMSGCOLL OCCURS 10 WITH HEADER LINE.

*- Internal table to hold error records to be downloaded

DATA:

BEGIN OF I_FINAL OCCURS 0,

STRING(1300),

END OF I_FINAL.

*- Internal table for session names

DATA:

BEGIN OF I_SESSION OCCURS 0,

NAME(12),

END OF I_SESSION.

DATA:

IT_INTERN TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.

*- Parameter string for runtime of CALL TRANSACTION USING..

DATA:

X_OPTIONS TYPE CTU_PARAMS.

&----


&

  • CONSTANTS

&----


&

CONSTANTS:

C_FILETYPE LIKE RLGRAP-FILETYPE VALUE 'DAT', " File type

C_TCODE LIKE TSTC-TCODE VALUE 'MM01', " Transaction

C_MODE(1) VALUE 'A', " Mode

C_UPDATE(1) VALUE 'S', " Update

C_SESS(12) TYPE C VALUE 'MAT_SESS'. " Session Name

&----


&

  • GLOBAL VARIABLES

&----


&

DATA:

GV_TABIX LIKE SY-TABIX, " Table Index

GV_MESG(80), " Message

GV_ERROR TYPE I, " Errors

GV_SUCCESS TYPE I, " Successes

GV_BDC_SESS TYPE APQI-GROUPID VALUE 'UPLOAD',

GV_MAX TYPE I VALUE '900', " Max records

GV_LINES TYPE I, " N.of records

GV_INSERT TYPE I,

GV_COUNTER(2) TYPE N, " Sessions

GF_OPENSESSION TYPE C,

GV_RECORDS TYPE I,

GV_EMPTY TYPE I, " Empty records

GV_TOTAL TYPE I, " Records with data

GV_SESSION TYPE APQI-GROUPID, " Session name

GV_DEL TYPE X VALUE '09', " Dat Delimiter

GV_SFILE(255), " File path

GV_EXT(3). " File Extension

&----


&

  • SELECTION SCREEN.

&----


&

SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-111.

PARAMETER:

P_FILE TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT 'C:\MM01.TXT',

P_ERR TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT 'C:\MM01_ERR.TXT',

P_FTYPE LIKE RLGRAP-FILETYPE DEFAULT 'DAT'.

SELECTION-SCREEN END OF BLOCK SCR1.

SELECTION-SCREEN BEGIN OF BLOCK MODE WITH FRAME TITLE TEXT-222.

PARAMETER:

P_CT RADIOBUTTON GROUP BDC, " Call Trans

P_BDC RADIOBUTTON GROUP BDC DEFAULT 'X'. " Create BDC sess

PARAMETER:

P_SESS1 TYPE APQI-GROUPID OBLIGATORY DEFAULT C_SESS.

" Session name

PARAMETER:

P_MAX(4) OBLIGATORY DEFAULT '100'. " Max. recs in a session

PARAMETERS:

P_HEADER TYPE I DEFAULT 0. " Header Lines

P_BEGCOL TYPE I DEFAULT 1 NO-DISPLAY,

P_BEGROW TYPE I DEFAULT 1 NO-DISPLAY,

P_ENDCOL TYPE I DEFAULT 100 NO-DISPLAY,

P_ENDROW TYPE I DEFAULT 32000 NO-DISPLAY,

P_TEST AS CHECKBOX DEFAULT 'X'. " Test mode

SELECTION-SCREEN END OF BLOCK MODE.

&----


&

  • AT SELECTION SCREEN.

&----


&

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

*- Input File help (for upload path)

PERFORM FILE_HELP USING P_FILE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ERR.

*- Error File help (for download path)

PERFORM FILE_HELP USING P_ERR.

&----


&

  • START-OF-SELECTION

&----


&

START-OF-SELECTION.

*- Perform to store the data to an internal table

PERFORM READ_INPUT_DATA.

*- Process data in non test mode only

IF P_TEST = SPACE.

IF NOT IT_DATA[] IS INITIAL.

PERFORM PROCESS_DATA.

ELSE.

MESSAGE S003(ZKRP_MSGCLS).

*- Setting flag to stop processing incase of data insufficiency

F_STOP = 'X'.

STOP.

ENDIF.

ENDIF.

----


  • END OF SELECTION.

----


END-OF-SELECTION.

IF F_STOP = SPACE.

*- Perform to display the selection screen report

PERFORM DISPLAY_SEL_SCR_REPORT.

*- Perform to display the no.of records,success and error records

PERFORM DISPLAY_SUMMARY_REPORT.

*- Perform to display the session report

PERFORM SESSION_REPORT.

*- Downloading error records.

PERFORM DOWNLOAD_ERROR_FILES.

*- Perform to display the error records

PERFORM DISPLAY_ERROR_RECORDS.

ENDIF.

----


  • Form : FILE_HELP

----


  • Description : To provide F4 help for file if read from PC

----


FORM FILE_HELP USING F_FILE TYPE RLGRAP-FILENAME.

*- The FM 'KD_GET_FILENAME_ON_F4' opens up a “browse for file” window

*- to select the input file

CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

CHANGING

FILE_NAME = F_FILE

EXCEPTIONS

MASK_TOO_LONG = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

MESSAGE S010(ZKRP_MSGCLS). " 'Error in getting filename'.

ENDIF.

ENDFORM. " FILE_HELP

&amp;amp;amp;amp;amp;amp;----


*& Form READ_INPUT_DATA

&----


  • text

----


FORM READ_INPUT_DATA.

*- Splitting the filename and its extension

PERFORM SPLIT_FILENAME_EXT.

CASE GV_EXT.

WHEN 'XLS'.

*- Perform to convert the Excel data into an internal table

PERFORM CONVERT_XLS_ITAB.

WHEN 'TXT'.

IF P_FTYPE = 'ASC'.

*- Uploading the data from server

PERFORM READ_INPUTFILE TABLES I_INFILE_ASC

USING P_FILE P_FTYPE.

*- Perform Formating ASC type data

PERFORM FORMAT_ASC_DATA.

ELSEIF P_FTYPE = 'DAT'.

*- Uploading the data from server

PERFORM READ_INPUTFILE TABLES IT_DATA

USING P_FILE P_FTYPE.

ENDIF.

WHEN OTHERS.

MESSAGE S000(ZKRP_MSGCLS).

F_STOP = 'X'.

STOP.

ENDCASE.

IF NOT IT_DATA[] IS INITIAL.

*- Perform to delete Header lines

PERFORM DELETE_HEADER_EMPTY_RECS.

ENDIF.

ENDFORM. " READ_INPUT_DATA

&----


*& Form SPLIT_FILENAME_EXT

&----


  • text

----


FORM SPLIT_FILENAME_EXT.

MOVE P_FILE TO GV_SFILE.

*- To get the extensions of the file

CALL FUNCTION 'CV120_SPLIT_FILE'

EXPORTING

PF_FILE = GV_SFILE

IMPORTING

PFX_EXTENSION = GV_EXT

.

*- Checking the case of file extension

IF GV_EXT NA SY-ABCDE.

TRANSLATE GV_EXT TO UPPER CASE.

ENDIF.

ENDFORM. " SPLIT_FILENAME_EXT

&----


*& Form CONVER_XLS_ITAB

&----


  • text

----


FORM CONVERT_XLS_ITAB.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'

EXPORTING

FILENAME = P_FILE

I_BEGIN_COL = P_BEGCOL

I_BEGIN_ROW = P_BEGROW

I_END_COL = P_ENDCOL

I_END_ROW = P_ENDROW

TABLES

INTERN = IT_INTERN

EXCEPTIONS

INCONSISTENT_PARAMETERS = 1

UPLOAD_OLE = 2

OTHERS = 3

.

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 to move the data into an internal data

PERFORM MOVE_DATA.

ENDFORM. " CONVERT_XLS_ITAB

&----


*& Form MOVE_DATA

&----


  • text

----


FORM MOVE_DATA.

DATA : LV_INDEX TYPE I.

FIELD-SYMBOLS .

*- Sorting the internal table

SORT IT_INTERN BY ROW COL.

CLEAR IT_INTERN.

LOOP AT IT_INTERN.

MOVE IT_INTERN-COL TO LV_INDEX.

*- Assigning the each record to an internal table row

ASSIGN COMPONENT LV_INDEX OF STRUCTURE IT_DATA TO .

*- Asigning the field value to a field symbol

MOVE IT_INTERN-VALUE TO .

AT END OF ROW.

APPEND IT_DATA.

CLEAR IT_DATA.

ENDAT.

ENDLOOP.

ENDFORM. " MOVE_DATA

----


  • Form : Read_inputfile

----


  • Description : To upload the data into internal table

----


FORM READ_INPUTFILE TABLES F_INFILE

USING F_FILE TYPE RLGRAP-FILENAME

F_FILTYP TYPE RLGRAP-FILETYPE.

DATA : LV_DEL TYPE CHAR01,

LV_FILE TYPE STRING.

CLEAR F_INFILE.

REFRESH F_INFILE.

LV_FILE = F_FILE.

*- Function module to upload the input file

IF F_FILTYP = 'DAT'.

LV_DEL = ''.

ENDIF.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = LV_FILE

FILETYPE = 'ASC'

HAS_FIELD_SEPARATOR = LV_DEL

TABLES

DATA_TAB = F_INFILE

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 I011(ZKRP_MSGCLS). " 'Error in uploading the file'.

F_STOP = 'X'.

STOP.

ENDIF.

ENDFORM. "Read_inputfile

&----


*& Form FORMAT_ASC_DATA

&----


  • To format the ASCII data

----


FORM FORMAT_ASC_DATA.

LOOP AT I_INFILE_ASC.

IT_DATA-MATNR = I_INFILE_ASC-STRING+0(18).

IT_DATA-MBRSH = I_INFILE_ASC-STRING+18(1).

IT_DATA-MTART = I_INFILE_ASC-STRING+19(4).

IT_DATA-WERKS = I_INFILE_ASC-STRING+23(4).

IT_DATA-LGORT = I_INFILE_ASC-STRING+27(4).

IT_DATA-MAKTX = I_INFILE_ASC-STRING+31(40).

IT_DATA-MEINS = I_INFILE_ASC-STRING+71(3).

IT_DATA-MATKL = I_INFILE_ASC-STRING+74(9).

IT_DATA-BISMT = I_INFILE_ASC-STRING+83(18).

IT_DATA-EKGRP = I_INFILE_ASC-STRING+101(3).

IT_DATA-MFRPN = I_INFILE_ASC-STRING+104(40).

IT_DATA-LGPBE = I_INFILE_ASC-STRING+144(10).

IT_DATA-DISMM = I_INFILE_ASC-STRING+154(2).

IT_DATA-DISPO = I_INFILE_ASC-STRING+156(3).

IT_DATA-MINBE = I_INFILE_ASC-STRING+159(13).

IT_DATA-DISLS = I_INFILE_ASC-STRING+172(2).

IT_DATA-MABST = I_INFILE_ASC-STRING+174(17).

IT_DATA-BESKZ = I_INFILE_ASC-STRING+191(1).

IT_DATA-PLIFZ = I_INFILE_ASC-STRING+192(3).

IT_DATA-FHORI = I_INFILE_ASC-STRING+195(3).

IT_DATA-MTVFP = I_INFILE_ASC-STRING+198(2).

IT_DATA-BKLAS = I_INFILE_ASC-STRING+200(4).

IT_DATA-VPRSV = I_INFILE_ASC-STRING+204(1).

IT_DATA-EKALR = I_INFILE_ASC-STRING+205(1).

IT_DATA-HKMAT = I_INFILE_ASC-STRING+206(1).

IT_DATA-LTEXT = I_INFILE_ASC-STRING+207(1000).

ENDLOOP.

ENDFORM. " FORMAT_ASC_DATA

----


  • Form FILE_VALIDATION

----


  • To validate data

----


FORM FILE_VALIDATION.

DATA: LGV_TABIX LIKE SY-TABIX,

LV_FLAG(1).

LOOP AT IT_DATA.

CLEAR GV_MESG.

*- check for the mandatory fields

IF IT_DATA-MAKTX IS INITIAL

OR IT_DATA-MEINS IS INITIAL

OR IT_DATA-MATKL IS INITIAL

OR IT_DATA-EKGRP IS INITIAL

OR IT_DATA-DISMM IS INITIAL

OR IT_DATA-VPRSV IS INITIAL .

LGV_TABIX = SY-TABIX.

GV_MESG = 'Mandatory fields missing'(002).

*- Perform to store the error record

PERFORM ERROR_PROCESSING. " USING IT_DATA GV_MESG.

*- Deleting the record which is initial

DELETE IT_DATA INDEX LV_TABIX.

ENDIF.

ENDLOOP.

CLEAR GV_MESG.

ENDFORM. " DATA_VALIDATION

&----


*& Form error_processing

&----


  • To process the error records

----


FORM ERROR_PROCESSING.

GV_ERROR = GV_ERROR + 1.

IT_ERROR = IT_DATA.

IT_ERROR-MESSAGE = GV_MESG.

APPEND IT_ERROR.

CLEAR IT_ERROR.

ENDFORM. " error_processing

----


  • Form : process_data

----


  • --- Populating the BDC Data

----


FORM PROCESS_DATA .

LOOP AT IT_DATA.

CLEAR :IT_BDCTAB,

I_BDCMSGCOLL.

REFRESH:IT_BDCTAB,

I_BDCMSGCOLL.

*- To fill the data from the text file

PERFORM FILL_BDCDATA.

IF P_CT EQ 'X'.

*- Posts data using call transaction method.

PERFORM CALL_TRANSACTION.

ELSE.

*- Posts data using session method.

PERFORM CALL_SESSION USING C_TCODE P_MAX P_SESS1.

ENDIF.

ENDLOOP.

IF GF_OPENSESSION = 'X'.

PERFORM CLOSE_SESSION.

ENDIF.

ENDFORM. " PROCESS_DATA

&amp;amp;amp;amp;amp;amp;----


*& Form FILL_BDCDATA

&----


  • To populate the data

----


FORM FILL_BDCDATA.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0060'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RMMG1-MATNR'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=AUSW'.

PERFORM BDC_FIELD USING 'RMMG1-MATNR' IT_DATA-MATNR.

PERFORM BDC_FIELD USING 'RMMG1-MBRSH' IT_DATA-MBRSH.

PERFORM BDC_FIELD USING 'RMMG1-MTART' IT_DATA-MTART.

*- MM01 view selection

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0070'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'MSICHTAUSW-DYTXT(15)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(01)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(02)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(03)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(05)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(06)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(07)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(08)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(09)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(10)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(11)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(12)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(13)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(14)' 'X'.

PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(15)' 'X'.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0080'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RMMG1-LGORT'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENTR'.

PERFORM BDC_FIELD USING 'RMMG1-WERKS' IT_DATA-WERKS.

PERFORM BDC_FIELD USING 'RMMG1-LGORT' IT_DATA-LGORT.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4004'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP02'.

PERFORM BDC_FIELD USING 'MAKT-MAKTX' IT_DATA-MAKTX.

PERFORM BDC_FIELD USING 'MARA-BISMT' IT_DATA-BISMT.

PERFORM BDC_FIELD USING 'MARA-MEINS' IT_DATA-MEINS.

PERFORM BDC_FIELD USING 'MARA-MATKL' IT_DATA-MATKL.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4004'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'MAKT-MAKTX'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP09'.

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP11'.

PERFORM BDC_FIELD USING 'MARC-EKGRP' IT_DATA-EKGRP.

PERFORM BDC_FIELD USING 'MARA-MFRPN' IT_DATA-MFRPN.

IF NOT IT_DATA-LTEXT IS INITIAL.

*- Perform to populate Long text

PERFORM POPULATE_LONG_TEXT.

ENDIF.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4040'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP12'.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP13'.

PERFORM BDC_FIELD USING 'MARC-DISMM' IT_DATA-DISMM.

PERFORM BDC_FIELD USING 'MARC-MINBE' IT_DATA-MINBE.

PERFORM BDC_FIELD USING 'MARC-DISPO' IT_DATA-DISPO.

PERFORM BDC_FIELD USING 'MARC-DISLS' IT_DATA-DISLS.

PERFORM BDC_FIELD USING 'MARC-MABST' IT_DATA-MABST.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP14'.

PERFORM BDC_FIELD USING 'MARC-PLIFZ' IT_DATA-PLIFZ.

PERFORM BDC_FIELD USING 'MARC-FHORI' IT_DATA-FHORI.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP15'.

PERFORM BDC_FIELD USING 'MARC-MTVFP' IT_DATA-MTVFP.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'MAKT-MAKTX'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP19'.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'MAKT-MAKTX'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP20'.

PERFORM BDC_FIELD USING 'MARD-LGPBE' IT_DATA-LGPBE.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'MAKT-MAKTX'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP24'.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'MBEW-BKLAS'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP25'.

PERFORM BDC_FIELD USING 'MBEW-BKLAS' IT_DATA-BKLAS.

PERFORM BDC_FIELD USING 'MBEW-VPRSV' IT_DATA-VPRSV.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'MAKT-MAKTX'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP26'.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'MAKT-MAKTX'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SP27'.

PERFORM BDC_FIELD USING 'MBEW-EKALR' IT_DATA-EKALR.

PERFORM BDC_FIELD USING 'MBEW-HKMAT' IT_DATA-HKMAT.

*- MM01 first screen

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING 'BDC_CURSOR' 'MAKT-MAKTX'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BU'.

ENDFORM. " FILL_BDCDATA

----


  • Form : call_transaction *

----


*- Posts data using call transaction method. *

----


FORM CALL_TRANSACTION .

CLEAR: V_LINES,

GV_MESG.

CLEAR X_OPTIONS.

X_OPTIONS-DISMODE = C_MODE.

X_OPTIONS-UPDMODE = C_UPDATE.

X_OPTIONS-DEFSIZE = 'X'.

*- call transaction method to upload data

CALL TRANSACTION C_TCODE USING IT_BDCTAB

OPTIONS FROM X_OPTIONS

MESSAGES INTO I_BDCMSGCOLL.

IF SY-SUBRC <> 0.

DESCRIBE TABLE I_BDCMSGCOLL LINES V_LINES.

READ TABLE I_BDCMSGCOLL INDEX GV_LINES TRANSPORTING ALL FIELDS.

*- Formats message returned by Call transaction.

PERFORM FORMAT_MESSAGE.

*- Perform to process error processing

PERFORM ERROR_PROCESSING." USING IT_DATA GV_MESG.

PERFORM CALL_SESSION USING C_TCODE P_MAX P_SESS1.

ELSE. "If call transaction is successful.

GV_SUCCESS = GV_SUCCESS + 1.

ENDIF.

ENDFORM. " call_transaction

&----


*& Form format_message

&----


*-----Reading messages

----


FORM FORMAT_MESSAGE.

CLEAR GV_MESG.

*- Function module to get the message.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

ID = I_BDCMSGCOLL-MSGID

LANG = SY-LANGU

NO = I_BDCMSGCOLL-MSGNR

V1 = I_BDCMSGCOLL-MSGV1

V2 = I_BDCMSGCOLL-MSGV2

V3 = I_BDCMSGCOLL-MSGV3

V4 = I_BDCMSGCOLL-MSGV4

IMPORTING

MSG = GV_MESG.

ENDFORM. " format_message

----


  • Form : call_session

----


  • Description : To call the session either for FSP0 or FSP2

----


FORM CALL_SESSION USING FP_TCODE TYPE ANY

F_MAX TYPE ANY

F_SESS1 TYPE ANY.

*- To open the session

PERFORM OPEN_SESSION USING F_MAX F_SESS1.

*- Perform Insert BDC Session

PERFORM BDC_INSERT USING FP_TCODE.

*- To close the session

IF GV_INSERT = F_MAX .

PERFORM CLOSE_SESSION.

ENDIF.

ENDFORM. " call_session

----


  • Form : open_session

----


  • Description : Form to open BDC open group.

----


FORM OPEN_SESSION USING F_MAX TYPE ANY

F_SESS1 TYPE ANY.

IF GV_INSERT = F_MAX OR GF_OPENSESSION = SPACE.

GV_COUNTER = GV_COUNTER + 1.

CLEAR GV_SESSION.

CONCATENATE F_SESS1 '_' GV_COUNTER INTO GV_SESSION.

  • Opening the BDC Session

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = GV_SESSION

KEEP = 'X'

USER = SY-UNAME

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.

MESSAGE I007(ZKRP_MSGCLS). " 'Error in Opening the Session'.

EXIT.

ELSE.

CLEAR V_INSERT.

GF_OPENSESSION = 'X'.

ENDIF.

ENDIF.

ENDFORM. " open_session

----


  • Form : bdc_insert

----


  • Description : Form to Insert data.

----


FORM BDC_INSERT USING FP_TCODE TYPE ANY.

  • Inserting BDC

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = FP_TCODE

TABLES

DYNPROTAB = IT_BDCTAB

EXCEPTIONS

INTERNAL_ERROR = 1

NOT_OPEN = 2

QUEUE_ERROR = 3

TCODE_INVALID = 4

PRINTING_INVALID = 5

POSTING_INVALID = 6

OTHERS = 7.

IF SY-SUBRC <> 0.

MESSAGE I008(ZKRP_MSGCLS). " 'Error in inserting the record'.

ELSE.

GV_INSERT = GV_INSERT + 1.

ENDIF.

ENDFORM. " bdc_insert

----


  • Form : close_session

----


  • Description : To close the session

----


FORM CLOSE_SESSION.

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

NOT_OPEN = 1

QUEUE_ERROR = 2

OTHERS = 3.

IF SY-SUBRC <> 0.

MESSAGE I009(ZKRP_MSGCLS). " 'Session cannot be closed'.

ELSE.

I_SESSION-NAME = GV_SESSION.

APPEND I_SESSION.

CLEAR I_SESSION.

CLEAR F_OPENSESSION.

ENDIF.

ENDFORM. " close_session

&----


*& Form DISPLAY_SUCCESS_ERROR_DATA

&----


  • To display the no.of records,success and error records

----


FORM DISPLAY_SUMMARY_REPORT.

SKIP 3.

FORMAT COLOR COL_HEADING INTENSIFIED ON.

WRITE :/1(132) SY-ULINE.

WRITE :/1(1) SY-VLINE,

65 'SUMMARY REPORT'(003),

132(1) SY-VLINE.

FORMAT INTENSIFIED OFF.

PERFORM COLOR_FILL.

WRITE :/1(132) SY-ULINE.

WRITE :/1(1) SY-VLINE,

2(24) 'Processed Records'(004),

27(2) ' : ',

30 GV_TOTAL ,

132(1) SY-VLINE.

PERFORM COLOR_FILL.

WRITE :/1(1) SY-VLINE,

2(24) 'Successfully Uploaded'(005),

27(2) ' : ',

30 V_SUCCESS,

132(1) SY-VLINE.

PERFORM COLOR_FILL.

WRITE :/1(1) SY-VLINE,

2(24) 'Error Records'(006),

27(2) ' : ',

30 V_ERROR,

132(1) SY-VLINE.

PERFORM COLOR_FILL.

WRITE :/1(1) SY-VLINE,

2(24) 'Empty Records'(007),

27(2) ' : ',

30 GV_EMPTY,

132(1) SY-VLINE.

WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_SUCCESS_ERROR_DATA

&----


*& Form DISPLAY_ERROR_RECORDS

&----


  • To display the error records

----


FORM DISPLAY_ERROR_RECORDS.

IF GV_ERROR > 0.

*- Perform to display the error header

PERFORM DISPLAY_ERROR_HEADER.

*- Perform to display the error records

PERFORM DISPLAY_ERROR_DETAIL.

ENDIF.

ENDFORM. " DISPLAY_ERROR_RECORDS

&----


*& Form DISPLAY_ERROR_HEADER

&----


  • To display the error header

----


FORM DISPLAY_ERROR_HEADER.

SKIP.

WRITE :/1(132) SY-ULINE.

WRITE :/1(1) SY-VLINE,

40 'ERROR RECORDS'(008),

132(1) SY-VLINE.

WRITE :/1(132) SY-ULINE.

WRITE : /1(1) SY-VLINE,

2(18) 'Material Number'(009),

20(1) SY-VLINE,

21(4) 'Type'(010),

25(1) SY-VLINE,

26(5) 'Plant'(011),

31(1) SY-VLINE,

32(16) 'storage location'(012),

48(1) SY-VLINE,

49(80) 'Message'(013),

132(1) SY-VLINE.

WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_ERROR_HEADER

&----


*& Form DISPLAY_ERROR_DETAIL

&----


  • To display the error records

----


FORM DISPLAY_ERROR_DETAIL.

LOOP AT IT_ERROR.

WRITE : /1(1) SY-VLINE,

2(18) IT_ERROR-MATNR,

20(1) SY-VLINE,

21(4) IT_ERROR-MTART,

25(1) SY-VLINE,

26(5) IT_ERROR-WERKS,

31(1) SY-VLINE,

32(16) IT_ERROR-LGORT,

48(1) SY-VLINE,

49(80) IT_ERROR-MESSAGE,

132(1) SY-VLINE.

ENDLOOP.

WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_ERROR_DETAIL

----


  • Form DOWNLOAD_ERROR_FILES

----


*- Downloading the error records to erro file

----


FORM DOWNLOAD_ERROR_FILES.

DATA : LV_DEL TYPE CHAR01,

LV_FILE TYPE STRING.

IF NOT IT_ERROR[] IS INITIAL.

IF P_FTYPE = 'DAT'.

LOOP AT IT_ERROR.

CONCATENATE IT_ERROR-MATNR

IT_ERROR-MBRSH

IT_ERROR-MTART

IT_ERROR-WERKS

IT_ERROR-LGORT

IT_ERROR-MAKTX

IT_ERROR-MEINS

IT_ERROR-MATKL

IT_ERROR-BISMT

IT_ERROR-EKGRP

IT_ERROR-MFRPN

IT_ERROR-LGPBE

IT_ERROR-DISMM

IT_ERROR-DISPO

IT_ERROR-MINBE

IT_ERROR-DISLS

IT_ERROR-MABST

IT_ERROR-BESKZ

IT_ERROR-PLIFZ

IT_ERROR-FHORI

IT_ERROR-MTVFP

IT_ERROR-BKLAS

IT_ERROR-VPRSV

IT_ERROR-EKALR

IT_ERROR-HKMAT

IT_ERROR-LTEXT

INTO I_FINAL-STRING SEPARATED BY V_DEL.

APPEND I_FINAL.

CLEAR I_FINAL.

ENDLOOP.

CLEAR I_FINAL.

ELSEIF P_FTYPE = 'ASC'.

LOOP AT IT_ERROR.

I_FINAL-STRING+0(18) = IT_ERROR-MATNR.

I_FINAL-STRING+18(1) = IT_ERROR-MBRSH.

I_FINAL-STRING+19(4) = IT_ERROR-MTART.

I_FINAL-STRING+23(4) = IT_ERROR-WERKS.

I_FINAL-STRING+27(4) = IT_ERROR-LGORT.

I_FINAL-STRING+31(40) = IT_ERROR-MAKTX.

I_FINAL-STRING+71(3) = IT_ERROR-MEINS.

I_FINAL-STRING+74(9) = IT_ERROR-MATKL.

I_FINAL-STRING+83(18) = IT_ERROR-BISMT.

I_FINAL-STRING+101(3) = IT_ERROR-EKGRP.

I_FINAL-STRING+104(40) = IT_ERROR-MFRPN.

I_FINAL-STRING+144(10) = IT_ERROR-LGPBE.

I_FINAL-STRING+154(2) = IT_ERROR-DISMM.

I_FINAL-STRING+156(3) = IT_ERROR-DISPO.

I_FINAL-STRING+159(13) = IT_ERROR-MINBE.

I_FINAL-STRING+172(2) = IT_ERROR-DISLS.

I_FINAL-STRING+174(17) = IT_ERROR-MABST.

I_FINAL-STRING+191(1) = IT_ERROR-BESKZ.

I_FINAL-STRING+192(3) = IT_ERROR-PLIFZ.

I_FINAL-STRING+195(3) = IT_ERROR-FHORI.

I_FINAL-STRING+198(2) = IT_ERROR-MTVFP.

I_FINAL-STRING+200(4) = IT_ERROR-BKLAS.

I_FINAL-STRING+204(1) = IT_ERROR-VPRSV.

I_FINAL-STRING+205(1) = IT_ERROR-EKALR.

I_FINAL-STRING+206(1) = IT_ERROR-HKMAT.

I_FINAL-STRING+207(1000) = IT_ERROR-LTEXT.

APPEND I_FINAL.

CLEAR I_FINAL.

ENDLOOP.

ENDIF. "IF P_FTYPE = 'DAT'.

LV_FILE = P_ERR.

IF P_FTYPE = 'DAT'.

LV_DEL = ''.

ENDIF.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

FILENAME = LV_FILE

FILETYPE = 'ASC'

WRITE_FIELD_SEPARATOR = LV_DEL

TABLES

DATA_TAB = I_FINAL

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_BATCH = 2

GUI_REFUSE_FILETRANSFER = 3

INVALID_TYPE = 4

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6

HEADER_NOT_ALLOWED = 7

SEPARATOR_NOT_ALLOWED = 8

FILESIZE_NOT_ALLOWED = 9

HEADER_TOO_LONG = 10

DP_ERROR_CREATE = 11

DP_ERROR_SEND = 12

DP_ERROR_WRITE = 13

UNKNOWN_DP_ERROR = 14

ACCESS_DENIED = 15

DP_OUT_OF_MEMORY = 16

DISK_FULL = 17

DP_TIMEOUT = 18

FILE_NOT_FOUND = 19

DATAPROVIDER_EXCEPTION = 20

CONTROL_FLUSH_ERROR = 21

OTHERS = 22.

IF SY-SUBRC <> 0.

MESSAGE I012(ZKRP_MSGCLS). " Error in downloading the file.

ENDIF.

ENDIF. "IF NOT I_FILE_ERROR[] IS INITIAL.

ENDFORM. " DOWNLOAD_ERROR_FILES

&amp;amp;amp;amp;amp;amp;----


*& Form POPULATE_LONG_TEXT

&----


  • text

----


FORM POPULATE_LONG_TEXT .

DATA: LV_LNGTEXT(72).

DATA: LV_STRING(1000),

LEN TYPE I,

I_POS TYPE I,

LV_LNLEN TYPE I,

LV_LINE(2) TYPE N,

LV_FIRST,

LV_LNCNT TYPE I,

LV_FLAG.

LV_LNLEN = 72.

LV_STRING = IT_DATA-LTEXT.

LEN = STRLEN( LV_STRING ).

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4040'.

PERFORM BDC_FIELD USING 'BDC_OKCODE' '=LTEX'.

LV_LINE = 2.

DO.

IF LV_FLAG = SPACE.

LEN = STRLEN( LV_STRING+I_POS ).

ENDIF.

IF LEN < lv_lnlen =" LEN." lv_lngtext =" LV_STRING+I_POS(LV_LNLEN)." lv_first =" SPACE." lv_first =" 'X'." lv_lnlen =" 72." lv_flag =" 'X'." i_pos =" I_POS" lv_lncnt =" LV_LNCNT" lv_line =" LV_LINE" gv_ext =" 'XLS'." p_err =" P_ERR(SY-FDPOS)." p_ftype =" 'DAT'." gv_del =" '2C'." gv_ext =" 'XLS'." p_ct =" 'X'." f_color =" SPACE." f_color =" 'X'."> 0 AND NOT IT_DATA IS INITIAL.

DELETE IT_DATA FROM 1 TO P_HEADER.

EXIT.

ENDIF.

ENDLOOP.

ENDIF.

CLEAR IT_DATA.

*- To delete the empty lines from internal table

LOOP AT IT_DATA.

LGV_TABIX = SY-TABIX.

IF IT_DATA IS INITIAL.

GV_EMPTY = GV_EMPTY + 1.

DELETE IT_DATA INDEX LV_TABIX..

ENDIF.

ENDLOOP.

CLEAR IT_DATA.

*- Total no of recs in file

DESCRIBE TABLE IT_DATA LINES GV_TOTAL .

IF GV_TOTAL = 0.

MESSAGE I013(ZKRP_MSGCLS). " No records in the file

F_STOP = 'X'.

STOP.

ENDIF.

ENDFORM. " DELETE_HEADER_EMPTY_RECS

----


  • Start new screen *

----


FORM BDC_DYNPRO USING F_PROGRAM F_DYNPRO.

CLEAR IT_BDCTAB.

IT_BDCTAB-PROGRAM = F_PROGRAM.

IT_BDCTAB-DYNPRO = F_DYNPRO.

IT_BDCTAB-DYNBEGIN = 'X'.

APPEND IT_BDCTAB.

ENDFORM. "BDC_DYNPRO

----


  • Insert field

----


FORM BDC_FIELD USING FNAM FVAL.

IF FVAL <> SPACE.

CLEAR IT_BDCTAB.

IT_BDCTAB-FNAM = FNAM.

IT_BDCTAB-FVAL = FVAL.

APPEND IT_BDCTAB.

ENDIF.

ENDFORM. "BDC_FIELD

Reward Points For the Helpful.

Regards,

Harini.S