Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

BDC For FB01

Former Member
0 Likes
2,611

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

10 REPLIES 10
Read only

Former Member
0 Likes
1,578

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

Read only

0 Likes
1,578

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

Read only

Former Member
0 Likes
1,578

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

Read only

abdul_hakim
Active Contributor
0 Likes
1,578

hi

you can use LSMW for fb01.it is very easiy and better than BDC..

Cheers,

Abdul

Mark all useful answers..

Read only

Former Member
0 Likes
1,578

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

Read only

Former Member
0 Likes
1,578

my email id is

[email protected]

Read only

0 Likes
1,578

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

Read only

0 Likes
1,578

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

Read only

0 Likes
1,578

Hi Clemsn,

Thanks a lot,I'll use it and update u.

Regars,

kaushik

Read only

Former Member
0 Likes
1,578

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