‎2006 Sep 19 1:37 PM
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
‎2006 Sep 19 1:41 PM
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
‎2006 Sep 19 1:42 PM
hi,
actually i tried to use BAPI_ACC_DOCUMENT_POST
for that, but not succeeded.
rgds
anver
‎2006 Sep 19 1:48 PM
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
‎2006 Sep 19 1:50 PM
This is a BDC program for FBV1 transaction (parking an Accounting document
--
CONSTANTS: C_SEPARATE(1) VALUE ',',
C_REPID(40) TYPE C VALUE BDC'. "Report
"Name.
DATA: W_POS TYPE I VALUE 1.
--
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.
--
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.
--
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.
--
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.
--
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.
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