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

Data Not updated in BDC

Former Member
0 Likes
795

hi alll

1. i have written below coding for vendor master update. i have two records in text file, in that first record not updated. while updating its shows error. but second record updated. how can i solve. plse help me

2. I want to show the error message or i want to print how can i do it

REPORT ZVENTESTBDC.

data : begin of it_xk01 occurs 0,

LIFNR(10) type c,

BUKRS(4) type c,

EKORG(4) type c,

KTOKK(4) type c,

NAME1(30) type c,

SORT1(10) type c,

LAND1(3) type c,

AKONT(10) type c,

FDGRV(10) type c,

WAERS(3) type c,

end of it_xk01.

DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,

IT_BDCMSGCOLL LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'C:\Documents and Settings\entegall\Desktop\vendor.txt'

FILETYPE = 'ASC'

HAS_FIELD_SEPARATOR = 'X'

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • VIRUS_SCAN_PROFILE =

  • NO_AUTH_CHECK = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = it_xk01.

loop at it_xk01.

refresh it_bdcdata.

  • perform open_group.

perform bdc_dynpro using 'SAPMF02K' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-REF_LIFNR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02K-LIFNR'

it_xk01-lifnr.

perform bdc_field using 'RF02K-BUKRS'

IT_XK01-BUKRS.

perform bdc_field using 'RF02K-EKORG'

IT_XK01-EKORG.

perform bdc_field using 'RF02K-KTOKK'

IT_XK01-KTOKK.

perform bdc_dynpro using 'SAPMF02K' '0110'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-LAND1'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFA1-NAME1'

IT_XK01-NAME1.

perform bdc_field using 'LFA1-SORTL'

IT_XK01-SORT1.

perform bdc_field using 'LFA1-NAME2'

''.

perform bdc_field using 'LFA1-LAND1'

IT_XK01-LAND1.

perform bdc_dynpro using 'SAPMF02K' '0120'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-KUNNR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0130'.

perform bdc_field using 'BDC_CURSOR'

'LFBK-BANKS(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_dynpro using 'SAPMF02K' '0210'.

perform bdc_field using 'BDC_CURSOR'

'LFB1-FDGRV'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFB1-AKONT'

IT_XK01-AKONT.

perform bdc_field using 'LFB1-FDGRV'

IT_XK01-FDGRV.

perform bdc_dynpro using 'SAPMF02K' '0215'.

perform bdc_field using 'BDC_CURSOR'

'LFB1-ZTERM'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0220'.

perform bdc_field using 'BDC_CURSOR'

'LFB5-MAHNA'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0310'.

perform bdc_field using 'BDC_CURSOR'

'LFM1-WAERS'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFM1-WAERS'

IT_XK01-WAERS.

perform bdc_dynpro using 'SAPMF02K' '0320'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-LIFNR'.

perform bdc_field using 'BDC_OKCODE'

'=UPDA'.

*perform bdc_transaction using 'XK01' using IT_BDCDATA mode 'A' UPDATE 'S'

CALL TRANSACTION 'XK01' USING IT_BDCDATA

MODE 'A'

UPDATE 'S' MESSAGES INTO IT_BDCMSGCOLL.

*perform close_group.

endloop.

FORM BDC_DYNPRO USING PROG SCR.

CLEAR IT_BDCDATA.

IT_BDCDATA-PROGRAM = PROG.

IT_BDCDATA-DYNPRO = SCR.

IT_BDCDATA-DYNBEGIN = 'X'.

APPEND IT_BDCDATA.

ENDFORM.

FORM BDC_FIELD USING FNAM FVAL.

CLEAR IT_BDCDATA.

IT_BDCDATA-FNAM = FNAM.

IT_BDCDATA-FVAL = FVAL.

APPEND IT_BDCDATA.

ENDFORM.

hi alll

1. i have written below coding for vendor master update. i have two records in text file, in that first record not updated. while updating its shows error. but second record updated. how can i solve. plse help me

2. I want to show the error message or i want to print how can i do it

REPORT ZVENTESTBDC.

data : begin of it_xk01 occurs 0,

LIFNR(10) type c,

BUKRS(4) type c,

EKORG(4) type c,

KTOKK(4) type c,

NAME1(30) type c,

SORT1(10) type c,

LAND1(3) type c,

AKONT(10) type c,

FDGRV(10) type c,

WAERS(3) type c,

end of it_xk01.

DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,

IT_BDCMSGCOLL LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'C:\Documents and Settings\entegall\Desktop\vendor.txt'

FILETYPE = 'ASC'

HAS_FIELD_SEPARATOR = 'X'

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • VIRUS_SCAN_PROFILE =

  • NO_AUTH_CHECK = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = it_xk01.

loop at it_xk01.

refresh it_bdcdata.

  • perform open_group.

perform bdc_dynpro using 'SAPMF02K' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-REF_LIFNR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02K-LIFNR'

it_xk01-lifnr.

perform bdc_field using 'RF02K-BUKRS'

IT_XK01-BUKRS.

perform bdc_field using 'RF02K-EKORG'

IT_XK01-EKORG.

perform bdc_field using 'RF02K-KTOKK'

IT_XK01-KTOKK.

perform bdc_dynpro using 'SAPMF02K' '0110'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-LAND1'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFA1-NAME1'

IT_XK01-NAME1.

perform bdc_field using 'LFA1-SORTL'

IT_XK01-SORT1.

perform bdc_field using 'LFA1-NAME2'

''.

perform bdc_field using 'LFA1-LAND1'

IT_XK01-LAND1.

perform bdc_dynpro using 'SAPMF02K' '0120'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-KUNNR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0130'.

perform bdc_field using 'BDC_CURSOR'

'LFBK-BANKS(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_dynpro using 'SAPMF02K' '0210'.

perform bdc_field using 'BDC_CURSOR'

'LFB1-FDGRV'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFB1-AKONT'

IT_XK01-AKONT.

perform bdc_field using 'LFB1-FDGRV'

IT_XK01-FDGRV.

perform bdc_dynpro using 'SAPMF02K' '0215'.

perform bdc_field using 'BDC_CURSOR'

'LFB1-ZTERM'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0220'.

perform bdc_field using 'BDC_CURSOR'

'LFB5-MAHNA'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0310'.

perform bdc_field using 'BDC_CURSOR'

'LFM1-WAERS'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFM1-WAERS'

IT_XK01-WAERS.

perform bdc_dynpro using 'SAPMF02K' '0320'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-LIFNR'.

perform bdc_field using 'BDC_OKCODE'

'=UPDA'.

*perform bdc_transaction using 'XK01' using IT_BDCDATA mode 'A' UPDATE 'S'

CALL TRANSACTION 'XK01' USING IT_BDCDATA

MODE 'A'

UPDATE 'S' MESSAGES INTO IT_BDCMSGCOLL.

*perform close_group.

endloop.

FORM BDC_DYNPRO USING PROG SCR.

CLEAR IT_BDCDATA.

IT_BDCDATA-PROGRAM = PROG.

IT_BDCDATA-DYNPRO = SCR.

IT_BDCDATA-DYNBEGIN = 'X'.

APPEND IT_BDCDATA.

ENDFORM.

FORM BDC_FIELD USING FNAM FVAL.

CLEAR IT_BDCDATA.

IT_BDCDATA-FNAM = FNAM.

IT_BDCDATA-FVAL = FVAL.

APPEND IT_BDCDATA.

ENDFORM.

4 REPLIES 4
Read only

Former Member
0 Likes
754

Hi

Use the fun module

FORMAT_MESSAGE to display the errors captured in BDCMSGCOL table see the sample code for it

REPORT ZMMBDC1_1 NO STANDARD PAGE HEADING MESSAGE-ID ZT.

************************************************************************

  • Declaration of internal tables

************************************************************************

  • internal table for selecting data from flat file

DATA : BEGIN OF IT_DATA OCCURS 0,

MBRSH, " Industry sector

MTART(4), " Material type

KZSEL, " Checkbox

MAKTX(40), " Material description

MEINS(3), " Base unit of measure

MATKL(9), " Material group

BISMT(18), " Old material number

END OF IT_DATA.

  • internal table for bdcdata

DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

  • internal table to handle messages

DATA : IT_MESSAGES LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

************************************************************************

  • Variables & Flag declaration

************************************************************************

  • variables declaration

DATA : V_MESG(50).

  • flag declaration

DATA : FG_BDC,

FG_FLAG1 TYPE I.

************************************************************************

  • selection screen

************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.

************************************************************************

  • parameter

************************************************************************

PARAMETERS : P_FILE LIKE RLGRAP-FILENAME OBLIGATORY.

SELECTION-SCREEN END OF BLOCK BLK1.

************************************************************************

  • initialization

************************************************************************

INITIALIZATION.

  • peform to initialize parameter

PERFORM INIT_PARM.

************************************************************************

  • start of selection

************************************************************************

start-of-selection.

  • perform to upload it_data

PERFORM UP_LOAD_IT_DATA.

  • perform transfer data

PERFORM TRANSFER_DATA.

  • end of selection

END-OF-SELECTION.

&----


*& Form INIT_PARM

&----


  • Initializing parameter

----


FORM INIT_PARM.

P_FILE = 'C:\'.

ENDFORM. " INIT_PARM

&----


*& Form UP_LOAD_IT_DATA

&----


  • Transfering data from file to internal table

----


FORM UP_LOAD_IT_DATA.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

FILENAME = P_FILE

FILETYPE = 'ASC'

TABLES

DATA_TAB = IT_DATA

EXCEPTIONS

CONVERSION_ERROR = 1

FILE_OPEN_ERROR = 2

FILE_READ_ERROR = 3

INVALID_TABLE_WIDTH = 4

INVALID_TYPE = 5

NO_BATCH = 6

UNKNOWN_ERROR = 7

GUI_REFUSE_FILETRANSFER = 8

OTHERS = 9.

IF SY-SUBRC = 2 .

FG_FLAG1 = 1.

MESSAGE I001.

ENDIF.

ENDFORM. " UP_LOAD_IT_DATA

&----


*& Form TRANSFER_DATA

&----


  • Processing the data

----


FORM TRANSFER_DATA.

FG_BDC = 'N'.

LOOP AT IT_DATA.

  • perform to fill it_bdcdata.

PERFORM FILL_IT_BDCDATA.

CALL TRANSACTION 'MM01' USING IT_BDCDATA MODE 'N' UPDATE 'S'

MESSAGES INTO IT_MESSAGES.

IF SY-SUBRC <> 0.

FG_FLAG1 = 1.

  • if error occurs in transaction mode run bdc session for that data

PERFORM BDC_PROCESS.

ENDIF.

  • Handles error messages

PERFORM ERROR_MESSAGES.

CLEAR : IT_BDCDATA,IT_DATA,IT_MESSAGES.

REFRESH : IT_BDCDATA,IT_MESSAGES.

ENDLOOP.

IF FG_FLAG1 = 0.

MESSAGE I003.

ENDIF.

IF FG_BDC = 'O'.

  • close bdc if it is open

PERFORM CLOSE_BDC.

ENDIF.

ENDFORM. " TRANSFER_DATA

&----


*& Form FILL_IT_BDCDATA

&----


  • Filling Bdcdata structure with it_data

  • Some fields have been commented for future updations

----


FORM FILL_IT_BDCDATA.

PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '0060'.

PERFORM BDC_FIELD USING : 'BDC_OKCODE' '/00',

: 'BDC_CURSOR' 'RMMG1_REF-MATNR',

: 'RMMG1-MBRSH' IT_DATA-MBRSH,

: 'RMMG1-MTART' IT_DATA-MTART.

PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '0070'.

PERFORM BDC_FIELD USING : 'BDC_OKCODE' '=RESA'.

PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '0070'.

PERFORM BDC_FIELD USING : 'BDC_OKCODE' '=ENTR',

: 'MSICHTAUSW-KZSEL(01)' IT_DATA-KZSEL.

PERFORM BDC_DYNPRO USING : 'SAPLMGMM' '4000'.

PERFORM BDC_FIELD USING : 'BDC_OKCODE' '=BU',

: 'BDC_SUBSCR' 'SAPLMGMM' & ' 2000TABFRA1',

: 'BDC_SUBSCR' 'SAPLMGD1' & ' 1002SUB1',

: 'BDC_CURSOR' 'MAKT-MAKTX',

: 'MAKT-MAKTX' IT_DATA-MAKTX,

: 'BDC_SUBSCR' 'SAPLMGD1' & ' 2001SUB2',

: 'MARA-MEINS' IT_DATA-MEINS,

: 'MARA-MATKL' IT_DATA-MATKL,

: 'MARA-BISMT' IT_DATA-BISMT,

: 'BDC_OKCODE' '=BU'.

*perform bdc_field using 'MARA-EXTWG' ''.

*perform bdc_field using 'MARA-LABOR' ''.

*perform bdc_field using 'MARA-KOSCH' ''.

*perform bdc_field using 'MARA-MSTAE' ''.

*perform bdc_field using 'MARA-MSTDE' ''.

*perform bdc_field using 'BDC_SUBSCR' 'SAPLMGD1' & ' 2561SUB3'.

*perform bdc_field using 'MARA-BEGRU' ''.

*perform bdc_field using 'BDC_SUBSCR' 'SAPLMGD1' & ' 2007SUB4'.

*perform bdc_field using 'MARA-NTGEW' ''.

*perform bdc_field using 'MARA-BRGEW' ''.

*perform bdc_field using 'MARA-GEWEI' ''.

*perform bdc_field using 'MARA-VOLUM' ''.

*perform bdc_field using 'MARA-VOLEH' ''.

*PERFORM BDC_FIELD USING 'MARA-GROES' ''.

*perform bdc_field using 'MARA-EAN11' ''.

*perform bdc_field using 'MARA-NUMTP' ''.

*PERFORM BDC_FIELD USING 'BDC_SUBSCR' 'SAPLMGD1' & ' 2005SUB5'.

*perform bdc_field using 'BDC_SUBSCR' 'SAPLMGD1' & ' 2011SUB6'.

*perform bdc_field using 'MARA-MAGRV' ''.

ENDFORM. " FILL_IT_BDCDATA

&----


*& Form BDC_DYNPRO

&----


  • Filling the it_bdcdata table with program name & screen number

----


FORM BDC_DYNPRO USING PROGRAM LIKE BDCDATA-PROGRAM

DYNPRO LIKE BDCDATA-DYNPRO.

IT_BDCDATA-PROGRAM = PROGRAM.

IT_BDCDATA-DYNPRO = DYNPRO.

IT_BDCDATA-DYNBEGIN = 'X'.

APPEND IT_BDCDATA.

CLEAR IT_BDCDATA.

ENDFORM. " BDC_DYNPRO

&----


*& Form BDC_FIELD

&----


  • Filling it_bdcdata with field name and field value

----


FORM BDC_FIELD USING FNAM LIKE BDCDATA-FNAM

FVAL.

IT_BDCDATA-FNAM = FNAM.

IT_BDCDATA-FVAL = FVAL.

APPEND IT_BDCDATA.

CLEAR IT_BDCDATA.

ENDFORM. " BDC_FIELD

&----


*& Form ERROR_MESSAGES

&----


  • Displaying error messages

----


<b>FORM ERROR_MESSAGES.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

ID = SY-MSGID

LANG = '-D'

IMPORTING

MSG = V_MESG

EXCEPTIONS

NOT_FOUND = 1

OTHERS = 2.

LOOP AT IT_MESSAGES WHERE MSGTYP = 'E'.

WRITE : / 'Message :'(I06) ,V_MESG.

CLEAR IT_MESSAGES.

ENDLOOP.

ENDFORM. " ERROR_MESSAGES</b>

&----


*& Form BDC_PROCESS

&----


  • Open bdc session if call transaction fails

----


FORM BDC_PROCESS.

IF FG_BDC = 'N'.

  • open bdc session

PERFORM OPEN_BDC.

FG_BDC = 'O'.

ENDIF.

IF FG_BDC = 'O'.

  • insert data into bdc session

PERFORM INSERT_BDC.

ENDIF.

ENDFORM. " BDC_PROCESS

&----


*& Form OPEN_BDC

&----


  • Calling function module to open bdc session

----


FORM OPEN_BDC.

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = 'SMM1'

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.

ENDFORM. " OPEN_BDC

&----


*& Form INSERT_BDC

&----


  • Insert it_bdcdata into bdc by calling function module bdc_insert

----


FORM INSERT_BDC.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = 'MM01'

TABLES

DYNPROTAB = IT_BDCDATA

EXCEPTIONS

INTERNAL_ERROR = 1

NOT_OPEN = 2

QUEUE_ERROR = 3

TCODE_INVALID = 4

PRINTING_INVALID = 5

POSTING_INVALID = 6

OTHERS = 7.

ENDFORM. " INSERT_BDC

&----


*& Form CLOSE_BDC

&----


  • Closing bdc session

----


FORM CLOSE_BDC.

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

NOT_OPEN = 1

QUEUE_ERROR = 2

OTHERS = 3.

ENDFORM. " CLOSE_BDC

<b>Reward points for useful Answers</b>

Regards

Anji

Read only

Former Member
0 Likes
754

hi,

Try it by defining workarea instead of defining it as internal table.

Read only

dev_parbutteea
Active Contributor
0 Likes
754

Hi,

CALL TRANSACTION 'XK01'

USING IT_BDCDATA

MODE 'A'

UPDATE 'S'

MESSAGES INTO <b>IT_BDCMSGCOLL.</b>

read tableIT_BDCMSGCOLL

into wa_BDCMSGCOLL

with key msgtyp = c_cons_e<b>.<-- error messages</b>

if sy-subrc = 0.

.....

else. <b><----- success messages</b>

.......

endif.

Regards,

Sooness

Read only

Former Member
0 Likes
754

go through this porgarm u will get the clear picture about down loading the error msg.

***********************************************************************

  • PROGRAM ID : ZSD_CONDREC_DISCOUNT_ZSWD

  • DESCRIPTION : BDC PROGRAM TO UPLOAD CONDITION RECORDS FOR Discount

  • TRANSACTION : VK11

  • CONDITION TYPE : ZSWD(Key combination 3)

  • VERSION : 1.0

  • Text Elements

  • 001 : Select Options

  • 002 : C:\SD\Error\Discount-ZSWD

  • 003 : Error Download Path

  • 004 : C:\SD\Error\Discount-ZSWD - DDMMYYYY HH:MM:SS.txt

***********************************************************************

REPORT ZSD_CONDREC_DISCOUNT_ZSWD

MESSAGE-ID 00.

*include bdcrecx1.

TABLES : t100.

************************************************************************

  • Internal table declaration *

************************************************************************

DATA : BEGIN OF it_price OCCURS 0,

index(4), "Index

kschl(4), "Condition type

vkorg(4), "Sales organization

vtweg(2), "distribution channel

spart(2), "Division

matnr(18), "Material no

kbetr(11), "Rate

konwa(5), "Rate unit (currency or percentage)

kmein(3), "Condition unit

krech(1), "Calculation type for condition

datab(10), "Validity start date

datbi(10), "Validity end date

er_message(100),

END OF it_price.

************************************************************************

  • Internal table to get the error data *

************************************************************************

DATA : it_error LIKE it_price OCCURS 0 WITH HEADER LINE.

DATA : bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.

DATA : i_msgtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

************************************************************************

  • Internal table to find the error from the legacy data *

************************************************************************

DATA : BEGIN OF it_erfind OCCURS 0,

index(4), "Index

er_message(100), "For Error Message

END OF it_erfind.

************************************************************************

  • Variables declaration *

************************************************************************

DATA : g_message(200),

time(10),

date(10) ,

v_error_filename LIKE rlgrap-filename.

date = sy-datum.

time = sy-uzeit.

************************************************************************

  • Initialization

************************************************************************

INITIALIZATION.

  • Generating Error file name with date and time.

PERFORM make_file_name.

************************************************************************

  • Selection Screen *

************************************************************************

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

PARAMETER: p_file LIKE ibipparms-path OBLIGATORY.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(30) text-003.

SELECTION-SCREEN COMMENT 33(79) text-004.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN:END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file .

PERFORM get_filename.

************************************************************************

  • Start of selection

************************************************************************

START-OF-SELECTION.

PERFORM upload_data.

PERFORM fill_data.

END-OF-SELECTION.

&----


*& Form fill_data

&----


  • text

----


FORM fill_data.

LOOP AT it_price.

*Start of Screen 1

PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RV13A-KSCHL'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=ANTA'.

PERFORM bdc_field USING 'RV13A-KSCHL'

it_price-kschl.

***********************************************************************

  • Key Combination: Sales org / Dist. channel / Division / Material

***********************************************************************

PERFORM bdc_dynpro USING 'SAPLV14A' '0100'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RV130-SELKZ(03)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=WEIT'.

PERFORM bdc_field USING 'RV130-SELKZ(03)'

'X'.

*Start of Screen 2

PERFORM bdc_dynpro USING 'SAPMV13A' '1800'.

PERFORM bdc_field USING 'KOMG-VKORG'

it_price-vkorg.

PERFORM bdc_field USING 'KOMG-VTWEG'

it_price-vtweg.

PERFORM bdc_field USING 'KOMG-SPART'

it_price-spart.

PERFORM bdc_field USING 'KOMG-MATNR(01)'

it_price-matnr.

PERFORM bdc_field USING 'KONP-KBETR(01)'

it_price-kbetr.

PERFORM bdc_field USING 'KONP-KONWA(01)'

it_price-konwa.

PERFORM bdc_field USING 'KONP-KMEIN(01)'

it_price-kmein.

PERFORM bdc_field USING 'RV13A-KRECH(01)'

it_price-krech.

PERFORM bdc_field USING 'RV13A-DATAB(01)'

it_price-datab.

PERFORM bdc_field USING 'RV13A-DATBI(01)'

it_price-datbi.

  • perform bdc_dynpro using 'SAPMV13A' '1821'.

  • perform bdc_field using 'BDC_CURSOR'

  • 'KOMG-MATNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=SICH'. "Save the entry

PERFORM bdc_transaction TABLES i_msgtab USING 'VK11' 'N' 'L'.

************************************************************************

*To fetch the error message from the standard error table

************************************************************************

SELECT SINGLE * FROM t100 WHERE sprsl = 'E'

AND arbgb = sy-msgid

AND msgnr = sy-msgno.

g_message = t100-text.

***********************************************************************

*subroutine to change the error message for every document number

***********************************************************************

PERFORM replace_parameters USING sy-msgv1

sy-msgv2

sy-msgv3

sy-msgv4

CHANGING g_message.

WRITE: / 'System variables:'.

SKIP.

WRITE: / ' Sy-msgty:', sy-msgty.

WRITE: / ' Sy-msgid:', sy-msgid.

WRITE: / ' Sy-msgno:', sy-msgno.

WRITE: / ' Sy-msgv1:', sy-msgv1.

WRITE: / ' Sy-msgv2:', sy-msgv2.

WRITE: / ' Sy-msgv3:', sy-msgv3.

WRITE: / ' Sy-msgv4:', sy-msgv4.

SKIP.

WRITE: / 'Message:'.

SKIP.

WRITE: / sy-msgty, g_message.

************************************************************************

*To find out the error in the legacy data if there is anything and pass

*the document no with error message to the seperate internal table

*called it_erfind

************************************************************************

IF sy-msgty = 'E'.

it_erfind-index = it_price-index.

it_erfind-er_message = g_message.

APPEND it_erfind.

ENDIF.

*Finally we are segregating the error and downloading the error data.

----


AT LAST.

*To segregate the error

----


PERFORM segregate_error.

*To download the error from it_error internal table with err mesg

----


PERFORM error_download.

PERFORM display_message.

ENDAT.

ENDLOOP.

  • perform close_group.

CLEAR it_price.

ENDFORM. "fill_data

*Subrotine to replace the parameters

----


FORM replace_parameters USING p_par_1 p_par_2 p_par_3

p_par_4 CHANGING p_message.

  • erst mal pruefen, ob numerierte Parameter verwendet wurden

----


DO.

REPLACE '&1' WITH p_par_1 INTO p_message.

IF sy-subrc <> 0.

EXIT.

ENDIF.

ENDDO.

DO.

REPLACE '&2' WITH p_par_2 INTO p_message.

IF sy-subrc <> 0.

EXIT.

ENDIF.

ENDDO.

DO.

REPLACE '&3' WITH p_par_3 INTO p_message.

IF sy-subrc <> 0.

EXIT.

ENDIF.

ENDDO.

DO.

REPLACE '&4' WITH p_par_4 INTO p_message.

IF sy-subrc <> 0.

EXIT.

ENDIF.

ENDDO.

  • falls keine numerierten Parameter vorh., ersetzen wie gehabt

----


REPLACE '&' WITH p_par_1 INTO p_message.

CONDENSE p_message.

IF sy-subrc EQ 0.

REPLACE '&' WITH p_par_2 INTO p_message.

CONDENSE p_message.

IF sy-subrc EQ 0.

REPLACE '&' WITH p_par_3 INTO p_message.

CONDENSE p_message.

IF sy-subrc EQ 0.

REPLACE '&' WITH p_par_4 INTO p_message.

CONDENSE p_message.

ENDIF.

ENDIF.

ENDIF.

ENDFORM. "REPLACE_PARAMETERS

*Subroutine to segregate the error data from the legacy data

----


FORM segregate_error.

LOOP AT it_erfind.

LOOP AT it_price WHERE index = it_erfind-index.

MOVE-CORRESPONDING it_price TO it_error.

it_error-er_message = it_erfind-er_message.

APPEND it_error.

ENDLOOP.

ENDLOOP.

ENDFORM. "segregate_error

********************************************************************

*Subroutine to download the error data from the it_error table.

********************************************************************

FORM error_download.

IF it_error[] IS NOT INITIAL.

CALL FUNCTION 'WS_DOWNLOAD'

EXPORTING

codepage = 'IBM'

filename = v_error_filename

filetype = 'DAT'

TABLES

data_tab = it_error.

ENDIF.

ENDFORM. "error_download

----


  • Start new screen *

----


FORM bdc_dynpro USING program dynpro.

CLEAR bdcdata.

bdcdata-program = program.

bdcdata-dynpro = dynpro.

bdcdata-dynbegin = 'X'.

APPEND bdcdata.

ENDFORM. "BDC_DYNPRO

----


  • Insert field *

----


FORM bdc_field USING fnam fval.

  • IF FVAL <> NODATA.

CLEAR bdcdata.

bdcdata-fnam = fnam.

bdcdata-fval = fval.

APPEND bdcdata.

  • ENDIF.

ENDFORM. "BDC_FIELD

&----


*& Form bdc_transaction

&----


  • text

----


  • -->MESSTAB text

  • -->TCODE text

  • -->CTUMODE text

  • -->CUPDATE text

----


FORM bdc_transaction TABLES messtab USING tcode ctumode cupdate .

CALL TRANSACTION tcode USING bdcdata

MODE ctumode

UPDATE cupdate

MESSAGES INTO messtab.

REFRESH bdcdata.

CLEAR bdcdata.

ENDFORM. " bdc_transaction

********************************************************************

  • Uploading data file to internal table. *

********************************************************************

FORM upload_data.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

filename = p_file

  • CODEPAGE = 'IBM '

filetype = 'DAT'

TABLES

data_tab = it_price

EXCEPTIONS

conversion_error = 1

invalid_table_width = 2

invalid_type = 3

no_batch = 4

unknown_error = 5

gui_refuse_filetransfer = 6

OTHERS = 7.

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

&----


*& Form display_message

&----


FORM display_message .

IF it_error[] IS INITIAL.

MESSAGE i019(zmsg). "Success

ELSE.

MESSAGE e020(zmsg). "Failed

ENDIF.

ENDFORM. " display_message

&----


*& Form get_filename

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_filename .

CALL FUNCTION 'F4_FILENAME'

EXPORTING

program_name = syst-cprog

dynpro_number = syst-dynnr

  • FIELD_NAME = p_file

IMPORTING

file_name = p_file .

IF sy-subrc NE 0 .

WRITE : / 'Enter File Name'.

ENDIF.

ENDFORM. " get_filename

&----


*& Form make_file_name

&----


FORM make_file_name .

WRITE sy-datum TO date MM/DD/YYYY.

WRITE sy-uzeit TO time USING EDIT MASK ' __ __ __'.

CONCATENATE text-002 date time '.txt'

INTO v_error_filename.

ENDFORM. " make_file_name

regards

prabhu