Application Development 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: 

BDC for FB01.

Former Member
0 Kudos

Hello Experts,

I am developing a module pool for a requirement which is for bank to bank transfer ,so i have done the initial processing for giving screen related to fund entering and from bank ,to bank ,gl account details etc so the problem now is after getting all the data in table control what needs to be transferred and all,i have to call fb01 for posting the gl account for every row in table control with data,for that i need a bdc

First i was asked to make a bdc for FB50 but after going through various threads i got to know that's a enjoy transaction so it is not recommended to use BDC for that,my functional guy then asked me to do BDC for FB01 for the same.

CAN anyone explain me the procedure ahead as I have not worked much on BDC so need help in that if anyone has done it before with multiple line items as well in table control i have the data in internal table you can assume before calling the bdc.

Thanks in advance.

Vijay

1 ACCEPTED SOLUTION

vinoth_aruldass
Contributor
0 Kudos

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.
  •      PERIOD(2)      TYPE C,
      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,
  •      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 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(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
hope it will be helpful....
Vinoth
7 REPLIES 7

vinoth_aruldass
Contributor
0 Kudos

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.
  •      PERIOD(2)      TYPE C,
      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,
  •      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 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(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
hope it will be helpful....
Vinoth

vinoth_aruldass
Contributor
0 Kudos

hi,

see report RFBIBL00 You must using it to FB01.

hope it wil be useful

Phillip_Morgan
Contributor
0 Kudos

Personally, I would advise using bapi or function module:

POSTING_INTERFACE_DOCUMENT

BAPI_ACC_DOCUMENT_POST

Both have documentation and a lot can be found on the net...

VijayCR
Active Contributor
0 Kudos

Hello ,

I would like to advice you to use the Idocs instead of BDC .So that we can Proceed only if Idoc is Posted properly IDOC FIDCC1 using Idoc Inbound single funtiona module.

Thanks,

Vijay

raymond_giuseppi
Active Contributor
0 Kudos

(Yes some transactions can no be longer called in BDC, Note 310485 - Enjoy transactions in FI and previous posting transactions)

You should look at ACC BAPI, or at least at FM like POSTING_INTERFACE_START (first), POSTING_INTERFACE_DOCUMENT and POSTING_INTERFACE_END (last)  which will build the BDC (just give the BDC data for header and for each item and they will generate the BDC by themselves)

Regards,

Raymond

0 Kudos

Hi,

Steps you should follow:

1. Doing BDC - Goto transaction SHDB and enter the TCode for which recording needs to be done.

                       Do the recording for each field that is present in your internal table that you are using in                     your table control. Doing Recording is same as executing a TCode but in the background all you actions will be recorded.

                      

2. Now you should write a perform for recording you already saved. In the form where all your recording stuff is coming at the start loop that internal table which has all the data. Normally recording will show field values you have entered while doing BDC. Change all the those values with workarea-fieldname to make it dynamic. Now your recording should execute for each line of the internal table.

If you have any other queries do post it.

Former Member
0 Kudos

Hi ,

For FB01 BAPI_ACC_DOCUMENT_POST is the standard way of posting a document.

We dont go for BDC for this , BDC 's are only written where in you dont have any standard way of doing or you requirement is not met through.

Please dont go for BDC go for BAPI , as this is possible through this.

Regards,

Amit