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

BDC or BAPI

Former Member
0 Likes
948

Hello everyone,

I need to load some customer credits via FB75. I have

since found out that this is an ejoy transaction and

so prevents me from using a BDC. I have also found out

that I can replicate the actions of FB75 by using a BDC

via FB01.

I have been looking on the internet this morning and

some people are suggesting using a BAPI, some say

best to use BDC via FB01 and some say to use RFBIBL00 or

even LSMW.

Does anybody have any first hand experience in what I am

trying to achieve? Does anybody know which is the best

option to choose?

Thanks in advance

Andy

4 REPLIES 4
Read only

anversha_s
Active Contributor
0 Likes
745

hi andy,

whn we do it with BAPI, its causing some probelm.

to be on safe side do it with BDC.

rgds

anver

if hlped mark points

Read only

0 Likes
745

hi,

actually i tried to use BAPI_ACC_DOCUMENT_POST

for that, but not succeeded.

rgds

anver

Read only

Former Member
0 Likes
745

Hi

I think the BAPI is better then BDC for the performance, so if you can you should use the BAPI, but now the question is: Can you use it?

The BAPIs are younger than BDC, so perhaps some functionalities (in your case some kinds of posting) couldn't be available.

For example the BAPI sets automatically the posting keys, but it sometimes needs to sets particular keys so it has to use RFBIBL00.

Max

Read only

Former Member
0 Likes
745

This is a BDC program for FBV1 transaction (parking an Accounting document

--


Constants--

CONSTANTS: C_SEPARATE(1) VALUE ',',

C_REPID(40) TYPE C VALUE BDC'. "Report

"Name.

DATA: W_POS TYPE I VALUE 1.

--


Parameters--

PARAMETERS: P_MODE LIKE CTU_PARAMS-DISMODE DEFAULT 'N',

"A: show all dynpros

"E: show dynpro on error only

"N: do not display dynpro

P_UPDATE LIKE CTU_PARAMS-UPDMODE DEFAULT 'L',

"S: synchronously

"A: asynchronously

"L: local

P_FILE TYPE LOCALFILE.

PARAMETERS: P_GROUP LIKE APQI-GROUPID DEFAULT 'PAYROLL'.

"Session Name

PARAMETERS: RB_1 RADIOBUTTON GROUP RDG1 DEFAULT 'X',

RB_2 RADIOBUTTON GROUP RDG1.

--


Variable declaration--

  • Batchinputdata of single transaction

DATA: T_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

  • messages of call transaction

DATA: T_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

  • error session opened (' ' or 'X')

DATA: W_FILE TYPE STRING,

E_GROUP_OPENED.

--


Types--

TYPE-POOLS:SLIS.

TYPES: BEGIN OF TP_INPUT,

ROW(255) TYPE C,

END OF TP_INPUT.

TYPES: BEGIN OF TP_HEADER,

INDEX(5) TYPE C,

BLDAT TYPE BLDAT, "Document Date in Document

BLART TYPE BLART, "Document type

BUKRS TYPE BUKRS, "Company Code

BUDAT TYPE BUDAT, "Posting Date in the Document

WAERS TYPE WAERS, "Currency Key

XBLNR TYPE XBLNR1, "Reference Document Number

BKTXT TYPE BKTXT, "Document Header Text

ITEMS(5) TYPE C,

END OF TP_HEADER.

TYPES: BEGIN OF TP_ITEM,

INDEX(5) TYPE C,

BSCHL TYPE BSCHL, "Posting Key

WRBTR(13) TYPE C, "Amount in document currency

HKONT TYPE HKONT, "General Ledger Account

GSBER TYPE GSBER, "Business Area

KOSTL TYPE KOSTL, "Cost Center

LINE TYPE C, "Line number

END OF TP_ITEM.

TYPES: BEGIN OF TP_FIELD,

VALUE(100) TYPE C,

END OF TP_FIELD.

TYPES : BEGIN OF TP_DISPLAY_LOG ,

BLDAT TYPE BLDAT, "Document Date in Document

BLART TYPE BLART, "Document type

BUKRS TYPE BUKRS, "Company Code

BUDAT TYPE BUDAT, "Posting Date in the Document

WAERS TYPE WAERS, "Currency Key

XBLNR TYPE XBLNR1, "Reference Document Number

BKTXT TYPE BKTXT, "Document Header Text

MSGTYP TYPE BDC_MART, "Message Type

ERRMSG(230), "Error Message

MSGV1 TYPE BDC_VTEXT1,

MSGV2 TYPE BDC_VTEXT1,

MSGV3 TYPE BDC_VTEXT1,

MSGV4 TYPE BDC_VTEXT1,

MSGNR TYPE BDC_MNR,

BOX(1),

END OF TP_DISPLAY_LOG.

*Internal table for holding messages

DATA : BEGIN OF T_ERROR_LOG OCCURS 0,

BLDAT TYPE BLDAT, "Document Date in Document

BLART TYPE BLART, "Document type

BUKRS TYPE BUKRS, "Company Code

BUDAT TYPE BUDAT, "Posting Date in the Document

WAERS TYPE WAERS, "Currency Key

XBLNR TYPE XBLNR1, "Reference Document Number

BKTXT TYPE BKTXT, "Document Header Text

MSGTYP TYPE BDC_MART, "Message Type

ERRMSG(230), "Error Message

MSGV1 TYPE BDC_VTEXT1,

MSGV2 TYPE BDC_VTEXT1,

MSGV3 TYPE BDC_VTEXT1,

MSGV4 TYPE BDC_VTEXT1,

MSGNR TYPE BDC_MNR,

BOX(1),

END OF T_ERROR_LOG.

--


Internal tables--

DATA: T_INPUT TYPE STANDARD TABLE OF TP_INPUT

WITH HEADER LINE INITIAL SIZE 0,

T_HEADER TYPE STANDARD TABLE OF TP_HEADER

WITH HEADER LINE INITIAL SIZE 0,

T_FIELD TYPE STANDARD TABLE OF TP_FIELD

WITH HEADER LINE INITIAL SIZE 0,

T_ITEM TYPE STANDARD TABLE OF TP_ITEM

WITH HEADER LINE INITIAL SIZE 0,

*Internal table for holding messages

T_T100 LIKE T100 OCCURS 0 WITH HEADER LINE,

T_DISPLAY_LOG TYPE STANDARD TABLE

OF TP_DISPLAY_LOG

WITH HEADER LINE

INITIAL SIZE 0.

--


ITabs for ALV Reporting--

DATA : T_FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,

W_LAYOUT TYPE SLIS_LAYOUT_ALV. "Layout Spec

    • Selection Screen VALUE-REQUEST FOR Application Server File path

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'

EXPORTING

DIRECTORY = '/Test'

FILEMASK = ' '

IMPORTING

SERVERFILE = P_FILE.

AT SELECTION-SCREEN.

IF RB_1 = 'X'.

IF P_GROUP IS INITIAL.

MESSAGE E000 WITH TEXT-E00. "Enter session name

ENDIF.

ENDIF.

--


Start of Selection--

START-OF-SELECTION.

PERFORM CLEAR_REFRESH. "Clearing and Refreshing all the internal table

PERFORM UPLOAD_INPUT. "Uploading input file to intenal table

PERFORM SPLIT_FIELDS. "Splitting the comma separated input file

PERFORM PREPARE_POSTING. "Populating internal tables for posting

PERFORM PARK_DOCUMENT. "Parking document using BDC in FBV1 transaction

PERFORM ERROR_LOG.

IF RB_1 = 'X'.

MESSAGE S000 WITH TEXT-SS1.

ENDIF.

&----


*& Form clear_refresh

&----


  • Clearing and Refreshing all the internal table

----


FORM CLEAR_REFRESH .

ENDFORM. " clear_refresh

&----


*& Form UPLOAD_INPUT

&----


  • Uploading input file to intenal table

----


FORM UPLOAD_INPUT .

W_FILE = P_FILE.

OPEN DATASET W_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.

IF SY-SUBRC EQ 0.

    • Store into an internal table

DO.

CLEAR T_INPUT.

READ DATASET W_FILE INTO T_INPUT.

IF SY-SUBRC NE 0.

EXIT.

ENDIF.

APPEND T_INPUT.

CLEAR T_INPUT.

ENDDO.

ELSE.

CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'

EXPORTING

TITEL = 'Error'

TEXTLINE1 = 'Cannot open the File'

EXCEPTIONS

OTHERS = 1.

STOP.

ENDIF.

CLOSE DATASET W_FILE.

ENDFORM. " UPLOAD_INPUT

&----


*& Form SPLIT_FIELDS

&----


  • Splitting the comma separated input file

----


FORM SPLIT_FIELDS .

DATA: L_C TYPE N,

L_HEADER(5) TYPE C.

L_HEADER = 0.

LOOP AT T_INPUT.

CLEAR L_C.

REFRESH T_FIELD.

SPLIT T_INPUT-ROW AT C_SEPARATE INTO TABLE T_FIELD.

DESCRIBE TABLE T_FIELD LINES L_C.

IF L_C GE 7.

L_HEADER = L_HEADER + 1.

LOOP AT T_FIELD.

IF SY-TABIX EQ 1.

T_HEADER-INDEX = L_HEADER.

ELSEIF SY-TABIX EQ 2.

T_HEADER-BLDAT = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 3.

T_HEADER-BLART = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 4.

T_HEADER-BUKRS = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 5.

T_HEADER-BUDAT = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 6.

T_HEADER-WAERS = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 7.

T_HEADER-XBLNR = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 8.

T_HEADER-BKTXT = T_FIELD-VALUE.

ENDIF.

ENDLOOP.

APPEND T_HEADER.

CLEAR T_HEADER.

ELSE.

LOOP AT T_FIELD.

IF SY-TABIX EQ 1.

T_ITEM-INDEX = L_HEADER.

ELSEIF SY-TABIX EQ 2.

T_ITEM-BSCHL = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 3.

T_ITEM-WRBTR = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 4.

T_ITEM-HKONT = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 5.

T_ITEM-GSBER = T_FIELD-VALUE.

ELSEIF SY-TABIX EQ 6.

T_ITEM-KOSTL = T_FIELD-VALUE.

ENDIF.

ENDLOOP.

COLLECT T_ITEM.

CLEAR T_ITEM.

ENDIF.

ENDLOOP.

ENDFORM. " SPLIT_FIELDS

&----


*& Form PREPARE_POSTING

&----


  • Populating internal tables for posting

----


FORM PREPARE_POSTING .

DATA: L_COUNTER(5) TYPE C.

LOOP AT T_ITEM.

T_ITEM-LINE = 'M'.

AT NEW INDEX.

T_ITEM-LINE = 'F'.

MODIFY T_ITEM TRANSPORTING LINE.

ENDAT.

AT END OF INDEX.

T_ITEM-LINE = 'L'.

MODIFY T_ITEM TRANSPORTING LINE.

ENDAT.

MODIFY T_ITEM TRANSPORTING LINE.

ENDLOOP.

LOOP AT T_HEADER.

L_COUNTER = 0.

LOOP AT T_ITEM WHERE INDEX = T_HEADER-INDEX.

L_COUNTER = L_COUNTER + 1.

ENDLOOP.

T_HEADER-ITEMS = L_COUNTER.

MODIFY T_HEADER TRANSPORTING ITEMS.

ENDLOOP.

ENDFORM. " PREPARE_POSTING

&----


*& Form park_document

&----


  • Parking document using BDC in FBV1 transaction

----


FORM PARK_DOCUMENT .

DATA: L_INDEX(5) TYPE C,

L_GSBER TYPE GSBER,

L_KOSTL TYPE KOSTL,

L_INITIAL(5) TYPE C,

L_COUNT(2) TYPE C.

CLEAR: L_INDEX,

L_INITIAL,

L_COUNT,

L_GSBER,

L_KOSTL.

L_INITIAL = 1.

PERFORM OPEN_GROUP.

LOOP AT T_HEADER.

PERFORM BDC_DYNPRO USING 'SAPLF040' '0100'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RF05V-NEWKO'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'BKPF-BLDAT'

T_HEADER-BLDAT.

PERFORM BDC_FIELD USING 'BKPF-BLART'

T_HEADER-BLART.

PERFORM BDC_FIELD USING 'BKPF-BUKRS'

T_HEADER-BUKRS.

PERFORM BDC_FIELD USING 'BKPF-BUDAT'

T_HEADER-BUDAT.

PERFORM BDC_FIELD USING 'BKPF-WAERS'

T_HEADER-WAERS.

PERFORM BDC_FIELD USING 'BKPF-XBLNR'

T_HEADER-XBLNR.

PERFORM BDC_FIELD USING 'BKPF-BKTXT'

T_HEADER-BKTXT.

PERFORM BDC_FIELD USING 'VBKPF-XBWAE'

'X'.

PERFORM BDC_FIELD USING 'FS006-DOCID'

'*'.

*item 1

READ TABLE T_ITEM WITH KEY INDEX = T_HEADER-INDEX

LINE = 'F'.

IF SY-SUBRC = 0.

PERFORM BDC_FIELD USING 'RF05V-NEWBS'

T_ITEM-BSCHL.

PERFORM BDC_FIELD USING 'RF05V-NEWKO'

T_ITEM-HKONT.

ELSE.

READ TABLE T_ITEM WITH KEY INDEX = T_HEADER-INDEX

LINE = 'L'.

IF SY-SUBRC = 0.

PERFORM BDC_FIELD USING 'RF05V-NEWBS'

T_ITEM-BSCHL.

PERFORM BDC_FIELD USING 'RF05V-NEWKO'

T_ITEM-HKONT.

ENDIF.

ENDIF.

L_INDEX = L_INITIAL.

DO.

READ TABLE T_ITEM INDEX L_INDEX.

IF SY-SUBRC = 0.

IF T_ITEM-LINE = 'L'.

EXIT.

ELSE.

*Entry with next line item{

PERFORM BDC_DYNPRO USING 'SAPLF040' '0300'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RF05V-NEWKO'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'BSEG-WRBTR'

T_ITEM-WRBTR.

PERFORM BDC_FIELD USING 'BSEG-VALUT'

T_HEADER-BLDAT.

L_GSBER = T_ITEM-GSBER.

IF NOT T_ITEM-KOSTL IS INITIAL.

L_KOSTL = T_ITEM-KOSTL.

ENDIF.

ENDIF.

L_INDEX = L_INDEX + 1.

READ TABLE T_ITEM INDEX L_INDEX.

IF SY-SUBRC = 0.

PERFORM BDC_FIELD USING 'RF05V-NEWBS'

t_item-bschl.

PERFORM BDC_FIELD USING 'RF05V-NEWKO'

t_item-hkont.

ENDIF.

  • PERFORM BDC_FIELD USING 'DKACB-FMORE'

  • 'X'.

*Entry with next line item}

*Entering busi area and cost center

IF NOT L_KOSTL IS INITIAL.

PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'COBL-KOSTL'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTE'.

PERFORM BDC_FIELD USING 'COBL-GSBER'

L_GSBER.

PERFORM BDC_FIELD USING 'COBL-KOSTL'

L_KOSTL.

ELSE.

PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'COBL-GSBER'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTE'.

PERFORM BDC_FIELD USING 'COBL-GSBER'

L_GSBER.

ENDIF.

CLEAR: L_GSBER, L_KOSTL.

ENDIF.

ENDDO.

L_INITIAL = L_INITIAL + T_HEADER-ITEMS.

READ TABLE T_ITEM WITH KEY INDEX = T_HEADER-INDEX

LINE = 'L'.

IF SY-SUBRC = 0.

*Entering amount only.. last line item

PERFORM BDC_DYNPRO USING 'SAPLF040' '0300'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'BSEG-WRBTR'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=BP'.

PERFORM BDC_FIELD USING 'BSEG-WRBTR'

T_ITEM-WRBTR.

PERFORM BDC_FIELD USING 'DKACB-FMORE'

'X'.

IF NOT T_ITEM-KOSTL IS INITIAL.

PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'COBL-KOSTL'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTE'.

PERFORM BDC_FIELD USING 'COBL-GSBER'

T_ITEM-GSBER.

PERFORM BDC_FIELD USING 'COBL-KOSTL'

T_ITEM-KOSTL.

ELSE.

PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'COBL-GSBER'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTE'.

PERFORM BDC_FIELD USING 'COBL-GSBER'

T_ITEM-GSBER.

ENDIF.

ENDIF.

PERFORM BDC_TRANSACTION USING 'FBV1'.

ENDLOOP.

PERFORM CLOSE_GROUP.

ENDFORM. " park_document

&----


*& Form f4_help

&----


  • Providing F4 help for input file

----


FORM F4_HELP .

CALL FUNCTION 'C13G0_GET_FILENAME_F4'

CHANGING

X_FILENAME = P_FILE

EXCEPTIONS

MASK_TOO_LONG = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

MESSAGE I000 WITH TEXT-F01. "Enter a text file with proper path

ENDIF.

ENDFORM. " f4_help

----


  • Start new screen *

----


FORM BDC_DYNPRO USING PROGRAM DYNPRO.

CLEAR T_BDCDATA.

T_BDCDATA-PROGRAM = PROGRAM.

T_BDCDATA-DYNPRO = DYNPRO.

T_BDCDATA-DYNBEGIN = 'X'.

APPEND T_BDCDATA.

ENDFORM. "BDC_DYNPRO

----


  • Insert field *

----


FORM BDC_FIELD USING FNAM FVAL.

CLEAR T_BDCDATA.

T_BDCDATA-FNAM = FNAM.

T_BDCDATA-FVAL = FVAL.

APPEND T_BDCDATA.

ENDFORM. "BDC_FIELD

----


  • create batchinput session *

  • (not for call transaction using...) *

----


FORM OPEN_GROUP.

IF RB_1 = 'X'.

  • WRITE: /,

  • /(20) TEXT-I01, P_GROUP.

  • open batchinput group

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = P_GROUP

USER = SY-UNAME

KEEP = 'X'

HOLDDATE = SY-DATUM.

IF SY-SUBRC NE 0.

WRITE: /(30) TEXT-I02,

(12) 'returncode:'(I05),

SY-SUBRC.

ENDIF.

ENDIF.

ENDFORM. "OPEN_GROUP

----


  • end batchinput session *

  • (call transaction using...: error session) *

----


FORM CLOSE_GROUP.

IF RB_1 = 'X'.

  • close batchinput group

CALL FUNCTION 'BDC_CLOSE_GROUP'.

IF SY-SUBRC NE 0.

WRITE: /(30) 'BDC_CLOSE_GROUP'(I04),

(12) 'returncode:'(I05),

SY-SUBRC.

ENDIF.

COMMIT WORK.

ENDIF.

ENDFORM. "CLOSE_GROUP

----


  • Start new transaction according to parameters *

----


FORM BDC_TRANSACTION USING TCODE.

DATA: L_MSTRING(480),

L_MESSAGE(400),

L_SUBRC LIKE SY-SUBRC.

CLEAR: T_MESSTAB,

L_MSTRING,

L_MESSAGE.

REFRESH T_MESSTAB.

  • batch input session

IF RB_1 = 'X'.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = TCODE

TABLES

DYNPROTAB = T_BDCDATA.

ELSE.

CALL TRANSACTION TCODE USING T_BDCDATA

MODE P_MODE

UPDATE P_UPDATE

MESSAGES INTO T_MESSTAB.

L_SUBRC = SY-SUBRC.

SORT T_MESSTAB.

DELETE ADJACENT DUPLICATES FROM T_MESSTAB.

IF NOT T_MESSTAB[] IS INITIAL.

SELECT * FROM T100

INTO TABLE T_T100

FOR ALL ENTRIES IN T_MESSTAB

WHERE SPRSL = T_MESSTAB-MSGSPRA

AND ARBGB = T_MESSTAB-MSGID

AND MSGNR = T_MESSTAB-MSGNR.

LOOP AT T_MESSTAB.

READ TABLE T_T100 WITH KEY SPRSL = T_MESSTAB-MSGSPRA

ARBGB = T_MESSTAB-MSGID

MSGNR = T_MESSTAB-MSGNR.

IF SY-SUBRC = 0.

L_MSTRING = T_T100-TEXT.

IF L_MSTRING CS '&1'.

REPLACE '&1' WITH T_MESSTAB-MSGV1 INTO L_MSTRING.

REPLACE '&2' WITH T_MESSTAB-MSGV2 INTO L_MSTRING.

REPLACE '&3' WITH T_MESSTAB-MSGV3 INTO L_MSTRING.

REPLACE '&4' WITH T_MESSTAB-MSGV4 INTO L_MSTRING.

ELSE.

REPLACE '&' WITH T_MESSTAB-MSGV1 INTO L_MSTRING.

REPLACE '&' WITH T_MESSTAB-MSGV2 INTO L_MSTRING.

REPLACE '&' WITH T_MESSTAB-MSGV3 INTO L_MSTRING.

REPLACE '&' WITH T_MESSTAB-MSGV4 INTO L_MSTRING.

ENDIF.

CONDENSE L_MSTRING.

IF T_MESSTAB-MSGTYP = 'S' OR

T_MESSTAB-MSGTYP = 'E' OR

T_MESSTAB-MSGTYP = 'W' OR

T_MESSTAB-MSGTYP = 'I'.

PERFORM PREPARE_ERROR_LOG USING L_MSTRING

T_MESSTAB-MSGNR

T_MESSTAB-MSGV1

T_MESSTAB-MSGV2

T_MESSTAB-MSGV3

T_MESSTAB-MSGV4.

ENDIF.

ELSE.

CONCATENATE T_MESSTAB-MSGV1

T_MESSTAB-MSGV2

T_MESSTAB-MSGV3

T_MESSTAB-MSGV4

INTO L_MESSAGE.

IF T_MESSTAB-MSGTYP = 'S' OR

T_MESSTAB-MSGTYP = 'E' OR

T_MESSTAB-MSGTYP = 'W' OR

T_MESSTAB-MSGTYP = 'I'.

PERFORM PREPARE_ERROR_LOG USING L_MESSAGE

T_MESSTAB-MSGNR

T_MESSTAB-MSGV1

T_MESSTAB-MSGV2

T_MESSTAB-MSGV3

T_MESSTAB-MSGV4.

ENDIF.

ENDIF.

ENDLOOP.

ENDIF.

ENDIF.

REFRESH T_BDCDATA.

IF RB_1 = 'X'.

IF L_SUBRC <> 0 ."AND E_GROUP <> SPACE.

IF E_GROUP_OPENED = ' '.

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = P_GROUP

USER = SY-UNAME

KEEP = 'X'

HOLDDATE = SY-DATUM.

E_GROUP_OPENED = 'X'.

ENDIF.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = TCODE

TABLES

DYNPROTAB = T_BDCDATA.

ENDIF.

ENDIF.

ENDFORM. "BDC_TRANSACTION

**&----


*

**& Form PREPARE_ERROR_LOG

**&----


*

FORM PREPARE_ERROR_LOG USING FP_MESG

MSGNR

MSGV1

MSGV2

MSGV3

MSGV4.

.

MOVE-CORRESPONDING T_HEADER TO T_ERROR_LOG.

MOVE: T_MESSTAB-MSGTYP TO T_ERROR_LOG-MSGTYP,

T_MESSTAB-MSGNR TO T_ERROR_LOG-MSGNR,

FP_MESG TO T_ERROR_LOG-ERRMSG,

MSGV1 TO T_ERROR_LOG-MSGV1,

MSGV2 TO T_ERROR_LOG-MSGV2,

MSGV3 TO T_ERROR_LOG-MSGV3,

MSGV4 TO T_ERROR_LOG-MSGV4.

APPEND T_ERROR_LOG.

CLEAR T_ERROR_LOG.

ENDFORM. " PREPARE_ERROR_LOG

&----


*& Form ERROR_LOG

&----


  • Displaying

----


FORM ERROR_LOG .

CLEAR T_ERROR_LOG.

IF NOT T_ERROR_LOG[] IS INITIAL.

T_DISPLAY_LOG[] = T_ERROR_LOG[].

  • Delete messages that are warning and information.

DELETE T_DISPLAY_LOG WHERE MSGTYP EQ 'I' OR MSGTYP EQ 'W'.

  • Removing the message like 'Specifications stored,when document no

  • is entered ( MSGNR = 278 ).

  • Removing the message like '& items selected when document are

  • selected is entered ( MSGNR = '074' ).

DELETE T_DISPLAY_LOG WHERE MSGNR EQ '278' OR MSGNR EQ '074'.

  • Subroutine to Build the field catalog for display of messages

PERFORM BUILD_FIELD_CAT.

  • FM to display the message in ALV GRID FORMAT

PERFORM DISPLAY.

ENDIF.

ENDFORM. " ERROR_LOG

&----


*& Form BUILD_FIELD_CAT

&----


  • text

----


FORM BUILD_FIELD_CAT .

*Field catalog is populated.

PERFORM FIELDS_FIELD_CATALOG TABLES T_FIELDCATALOG

USING :'T_DISPLAY_LOG' 'BLDAT' ' ' TEXT-T01 '10' W_POS,

'T_DISPLAY_LOG' 'BLART' ' ' TEXT-T02 '2' W_POS,

'T_DISPLAY_LOG' 'BUKRS' ' ' TEXT-T03 '4' W_POS,

'T_DISPLAY_LOG' 'BUDAT' ' ' TEXT-T04 '10' W_POS,

'T_DISPLAY_LOG' 'WAERS' ' ' TEXT-T05 '3' W_POS,

'T_DISPLAY_LOG' 'XBLNR' ' ' TEXT-T06 '5' W_POS,

'T_DISPLAY_LOG' 'BKTXT' ' ' TEXT-T07 '10' W_POS,

'T_DISPLAY_LOG' 'MSGTYP' ' ' TEXT-T08 '1' W_POS,

'T_DISPLAY_LOG' 'ERRMSG' ' ' TEXT-T09 '20' W_POS.

ENDFORM. " BUILD_FIELD_CAT

&----


*& Form fields_field_catalog

&----


FORM FIELDS_FIELD_CATALOG TABLES T_FIELDCATALOG

STRUCTURE T_FIELDCATALOG

USING P_TABNAME

P_FIELDNAME

P_KEY

P_TEXT

P_OUTPUT_LEN

P_POS.

T_FIELDCATALOG-TABNAME = P_TABNAME.

T_FIELDCATALOG-FIELDNAME = P_FIELDNAME.

T_FIELDCATALOG-SELTEXT_L = P_TEXT.

T_FIELDCATALOG-KEY = P_KEY.

T_FIELDCATALOG-OUTPUTLEN = P_OUTPUT_LEN.

T_FIELDCATALOG-COL_POS = P_POS.

APPEND T_FIELDCATALOG.

CLEAR T_FIELDCATALOG.

W_POS = W_POS + 1.

ENDFORM. " fields_field_catalog

&----


*& Form display

&----


FORM DISPLAY .

*Build Layout

W_LAYOUT-ZEBRA = 'X'.

W_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.

W_LAYOUT-F2CODE = '&ETA'.

W_LAYOUT-DETAIL_POPUP = 'X'.

*For ALV Display.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

I_CALLBACK_PROGRAM = C_REPID

IS_LAYOUT = W_LAYOUT

IT_FIELDCAT = T_FIELDCATALOG[]

TABLES

T_OUTTAB = T_DISPLAY_LOG

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

MESSAGE E000 WITH TEXT-E10. "Exception in ALV Display

ENDIF.

ENDFORM. " display