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.