hi,
here with the procedure,
> go to shdb and record your transaction with the functional guy.
And get your recording
> save and back
> click recording and click program from application tool bar.
> transfer from coding save your program ..
You have to devolep your own program accoding to your requirement
but the sample i have given bellow..
REPORT ZFICO003_FB01
MESSAGE-ID 38
LINE-SIZE 180
LINE-COUNT 56
NO STANDARD PAGE HEADING.
TABLES: T100.
- 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.DATA: GV_PATH TYPE STRING.DATA: GV_INDEX TYPE SY-INDEX.DATA: GV_INDEX1 TYPE SY-INDEX.DATA :GV_TOTAL TYPE SY-INDEX.DATA: VDATU TYPE SY-DATUM.DATA:V_DATE TYPE SY-DATUM.DATA V_ERROR_FLAG(1) TYPE C. *--DECLARATION OF CONSTANTSCONSTANTS: c_x(1) TYPE c VALUE 'X', c_amp(1) TYPE c VALUE '&', " For & c_invalid_pc(7) TYPE c VALUE '/*?"<>|'. "Invalid Chars *STRUCTURE*--structure for the recordDATA: BEGIN OF RECORD, BUKRS(4) TYPE C, "COMPANY CODE INVOICE(8) TYPE C, " REFERENCE Invoice Number - SAP Document GE_CUSTOMER(5) TYPE C, "Customer Number GE_BILLTO(2) TYPE C, "Bill To Code on Legacy VALUE(11) TYPE C, "Invoice Value DB_R(1) TYPE C, "Debit/Credit (0=DB 1=CR) INVDATE(10) TYPE C, "Invoice Date format dd/mm/yyyy WRBTR(11) TYPE C, "Signed Numeric value TERMS(4) TYPE C, "Payment Terms Code PO_NUMBER(18) TYPE C, "Customer Purchase Order Number CHK_ID(6) TYPE C, "Cheque Number ITEM_NOTES(50) TYPE C, "Item Notes LATE_REASON(3) TYPE C, "Reason Code for Late/Non Payment CURRENCY(4) TYPE C, "CURRENCY AKONT(10) TYPE C, "ACCOUNT NO.
END OF RECORD. *Internal tables*-----Flat fileDATA: IT_RECORD LIKE RECORD OCCURS 0 WITH HEADER LINE.*--sucessful log fileDATA: BEGIN OF IT_ERRORFILE OCCURS 0,
GLACCOUNT(10) TYPE C , " gl acct BUKRS(4) TYPE C, "COMPANY CODE INVOICE(8) TYPE C, " REFERENCE Invoice Number - SAP Document GE_CUSTOMER(5) TYPE C, "Customer Number GE_BILLTO(2) TYPE C, "Bill To Code on Legacy VALUE(11) TYPE C, "Invoice Value DB_R(1) TYPE C, "Debit/Credit (0=DB 1=CR) INVDATE(10) TYPE C, "Invoice Date WRBTR(11) TYPE C, "Signed Numeric value
TERMS(4) TYPE C, "Payment Terms Code PO_NUMBER(18) TYPE C, "Customer Purchase Order Number CHK_ID(6) TYPE C, "Cheque Number ITEM_NOTES(50) TYPE C, "Item Notes LATE_REASON(3) TYPE C, "Reason Code for Late/Non Payment CURRENCY(4) TYPE C, "CURRENCY AKONT(10) TYPE C, "ACCOUNT NO. FILE(300) TYPE C, "Error Msg END OF IT_ERRORFILE. DATA: IT_FILE LIKE IT_ERRORFILE OCCURS 0 WITH HEADER LINE. *--SELECTION SCREEN
SELECTION-SCREEN SKIP 1.SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-001.SELECTION-SCREEN SKIP 1.
- Presentation server details
PARAMETERS: RB_PRES RADIOBUTTON GROUP FILE DEFAULT 'X', P_PFILE LIKE RLGRAP-FILENAME, P_PFILE1 LIKE RLGRAP-FILENAME.
- Application server details
SELECTION-SCREEN SKIP 1.PARAMETERS: RB_UNIX RADIOBUTTON GROUP FILE, P_AFILE LIKE FILENAME-FILEINTERN LOWER CASE DEFAULT '/usr/sap/D51/DVEBMGS11/work/sap_in/', P_AFILE1 LIKE FILENAME-FILEINTERN LOWER CASE DEFAULT '/usr/sap/D51/DVEBMGS11/work/sap_out/'. SELECTION-SCREEN SKIP 1.SELECTION-SCREEN END OF BLOCK BLK2. ****Document typeSELECTION-SCREEN SKIP 1.SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME TITLE TEXT-040.PARAMETERS: P_blart LIKE bkpf-blart obligatory default 'AR' .SELECTION-SCREEN SKIP 1.SELECTION-SCREEN END OF BLOCK BLK3. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PFILE.*--help to locate the flat file PERFORM FILE_OPEN CHANGING p_pfile. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pfile1. *-- Help to locate the flat file for output PERFORM file_open CHANGING p_pfile1. *--SELECTION SCREEN VALIDATIONSAT SELECTION-SCREEN. IF RB_PRES = C_X AND SY-BATCH = 'X'. MESSAGE e000 WITH 'You cannot schedule a Background Job'(027) 'if file is from the presentation server'(028). ENDIF. *-- Validate All Filenames for Mandatory Entry and Invalid Chars. PERFORM VALIDATE_ALL_FILENAMES. ----
*TOP-OF-PAGE.----
TOP-OF-PAGE. PERFORM DIS_LOG. ----
*start of selection----
START-OF-SELECTION.*--Get the data from flat file. IF RB_PRES = C_X. PERFORM DATA_UPLOAD_PC. ELSE. PERFORM DATA_UPLOAD_UNIX. ENDIF.
- Check amount contain ','.
PERFORM CHECK_AMOUNT. *--perform batch input IF IT_RECORD[] IS NOT INITIAL. PERFORM BATCH_INPUT. ENDIF.----
*END OF SELECTION----
END-OF-SELECTION.*--OUTPUT IF NOT V_ERROR_FLAG = C_X. PERFORM DIPLAY_LOG. IF NOT IT_ERRORFILE[] IS INITIAL. IF rb_pres = c_x. PERFORM write_output_pres. "Output to Presentation Server ELSE. PERFORM write_output_appl. "Output to Application Server ENDIF. ENDIF. IF rb_pres = ' '. PERFORM write_input_bkp_appl. "Input file backup to Application Server endif. ENDIF.&----
*& Form FILE_OPEN&----
FORM FILE_OPEN changing l_pfile. DATA: IT_FILETABLE TYPE FILETABLE, LV_FILETABLE TYPE STRING, LV_RC TYPE I. CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG EXPORTING INITIAL_DIRECTORY = GV_PATH CHANGING FILE_TABLE = IT_FILETABLE RC = LV_RC EXCEPTIONS FILE_OPEN_DIALOG_FAILED = 1 CNTL_ERROR = 2 ERROR_NO_GUI = 3 NOT_SUPPORTED_BY_GUI = 4 OTHERS = 5. IF SY-SUBRC = 0. READ TABLE IT_FILETABLE INTO l_PFILE INDEX 1. ENDIF. ENDFORM. " FILE_OPEN &----
*& Form DATA_UPLOAD_PC&----
FORM DATA_UPLOAD_PC . *Local data DATA: LV_FILENAME TYPE STRING. check for the path IF P_PFILE IS NOT INITIAL. LV_FILENAME = P_PFILE. ELSE. LV_FILENAME = GV_PATH. ENDIF. *--to upload the data from flat file IF LV_FILENAME IS NOT INITIAL. CALL FUNCTION 'GUI_UPLOAD' EXPORTING FILENAME = LV_FILENAME FILETYPE = 'ASC' HAS_FIELD_SEPARATOR = 'X' TABLES DATA_TAB = IT_RECORD EXCEPTIONS FILE_OPEN_ERROR = 1 FILE_READ_ERROR = 2 NO_BATCH = 3 GUI_REFUSE_FILETRANSFER = 4 INVALID_TYPE = 5 NO_AUTHORITY = 6 UNKNOWN_ERROR = 7 BAD_DATA_FORMAT = 8 HEADER_NOT_ALLOWED = 9 SEPARATOR_NOT_ALLOWED = 10 HEADER_TOO_LONG = 11 UNKNOWN_DP_ERROR = 12 ACCESS_DENIED = 13 DP_OUT_OF_MEMORY = 14 DISK_FULL = 15 DP_TIMEOUT = 16 OTHERS = 17. IF SY-SUBRC <> 0. MESSAGE I000(ZD51) WITH 'Error while uploading data'(113). STOP. ENDIF. ENDIF.ENDFORM. " DATA_UPLOAD_PC &----
*& Form batch_input&----
FORM BATCH_INPUT . DATA: LV_POSTKEY(2), LV_REVPOSTKEY(2),
v_value like bseg-wrbtr, v_amount(16), L_WRBTR LIKE BSEG-WRBTR. DATA: V_DATUM LIKE SY-DATUM. DATA: V_DATE(10). data: l_curr like bkpf-waers. CONSTANTS: LC_1(1) TYPE C VALUE '1'. CLEAR: RECORD. LOOP AT IT_RECORD INTO RECORD.*--batch input for t.code fb01
PERFORM BDC_DYNPRO USING 'SAPMF05A' '0100'. PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RF05A-NEWKO'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'. CONCATENATE RECORD-INVDATE+6(4) RECORD-INVDATE+3(2) RECORD-INVDATE+0(2) INTO V_DATUM. WRITE V_DATUM TO V_DATE. PERFORM BDC_FIELD USING 'BKPF-BLDAT' V_DATE. PERFORM BDC_FIELD USING 'BKPF-BLART' p_blart. "type-AR def
PERFORM BDC_FIELD USING 'BKPF-BUKRS' RECORD-BUKRS. PERFORM BDC_FIELD USING 'BKPF-BUDAT' V_DATE.
- PERFORM BDC_FIELD USING 'BKPF-MONAT' RECORD-PERIOD.
PERFORM BDC_FIELD USING 'BKPF-WAERS' RECORD-CURRENCY. PERFORM BDC_FIELD USING 'BKPF-XBLNR' RECORD-INVOICE. PERFORM BDC_FIELD USING 'BKPF-BKTXT' RECORD-PO_NUMBER. *debit/credit '1' IF RECORD-DB_R = LC_1. LV_POSTKEY = '01'. "pstkey 01 LV_REVPOSTKEY = '50'. "pstkey 50 +ve values ELSE.*debit/credit '0' LV_POSTKEY = '11'. "pst 11 for negative LV_REVPOSTKEY = '40'. ENDIF. PERFORM BDC_FIELD USING 'RF05A-NEWBS' LV_POSTKEY. PERFORM BDC_FIELD USING 'RF05A-NEWKO' RECORD-GE_CUSTOMER. PERFORM BDC_DYNPRO USING 'SAPMF05A' '0301'. PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RF05A-NEWKO'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'. L_WRBTR = RECORD-WRBTR. IF L_WRBTR > 0. V_VALUE = RECORD-WRBTR. ELSE. V_VALUE = RECORD-WRBTR * -1. ENDIF. clear v_amount. l_curr = RECORD-CURRENCY. write v_value currency l_curr to v_amount. CONDENSE V_AMOUNT. PERFORM BDC_FIELD USING 'BSEG-WRBTR' V_amount. PERFORM BDC_FIELD USING 'BSEG-ZTERM' RECORD-TERMS. PERFORM BDC_FIELD USING 'BSEG-SGTXT' RECORD-PO_NUMBER. PERFORM BDC_FIELD USING 'RF05A-NEWBS' LV_REVPOSTKEY. PERFORM BDC_FIELD USING 'RF05A-NEWKO' RECORD-AKONT. PERFORM BDC_DYNPRO USING 'SAPMF05A' '0300'. PERFORM BDC_FIELD USING 'BDC_CURSOR' 'BSEG-SGTXT'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BU'. PERFORM BDC_FIELD USING 'BSEG-WRBTR' V_AMOUNT. PERFORM BDC_FIELD USING 'BSEG-SGTXT' RECORD-PO_NUMBER. PERFORM BDC_DYNPRO USING 'SAPLKACB' '0002'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENTE'. PERFORM BDC_TRANSACTION USING 'FB01'. CLEAR L_WRBTR. ENDLOOP.ENDFORM. " batch_input &----
*& Form BDC_FIELD&----
FORM BDC_FIELD USING FNAM FVAL. IF FVAL <> SPACE. CLEAR BDCDATA. BDCDATA-FNAM = FNAM. BDCDATA-FVAL = FVAL. APPEND BDCDATA. ENDIF.ENDFORM. "BDC_FIELD&----
*& Form BDC_DYNPRO&----
FORM BDC_DYNPRO USING PROGRAM DYNPRO. CLEAR BDCDATA. BDCDATA-PROGRAM = PROGRAM. BDCDATA-DYNPRO = DYNPRO. BDCDATA-DYNBEGIN = 'X'. APPEND BDCDATA.ENDFORM. "BDC_DYNPRO&----
*& Form BDC_TRANSACTION&----
FORM BDC_TRANSACTION USING TCODE.
DATA: L_MSTRING(480). DATA: L_SUBRC LIKE SY-SUBRC, L_GLACT(12) TYPE C. CLEAR:L_MSTRING,BDCDATA,L_SUBRC. REFRESH MESSTAB. DATA: v_mode(1) VALUE 'N', l_tlines TYPE i. DATA: l_mesg TYPE string, l_cnt TYPE i, l_lines TYPE sytfill, l_msg_text LIKE t100, l_msg_id LIKE t100-arbgb, l_msg_no LIKE t100-msgnr, l_msg_var1 LIKE balm-msgv1, l_msg_var2 LIKE balm-msgv2, l_msg_var3 LIKE balm-msgv3, l_msg_var4 LIKE balm-msgv4. CALL TRANSACTION TCODE USING BDCDATA MODE V_MODE " no screen
UPDATE 'A' " asynchronus MESSAGES INTO MESSTAB. " messages L_SUBRC = SY-SUBRC. REFRESH BDCDATA. SORT MESSTAB BY MSGTYP msgnr.
- LOOP AT MESSTAB.
- SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
- AND ARBGB = MESSTAB-MSGID
- AND MSGNR = MESSTAB-MSGNR.
IF l_subrc <> 0.*- populate output records CLEAR: l_tlines, l_mesg. PERFORM get_message USING messtab CHANGING l_mesg. gv_index = gv_index + 1.
- it_errorfile-index = gv_index.
- it_errorfile-vbeln = record-vbeln.
move-corresponding record to it_errorfile. it_errorfile-file = l_mesg. APPEND it_errorfile. CLEAR it_errorfile. ELSE. READ TABLE messtab WITH KEY msgtyp = 'S' msgnr = '312'. IF sy-subrc = 0. l_msg_id = messtab-msgid. l_msg_no = messtab-msgnr. l_msg_var1 = messtab-msgv1. l_msg_var2 = messtab-msgv2. l_msg_var3 = messtab-msgv3. l_msg_var4 = messtab-msgv4. CLEAR l_mesg. SELECT SINGLE text FROM t100 INTO l_mesg WHERE sprsl = sy-langu AND arbgb = l_msg_id AND msgnr = l_msg_no. IF sy-subrc = 0. l_cnt = 1. DO 4 TIMES. CASE l_cnt. WHEN 1. REPLACE c_amp WITH l_msg_var1 INTO l_mesg. WHEN 2. REPLACE c_amp WITH l_msg_var2 INTO l_mesg. WHEN 3. REPLACE c_amp WITH l_msg_var3 INTO l_mesg. WHEN 4. REPLACE c_amp WITH l_msg_var4 INTO l_mesg. ENDCASE. CONDENSE l_mesg. l_cnt = l_cnt + 1. ENDDO. ENDIF. ENDIF. gv_index1 = gv_index1 + 1. move l_msg_var1 to it_file-glaccount. move-corresponding record to it_file. it_file-file = l_mesg. APPEND it_file. CLEAR it_file. ENDIF. ENDFORM. "BDC_TRANSACTION &----
*& Form DIS_LOG&----
FORM DIS_LOG . CALL FUNCTION 'Z_REPORT_HEADER' EXPORTING TITLE = SY-TITLE EXCEPTIONS OTHERS = 1. WRITE : / TEXT-005, "GE-Fanuc 011 TEXT-006, "Document 020 TEXT-009, "Company 028 TEXT-011, "Accounting 039 TEXT-013, "GE-Cust 052 TEXT-016, "Value 072 TEXT-017, "Cheque 086 TEXT-019, "Item Notes 100 'G/L ACCT'. WRITE: / TEXT-006 , "Document 011 TEXT-008, "Date 020 TEXT-010, "Code 039 TEXT-018, "Number 072 TEXT-018. "Number ULINE. ENDFORM. " DIS_LOG &----
*& Form DIPLAY_LOG&----
FORM DIPLAY_LOG . DESCRIBE TABLE IT_ERRORFILE LINES GV_INDEX. SKIP. WRITE:/15 'TOTAL NUMBER OF RECORDS: ',GV_TOTAL. WRITE:/15 'TOTAL NUMBER OF SUCCESSFUL RECORDS:',GV_INDEX1. WRITE:/15 'TOTAL NUMBER OF ERROR RECORDS: ',GV_INDEX. LOOP AT IT_FILE. SKIP 1. AT FIRST. WRITE:/15 'RECORDS POSTED.', GV_INDEX1. SKIP 1. ENDAT. WRITE: / IT_FILE-INVOICE , "GE-Fanuc JE Number 011 IT_FILE-INVDATE, "Document Date 022 IT_FILE-BUKRS , "Company Code
- 030 IT_FILE-PERIOD , "Accounting Period
041 IT_FILE-AKONT , "Account Number 054 IT_FILE-VALUE , "Value 074 IT_FILE-CHK_ID , "Cheque 088 IT_FILE-ITEM_NOTES , "Item Notes 102 IT_FILE-GLACCOUNT, 114 IT_FILE-FILE+0(68). ENDLOOP. SKIP 4. LOOP AT IT_ERRORFILE. SKIP 1. AT FIRST. WRITE:/05 'ERROR RECORDS.', GV_INDEX. SKIP 2. ENDAT. WRITE: / IT_ERRORFILE-INVOICE , "GE-Fanuc JE Number 011 IT_ERRORFILE-INVDATE, "Document Date 022 IT_ERRORFILE-BUKRS , "Company Code
- 030 IT_ERRORFILE-PERIOD , "Accounting Period
041 IT_ERRORFILE-AKONT , "Account Number 054 IT_ERRORFILE-VALUE , "Value 074 IT_ERRORFILE-CHK_ID , "Cheque 088 IT_ERRORFILE-ITEM_NOTES , "Item Notes
- 100 IT_ERRORFILE-GLACCOUNT,
114 IT_ERRORFILE-FILE. ENDLOOP.ENDFORM. " DIPLAY_LOG&----
*& Form DATE_CONVERSION&----
----
----
FORM DATE_CONVERSION USING P_RECORD_VDATU . CLEAR:VDATU,V_DATE. IF P_RECORD_VDATU CA '/.-'. TRANSLATE P_RECORD_VDATU USING '/ . - '. CONDENSE P_RECORD_VDATU NO-GAPS. VDATU6(2) = P_RECORD_VDATU0(2). VDATU4(2) = P_RECORD_VDATU2(2). VDATU0(4) = P_RECORD_VDATU4(4). WRITE VDATU TO V_DATE. ENDIF. ENDFORM. " DATE_CONVERSION&----
*& Form DATA_UPLOAD_UNIX&----
----
FORM DATA_UPLOAD_UNIX . CLEAR IT_RECORD. REFRESH IT_RECORD. *-- Open Dataset OPEN DATASET P_AFILE FOR INPUT IN TEXT MODE ENCODING DEFAULT. IF SY-SUBRC EQ 0. DO.*-- Read Dataset and Populate Input file data to Internal Table READ DATASET P_AFILE INTO IT_RECORD. IF SY-SUBRC EQ 0.
APPEND IT_RECORD. CLEAR IT_RECORD. ELSE. EXIT. ENDIF. ENDDO. ELSE. if sy-batch = 'X'. MESSAGE 'Input File not found'(100) TYPE 'E'. ELSE. MESSAGE 'Input File not found'(100) TYPE 'I'. LEAVE LIST-PROCESSING. ENDIF. ENDIF. *-- Close Dataset CLOSE DATASET P_AFILE.ENDFORM. " DATA_UPLOAD_UNIX&----
*& Form write_output_appl&----
- Output to Application Server
----
FORM write_output_appl . DATA: l_record LIKE LINE OF IT_ERRORFILE. data: l_loc TYPE i, l_lng TYPE i, l_cmd(80) TYPE c, l_fil(80) TYPE c, l_file LIKE rlgrap-filename. l_loc = 1. WHILE sy-subrc EQ 0. SEARCH p_afile FOR '/' STARTING AT l_loc. IF sy-fdpos GT 0. ADD sy-fdpos TO l_loc. l_cmd = p_afile(l_loc). l_lng = 60 - l_loc. l_fil = p_afile+l_loc(l_lng). ELSE. ADD 1 TO l_loc. ENDIF. ENDWHILE. *- Build file name CONCATENATE '/usr/sap/D51/DVEBMGS11/work/sap_out/' l_fil sy-datum sy-uzeit INTO l_file. CONDENSE l_file NO-GAPS. .*-- Build Filename CONCATENATE l_file '_err'(099) sy-datum sy-uzeit INTO p_afile1. CONDENSE p_afile1 NO-GAPS.*-- Open Dataset OPEN DATASET p_afile1 FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. IF sy-subrc NE 0. MESSAGE e000 WITH 'Unable to open output file.'(098). ELSE. LOOP AT IT_ERRORFILE INTO l_record. TRANSFER l_record TO p_afile1. ENDLOOP. WRITE:/ 'File successfully written onto application server'(097). ENDIF. *-- Close Dataset CLOSE DATASET p_afile1.ENDFORM. " write_output_appl &----
*& Form write_output_pres&----
- Output to Presentation Server
----
FORM write_output_pres . DATA: l_file TYPE string. l_file = p_pfile1. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = l_file filetype = 'ASC' write_field_separator = 'X' trunc_trailing_blanks_eol = 'X' TABLES data_tab = IT_ERRORFILE EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. IF sy-subrc = 0. SKIP 3. WRITE:/ 'File successfully written onto Presentation Server'(096). ENDIF.ENDFORM. " write_output_pres&----
*& Form write_input_bkp_appl&----
----
----
FORM write_input_bkp_appl .*- Move input file to /usr/sap/D51/DVEBMGS11/work/sap_in/bak data: l_loc TYPE i, l_lng TYPE i, l_cmd(80) TYPE c, l_fil(80) TYPE c, l_file LIKE rlgrap-filename. DATA: L_RECORD1 LIKE LINE OF IT_RECORD.
l_loc = 1. WHILE sy-subrc EQ 0. SEARCH p_afile FOR '/' STARTING AT l_loc. IF sy-fdpos GT 0. ADD sy-fdpos TO l_loc. l_cmd = p_afile(l_loc). l_lng = 60 - l_loc. l_fil = p_afile+l_loc(l_lng). ELSE. ADD 1 TO l_loc. ENDIF. ENDWHILE. *- Build file name CONCATENATE '/usr/sap/D51/DVEBMGS11/work/sap_in/bak/' l_fil SY-DATUM SY-UZEIT INTO l_file. CONDENSE l_file NO-GAPS. *-- Open Dataset OPEN DATASET l_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. IF sy-subrc EQ 0. LOOP AT it_record INTO l_record1. TRANSFER l_record1 TO l_file. ENDLOOP. ENDIF. *-- Close Dataset CLOSE DATASET l_file. *-- Delete Input, as process is complete DELETE DATASET p_afile. ENDFORM. " write_input_bkp_appl&----
*& Form CHECK_AMOUNT&----
----
----
FORM CHECK_AMOUNT . DATA: L_INDEX TYPE SY-TABIX. data: l_wrbtr like bseg-wrbtr. DESCRIBE TABLE IT_RECORD LINES GV_TOTAL. LOOP AT IT_RECORD. L_INDEX = SY-TABIX. CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 4 OTHERS = 8. l_wrbtr = l_wrbtr + IT_RECORD-WRBTR. ENDCATCH. IF SY-SUBRC <> 0. IT_ERRORFILE-FILE = 'Amount should be in the format 9999.99'. MOVE-CORRESPONDING IT_RECORD TO IT_ERRORFILE. APPEND IT_ERRORFILE. CLEAR IT_ERRORFILE. DELETE IT_RECORD INDEX L_INDEX. ENDIF. clear l_wrbtr. CLEAR IT_RECORD. ENDLOOP. ENDFORM. " CHECK_AMOUNT &----
*& Form get_message&----
----
FORM get_message USING p_messtab
CHANGING p_gv_mesg TYPE string.
DATA: l_mesg TYPE string,
l_cnt TYPE i,
l_lines TYPE sytfill,
l_msg_text LIKE t100,
l_msg_id LIKE t100-arbgb,
l_msg_no LIKE t100-msgnr,
l_msg_var1 LIKE balm-msgv1,
l_msg_var2 LIKE balm-msgv2,
l_msg_var3 LIKE balm-msgv3,
l_msg_var4 LIKE balm-msgv4.
DESCRIBE TABLE messtab LINES l_lines.
READ TABLE messtab WITH KEY msgtyp = 'E'.
IF sy-subrc = 0.
l_msg_id = messtab-msgid.
l_msg_no = messtab-msgnr.
l_msg_var1 = messtab-msgv1.
l_msg_var2 = messtab-msgv2.
l_msg_var3 = messtab-msgv3.
l_msg_var4 = messtab-msgv4.
CLEAR l_mesg.
SELECT SINGLE text FROM t100 INTO l_mesg
WHERE sprsl = sy-langu
AND arbgb = l_msg_id
AND msgnr = l_msg_no.
IF sy-subrc = 0.
l_cnt = 1.
DO 4 TIMES.
CASE l_cnt.
WHEN 1.
REPLACE c_amp WITH l_msg_var1 INTO l_mesg.
WHEN 2.
REPLACE c_amp WITH l_msg_var2 INTO l_mesg.
WHEN 3.
REPLACE c_amp WITH l_msg_var3 INTO l_mesg.
WHEN 4.
REPLACE c_amp WITH l_msg_var4 INTO l_mesg.
ENDCASE.
CONDENSE l_mesg.
l_cnt = l_cnt + 1.
ENDDO.
ENDIF.
*- Build the message
CONCATENATE p_gv_mesg l_mesg INTO p_gv_mesg
SEPARATED BY space.
ENDIF.
ENDFORM. " get_message
hope it will be helpful....
Vinoth