Avoiding messages in call transaction.
Hello.
I would like to avoid messages to be displayed during a call transaction.
I have already stored them in an internal table, but that doesn't prevent them to appear during execution.
What should I do?
Thanks.
Hi,
Try
CALL TRANSACTION tcode MODE 'N'
Please reward if useful.
thanks
Arjun
Similar Messages
-
Display error messages in Call transaction
Hi Gurus,
I have donme BDC using call transaction..can anybody help me in displaying the error messages in call transaction..
A detailed code wud be very much helpful..
full marks wud given
regards
Sahilhi check this,
PERFORM Z11_BDC_VA02.
ELSE.
MESSAGE I013 WITH TEXT-013.
ENDIF.
ELSE.
CLEAR V_FLAG.
MESSAGE E012 WITH TEXT-012.
ENDIF.
FORM z11_bdc_va02 .
*COVER 1
perform bdc_dynpro using 'SAPMV45A' '0102'.
perform bdc_field using 'BDC_CURSOR'
'VBAK-VBELN'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'VBAK-VBELN'
wa_head_detail-vbeln.
*COVER 2
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'=T\03'.
perform bdc_field using 'BDC_CURSOR'
'RV45A-MABNR(01)'.
*COVER 3
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'=ITNE'.
perform bdc_field using 'BDC_CURSOR'
'RV45A-MABNR(01)'.
*COVER 4
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
perform bdc_field using 'BDC_CURSOR'
'RV45A-KWMENG'.
perform bdc_field using 'VBAP-MATNR'
wa_head_detail-matnr.
perform bdc_field using 'RV45A-KWMENG'
v_kwmeng.
perform bdc_field using 'VBAP-VRKME'
wa_head_detail-meins.
*COVER 5
perform bdc_dynpro using 'SAPLSPO2' '0101'.
perform bdc_field using 'BDC_OKCODE'
'=OPT1'.
call transaction 'VA02' using it_tab1 mode 'A' UPDATE 'S' MESSAGES INTO
IT_TAB_ERROR.
"CAlling transaction with all screen
Loop at it_tab_error.
if it_tab_ERROR-MSGTYP = 'E' .
clear v_flag.
message I014 with TEXT-014.
else.
clear v_flag.
message I019 with TEXT-019.
endif.
endloop.
refresh it_tab1.
clear V_KWMENG.
ENDFORM. " z11_bdc_va02
Reward if helpful,
Gaurav J.
Edited by: GAURAV on Feb 4, 2008 9:10 AM -
Where will store the messages in Call transaction
Hi all,
will the messages in call transaction stored in database? if not where it will be stored?
Thanks for sending reply
VenkatHello Venkat,
Messages in the Call Transaction are stored in a Internal table of type BDCMSGCOLL.They are not stored in the Database.
We need to do the following.
"Declare internal table of type BDCMSGCOLL
Data : t_messages TYPE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
CALL TRANSACTION ia06
USING t_bdc_data
MODE 'A'
UPDATE 'S'
MESSAGES INTO t_messages.
DATA: l_mstring(480).
LOOP AT t_messages.
SELECT SINGLE * FROM t100 WHERE sprsl = t_messages-msgspra
AND arbgb = t_messages-msgid
AND msgnr = t_messages-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH t_messages-msgv1 INTO l_mstring.
REPLACE '&2' WITH t_messages-msgv2 INTO l_mstring.
REPLACE '&3' WITH t_messages-msgv3 INTO l_mstring.
REPLACE '&4' WITH t_messages-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH t_messages-msgv1 INTO l_mstring.
REPLACE '&' WITH t_messages-msgv2 INTO l_mstring.
REPLACE '&' WITH t_messages-msgv3 INTO l_mstring.
REPLACE '&' WITH t_messages-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
WRITE: / t_messages-msgtyp, l_mstring(250).
ELSE.
WRITE: / t_messages.
ENDIF.
ENDLOOP.
Regards,
Arun Sambargi. -
How to get a message from call transaction in RFC call
Hello :
I would like to ask one favor i make a 2 call transaction in a RFC funtion when i make the first CALL TRANSACTION using te next statement.
CALL TRANSACTION 'F-43'
USING bdcdata MESSAGES INTO messtab2 OPTIONS FROM l_fromopt.
I recive the number of the document in the field sy-msgv1 from the message table messtab2 , then i make the second CALL TRANSACTION and i am waiting to get the other number of the document from the table messtab3 using the next statatement.
CALL TRANSACTION 'FIBLFFP'
USING bdcdata MESSAGES INTO messtab3 OPTIONS FROM l_fromopt. but now the table messtab3 don't send the number of document , and i need to get the number of this document for making a REFERENCE.
thanks a lot for you helpFORM bdc_transaction USING tcode TYPE tcode.
DATA: l_mstring(480).
DATA: l_subrc TYPE sy-subrc,
lwa_t100 TYPE t100.
DATA : gv_ctumode TYPE ctu_params-dismode VALUE 'A'.
call transaction using
BREAK-POINT.
REFRESH gt_messtab.
CLEAR gwa_messtab.
gv_ctumode = gc_ctumode.
CALL TRANSACTION tcode USING gi_bdcdata "#EC CI_CALLTA
MODE gv_ctumode
UPDATE gc_cupdate
MESSAGES INTO gt_messtab.
l_subrc = sy-subrc.
IF sy-subrc <> 0.
WRITE: / 'CALL_TRANSACTION',
tcode,
'returncode:',
l_subrc,
'RECORD:',
sy-index.
LOOP AT gt_messtab INTO gwa_messtab.
CLEAR lwa_t100.
SELECT SINGLE * FROM t100 INTO lwa_t100 WHERE sprsl = gwa_messtab-msgspra
AND arbgb = gwa_messtab-msgid
AND msgnr = gwa_messtab-msgnr.
IF sy-subrc = 0.
l_mstring = lwa_t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH gwa_messtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH gwa_messtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH gwa_messtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH gwa_messtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH gwa_messtab-msgv1 INTO l_mstring.
REPLACE '&' WITH gwa_messtab-msgv2 INTO l_mstring.
REPLACE '&' WITH gwa_messtab-msgv3 INTO l_mstring.
REPLACE '&' WITH gwa_messtab-msgv4 INTO l_mstring.
ENDIF.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = gwa_messtab-msgid
lang = sy-langu
no = gwa_messtab-msgnr
v1 = gwa_messtab-msgv1
v2 = gwa_messtab-msgv2
v3 = gwa_messtab-msgv3
v4 = gwa_messtab-msgv4
IMPORTING
msg = l_mstring
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CONDENSE l_mstring.
IF NOT l_mstring IS INITIAL.
WRITE: / gwa_messtab-msgtyp, l_mstring(250).
MESSAGE l_mstring TYPE 'I'.
ENDIF.
ELSE.
WRITE: / gwa_messtab.
ENDIF.
ENDLOOP.
SKIP.
ENDIF. -
Messages from call transaction don't appear
Hello everyone,
I'm having a problem that i never experienced.
I have a call transaction for T-code 'FOB1', like this:
CALL TRANSACTION f_tcode USING bdc_tab MODE f_mode UPDATE 'S'
MESSAGES INTO messtab.
I allready tried using 'A' mode and 'N' mode, but the problem persists. My table messtab, that should, at least, bring the message for successfull creation of document, is completely empty!! with one difference. If i choose "visible" mode, a warning appears that is not a concern for creating the document. That 'W' message appears in my table messtab, ONLY if i run the call transaction with 'visible' mode. It looks like if the messages are being deleted so fast that the system doesn't catch them.
Any suggestions ??
Thank you.Thank you for all your answers, but my problem persists.
In response to all:
- I tried eliminating the UPDATE statement or using option 'A', but the message table still appears empty.
- When i create a document through transaction FOB1, it does send a S message with the number of the document created.
- I tried creating a Batch Input and process it through SM35, and the log shows several S messages.
I'm having trouble solving this one. Any more suggestions ? -
How to track error message when calling Transaction: va02
Hi all,
As we all know, when we change an order through T-Code: VA02, system will update modified data to corresponding database. Meanwhile, if our operate is not legal or incorrect on T-code: VA02, system will call corresponding error messages to us.
Now I want to know:
1. how to track the error messages
2. Is there any Tcode such as: SM21 that we can see the message logs after our operation?
Thanks.Hi ,
message table for call transaction
DATA: BEGIN OF G_T_MSG OCCURS 0.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA: END OF G_T_MSG.
Exucute transaction via Call Transaction
CALL TRANSACTION 'FB01'
USING g_t_bdcdata
MODE g_l_mode
UPDATE 'S'
MESSAGES INTO g_t_msg .
errors will be stpored in the table g_t_msg ..
Thanks . -
Bdc error message in call transaction
Hi all,
Can anyone send me a program where they have used the ' BDCMSGCOLL ' structure and format_message FM. I need only complete program, please don't send sample codings or just a part of coding.
Points are assured.
Thanks and regards,
subbu.Hi,
Here is the BDC recording program for updating a custom field (out of 3 custom fields) in CALL TRANSACTION method depends upon which value is given in text file, based on that the corresponding radio button will be selected for that PERNR in PA30.(For 3 custom fields in PA0007) created.
Flat file contains 1) PENR 2) Custom field1 3) CF2 4) CF3.
The values are like [ '636363', ' ', 'X', ' ' ] .
Here is the complete program using BDCMSGCOLL structure.
report Y0007_BDC NO STANDARD PAGE HEADING MESSAGE-ID RP LINE-SIZE 180." LINE-COUNT 28.
DATA DECLARATION *
TYPES : BEGIN OF TY_0007,
PERNR TYPE PERNR, " PERNR
SCHKZ TYPE SCHKN, " Work Schudule
ZTERF TYPE PT_ZTERF, " Time Magmt Status
R1 TYPE C,
R2 TYPE C,
R3 TYPE C,
END OF TY_0007.
DATA : INT_0007 TYPE STANDARD TABLE OF TY_0007 WITH HEADER LINE,
WA_0007 TYPE TY_0007.
DATA: P_FNAME TYPE IBIPPARMS-PATH.
DATA : begin of int_out occurs 0,
pernr type persno,
mesg(300),
end of int_out.
DATA : BEGIN OF int_err occurs 0,
pernr type persno,
mesg(300),
end of int_err.
include bdcrecx1.
SELECTION SCREEN *
SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN BEGIN OF BLOCK B WITH FRAME.
PARAMETERS : P_PATH TYPE string.
SELECTION-SCREEN END OF BLOCK B.
SELECTION-SCREEN END OF BLOCK A.
CALL FUNCTION FOR INPUT FILE NAME *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_path.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = P_FNAME.
p_path = p_fname.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
start-of-selection.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = P_PATH
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = INT_0007
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.
perform open_group.
*Looping pernr values*
LOOP AT INT_0007 INTO WA_0007.
perform bdc_dynpro using 'SAPMP50A' '1000'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
*INSERTING THE PERNR VALUE*
perform bdc_field using 'RP50G-PERNR'
WA_0007-PERNR. "'00001011'.
perform bdc_field using 'RP50G-TIMR6'
'X'.
perform bdc_field using 'BDC_CURSOR'
'RP50G-CHOIC'.
perform bdc_field using 'RP50G-CHOIC'
'0007'.
perform bdc_dynpro using 'SAPMP50A' '1000'.
perform bdc_field using 'BDC_CURSOR'
'RP50G-PERNR'.
perform bdc_field using 'BDC_OKCODE'
'=INS'.
perform bdc_field using 'RP50G-PERNR'
WA_0007-PERNR. "'1011'.
perform bdc_field using 'RP50G-TIMR6'
'X'.
perform bdc_field using 'RP50G-CHOIC'
'Planned Working Time - 0007'.
perform bdc_dynpro using 'MP000700' '2000'.
perform bdc_field using 'BDC_OKCODE'
'=UPD'.
perform bdc_field using 'P0007-BEGDA'
'12/01/2007'.
perform bdc_field using 'P0007-ENDDA'
'12/31/9999'.
*INSERTING THE WORK SCHEDULE*
perform bdc_field using 'P0007-SCHKZ'
WA_0007-SCHKZ. "'N12'.
perform bdc_field using 'P0007-ZTERF'
WA_0007-ZTERF. "'1'.
*INSERTING THE OVERTIME CLASS*
IF WA_0007-R1 = 'X'.
perform bdc_field using 'ZHQ0007-OVT_ELGBLE'
'X'.
ELSEIF WA_0007-R2 = 'X'.
perform bdc_field using 'ZHQ0007-OVT_NOTELG'
'X'.
ELSEIF WA_0007-R3 = 'X'.
perform bdc_field using 'ZHQ0007-OVT_TMPELG'
'X'.
ENDIF.
*BDC output for transaction code*
perform bdc_transaction using 'pa30'. (STD)
perform f_bdc_output using 'pa30'. (write on our own)
ENDLOOP.
**Writing the output**
PERFORM f_write_output.
perform close_group.
*& Form f_write_output
text
--> p1 text
<-- p2 text
FORM f_write_output .
*For Successfull Records*
if int_OUT[] IS NOT INITIAL.
WRITE : /50 TEXT-004 color 4.
write : / sy-uline.
LOOP AT INT_OUT.
WRITE : /40 int_out-pernr,50 '-->',54 int_out-mesg.
ENDLOOP.
ENDIF.
write / sy-uline.
SKIP 2.
*For Error records*
if int_err[] IS NOT INITIAL.
WRITE /53 text-005 color 6.
write / sy-uline.
LOOP AT int_err.
write :/40 int_err-pernr,50 '-->',54 int_err-mesg.
ENDLOOP.
endif.
write / sy-uline.
ENDFORM. " f_write_output
*& Form f_bdc_output
text
-->P_0369 text
FORM f_bdc_output USING VALUE(P_0369).
DATA: L_MSTRING(480).
DATA: L_SUBRC LIKE SY-SUBRC.
REFRESH MESSTAB.
*Capturing the output message*
CALL TRANSACTION 'PA30' USING BDCDATA
MODE CTUMODE
UPDATE CUPDATE
MESSAGES INTO MESSTAB.
L_SUBRC = SY-SUBRC.
IF SMALLLOG <> 'X'.
LOOP AT MESSTAB.
*Selection for capturing the text for records*
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
AND ARBGB = MESSTAB-MSGID
AND MSGNR = MESSTAB-MSGNR.
IF SY-SUBRC = 0.
*Moving the text from T100 to local variable*
L_MSTRING = T100-TEXT.
IF ( MESSTAB-MSGTYP = 'W' or
MESSTAB-MSGTYP = 'S' OR
MESSTAB-MSGTYP = 'E' ).
*Moving the success records pernr and text to internal table*
IF MESSTAB-MSGTYP = 'S'.
INT_OUT-PERNR = WA_0007-PERNR.
INT_OUT-MESG = L_MSTRING.
APPEND INT_OUT.
CLEAR INT_OUT.
*Moving the success records pernr and text to internal table*
ELSEIF MESSTAB-MSGTYP = 'E'.
*For getting the error text exactly*
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
INT_ERR-PERNR = WA_0007-PERNR.
INT_ERR-MESG = L_MSTRING.
APPEND INT_ERR.
CLEAR INT_ERR.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
SKIP.
ENDIF.
*& CALL FUNCTION 'BDC_OPEN_GROUP'
IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
IF E_GROUP_OPENED = ' '.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = E_GROUP
USER = E_USER
KEEP = E_KEEP
HOLDDATE = E_HDATE.
E_GROUP_OPENED = 'X'.
ENDIF.
*& CALL FUNCTION 'BDC_INSERT'
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'PA30'
TABLES
DYNPROTAB = BDCDATA.
*& CALL FUNCTION 'BDC_CLOSE_GROUP'
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 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.
ENDIF.
REFRESH BDCDATA.
ENDFORM. " f_bdc_output
Hope it helps u..
Kindly reward points if helpful
Regards,
Shanthi -
Error message during call transaction
Hi all,
I want to get the message type after calling the transaction method. I've simulated an input for error, and I expect that the returned message type should be 'E' or 'W'. But it (SY-MSGTY and msgtab-MSGTYP) still returns 'S' even there is error. What's wrong ?
Call transaction 'VL02N' USING BTAB MODE 'N' UPDATE 'S'.
messages into msgtab.CALL TRANSACTION tcode USING bdcdata
MODE ctumode
UPDATE cupdate
MESSAGES INTO messtab.
LOOP AT messtab.
msgtype = messtab-msgtyp.
Check what the actual tranaction is giving as message for eg. mm01 does give u a sucess message saying data for the matnr is already maintained. -
Warning message in call transaction
Hi,
I am using a CALL TRANSACTION with MODE E due to which all the Warning messages are being ignored. I can't change the MODE E option.
Is there any other way by which i can display the warning messages while updating data.
THANKS IN ADVANCE.Try using FM FORMAT_MESSAGE after CALL TRANSACTION.
-
Pls tell me how to check the errors in BDC CALL TRANSACTION
lemme know
HI ,
check for the bold part..
REPORT ZCONCUR_UPLOAD_TO_SAP NO STANDARD PAGE HEADING
LINE-SIZE 170
LINE-COUNT 58
MESSAGE-ID ZM.
Internal Table *
*-Internal table for the Header input data from the Comma Delimited file
DATA: BEGIN OF IT_DATA_HEADER OCCURS 0,
ID TYPE C, "Identifier
BUKRS(6), "Company Code
WAERS(7), "Currency
NEWKO(12), "Vendor
XBLNR(16), "First Name
XBLNR1(16), "Last Name
BLDAT(12), "Document/Posting date
PK(15), "Reference
WRBTR(15), "Amount
BKTXT(27), "Doc.header text
BKTXT1(27), "Item text
SELNO(8), "Serial No
END OF IT_DATA_HEADER.
*-Internal table for the item input data from the Comma Delimited file
DATA: BEGIN OF IT_DATA_ITEM OCCURS 0,
ID TYPE C, "Identifier
NEWKO(19), "Vendor
BUKRS(6), "Company Code
KOSTL(12), "Cost center
WRBTR(15), "Amount
SGTXT(50), "Text
SELNO(8), "Serial No Header
SELNO1(8), "Serial No item
END OF IT_DATA_ITEM .
*-Internal table for the Header input data from the Comma Delimited file
*-Removing " " From Comma Delimited file
DATA: BEGIN OF IT_FINAL_HEADER OCCURS 0,
ID TYPE C, "Identifier
BUKRS LIKE BKPF-BUKRS, "Company Code
WAERS LIKE BKPF-WAERS, "Currency
NEWKO TYPE RF05A-NEWKO, "Vendor
XBLNR LIKE BKPF-XBLNR,
XBLNR1 LIKE BKPF-XBLNR,
BLDAT(10), " LIKE BKPF-BLDAT, "Date
PK(15), "Reference
WRBTR(15), "Amount
BKTXT LIKE BKPF-BKTXT, "Doc.header text
BKTXT1 LIKE BKPF-BKTXT, "Item text
SELNO TYPE I, "Serial No
FLAG TYPE C,
END OF IT_FINAL_HEADER.
*-Internal table for the Item input data from the Comma Delimited file
*-Removing " " From Comma Delimited file
DATA: BEGIN OF IT_FINAL_ITEM OCCURS 0,
ID TYPE C, "Identifier
NEWKO TYPE RF05A-NEWKO, "Account
BUKRS LIKE BKPF-BUKRS, "Company Code
KOSTL LIKE BSEG-KOSTL, "Cost Center
WRBTR(15), "Amount
SGTXT LIKE BSEG-SGTXT, "Text
SELNO TYPE I, "Serial No
SELNO1 TYPE I, "Serial No
END OF IT_FINAL_ITEM.
**-Internal table for the input data from the file
DATA : BEGIN OF P_DOWNLOAD OCCURS 0,
V_FILEREC(1000) TYPE C,
END OF P_DOWNLOAD.
*--- Internal Table for Success messages
DATA : BEGIN OF I_SUCC OCCURS 0,
HEADER(50),
MSG(100), "SUCCESS message
END OF I_SUCC.
*--- Internal Table for error messages
DATA : BEGIN OF I_ERROR_LOG OCCURS 0,
HEADER(50),
MSG(100), "Error message
END OF I_ERROR_LOG.
*--- Internal table for getting the BDC data
DATA : BEGIN OF IT_BDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA. " Table to hold BDC data
DATA : END OF IT_BDCDATA.
*--- Internal table for reading the messages of call transaction
DATA : BEGIN OF IT_MESSAGE_TAB OCCURS 0.
INCLUDE STRUCTURE BDCMSGCOLL. "Table to hold messages
DATA : END OF IT_MESSAGE_TAB.
DATA DECLARATIONS *
DATA:
V_ERROR_COUNTER TYPE I, " error records counter
V_MSG(100), " used for Error message
V_LINES TYPE I, " used for format message
V_HEAD LIKE SY-CPROG, " Heading for report
XMODE VALUE 'N', " EXECUTION MODE
V_SUCCESS_COUNTER TYPE I, " Success records counter
V_UNAME LIKE APQI-USERID, " User Name
V_TOTAL TYPE I. " Total records uploaded
DATA : V_SELNO TYPE I.
DATA : V_CHECK TYPE I.
DATA : V_HEADER(50) TYPE C. "Header Information
DATA : V_SUCC_MSG LIKE BDCMSGCOLL-MSGV1."Success Message
DATA : V_ZERO(4) VALUE '0.00'. "Checking Zero
DATA : V_CHECK_ZERO LIKE BSEG-WRBTR. "Checking Zero
DATA : V_CHECK_ZERO1 LIKE BSEG-WRBTR. "Checking Zero
DATA : V_SYSTEMDATE LIKE BKPF-BUDAT.
DATA : V_VALUE TYPE I.
DATA : V_VALUE1 TYPE I.
DATA : V_VALUE2 TYPE I.
Flags
DATA:
F_BDC_OPEN, " BDC session open check.
F_CONTINUE_PROCESSING. " To continue further processing
CONSTANTS *
CONSTANTS:
C_SESSION_NAME LIKE APQI-GROUPID VALUE 'F-43', "Session
C_X VALUE 'X'. " Used for falgs
SELECTION SCREEN *
*--- Selection Screen with Block and title
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-038.
PARAMETER: P_FNAME LIKE RLGRAP-FILENAME DEFAULT
'C:\Concur.txt'.
SELECTION-SCREEN END OF BLOCK B1.
AT SELECTION SCREEN ON VALUE-REQUEST
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
FILE_NAME = P_FNAME
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
MESSAGE E999 WITH 'Error in opening a file'(009).
ENDIF.
Top-of-page *
TOP-OF-PAGE .
*---perform to display the standard header
PERFORM STANDARD_HEADER.
--START OF SELECTION--
START-OF-SELECTION.
Upload data
PERFORM UPLOAD_DATA.
move data to bdcdata internal table
PERFORM MOVE_DATA_F43.
*--- Posting the valid data to F-43
IF F_BDC_OPEN = C_X.
*---perform to close bdc group
PERFORM CLOSE_GROUP.
ENDIF.
END OF SELECTION *
END-OF-SELECTION.
CHECK F_CONTINUE_PROCESSING IS INITIAL.
PERFORM DISPLAY_REPORT.
*& Form MESSAGE_FORMAT
MESSAGE FORMAT
FORM MESSAGE_FORMAT.
CLEAR V_MSG.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = IT_MESSAGE_TAB-MSGID
LANG = 'EN'
NO = IT_MESSAGE_TAB-MSGNR
V1 = IT_MESSAGE_TAB-MSGV1
V2 = IT_MESSAGE_TAB-MSGV2
V3 = IT_MESSAGE_TAB-MSGV3
V4 = IT_MESSAGE_TAB-MSGV4
IMPORTING
MSG = V_MSG
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
V_MSG = SPACE.
ENDIF.
ENDFORM. " MESSAGE_FORMAT
*& Form F4_HELP
FORM F4_HELP.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ' '
DEF_PATH = 'C:\'
MODE = 'O'
TITLE = TEXT-025 "'Upload File'
IMPORTING
FILENAME = P_FNAME
EXCEPTIONS
SELECTION_CANCEL = 3
SELECTION_ERROR = 4.
CASE SY-SUBRC.
WHEN 3.
MESSAGE I000 WITH TEXT-007. " Selection Cancel.
WHEN 4.
MESSAGE I000 WITH TEXT-008. " Selection Error.
ENDCASE.
ENDFORM. " F4_HELP
*& Form STANDARD_HEADER
STANDARD_HEADER
FORM STANDARD_HEADER.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
CASE V_HEAD.
WHEN 'Summary Report'(001).
WHEN 'SUCC_REPORT'.
**---To display the field headings for Success report.
ULINE (154).
WRITE : /001 SY-VLINE,
002 'Header Details '(011),
052 SY-VLINE,
053 'Document Number'(036),
154 SY-VLINE.
ULINE (154).
WHEN 'Error Report'.
**---To display the field headings for error report.
ULINE (154).
WRITE : /001 SY-VLINE,
002 'Header Details '(011),
052 SY-VLINE,
053 'Error Message/Text'(035),
154 SY-VLINE.
ULINE (154).
ENDCASE.
ENDFORM. " STANDARD_HEADER
*& Form DISPLAY_REPORT
Display Report Details
FORM DISPLAY_REPORT.
PERFORM SUMMARY_REPORT.
PERFORM SUCC_REPORT.
PERFORM ERROR_REPORT.
ENDFORM. " DISPLAY_REPORT
*& Form SUMMARY_REPORT
Success & Error Count Number
FORM SUMMARY_REPORT.
WRITE : /030 SY-TITLE.
SKIP 1.
WRITE : /005 'Program Name : '(032),
024 SY-REPID,
080 'Date :'(033),
088 SY-DATUM.
SKIP 1.
V_HEAD = 'Summary Report'(001).
ULINE (132).
WRITE : /1 SY-VLINE,
5 'No. of Records read from the Data file'(014),
45 ':', V_TOTAL LEFT-JUSTIFIED,
132 SY-VLINE,
/1 SY-VLINE,
5 'No. of Records successfully posted'(015),
45 ':', V_SUCCESS_COUNTER LEFT-JUSTIFIED,
132 SY-VLINE,
/1 SY-VLINE,
5 'No. of Records Failed'(023),
45 ':'(031), V_ERROR_COUNTER LEFT-JUSTIFIED,
132 SY-VLINE.
IF NOT F_BDC_OPEN IS INITIAL.
WRITE: /1 SY-VLINE,
5 'Session Name'(022),
45 ':'(031), C_SESSION_NAME LEFT-JUSTIFIED,
132 SY-VLINE.
ENDIF.
ULINE (132).
IF NOT F_BDC_OPEN IS INITIAL.
WRITE: /1 SY-VLINE,
5 'Session Name'(022),
45 ':'(031), C_SESSION_NAME LEFT-JUSTIFIED,
132 SY-VLINE.
ENDIF.
ULINE (132).
ENDFORM. " SUMMARY_REPORT
*& Form ERROR_REPORT
Error Report
FORM ERROR_REPORT.
IF NOT I_ERROR_LOG[] IS INITIAL.
SORT I_ERROR_LOG. " by tcode.
V_HEAD = 'Error Report'(013).
NEW-PAGE.
LOOP AT I_ERROR_LOG.
WRITE: /001 SY-VLINE,
002 I_ERROR_LOG-HEADER,
052 SY-VLINE,
053 I_ERROR_LOG-MSG,
154 SY-VLINE.
ULINE (154).
ENDLOOP.
ENDIF.
ENDFORM. " ERROR_REPORT
*& Form ERROR_REPORT
Success Report
FORM SUCC_REPORT.
IF NOT I_SUCC[] IS INITIAL.
SORT I_SUCC. " by tcode.
V_HEAD = 'SUCC_REPORT'(034).
NEW-PAGE.
LOOP AT I_SUCC.
WRITE: /001 SY-VLINE,
002 I_SUCC-HEADER,
052 SY-VLINE,
053 I_SUCC-MSG,
154 SY-VLINE.
ULINE (154).
ENDLOOP.
ENDIF.
ENDFORM. " SUCC_REPORT
*& Form OPEN_SESSION
FORM OPEN_SESSION.
DATA : V_DATE LIKE SY-DATUM. " For Hold Date.
V_DATE = SY-DATUM - 1. " Hold date
V_UNAME = SY-UNAME. " User name
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = C_SESSION_NAME
HOLDDATE = V_DATE
KEEP = 'X'
USER = V_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 I000 WITH 'Session can not be opened'(019).
STOP.
ENDIF.
F_BDC_OPEN = 'X'.
ENDFORM. " OPEN_SESSION
*& Form BDC_INSERT
FORM BDC_INSERT USING P_TCODE TYPE ANY.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = P_TCODE
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.
IF SY-SUBRC <> 0.
MESSAGE I000 WITH 'Unable to insert, Error record'(037).
STOP.
ENDIF.
ENDFORM. " BDC_INSERT
*& Form CLOSE_GROUP
FORM CLOSE_GROUP.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE I000 WITH 'Session can not be closed'(021).
STOP.
ENDIF.
ENDFORM. " CLOSE_GROUP
*& Form UPLOAD_DATA
Upload Data From the text file
FORM UPLOAD_DATA.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = P_FNAME
FILETYPE = 'DAT'
TABLES
DATA_TAB = P_DOWNLOAD
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
OTHERS = 10.
IF SY-SUBRC NE 0.
MESSAGE E000 WITH 'File does not Exist'(003).
ELSEIF P_DOWNLOAD[] IS INITIAL.
MESSAGE E000 WITH 'Input file is empty'(004).
ENDIF.
DATA: V_INDEX LIKE SY-TABIX.
IF NOT P_DOWNLOAD[] IS INITIAL.
LOOP AT P_DOWNLOAD.
V_INDEX = SY-TABIX.
*Removing double quotes
DO.
REPLACE '"' WITH '' INTO P_DOWNLOAD.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
ENDDO.
MODIFY P_DOWNLOAD INDEX V_INDEX.
CONDENSE P_DOWNLOAD.
IF P_DOWNLOAD(1) = '1'.
*Finding the header information, creating key field
V_SELNO = SY-TABIX.
ENDIF.
WE ARE NOT HAVING KEY FIELD IN HEADER/ITEM IN THE FILE.
SO WE ARE CREATING MANUAL KEY FIELD IN INTERNAL TABLE (SELNO).
IF P_DOWNLOAD(1) = '1'.
Moving header information into IT_DATA_HEADER Internal Table
SPLIT P_DOWNLOAD AT ',' INTO
IT_DATA_HEADER-ID
IT_DATA_HEADER-BUKRS
IT_DATA_HEADER-WAERS
IT_DATA_HEADER-NEWKO
IT_DATA_HEADER-XBLNR
IT_DATA_HEADER-XBLNR1
IT_DATA_HEADER-BLDAT
IT_DATA_HEADER-PK
IT_DATA_HEADER-WRBTR
IT_DATA_HEADER-BKTXT
IT_DATA_HEADER-BKTXT1.
IT_DATA_HEADER-SELNO = V_SELNO.
CONDENSE : IT_DATA_HEADER-ID, IT_DATA_HEADER-BUKRS,
IT_DATA_HEADER-WAERS, IT_DATA_HEADER-NEWKO,
IT_DATA_HEADER-XBLNR, IT_DATA_HEADER-XBLNR1,
IT_DATA_HEADER-BLDAT, IT_DATA_HEADER-PK,
IT_DATA_HEADER-WRBTR, IT_DATA_HEADER-BKTXT,
IT_DATA_HEADER-BKTXT1, IT_DATA_HEADER-SELNO.
APPEND IT_DATA_HEADER.
CLEAR IT_DATA_HEADER.
ELSEIF P_DOWNLOAD(1) = '2'.
Moving header information into IT_DATA_ITEM Internal Table
SPLIT P_DOWNLOAD AT ',' INTO
IT_DATA_ITEM-ID
IT_DATA_ITEM-NEWKO
IT_DATA_ITEM-BUKRS
IT_DATA_ITEM-KOSTL
IT_DATA_ITEM-WRBTR
IT_DATA_ITEM-SGTXT.
IT_DATA_ITEM-SELNO = V_SELNO.
IT_DATA_ITEM-SELNO1 = SY-TABIX.
CONDENSE: IT_DATA_ITEM-ID,IT_DATA_ITEM-NEWKO,IT_DATA_ITEM-BUKRS,
IT_DATA_ITEM-KOSTL,IT_DATA_ITEM-WRBTR,
IT_DATA_ITEM-SGTXT,IT_DATA_ITEM-SELNO,
IT_DATA_ITEM-SELNO1.
APPEND IT_DATA_ITEM.
CLEAR IT_DATA_ITEM.
ENDIF.
ENDLOOP.
*SORT HEADER & ITEM INTERNAL Table
SORT IT_DATA_HEADER BY SELNO.
SORT IT_DATA_ITEM BY SELNO SELNO1.
*Header Information
LOOP AT IT_DATA_HEADER.
IT_FINAL_HEADER-ID = IT_DATA_HEADER-ID.
IT_FINAL_HEADER-BUKRS = IT_DATA_HEADER-BUKRS.
IT_FINAL_HEADER-WAERS = IT_DATA_HEADER-WAERS.
IT_FINAL_HEADER-NEWKO = IT_DATA_HEADER-NEWKO.
CONCATENATE IT_DATA_HEADER-XBLNR IT_DATA_HEADER-XBLNR1
INTO IT_FINAL_HEADER-XBLNR.
IT_FINAL_HEADER-BLDAT = IT_DATA_HEADER-BLDAT.
IT_FINAL_HEADER-PK = IT_DATA_HEADER-PK.
IT_FINAL_HEADER-WRBTR = IT_DATA_HEADER-WRBTR.
IT_FINAL_HEADER-BKTXT = IT_DATA_HEADER-BKTXT.
IT_FINAL_HEADER-BKTXT1 = IT_DATA_HEADER-BKTXT1.
IT_FINAL_HEADER-SELNO = IT_DATA_HEADER-SELNO.
APPEND IT_FINAL_HEADER.
CLEAR IT_FINAL_HEADER.
ENDLOOP.
*Item Information
LOOP AT IT_DATA_ITEM.
CHECKING ZERO IN THE IT_DATA_ITEM-WRBTR FIELD
It will not append the IT_FINAL_ITEM
V_CHECK_ZERO = IT_DATA_ITEM-WRBTR.
IF V_CHECK_ZERO NE V_CHECK_ZERO1. "V_ZERO.
IT_FINAL_ITEM-ID = IT_DATA_ITEM-ID.
IT_FINAL_ITEM-NEWKO = IT_DATA_ITEM-NEWKO.
IT_FINAL_ITEM-BUKRS = IT_DATA_ITEM-BUKRS.
IT_FINAL_ITEM-KOSTL = IT_DATA_ITEM-KOSTL.
IT_FINAL_ITEM-WRBTR = IT_DATA_ITEM-WRBTR.
IT_FINAL_ITEM-SGTXT = IT_DATA_ITEM-SGTXT.
IT_FINAL_ITEM-SELNO = IT_DATA_ITEM-SELNO.
IT_FINAL_ITEM-SELNO1 = IT_DATA_ITEM-SELNO1.
APPEND IT_FINAL_ITEM.
CLEAR IT_FINAL_ITEM.
CLEAR : V_CHECK_ZERO,V_CHECK_ZERO1.
ENDIF.
ENDLOOP.
SORT IT_FINAL_HEADER BY SELNO.
SORT IT_FINAL_ITEM BY SELNO.
ENDIF.
ENDFORM. " UPLOAD_DATA
*& Form MOVE_DATA_F43
Call Transaction F-43
FORM MOVE_DATA_F43.
*MOVE THE SYSTEM DATE TO
CLEAR V_SYSTEMDATE.
V_SYSTEMDATE = SY-DATUM.
LOOP AT IT_FINAL_HEADER.
CLEAR V_CHECK.
V_CHECK = IT_FINAL_HEADER-SELNO.
MOVE HEADER DATA TO BDCDATA INTERNAL TABLE
PERFORM BDC_BUILD_HEADER.
MOVE ITEM DATA TO BDCDATA INTERNAL TABLE
PERFORM BDC_BUILD_ITEM.
<b>* Call Transcation (F-43)
CALL TRANSACTION 'F-43' USING IT_BDCDATA
MODE XMODE
UPDATE 'S'
MESSAGES INTO IT_MESSAGE_TAB.</b>
IF error record found, it will move to batch Input session
IF SY-SUBRC <> 0.
V_ERROR_COUNTER = V_ERROR_COUNTER + 1. " Inc the counter
CLEAR V_LINES.
DESCRIBE TABLE IT_MESSAGE_TAB LINES V_LINES.
READ TABLE IT_MESSAGE_TAB INDEX V_LINES.
*--- <b>Perform to read the messages
PERFORM MESSAGE_FORMAT.</b>*--- Appending the error records into error table
CONDENSE IT_FINAL_HEADER-BUKRS.
CONDENSE IT_FINAL_HEADER-NEWKO.
CONDENSE IT_FINAL_HEADER-XBLNR.
CONDENSE IT_FINAL_HEADER-BLDAT.
CONCATENATE IT_FINAL_HEADER-BUKRS ','
IT_FINAL_HEADER-NEWKO ','
IT_FINAL_HEADER-XBLNR ','
IT_FINAL_HEADER-BLDAT
INTO V_HEADER.
I_ERROR_LOG-HEADER = V_HEADER.
I_ERROR_LOG-MSG = V_MSG.
APPEND I_ERROR_LOG.
CLEAR I_ERROR_LOG.
*-- Posting the error record to Session
IF F_BDC_OPEN IS INITIAL.
PERFORM OPEN_SESSION.
ENDIF.
PERFORM BDC_INSERT USING 'F-43'.
ELSE.
V_SUCCESS_COUNTER = V_SUCCESS_COUNTER + 1.
*-- READING ONLY SUCCESS MESSAGE(MSGNR 312)
LOOP AT IT_MESSAGE_TAB WHERE MSGNR = '312'.
V_SUCC_MSG = IT_MESSAGE_TAB-MSGV1.
ENDLOOP.
*--- Perform to read the messages
PERFORM MESSAGE_FORMAT.
*--- Appending the Success records into Success table
CONDENSE IT_FINAL_HEADER-BUKRS.
CONDENSE IT_FINAL_HEADER-NEWKO.
CONDENSE IT_FINAL_HEADER-PK.
CONDENSE IT_FINAL_HEADER-XBLNR.
CONDENSE IT_FINAL_HEADER-BLDAT.
CONCATENATE IT_FINAL_HEADER-BUKRS ','
IT_FINAL_HEADER-NEWKO ','
IT_FINAL_HEADER-PK ','
IT_FINAL_HEADER-XBLNR ','
IT_FINAL_HEADER-BLDAT
INTO V_HEADER.
I_SUCC-HEADER = V_HEADER.
I_SUCC-MSG = V_SUCC_MSG.
APPEND I_SUCC.
CLEAR I_SUCC.
ENDIF.
V_TOTAL = V_TOTAL + 1.
REFRESH: IT_BDCDATA,
IT_MESSAGE_TAB.
CLEAR: IT_BDCDATA,
IT_MESSAGE_TAB.
ENDLOOP.
ENDFORM. " MOVE_DATA_F43
Start new screen *
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR IT_BDCDATA.
IT_BDCDATA-PROGRAM = PROGRAM.
IT_BDCDATA-DYNPRO = DYNPRO.
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.
ENDFORM.
Insert field *
FORM BDC_FIELD USING FNAM FVAL.
CLEAR IT_BDCDATA.
IT_BDCDATA-FNAM = FNAM.
IT_BDCDATA-FVAL = FVAL.
APPEND IT_BDCDATA.
ENDFORM.
*& Form BDC_BUILD_HEADER
Header Information
FORM BDC_BUILD_HEADER.
Header Details
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'BKPF-BLDAT'
IT_FINAL_HEADER-BLDAT.
PERFORM BDC_FIELD USING 'BKPF-BLART'
'KR'.
PERFORM BDC_FIELD USING 'BKPF-BUKRS'
IT_FINAL_HEADER-BUKRS.
Moveing System date to Posting date in the document
CLEAR IT_FINAL_HEADER-BLDAT.
CONCATENATE V_SYSTEMDATE4(4) V_SYSTEMDATE0(4)
INTO IT_FINAL_HEADER-BLDAT.
PERFORM BDC_FIELD USING 'BKPF-BUDAT'
IT_FINAL_HEADER-BLDAT.
PERFORM BDC_FIELD USING 'BKPF-WAERS'
IT_FINAL_HEADER-WAERS.
PERFORM BDC_FIELD USING 'BKPF-XBLNR'
IT_FINAL_HEADER-PK.
PERFORM BDC_FIELD USING 'BKPF-BKTXT'
IT_FINAL_HEADER-BKTXT.
PERFORM BDC_FIELD USING 'FS006-DOCID' '*'.
IF IT_FINAL_HEADER-WRBTR CA '-'.
REPLACE '-' WITH SPACE INTO IT_FINAL_HEADER-WRBTR.
CONDENSE IT_FINAL_HEADER-WRBTR.
PERFORM BDC_FIELD USING 'RF05A-NEWBS' '25'.
ELSE.
PERFORM BDC_FIELD USING 'RF05A-NEWBS' '31'.
ENDIF.
PERFORM BDC_FIELD USING 'RF05A-NEWKO'
IT_FINAL_HEADER-NEWKO.
*-- Item Vendor Details
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0302'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'BSEG-WRBTR'
IT_FINAL_HEADER-WRBTR.
PERFORM BDC_FIELD USING 'BSEG-SGTXT'
IT_FINAL_HEADER-BKTXT1.
ENDFORM. " BDC_BUILD_HEADER
*& Form BDC_BUILD_ITEM
Item Information
FORM BDC_BUILD_ITEM.
DATA L_FIRST TYPE C.
LOOP AT IT_FINAL_ITEM WHERE SELNO = V_CHECK.
IF L_FIRST IS INITIAL.
L_FIRST = C_X.
Line Item ( PstKy,Account & New Company Code)
CONDENSE IT_FINAL_HEADER-BLDAT.
IF IT_FINAL_ITEM-WRBTR CA '-'.
REPLACE '-' WITH SPACE INTO IT_FINAL_ITEM-WRBTR.
CONDENSE IT_FINAL_ITEM-WRBTR.
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0302'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' '/00',
'RF05A-NEWBS' '50',
'RF05A-NEWKO' IT_FINAL_ITEM-NEWKO,
'RF05A-NEWBK' IT_FINAL_ITEM-BUKRS.
ELSE.
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0302'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' '/00',
'RF05A-NEWBS' '40',
'RF05A-NEWKO' IT_FINAL_ITEM-NEWKO,
'RF05A-NEWBK' IT_FINAL_ITEM-BUKRS.
ENDIF.
Amount & Text
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0300'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' '/00',
'BSEG-WRBTR' IT_FINAL_ITEM-WRBTR,
'BSEG-SGTXT' IT_FINAL_ITEM-SGTXT,
'DKACB-FMORE' 'X'.
Cost Center
PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' 'ENTE',
'COBL-KOSTL' IT_FINAL_ITEM-KOSTL.
ELSE.
Line Item ( PstKy,Account & New Company Code)
IF IT_FINAL_ITEM-WRBTR CA '-'.
REPLACE '-' WITH SPACE INTO IT_FINAL_ITEM-WRBTR.
CONDENSE IT_FINAL_ITEM-WRBTR.
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0300'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' '/00',
'RF05A-NEWBS' '50',
'RF05A-NEWKO' IT_FINAL_ITEM-NEWKO,
'RF05A-NEWBK' IT_FINAL_ITEM-BUKRS.
ELSE.
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0300'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' '/00',
'RF05A-NEWBS' '40',
'RF05A-NEWKO' IT_FINAL_ITEM-NEWKO,
'RF05A-NEWBK' IT_FINAL_ITEM-BUKRS.
ENDIF.
PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' 'ENTE'.
Amount & Text
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0300'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' '/00',
'BSEG-WRBTR' IT_FINAL_ITEM-WRBTR,
'BSEG-SGTXT' IT_FINAL_ITEM-SGTXT,
'DKACB-FMORE' 'X'.
Cost Center
PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' 'ENTE',
'COBL-KOSTL' IT_FINAL_ITEM-KOSTL.
ENDIF.
ENDLOOP.
*Save Details
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0300'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'.
PERFORM BDC_FIELD USING: 'BDC_OKCODE' 'ENTE'.
ENDFORM. " BDC_BUILD_ITEM
Thanks
Mahesh -
In call transaction how can we handle error records.
hai..tellme how can we handle error records in call transaction..we can get error records into one flatfile ok...then we have to execute the same bdc program with dat flat file (error records) once again...is it wright ..
Hi,
check this program u will get idea
seee this prog. its will help u .
copy and run this prog.
TYPES : BEGIN OF t_disp ,
vendorno(9),
compcc(13),
purchorg(14),
accgroup(15),
title(7),
name(5),
country(8),
ordcurr(14),
END OF t_disp.
TYPES : BEGIN OF t_err,
msgtyp LIKE bdcmsgcoll-msgtyp,
l_mstring(250),
END OF t_err.
DATA: i_disp TYPE STANDARD TABLE OF t_disp,
wa_disp TYPE t_disp,
i_err TYPE STANDARD TABLE OF t_err,
wa_err TYPE t_err.
data definition
Batchinputdata of single transaction
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
messages of call transaction
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
error session opened (' ' or 'X')
DATA: e_group_opened.
message texts
TABLES: t100.
PARAMETER : p_file1 LIKE ibipparms-path,
p_cmode LIKE ctu_params-dismode DEFAULT 'N'.
"A: show all dynpros
"E: show dynpro on error only
"N: do not display dynpro
*selction screen.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
IMPORTING
file_name = p_file1.
AT SELECTION-SCREEN ON p_file1.
IF p_file1 IS INITIAL.
MESSAGE 'FILE IS NOT FOUND' TYPE 'E'.
ENDIF.
START-OF-SELECTION.
PERFORM f_disp_file1.
END-OF-SELECTION.
PERFORM f_disp_errs.
*& Form F_DISP_FILE1
text
--> p1 text
<-- p2 text
FORM f_disp_file1 .
DATA: l_filename1 TYPE string.
MOVE p_file1 TO l_filename1.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_filename1
filetype = 'ASC'
has_field_separator = 'X'
HEADER_LENGTH = 0
READ_BY_LINE = 'X'
DAT_MODE = ' '
CODEPAGE = ' '
IGNORE_CERR = ABAP_TRUE
REPLACEMENT = '#'
CHECK_BOM = ' '
IMPORTING
FILELENGTH =
HEADER =
TABLES
data_tab = i_disp
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.
*? prepare BDC data
DELETE i_disp INDEX 1.
LOOP AT i_disp INTO wa_disp .
PERFORM bdc_dynpro USING 'SAPMF02K' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02K-KTOKK'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RF02K-LIFNR'
wa_disp-vendorno.
'ztest_1'.
PERFORM bdc_field USING 'RF02K-BUKRS'
wa_disp-compcc.
'0001'.
PERFORM bdc_field USING 'RF02K-EKORG'
wa_disp-purchorg.
'0001'.
PERFORM bdc_field USING 'RF02K-KTOKK'
wa_disp-accgroup.
'0001'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFA1-SPRAS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
PERFORM bdc_field USING 'LFA1-ANRED'
wa_disp-title.
'Mr.'.
PERFORM bdc_field USING 'LFA1-NAME1'
wa_disp-name.
'test name'.
PERFORM bdc_field USING 'LFA1-SORTL'
'TEST NAME'.
PERFORM bdc_field USING 'LFA1-LAND1'
wa_disp-country.
'in'.
PERFORM bdc_field USING 'LFA1-SPRAS'
'en'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFA1-KUNNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFBK-BANKS(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0210'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFB1-AKONT'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0215'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFB1-ZTERM'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0220'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFB5-MAHNA'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=VW'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0310'.
PERFORM bdc_field USING 'BDC_CURSOR'
'LFM1-WAERS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=UPDA'.
PERFORM bdc_field USING 'LFM1-WAERS'
wa_disp-ordcurr.
'inr'.
PERFORM bdc_transaction USING 'XK01'.
WRITE:/ WA_DISP-VendorNo,
WA_DISP-COMPCC,
WA_DISP-PURCHORG,
WA_DISP-ACCGROUP,
WA_DISP-title,
WA_DISP-name,
WA_DISP-country,
WA_DISP-ORDCURR.
CLEAR: wa_disp.
REFRESH bdcdata.
ENDLOOP.
ENDFORM. " F_DISP_FILE1
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
-->P_0322 text
FORM bdc_transaction USING tcode.
DATA: l_mstring(480),
l_subrc LIKE sy-subrc.
REFRESH messtab.
CALL TRANSACTION tcode USING bdcdata
MODE p_cmode
UPDATE 'L'
MESSAGES INTO messtab.
l_subrc = sy-subrc.
IF SMALLLOG 'X'.
WRITE: / 'CALL_TRANSACTION',
TCODE,
'returncode:'(I05),
L_SUBRC,
'RECORD:',
SY-INDEX.
LOOP AT messtab.
SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
AND arbgb = messtab-msgid
AND msgnr = messtab-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH messtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&' WITH messtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
WRITE: / messtab-msgtyp, l_mstring(250).
*? Send this errors to err internal table
wa_err-msgtyp = messtab-msgtyp.
wa_err-l_mstring = l_mstring.
APPEND wa_err TO i_err.
ELSE.
WRITE: / messtab.
ENDIF.
CLEAR: messtab, wa_err.
ENDLOOP.
SKIP.
ENDIF.
ENDFORM. " bdc_transaction
*& Form f_disp_errs
text
--> p1 text
<-- p2 text
FORM f_disp_errs .
SORT i_err BY msgtyp.
LOOP AT i_err INTO wa_err.
AT FIRST.
WRITE : / text-002.
ULINE.
ENDAT.
AT NEW msgtyp.
IF wa_err-msgtyp = 'S'.
WRITE : / text-003.
ULINE.
ELSEIF wa_err-msgtyp = 'E'.
WRITE : / text-001.
ULINE.
ENDIF.
ENDAT.
WRITE : / wa_err-msgtyp, wa_err-l_mstring.
CLEAR wa_err.
ENDLOOP.
ENDFORM. " f_disp_errs
Regards -
Call transaction (MF60) with variant
hi
in user will save some variant of the TCODE : MF60, and will put they in job what use SM36 to set job schedule.but the resule message can't be know in BG work.
i want to write a report to run the Transaction (MF60) and to save message with abap application log.
first:
how to find the Transaction contain variant?
second:
if i use abap code: CALL transaction in report,how to set variant to transaction.
three:
i know the command:SUBMIT will call from VARIANT:
but MF60's report is RMPU_SEL_SCREEN,but this report have two transaction: MF60,MF63.
how to set Transaction to this RMPU_SEL_SCREEN.
four:
i know the SM36 will set variant to TCODE,how to open job in ABAP.
thank you very much!in my company,users will create themselves varaints about MF60.
and they put variants in job schedule (use SM36 ) in bg work at night.
so when these job is over,the last message don't show for they.
they doubt about it and they will spent lot time to get what oneself document for last genearate.
i want to write a report and put this report in job schedule to run MF60.
and get last message for call transaction in abap appliacation log.
next day users just use TCODE SLG1 to view last night run MF60 result.
so first i must get all MF60 of variant what will be run and get message
when this transancations is over.save message in database!
thank you very much for your help! -
How to rectify the errors through call transaction metod in bdc
how to rectify the errors through call transaction metod in bdc
Hi ,
View the highlited part of the below code.
REPORT ygfrivat1 NO STANDARD PAGE HEADING
LINE-SIZE 165
MESSAGE-ID yif_groc.
Program YGFRIVAT1
Function Report to Upload the VAT Adjustment File.
Author ARENAPU
Date 11.05.2007
PMTS AM12810157
Transport G6DK937834
Description:
Modification log:
1. Changed by :
Changed on :
PMTS :
Transport :
Tag :
Description :
T A B L E S D E C L A R A T I O N S
TABLES: edidc, "Control record (IDoc)
edids, "Status Record (IDoc)
t001w.
Internal Tables Declaration.
Internal table to hold data from table EDIDS
DATA: BEGIN OF t_edids OCCURS 0,
docnum LIKE edids-docnum,
logdat LIKE edids-logdat,
logtim LIKE edids-logtim,
countr LIKE edids-countr,
credat LIKE edids-credat,
uname LIKE edids-uname,
END OF t_edids,
Internal table to hold data from table EDIDC
BEGIN OF t_edidc OCCURS 0,
docnum LIKE edidc-docnum,
rcvprt LIKE edidc-rcvprt,
rcvprn LIKE edidc-rcvprn,
credat LIKE edidc-credat,
END OF t_edidc,
Internal table to hold data from upload file
BEGIN OF t_tab OCCURS 0,
cust(10), "site/customer number
date(10), "transaction date
currency(04), "currency
extnbr(15), "external reference number
pos-cont(05), "POS controler
pos-id(25), "POS id
cashier(10), "cashier name
qualif(04), "qualifier of the article
matnr(25), "article number
qty(10), "quantity
sale(16), "sale value
pos-tr(04), "POS transfert type
paymeth(04), "payment method
final(35), "final price
tarcur(04), "target currency
assign(35), "assignment day
error,
END OF t_tab,
Internal table for Report display.
BEGIN OF t_tab1 OCCURS 0,
cust(10), "site/customer number
date(10), "transaction date
currency(04), "currency
extnbr(15), "external reference number
pos-cont(05), "POS controler
pos-id(25), "POS id
cashier(10), "cashier name
qualif(04), "qualifier of the article
matnr(25), "article number
qty(16) TYPE p DECIMALS 2, "quantity
sale(16) TYPE p DECIMALS 2, "sale value
pos-tr(04), "POS transfert type
paymeth(04), "payment method
final(16) TYPE p DECIMALS 2, "final price
tarcur(04), "target currency
assign(35), "assignment day
END OF t_tab1,
t_tab_temp LIKE t_tab OCCURS 0 WITH HEADER LINE,
Internal table to Validate Customer no.
BEGIN OF t_check OCCURS 0,
werks LIKE t001w-werks,
vkorg LIKE t001w-vkorg,
value(40),
END OF t_check,
t_check_temp LIKE t_check OCCURS 0 WITH HEADER LINE.
Internal table to hold data from table ZCS_PARAM.
DATA: BEGIN OF t_zcs_param OCCURS 0.
INCLUDE STRUCTURE zcs_param.
DATA: vkorg LIKE t001w-vkorg,
END OF t_zcs_param.
*Internal table to hold Messages.
DATA: BEGIN OF t_message OCCURS 0,
msgnum TYPE msgnum,
msgtyp TYPE msgtyp,
msgtxt TYPE msgtext,
END OF t_message.
*Work area for table t_message
DATA : w_message LIKE LINE OF t_message.
Internal table to hold BDC data
DATA: t_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE,
Internal table to collect error messages
messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
*Internal table to hold messages from call transaction
DATA: BEGIN OF t_text OCCURS 0,
desc(150),
msgtxt(100),
END OF t_text.
D A T A D E C L A R A T I O N S
DATA: n TYPE i,
gv_status(11) TYPE c, "Shows status, Production or Test
gv_exit TYPE c, "Exit Flag
gv_qty(16) TYPE p DECIMALS 2, "Variable to sum Quantity
gv_sale(16) TYPE p DECIMALS 2, "Variable to sum Amount
gv_final(16) TYPE p DECIMALS 2. "Variable to sum Final Amount
DATA: w_text(100),
gv_mode TYPE c,
error TYPE c. "Flag to Indicate error.
CONSTANSTS DECLARATION
CONSTANTS : gc_fieldname LIKE dynpread-fieldname VALUE 'P_FNAME',
gc_seq_no LIKE zcs_param-seq_no VALUE '00110',
gc_object LIKE zcs_param-object VALUE 'YGFVAT',
gc_paraname LIKE zcs_param-paraname VALUE 'VKORG',
gc_back TYPE c VALUE 'N',
gc_error TYPE c VALUE 'E',
gc_all TYPE c VALUE 'A'.
S E L E C T I O N S C R E E N
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.
PARAMETERS : p_fname LIKE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-002 FOR FIELD p_test.
PARAMETERS : p_test AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK a1.
SELECTION-SCREEN BEGIN OF BLOCK a2 WITH FRAME TITLE text-006.
PARAMETERS : rb_back RADIOBUTTON GROUP rb1 DEFAULT 'X',
rb_error RADIOBUTTON GROUP rb1,
rb_all RADIOBUTTON GROUP rb1.
SELECTION-SCREEN END OF BLOCK a2.
AT SELECTION SCREEN
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
*Subroutine to provide F4 help for file name
PERFORM fr_get_filename.
I N I T I A L I Z A T I O N
INITIALIZATION.
*Subroutine to check authorization.
PERFORM fr_authority_check.
T O P - O F - P A G E
TOP-OF-PAGE.
*Subroutine to diplay header
PERFORM fr_display_header.
S T A R T - O F - S E L E C T I O N
START-OF-SELECTION.
*Subroutine to upload data from presentation server.
PERFORM fr_upload_data.
*Subroutine to validate records from uploaded file.
PERFORM fr_validate_data.
*Subroutine to build report internal table.
PERFORM fr_build_rep.
E N D - O F - S E L E C T I O N
END-OF-SELECTION.
*Subroutine to display report.
PERFORM fr_write_report.
F O R M S U B R O U T I N E S
*& Form fr_get_filename
text
FORM fr_get_filename.
DATA : lv_repid LIKE sy-repid, " Report id
lv_file LIKE ibipparms-path. " File Path
lv_repid = sy-repid.
F4 help for file path.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = lv_repid
dynpro_number = syst-dynnr
field_name = gc_fieldname " p_fname1
IMPORTING
file_name = lv_file.
IF NOT lv_file EQ space.
p_fname = lv_file.
ELSE.
MESSAGE e999 WITH 'Invalid Path'(005).
ENDIF.
ENDFORM. " fr_get_filename
*& Form fr_upload_data
text
FORM fr_upload_data.
DATA: lv_fname TYPE string.
CLEAR lv_fname.
lv_fname = p_fname.
Uploading file from PC or presentation server to internal table.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lv_fname
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = t_tab
EXCEPTIONS
file_open_error = 1.
IF sy-subrc <> 0.
DESCRIBE TABLE t_message LINES n.
w_message-msgnum = n + 1.
w_message-msgtyp = 'E'.
MOVE text-m01 TO w_message-msgtxt.
APPEND w_message TO t_message.
Subroutine for writing log.
PERFORM fr_write_log.
ENDIF.
ENDFORM. " fr_upload_data
*& Form fr_validate_data
text
FORM fr_validate_data.
DATA : lv_lines1 TYPE i,
lv_lines2 TYPE i.
*Obtain Status depending on Check box selected.
IF p_test IS INITIAL.
gv_status = 'PRODUCTION'.
ELSE.
gv_status = 'TEST RUN'.
ENDIF.
*Batch Mode
CLEAR gv_mode.
IF rb_back EQ 'X'. "No Display
MOVE gc_back TO gv_mode.
ELSEIF rb_error EQ 'X'. "Error Only
MOVE gc_error TO gv_mode.
ELSEIF rb_all EQ 'X'. "All Screens
MOVE gc_all TO gv_mode.
ENDIF.
IF NOT t_tab[] IS INITIAL.
SORT t_tab BY cust.
REFRESH t_tab_temp.
t_tab_temp[] = t_tab[].
SORT t_tab_temp BY cust.
DELETE ADJACENT DUPLICATES FROM t_tab_temp COMPARING cust.
IF NOT t_tab_temp[] IS INITIAL.
SELECT werks vkorg FROM t001w
INTO TABLE t_check
FOR ALL ENTRIES IN t_tab_temp
WHERE werks = t_tab_temp-cust+0(4).
IF sy-subrc = 0.
SORT t_check BY werks.
ENDIF.
LOOP AT t_check.
IF t_check-vkorg <> ' '.
MOVE t_check-vkorg TO t_check-value.
MODIFY t_check TRANSPORTING value.
ENDIF.
ENDLOOP.
ENDIF.
FREE t_tab_temp.
ENDIF.
IF NOT t_check[] IS INITIAL.
REFRESH t_check_temp.
t_check_temp[] = t_check[].
SORT t_check_temp BY value.
DELETE ADJACENT DUPLICATES FROM t_check_temp COMPARING value.
IF NOT t_check_temp[] IS INITIAL.
SELECT * FROM zcs_param INTO TABLE t_zcs_param
FOR ALL ENTRIES IN t_check_temp
WHERE seq_no EQ gc_seq_no
AND object EQ gc_object
AND paraname EQ gc_paraname
AND value EQ t_check_temp-value.
IF sy-subrc = 0.
SORT t_zcs_param BY value.
ENDIF.
ENDIF.
FREE t_check_temp.
ENDIF.
IF NOT t_tab[] IS INITIAL.
LOOP AT t_tab.
READ TABLE t_check WITH KEY werks = t_tab-cust BINARY SEARCH.
IF sy-subrc <> 0.
MOVE 'X' TO t_tab-error.
MODIFY t_tab TRANSPORTING error.
DESCRIBE TABLE t_message LINES n.
w_message-msgnum = n + 1.
w_message-msgtyp = 'E'.
CONCATENATE t_tab-cust text-030
INTO w_message-msgtxt SEPARATED BY space.
APPEND w_message TO t_message.
Subroutine for writing log.
PERFORM fr_write_log.
EXIT.
ELSE.
READ TABLE t_zcs_param WITH KEY value = t_check-vkorg
BINARY SEARCH.
IF sy-subrc <> 0.
MOVE 'X' TO t_tab-error.
MODIFY t_tab TRANSPORTING error.
DESCRIBE TABLE t_message LINES n.
w_message-msgnum = n + 1.
w_message-msgtyp = 'E'.
CONCATENATE text-003 t_tab-cust text-004 t_check-vkorg
INTO w_message-msgtxt SEPARATED BY space.
APPEND w_message TO t_message.
Subroutine for writing log.
PERFORM fr_write_log.
EXIT.
ELSE.
PERFORM fr_format_tab.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
DESCRIBE TABLE t_tab LINES lv_lines1.
IF lv_lines1 <> 0.
DELETE t_tab WHERE error EQ 'X'.
ENDIF.
DESCRIBE TABLE t_tab LINES lv_lines2.
IF lv_lines2 <> 0.
IF lv_lines2 <> lv_lines1.
EXIT.
ELSE.
IF p_test IS INITIAL.
LOOP AT t_tab.
*Subroutine to build BDC table
PERFORM fr_fill_bdctab.
*Subroutine to Post Data into SAP.
PERFORM fr_data_posting.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " fr_validate_data
*& Form fr_write_log
text
FORM fr_write_log.
CLEAR error.
error = 'X'.
WRITE:/1 'Msg No'(027), 10 'Type'(028), 20 'Text'(029).
ULINE:/1(120).
FORMAT RESET.
LOOP AT t_message.
IF t_message-msgtyp = 'E'.
FORMAT COLOR 6 INTENSIFIED .
ELSEIF t_message-msgtyp = 'W'.
FORMAT COLOR 3 INTENSIFIED .
ELSEIF t_message-msgtyp = 'I'.
FORMAT COLOR 5 INTENSIFIED .
ENDIF.
WRITE:/1 t_message-msgnum,
10 t_message-msgtyp,
20 t_message-msgtxt.
FORMAT RESET.
ENDLOOP.
ULINE:/1(120).
ENDFORM. " fr_write_log
*& Form fr_write_report
text
FORM fr_write_report.
CLEAR gv_exit.
LOOP AT t_message.
IF t_message-msgtyp = 'E'.
gv_exit = 'X'.
EXIT.
ENDIF.
ENDLOOP.
IF NOT gv_exit IS INITIAL.
EXIT.
ELSE.
PERFORM fr_display_report.
IF NOT t_text[] IS INITIAL.
Subroutine for Display Call Transaction messages.
PERFORM fr_write_msg.
ENDIF.
ENDIF.
ENDFORM. " fr_write_report
*& Form fr_display_report
text
FORM fr_display_report.
IF NOT t_tab1[] IS INITIAL.
CLEAR: gv_qty, gv_sale, gv_final.
LOOP AT t_tab1.
WRITE:/1(10) t_tab1-cust,
13(10) t_tab1-date,
25(05) t_tab1-currency,
32(14) t_tab1-extnbr,
48(09) t_tab1-pos-cont,
60(18) t_tab1-matnr,
80(16) t_tab1-qty RIGHT-JUSTIFIED ,
98(16) t_tab1-sale RIGHT-JUSTIFIED ,
116(07) t_tab1-paymeth,
125(16) t_tab1-final RIGHT-JUSTIFIED,
143(06) t_tab1-tarcur,
152(12) t_tab1-assign.
gv_qty = t_tab1-qty + gv_qty.
gv_sale = t_tab1-sale + gv_sale.
gv_final = t_tab1-final + gv_final.
ENDLOOP.
FORMAT COLOR 3.
ULINE: /(164).
WRITE:/ 'TOTALS',
80(16) gv_qty RIGHT-JUSTIFIED,
98(16) gv_sale RIGHT-JUSTIFIED,
125(16) gv_final RIGHT-JUSTIFIED,
182 ''.
ULINE: /(164).
FORMAT RESET.
ENDIF.
ENDFORM. " fr_display_report
*& Form FR_DISPLAY_HEADER
text
FORM fr_display_header.
IF error IS INITIAL.
FORMAT COLOR 1.
WRITE:/ 'Date upload :'(007), 25 sy-datum, 38 ''.
WRITE:/ 'Production or Test Run:'(008), 25 gv_status, 38 ''.
WRITE:/ 'Upload User Logon :'(009), 25 sy-uname, 38 ''.
ULINE: /(164).
WRITE:/1(04) 'Site'(010),
13(10) 'Date'(011),
25(05) 'Curr.'(012),
32(14) 'Receipt'(013),
48(09) 'Cashier'(014),
60(18) 'Article'(015),
92 'Qty'(016),
102 'Item Amount'(017),
116(7) 'M.o.P.'(018),
128 'Tender Amount'(019),
143(6) 'T.Curr'(020),
152(12) 'Assignment'(021).
ULINE:/(164).
FORMAT RESET.
ENDIF.
ENDFORM. " FR_DISPLAY_HEADER
*& Form fr_newdynpro
text
FORM fr_newdynpro USING program LIKE bdcdata-program
dynpro LIKE bdcdata-dynpro.
t_bdcdata-program = program .
t_bdcdata-dynpro = dynpro.
t_bdcdata-dynbegin = 'X'.
APPEND t_bdcdata.
CLEAR t_bdcdata.
ENDFORM. " fr_newdynpro
*& Form fr_loadfield
text
FORM fr_loadfield USING field LIKE bdcdata-fnam
value.
t_bdcdata-fnam = field.
t_bdcdata-fval = value.
APPEND t_bdcdata.
CLEAR t_bdcdata.
ENDFORM. " fr_loadfield
*& Form fr_fill_bdctab
text
FORM fr_fill_bdctab.
REFRESH t_bdcdata.
PERFORM fr_newdynpro USING 'SAPMWPUK' '100'.
PERFORM fr_loadfield USING 'G_FILIALE' t_tab-cust.
PERFORM fr_loadfield USING 'G_DATUM' t_tab-date.
PERFORM fr_loadfield USING 'BDC_OKCODE' 'BON'.
PERFORM fr_newdynpro USING 'SAPMWPUK' '500'.
PERFORM fr_loadfield USING 'WPSCB01-POSKREIS' t_tab-pos-cont.
PERFORM fr_loadfield USING 'WPSCB01-KASSID' t_tab-pos-id.
PERFORM fr_loadfield USING 'WPSCB01-BELEGWAERS' t_tab-currency.
PERFORM fr_loadfield USING 'WPSCB01-CSHNAME' t_tab-cashier.
PERFORM fr_loadfield USING 'WPSCB01-BONNUMMER' t_tab-extnbr.
PERFORM fr_loadfield USING 'E1WPB02-QUALARTNR(01)' t_tab-qualif.
PERFORM fr_loadfield USING 'E1WPB02-ARTNR(01)' t_tab-matnr.
PERFORM fr_loadfield USING 'E1WPB02-MENGE(01)' t_tab-qty.
PERFORM fr_loadfield USING 'WPSCB03-KONDVALUE(01)' t_tab-sale.
PERFORM fr_loadfield USING 'E1WPB02-VORGANGART(01)' t_tab-pos-tr.
PERFORM fr_loadfield USING 'BDC_OKCODE' 'ZAHL'.
PERFORM fr_newdynpro USING 'SAPMWPUK' '530'.
PERFORM fr_loadfield USING 'WPSCB06-ZAHLART' t_tab-paymeth.
PERFORM fr_loadfield USING 'WPSCB06-SUMME' t_tab-final.
PERFORM fr_loadfield USING 'WPSCB06-WAEHRUNG' t_tab-tarcur.
PERFORM fr_loadfield USING 'WPSCB06-ZUONR' t_tab-assign.
PERFORM fr_loadfield USING 'BDC_OKCODE' 'SAVE'.
PERFORM fr_newdynpro USING 'SAPMWPUK' '530'.
PERFORM fr_loadfield USING 'WPSCB06-ZAHLART' t_tab-paymeth.
PERFORM fr_loadfield USING 'WPSCB06-SUMME' t_tab-final.
PERFORM fr_loadfield USING 'WPSCB06-WAEHRUNG' t_tab-tarcur.
PERFORM fr_loadfield USING 'WPSCB06-ZUONR' t_tab-assign.
PERFORM fr_loadfield USING 'BDC_OKCODE' 'BACK'.
PERFORM fr_newdynpro USING 'SAPLSPO1' '0200'.
PERFORM fr_loadfield USING 'BDC_OKCODE' 'YES'.
PERFORM fr_newdynpro USING 'SAPMWPUK' '100'.
PERFORM fr_loadfield USING 'G_FILIALE' t_tab-cust.
PERFORM fr_loadfield USING 'G_DATUM' t_tab-date.
PERFORM fr_loadfield USING 'BDC_OKCODE' 'BACK'.
ENDFORM. " fr_fill_bdctab
*& Form fr_data_posting
text
FORM fr_data_posting.
IF NOT t_bdcdata[] IS INITIAL.
REFRESH messtab.
CALL TRANSACTION 'WPUK' USING t_bdcdata
MODE gv_mode
UPDATE 'S'
MESSAGES INTO messtab.
IF sy-subrc = 0 .
CLEAR w_text.
LOOP AT messtab.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = messtab-msgid
lang = sy-langu
no = messtab-msgnr
v1 = messtab-msgv1
v2 = messtab-msgv2
v3 = messtab-msgv3
v4 = messtab-msgv4
IMPORTING
msg = w_text
EXCEPTIONS
not_found = 1
OTHERS = 2.
MOVE w_text TO t_text-msgtxt.
CONCATENATE 'Site:'(031) t_tab-cust
'Article:'(024) t_tab-matnr
'Posted Sucessfully'(032)
INTO t_text-desc SEPARATED BY space.
APPEND t_text.
CLEAR t_text.
ENDLOOP.
ELSE.
CLEAR w_text.
LOOP AT messtab.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = messtab-msgid
lang = sy-langu
no = messtab-msgnr
v1 = messtab-msgv1
v2 = messtab-msgv2
v3 = messtab-msgv3
v4 = messtab-msgv4
IMPORTING
msg = w_text
EXCEPTIONS
not_found = 1
OTHERS = 2.
MOVE w_text TO t_text-msgtxt.
IF messtab-msgnr EQ '213'.
CONCATENATE 'Site:'(031) t_tab-cust
'Article:'(024) t_tab-matnr
'Posted Sucessfully'(032)
INTO t_text-desc SEPARATED BY space.
APPEND t_text.
CLEAR t_text.
EXIT. ELSE.
CONCATENATE 'Site:'(031) t_tab-cust
'Article:'(024) t_tab-matnr
'Not Posted'(033)
INTO t_text-desc SEPARATED BY space.
APPEND t_text.
CLEAR t_text.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " fr_data_posting
*& Form fr_authority_check
text
FORM fr_authority_check.
AUTHORITY-CHECK OBJECT 'Y_VATADJ'
ID 'VKORG' FIELD t001w-vkorg
ID 'TCD' FIELD 'YGFVAT'.
IF sy-subrc NE 0.
MESSAGE e999 WITH text-m02.
ENDIF.
ENDFORM. " fr_authority_check
*& Form fr_write_msg
text
FORM fr_write_msg.
SKIP.
ULINE:/(164).
WRITE:/
'Messages encountered while Calling Transaction WPUK'(025),
90 'Message Text'(026).
ULINE:/1(164).
LOOP AT t_text.
WRITE:/1 t_text-desc,
90 t_text-msgtxt,
164 ''.
ENDLOOP.
ULINE:/1(164).
ENDFORM. " fr_write_msg
*& Form FR_BUILD_REP
text
FORM fr_build_rep.
IF error IS INITIAL.
IF NOT t_tab[] IS INITIAL.
LOOP AT t_tab.
MOVE:
t_tab-cust TO t_tab1-cust, "site/customer number
t_tab-date TO t_tab1-date, "transaction date
t_tab-currency TO t_tab1-currency, "currency
t_tab-extnbr TO t_tab1-extnbr, "external reference number
t_tab-pos-cont TO t_tab1-pos-cont, "POS controler
t_tab-pos-id TO t_tab1-pos-id, "POS id
t_tab-cashier TO t_tab1-cashier, "cashier name
t_tab-qualif TO t_tab1-qualif, "qualifier of the article
t_tab-matnr TO t_tab1-matnr, "article number
t_tab-pos-tr TO t_tab1-pos-tr, "POS transfert type
t_tab-paymeth TO t_tab1-paymeth, "payment method
t_tab-tarcur TO t_tab1-tarcur, "target currency
t_tab-assign TO t_tab1-assign.
REPLACE ',' WITH '.' INTO t_tab-qty.
CONDENSE t_tab-qty NO-GAPS.
MOVE t_tab-qty TO t_tab1-qty.
REPLACE ',' WITH '.' INTO t_tab-sale.
CONDENSE t_tab-sale NO-GAPS.
MOVE t_tab-sale TO t_tab1-sale.
REPLACE ',' WITH '.' INTO t_tab-final.
CONDENSE t_tab-final NO-GAPS.
MOVE t_tab-final TO t_tab1-final.
APPEND t_tab1.
CLEAR t_tab1.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " FR_BUILD_REP
*& Form fr_format_tab
text
FORM fr_format_tab.
DATA : lv_qty TYPE string.
IF NOT t_tab-qty IS INITIAL.
IF t_tab-qty+0(1) EQ '-'.
CLEAR lv_qty.
MOVE t_tab-qty TO lv_qty.
CLEAR t_tab-qty.
SHIFT lv_qty LEFT CIRCULAR.
CONDENSE lv_qty NO-GAPS.
MOVE lv_qty TO t_tab-qty.
MODIFY t_tab TRANSPORTING qty.
ENDIF.
ENDIF.
ENDFORM. " fr_format_tab -
Can we hav call transaction and session method for an application
can we hav call transaction and session method for an application ?if yes how?
Hi ,
You can. If Call Transaction fails, a batch input session can be created.
Check this example-
Call the transaction. Messages from Call Transaction are stored in the
internal table messtab
CALL TRANSACTION 'LT01' USING bdc_tab MODE 'N' UPDATE 'S'
MESSAGES INTO messtab.
IF sy-subrc = 0.
Call transaction successfull, get the number of the Transfer Order that
was created
LOOP AT messtab.
IF messtab-dynumb = '0104' AND messtab-msgnr = '016'.
w_transportorderno = messtab-msgv1.
ENDIF.
ENDLOOP.
ELSE.
Call transaction failed, create a batch input session instead.
PERFORM open_group.
PERFORM bdc_insert USING 'LT01'.
PERFORM close_group.
ENDIF.
Regards,
Sookshma -
Batch input / call transaction
hi,
happy new year to everybody.
in the table whcih contains errors messages in call transaction (BDCMSGCOLL). the message, which has MSGTYP = 'S' and MSGNR = '100', is a message of succes or not?.I would like to say yes, which many people will. But I ran a call transaction some time ago and had an issue with using the MSGTYP field.
Use SE91 using the Message ID to get a description of the actual message.
Maybe you are looking for
-
How Do I Always Boot From An External Drive
I successfully installed Mac OS X 10.4.8 on an external hard drive. It boots successfully into OS X, but only if you press option on boot and select the drive or if you boot from the drive inside my Mac Mini and go to startup disk and select the exte
-
Multiple DB writers, good or bad (in my case)?
Hi All, Oracle v11.2 on Linux 64 bit. I have a production database which is bigger SGA (25GB) + more CPUs (32) then a testing database (12GB SGA + 8 CPUs). But we get more I/O waits (and performance issues) on the production database then the testing
-
Changing deployment ID when changing to master license file
We are using HFM 9.2.0 and am having license server problems due to duplicate users in the database. Can anybody tell me what I would need to do to repleace our existing license file with the master license file? I know the Deployment ID will need to
-
Create a full-screen image gallery with MSO - breaks other buttons?
Hi - I'm trying to create a full screen image gallery to be accessible from any layout via a button. The ultimate goal is to use my layout as a presentation tool and allow the presenter to have an 'image gallery' button on each page,so they would be
-
How to stop Airport turning itself on all the time.
My AirPort setting (MBP) keeps turning itself on at random. I have it always switched of as I am connected over a cable. It is a random occurrence, sometimes not for days and than 3 times in one day. This happens since upgrading from 10.4 to 10.5. Wa