Tuesday, August 19, 2014

BDC for FB60 / Posting Vendor Document in Bulk


File format is shown below – 
Copy the data and paste it in TXT file.
Browse the TXT File
N – Is a separator.
When N is achieved document is posted.



REPORT  ZBAPIFB60.

TABLES: BSEG, BKPF.
**  Internal table declaration
DATA: lt_glacct  TYPE TABLE OF bapiacgl09,
      lt_vendact TYPE TABLE OF bapiacap09,
      lt_curramt TYPE TABLE OF bapiaccr09,
      lt_return  TYPE TABLE OF bapiret2,
      lt_ACCOUNTWT TYPE TABLE OF  BAPIACWT09,
      lt_LFBW TYPE TABLE OF LFBW.

** Workarea and variable declaration
DATA: lv_objtyp TYPE bapiache09-obj_type,
      lv_objkey TYPE bapiache09-obj_key,
      lv_objsys TYPE bapiache09-obj_sys,
      wa_docheader TYPE bapiache09,
      wa_glacct  LIKE LINE OF lt_glacct,
      wa_curramt LIKE LINE OF lt_curramt,
      wa_vendact LIKE LINE OF lt_vendact,
      wa_return  LIKE LINE OF lt_return,
      wa_ACCOUNTWT LIKE LINE OF lt_ACCOUNTWT,
      wa_LFBW LIKE LINE OF lt_LFBW.




PARAMETERS  : V_BUKRS TYPE BKPF-BUKRS.
PARAMETERS  : V_BUDAT TYPE BKPF-BUDAT.
PARAMETERS  : V_BLDAT TYPE BKPF-BLDAT.
PARAMETERS  : V_GJAHR TYPE BKPF-GJAHR.
PARAMETERS  : V_BLART TYPE BKPF-BLART.

TYPES : BEGIN OF ST,

   BUZEI(3),
   LIFNR(10),
   WRBTR(13),
   BUPLA(4),
   SECCO(4),
   SHKZG(1),
   MWSKZ(2),
   GSBER(1),
   PRCTR(10),
   KOSTL(10),
   SGTXT(50),
   ZFBDT(10),
   ZLSCH(1),


END OF ST.

*  INTERNAL TABLE AND WORKAREA DECLARATION
   DATA : ITAB TYPE TABLE OF ST.
   DATA : WA TYPE ST.

*  TYPES DECLARATION
  DATA: W_FILENAME TYPE STRING.
  SELECTION-SCREEN SKIP 1.
  SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-500.
  PARAMETERS: P_FILENM LIKE RLGRAP-FILENAME.
  SELECTION-SCREEN END OF BLOCK B1.

START-OF-SELECTION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILENM.

  CALL FUNCTION 'WS_FILENAME_GET'
       EXPORTING
            MASK             = ',*.*,*.*.'
            MODE             = '0'
            TITLE            = 'GET FILE NAME'
       IMPORTING
            FILENAME         = P_FILENM
       EXCEPTIONS
            INV_WINSYS       = 1
            NO_BATCH         = 2
            SELECTION_CANCEL = 3
            SELECTION_ERROR  = 4
            OTHERS           = 5.
** END OF CHANGE DCS05052003

** START OF CHANGE DCS05052003
START-OF-SELECTION.
 W_FILENAME = P_FILENM.
CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
**   FILENAME                    = 'C:\BDC_XLS_ASSIGN.TXT'
   FILENAME                      = W_FILENAME
   FILETYPE                      = 'ASC'
   HAS_FIELD_SEPARATOR           = 'X'
  TABLES
    DATA_TAB                     = ITAB
 EXCEPTIONS
   FILE_OPEN_ERROR               = 1
   FILE_READ_ERROR               = 2
   NO_BATCH                      = 3
   GUI_REFUSE_FILETRANSFER       = 4
   INVALID_TYPE                  = 5
   NO_AUTHORITY                  = 6
   UNKNOWN_ERROR                 = 7
   BAD_DATA_FORMAT               = 8
   HEADER_NOT_ALLOWED            = 9
   SEPARATOR_NOT_ALLOWED         = 10
   HEADER_TOO_LONG               = 11
   UNKNOWN_DP_ERROR              = 12
   ACCESS_DENIED                 = 13
   DP_OUT_OF_MEMORY              = 14
   DISK_FULL                     = 15
   DP_TIMEOUT                    = 16
   OTHERS                        = 17.

          .
IF SY-SUBRC <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO.
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

**  All necessary fields for vendor invoices will be considerd.
* Populate header data of document
wa_docheader-obj_type = 'BKPFF'.
wa_docheader-obj_key = '$'.
wa_docheader-obj_sys = 'Your Object System'.
wa_docheader-bus_act = 'RFBU'.



wa_docheader-comp_code = V_BUKRS.
wa_docheader-username = sy-uname.
wa_docheader-header_txt = 'Upload using BAPI'.
wa_docheader-doc_date = V_BLDAT.
wa_docheader-pstng_date = V_BUDAT.
wa_docheader-fisc_year = V_GJAHR.
wa_docheader-doc_type = V_BLART.

LOOP AT ITAB INTO WA.

IF WA-BUZEI EQ 'N'.
  "Write: 'Post the Documents'.
  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
  EXPORTING
    documentheader = wa_docheader
  IMPORTING
    obj_type       = lv_objtyp
    obj_key        = lv_objkey
    obj_sys        = lv_objsys
  TABLES
    accountgl      = lt_glacct
    accountpayable = lt_vendact
    currencyamount = lt_curramt
    ACCOUNTWT      = LT_ACCOUNTWT
    return         = lt_return.

  IF sy-subrc EQ 0.
  WRITE:/ lv_objtyp.
  WRITE:/ lv_objkey.
  WRITE:/ lv_objsys.
  LOOP AT lt_return INTO wa_return.
    WRITE:/ wa_return-message.
    CLEAR wa_return.
  ENDLOOP.
  COMMIT WORK AND WAIT.
  ENDIF.

  CLEAR: wa_glacct, lt_glacct, wa_vendact, lt_vendact, wa_curramt, lt_curramt, wa_accountwt, LT_ACCOUNTWT, wa_return, lt_return.
ENDIF.

IF WA-BUZEI NE 'N'.
* Account payable are maintained here
  IF WA-SHKZG EQ ''.
    WA_VENDACT-ITEMNO_ACC = WA-BUZEI.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = WA-LIFNR
      IMPORTING
        OUTPUT        = WA-LIFNR.

    WA_VENDACT-VENDOR_NO = WA-LIFNR."'0000109967'.

    CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
      EXPORTING
        DATE_EXTERNAL                  = WA-ZFBDT
*       ACCEPT_INITIAL_DATE            =
      IMPORTING
        DATE_INTERNAL                  = WA-ZFBDT
*     EXCEPTIONS
*       DATE_EXTERNAL_IS_INVALID       = 1
*       OTHERS                         = 2
              .
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    WA_VENDACT-BLINE_DATE = WA-ZFBDT."'20140816'.

    WA_VENDACT-ITEM_TEXT = WA-SGTXT."'ACCOUNT PAYABLE'.
    WA_VENDACT-BUSINESSPLACE = WA-BUPLA."'COFT'.
    WA_VENDACT-SECTIONCODE = WA-SECCO."'COFT'.
    WA_VENDACT-PYMT_METH = WA-ZLSCH.
    APPEND WA_VENDACT TO LT_VENDACT.



"Read from Vendor Master the Tax Code.
    SELECT * FROM LFBW INTO CORRESPONDING FIELDS OF WA_LFBW WHERE
      LIFNR = WA-LIFNR AND
      BUKRS = V_BUKRS AND
      WT_SUBJCT = 'X'.
      "APPEND WA_LFBW to LT_LFBW.

      wa_ACCOUNTWT-ITEMNO_ACC = WA-BUZEI.
      wa_ACCOUNTWT-WT_TYPE = WA_LFBW-WITHT."'W1'.
      wa_ACCOUNTWT-WT_CODE = WA_LFBW-WITHT."'W1'.

      APPEND wa_ACCOUNTWT TO LT_ACCOUNTWT.
    ENDSELECT.



*Make sure total amount balance for a document should be zero
    wa_curramt-itemno_acc = WA-BUZEI.
    wa_curramt-curr_type = '00'.
    wa_curramt-currency = 'INR'.

    DATA:LD_AMT(13) TYPE P DECIMALS 2.

    CALL FUNCTION 'MOVE_CHAR_TO_NUM'
      EXPORTING
        CHR             = WA-WRBTR
      IMPORTING
        NUM             = ld_amt
      EXCEPTIONS
        CONVT_NO_NUMBER = 1
        CONVT_OVERFLOW  = 2
        OTHERS          = 3.

    wa_curramt-amt_doccur = ( -1 ) * ld_amt."'-1000.00'.
    APPEND wa_curramt TO lt_curramt.
    CLEAR wa_curramt.
  ENDIF.

* Corresponding entry in GL Account
  IF WA-SHKZG EQ 'S'.
    WA_GLACCT-ITEMNO_ACC = WA-BUZEI.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = WA-LIFNR
      IMPORTING
        OUTPUT        = WA-LIFNR.

    WA_GLACCT-GL_ACCOUNT = WA-LIFNR."'0000602025'.
    WA_GLACCT-TAX_CODE = WA-MWSKZ.
    WA_GLACCT-ITEM_TEXT = WA-SGTXT."'GL ACCOUNT'.
    WA_GLACCT-BUS_AREA = WA-GSBER."'1'.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = WA-PRCTR
      IMPORTING
        OUTPUT        = WA-PRCTR.

    WA_GLACCT-PROFIT_CTR = WA-PRCTR."'100'.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = WA-KOSTL
      IMPORTING
        OUTPUT        = WA-KOSTL.

    WA_GLACCT-COSTCENTER = WA-KOSTL."'0000017090'.
    APPEND WA_GLACCT TO LT_GLACCT.

    wa_curramt-itemno_acc = WA-BUZEI."'0000000002'.
    wa_curramt-curr_type = '00'.
    wa_curramt-currency = 'INR'.

    CALL FUNCTION 'MOVE_CHAR_TO_NUM'
      EXPORTING
        CHR             = WA-WRBTR
      IMPORTING
        NUM             = ld_amt
      EXCEPTIONS
        CONVT_NO_NUMBER = 1
        CONVT_OVERFLOW  = 2
        OTHERS          = 3.

    wa_curramt-amt_doccur = ld_amt."'1000.00'.
    APPEND wa_curramt TO lt_curramt.

  ENDIF.

*Credit Entry in GL Account
  IF WA-SHKZG EQ 'H'.
    WA_GLACCT-ITEMNO_ACC = WA-BUZEI.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = WA-LIFNR
      IMPORTING
        OUTPUT        = WA-LIFNR.

    WA_GLACCT-GL_ACCOUNT = WA-LIFNR."'0000602025'.
    WA_GLACCT-TAX_CODE = WA-MWSKZ.
    WA_GLACCT-ITEM_TEXT = WA-SGTXT."'GL ACCOUNT'.
    WA_GLACCT-BUS_AREA = WA-GSBER."'1'.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = WA-PRCTR
      IMPORTING
        OUTPUT        = WA-PRCTR.

    WA_GLACCT-PROFIT_CTR = WA-PRCTR."'100'.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = WA-KOSTL
      IMPORTING
        OUTPUT        = WA-KOSTL.

    WA_GLACCT-COSTCENTER = WA-KOSTL."'0000017090'.
    APPEND WA_GLACCT TO LT_GLACCT.

    wa_curramt-itemno_acc = WA-BUZEI."'0000000002'.
    wa_curramt-curr_type = '00'.
    wa_curramt-currency = 'INR'.

    CALL FUNCTION 'MOVE_CHAR_TO_NUM'
      EXPORTING
        CHR             = WA-WRBTR
      IMPORTING
        NUM             = ld_amt
      EXCEPTIONS
        CONVT_NO_NUMBER = 1
        CONVT_OVERFLOW  = 2
        OTHERS          = 3.

    wa_curramt-amt_doccur = ( -1 ) * ld_amt."'1000.00'.
    APPEND wa_curramt TO lt_curramt.

  ENDIF.
ENDIF.

ENDLOOP.

3 comments:

  1. Hallo,
    could you pleas provide example of the TXT file as well?

    Thanks a lot!
    Ivan

    ReplyDelete
    Replies
    1. Hi Ivan,

      I have attached the screen shot.
      Make the data as per the attached file. Then copy the data in to the TXT file.

      Regards,
      SAP FICO BLOG

      Delete
    2. Thank you very much!
      Best regards,
      Ivan

      Delete