2006 Jun 10 12:29 PM
Hi,
ANYONE DEVELOPED BDC fOR FB01 T-Code, Please send the source code.
Deepak
Hi,
ANYONE DEVELOPED BDC fOR FB01 T-Code, Please send the source code.
Deepak
2006 Jun 10 12:37 PM
Hi Deepak,
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 CONSTANTS
CONSTANTS: 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 record
DATA: 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.
PERIOD(2) TYPE C,
END OF RECORD.
*Internal tables
*-----Flat file
DATA: IT_RECORD LIKE RECORD OCCURS 0 WITH HEADER LINE.
*--sucessful log file
DATA: BEGIN OF IT_ERRORFILE OCCURS 0,
INDEX TYPE SY-INDEX,
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
PERIOD(2) TYPE C,
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
Parameters
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 type
SELECTION-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 VALIDATIONS
AT 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(11) TYPE C.
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
GV_TOTAL = GV_TOTAL + 1.
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
record-BLART.
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.
call transaction
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
MODE 'A'
UPDATE 'A' " asynchronus
MESSAGES INTO MESSTAB. " messages
L_SUBRC = SY-SUBRC.
REFRESH BDCDATA.
SORT MESSTAB BY MSGTYP msgnr.
LOOP AT MESSTAB.
messages
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
AND ARBGB = MESSTAB-MSGID
AND MSGNR = MESSTAB-MSGNR.
error records
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
&----
text
----
-->P_RECORD_VDATU text
----
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
&----
text
----
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.
PERFORM SPLIT_DATA.
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
&----
text
----
--> p1 text
<-- p2 text
----
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.
Find the local directory
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
&----
text
----
--> p1 text
<-- p2 text
----
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
&----
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
Regards,
Vinay
2006 Jun 12 4:57 AM
Dear Vinay,
Thanks for providing us the source code. Shall be grateful to you if you could also provide us the MS Excel file that you might have used containing the data to be uploaded.
Regards,
Alok & Deepak
2006 Jun 10 2:12 PM
Hi
It's useless to develop a bdc for trx FB01, there's std program RFBIBL00.
Here you've to fill the structure with header and items data: BGR00, BBKPF and BBSEG.
See the program informations for more details.
Max
2006 Jun 10 6:49 PM
hi
you can use LSMW for fb01.it is very easiy and better than BDC..
Cheers,
Abdul
Mark all useful answers..
2006 Nov 17 3:27 PM
Hi Vinay and deepak ,
I also need to develop a BDC for the transaction FB01 .
I saw the source code.
Can i Also get the excel file which u have used during developing the bdc
Thanks in anticipation,
Rishabh
2006 Nov 17 3:28 PM
2007 Mar 09 9:34 PM
Hi,
I need your urgent help regarding the Journal upload program from an excel file,
the existing upload program only handles a single currency code(USD or EUR).The excel file contains one header (for ex. curr 'USD') and multiple line items. This program is using BAPI 'BAPI_ACC_DOCUMENT_POST' for general G/L posting and BDC (FB01/FBS1) for accrual posting.
But,now we need to change this program for multiple headers(USD,EUR,MXN,etc) and multiple line Items in one excel sheet.
I am facing problem to posting the journal entries using 'BAPI_ACC_DOCUMENT_POST'. The program is creating one document no. for all the individual headers whereas it should be different document no.s for different headers. Can you please help me out to resolve my problem.
--Kaushik
2007 Mar 09 10:46 PM
Hi kaushik,
load the excel file, sort is by currency and call BAPI_ACC_DOCUMENT_POST AT END OF CURRENCY for all items of one currency.
It may be easier to write a new program than change the old one.
Be carefulr: You can't post more than 999 line items in one document.
Regards,
Clemsn
2007 Mar 11 2:38 AM
Hi Clemsn,
Thanks a lot,I'll use it and update u.
Regars,
kaushik
2016 Jun 01 10:02 AM
Hi Deepak,
Why don't you try to do this using BADI. I have developed 1 program for FB01 using BADI.
It is working fine. In future if you want to add some field in excel then with little changes in the source code this program will work.
Regards,
Rakesh
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |