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

BAPI FB01

Former Member
0 Likes
881

Hi guys,

I am working on an interface where I need to create a accounting document using FB01 and for this I have identified the following BAPI..'BAPI_ACC_DOCUMENT_POST'.I am pretty new to ABAP, so can anyone please help me out how to use this BAPI, I mean Step by step using an example.

Thanks

Rajev Gupta

2 REPLIES 2
Read only

FredericGirod
Active Contributor
0 Likes
604

Here a full example


REPORT zfi_bapi_ndf NO STANDARD PAGE HEADING.





*-------------------------------- DATA --------------------------------*
DATA : BEGIN OF itg_data OCCURS 500,
         bschl  TYPE bschl ,
         hkont  TYPE hkont ,             " Compte
         saknr  TYPE saknr ,             " Compte KODA
         dmbtr(20)  TYPE c ,             " Montant
         kostl  TYPE kostl ,             " Centre de coûts
         text(50)   TYPE c,              " texte
         etab   TYPE zetab ,             " Etablissement
         servi  TYPE zservi,             " Service
         code   TYPE zca_code ,          " Code carte affaire
         gsber  TYPE gsber ,             " Domaine activité
         mwskz  TYPE mwskz ,             " Code TVA
       END   OF itg_data ,

       BEGIN OF itg_error OCCURS 500,
         erreur(1) ,                     " N° erreur
         bschl  TYPE bschl ,             "
         hkont  TYPE hkont ,             " Compte
         saknr  TYPE saknr ,             " Compte KODA
         dmbtr(20)  TYPE c ,             " Montant
         kostl  TYPE kostl ,             " Centre de coûts
         text(50)   TYPE c,              " texte
         etab   TYPE zetab ,             " Etablissement
         servi  TYPE zservi,             " Service
         code   TYPE zca_code ,          " Code carte affaire
         gsber  TYPE gsber ,             " Domaine activité
       END   OF itg_error.


DATA : w_obj_type LIKE bapiache02-obj_type,
       w_obj_key  LIKE bapiache02-obj_key,
       w_obj_sys  LIKE bapiache02-obj_sys,
       w_amount(13).

DATA:  w_object LIKE nriv-object VALUE 'RF_BELEG'.






*-------------------------- SELECTION SCREEN --------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS : p_blart TYPE blart ,
             p_bukrs TYPE bukrs
                     DEFAULT '1441',
             p_gjahr TYPE gjahr
                     DEFAULT sy-datum(04),
             p_date  TYPE sydatum
                     DEFAULT sy-datum,
             p_waers TYPE waers
                     DEFAULT 'EUR',
             p_bktxt TYPE bktxt
                     OBLIGATORY ,
             p_file  TYPE localfile
                     OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b2.







*------------------------------- EVENTS -------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CALL FUNCTION 'F4_FILENAME'
    IMPORTING
      file_name = p_file.

AT PF8.
* Create the line of account document.
  PERFORM p_create.





*-------------------------------- MAIN --------------------------------*
START-OF-SELECTION.


* Read data from the Excel file.
  PERFORM p_read_file.

* Analyse.
  PERFORM p_analyse.


END-OF-SELECTION.







*----------------------------------------------------------------------*
*   Form P_READ_FILE.                                                  *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM p_read_file.


  DATA : it_file  LIKE alsmex_tabline OCCURS 100 WITH HEADER LINE ,
         w_flag_row TYPE kcd_ex_row_n ,
         w_count(6) TYPE n ,
         w_flag_code(1) ,

         BEGIN OF it_skb1 OCCURS 0 ,
           saknr TYPE saknr ,
           altkt(10) ,
           mwskz TYPE mwskz ,
         END   OF it_skb1 ,

         it_ca_001 LIKE TABLE OF zfi_ca_001   WITH HEADER LINE ,
         it_etab   LIKE TABLE OF zfi_etab_001 WITH HEADER LINE ,
         it_serv   LIKE TABLE OF zfi_serv_001 WITH HEADER LINE .


* Function to read the Microsoft Excel file.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = '1'
      i_begin_row             = '2'
      i_end_col               = '10'
      i_end_row               = '1000'
    TABLES
      intern                  = it_file
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

  IF sy-subrc NE space.
    STOP.
  ENDIF.


* Transfer data from IT_FILE to IT_DATA.
  LOOP AT it_file.

    IF w_flag_row NE it_file-row.
      APPEND itg_data.
      CLEAR  itg_data.
      MOVE   it_file-row TO w_flag_row.
    ENDIF.

    CASE it_file-col.
      WHEN '0001'.
        MOVE it_file-value TO itg_data-text.
      WHEN '0003'.
        IF it_file-value CA '.'.
          SPLIT it_file-value
                AT '.'
                INTO itg_data-hkont
                     itg_data-code.
          MOVE 'X' TO w_flag_code.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              input  = itg_data-hkont
            IMPORTING
              output = itg_data-hkont.
        ELSE.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              input  = it_file-value
            IMPORTING
              output = itg_data-hkont.
        ENDIF.
      WHEN '0004'.
        MOVE it_file-value TO itg_data-etab.
      WHEN '0005'.
        IF it_file-value NE '0'.
          MOVE : '40'          TO itg_data-bschl ,
                 it_file-value TO itg_data-dmbtr.
        ENDIF.
        REPLACE ',' WITH '.' INTO itg_data-dmbtr.
      WHEN '0006'.
        IF it_file-value NE '0'.
          MOVE : '50'          TO itg_data-bschl ,
                 it_file-value TO itg_data-dmbtr.
        ENDIF.
        REPLACE ',' WITH '.' INTO itg_data-dmbtr.
      WHEN '0009'.
        MOVE it_file-value TO itg_data-servi.
    ENDCASE.

  ENDLOOP.


* Record the last row.
  APPEND itg_data.
  CLEAR  itg_data.


* Detele the empty row.
  DELETE itg_data WHERE hkont EQ space.


* Check there is something to do.
  DESCRIBE TABLE itg_data LINES w_count.
  IF w_count EQ space.
    WRITE : /1 ''.
    STOP.
  ENDIF.


* Change the account number.
  SELECT saknr altkt mwskz
         INTO TABLE it_skb1
         FROM skb1
         WHERE bukrs EQ p_bukrs.
  SORT it_skb1 BY altkt.

  LOOP AT itg_data.
    READ TABLE it_skb1
         WITH KEY altkt = itg_data-hkont
         BINARY SEARCH.
    IF sy-subrc EQ space.
      MOVE it_skb1-saknr TO itg_data-saknr.
      MODIFY itg_data.
    ELSE.
      MOVE : '4' TO itg_error-erreur.
      MOVE-CORRESPONDING itg_data TO itg_error.
      APPEND itg_error.
    ENDIF.
  ENDLOOP.


* Get the cost center.
  IF w_flag_code EQ 'X'.
    SELECT *
           INTO TABLE it_ca_001
           FROM zfi_ca_001
           WHERE datbi GE p_date
           AND   datab LE p_date.
    LOOP AT it_ca_001.
      MOVE it_ca_001-ca_code+0(8) TO it_ca_001-ca_code.
      MODIFY it_ca_001.
    ENDLOOP.
    SORT it_ca_001 BY ca_code.
  ENDIF.

  SELECT *
         INTO TABLE it_etab
         FROM zfi_etab_001.
  SORT it_etab BY etab.

  SELECT *
         INTO TABLE it_serv
         FROM zfi_serv_001.
  SORT it_serv BY etab servi.


  LOOP AT itg_data.
*   Recherche code etablissement & service si carte affaire
    IF itg_data-code NE space.
      READ TABLE it_ca_001
           WITH KEY ca_code = itg_data-code
           BINARY SEARCH.
      IF sy-subrc EQ space.
        MOVE : it_ca_001-etab  TO itg_data-etab ,
               it_ca_001-servi TO itg_data-servi .
        MODIFY itg_data.
      ELSE.
        MOVE : '1' TO itg_error-erreur .
        MOVE-CORRESPONDING itg_data TO itg_error.
        APPEND itg_error.
        CHECK '1' EQ '2'.
      ENDIF.
    ENDIF.
*   Recherche du domaine d'activité si code établissement.
    IF itg_data-hkont EQ '0000425200' OR
       itg_data-hkont EQ '0000445660'.
      MOVE 'FR01' TO itg_data-gsber.
    ELSE.
      READ TABLE it_etab
           WITH KEY etab = itg_data-etab
           BINARY SEARCH.
      IF sy-subrc EQ space.
        MOVE it_etab-gsber TO itg_data-gsber.
      ELSE.
        MOVE : '2' TO itg_error-erreur.
        MOVE-CORRESPONDING itg_data TO itg_error.
        APPEND itg_error.
        CHECK '1' EQ '2'.
      ENDIF.
    ENDIF.
*   Recherche du centre de coûts.
    IF itg_data-hkont NE '0000425200' AND
       itg_data-hkont NE '0000445660'.
      READ TABLE it_serv
           WITH KEY etab  = itg_data-etab
                    servi = itg_data-servi
           BINARY SEARCH.
      IF sy-subrc EQ space.
        MOVE it_serv-kostl TO itg_data-kostl.
      ELSE.
        MOVE : '3' TO itg_error-erreur.
        MOVE-CORRESPONDING itg_data TO itg_error.
        APPEND itg_error.
        CHECK '1' EQ '2'.
      ENDIF.
    ENDIF.
*   Recherche du code TVA.
    IF     itg_data-hkont EQ '0000445660'.
      MOVE 'V4' TO itg_data-mwskz.
    ELSEIF itg_data-hkont NE '0000445660' OR
           itg_data-hkont NE '0000425200'.
      MOVE 'V0' TO itg_data-mwskz.
    ENDIF.
*   Si MWSKZ dans SKB1 vide alors on enlève le code TVA.
    READ TABLE it_skb1
         WITH KEY altkt = itg_data-hkont
         BINARY SEARCH.
    IF sy-subrc EQ space AND it_skb1-mwskz EQ space.
      CLEAR itg_data-mwskz.
    ENDIF.
    MODIFY itg_data.
  ENDLOOP.



ENDFORM.                     " P_READ_FILE.





*----------------------------------------------------------------------*
*   Form P_ANALYSE.                                                    *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM p_analyse.

  DATA : w_count TYPE i.


* Describe the table.
  DESCRIBE TABLE itg_data LINES w_count.
  WRITE : /1 text-i02 COLOR 3 ,
             w_count  COLOR 3 .
  SKIP 2.

  WRITE : /1 text-i03 COLOR 3.
  SKIP 2.

* Check if there is error.
  DESCRIBE TABLE itg_error LINES w_count.

* Everything OK.
  IF w_count EQ space.
    WRITE text-i01 COLOR 5.

* Error.
  ELSE.
    READ TABLE itg_error
         WITH KEY erreur = '1'.
    IF sy-subrc EQ space.
      WRITE text-e01 COLOR 6.
      WRITE : /1  text-l01 COLOR 1 ,
               13 text-l02 COLOR 1 ,
               30 text-l03 COLOR 1 ,
               45 text-l04 COLOR 1 ,
               60 text-l05 COLOR 1 .
      LOOP AT itg_error
           WHERE erreur EQ '1'.
        WRITE : /1  itg_error-hkont ,
                 13 itg_error-dmbtr ,
                 30 itg_error-etab  ,
                 45 itg_error-servi ,
                 60 itg_error-code  .
      ENDLOOP.
      SKIP 2.
    ENDIF.

    READ TABLE itg_error
         WITH KEY erreur = '2'.
    IF sy-subrc EQ space.
      WRITE text-e02 COLOR 6.
      WRITE : /1  text-l01 COLOR 1 ,
               13 text-l02 COLOR 1 ,
               30 text-l03 COLOR 1 ,
               45 text-l04 COLOR 1 ,
               60 text-l05 COLOR 1 .
      LOOP AT itg_error
           WHERE erreur EQ '2'.
        WRITE : /1  itg_error-hkont ,
                 13 itg_error-dmbtr ,
                 30 itg_error-etab  ,
                 45 itg_error-servi ,
                 60 itg_error-code  .
      ENDLOOP.
      SKIP 2.
    ENDIF.

    READ TABLE itg_error
         WITH KEY erreur = '3'.
    IF sy-subrc EQ space.
      WRITE text-e03 COLOR 6.
      WRITE : /1  text-l01 COLOR 1 ,
               13 text-l02 COLOR 1 ,
               30 text-l03 COLOR 1 ,
               45 text-l04 COLOR 1 ,
               60 text-l05 COLOR 1 .
      LOOP AT itg_error
           WHERE erreur EQ '3'.
        WRITE : /1  itg_error-hkont ,
                 13 itg_error-dmbtr ,
                 30 itg_error-etab  ,
                 45 itg_error-servi ,
                 60 itg_error-code  .
      ENDLOOP.
      SKIP 2.
    ENDIF.


    READ TABLE itg_error
         WITH KEY erreur = '4'.
    IF sy-subrc EQ space.
      WRITE text-e04 COLOR 6.
      WRITE : /1  text-l01 COLOR 1 ,
               13 text-l02 COLOR 1 ,
               30 text-l03 COLOR 1 ,
               45 text-l04 COLOR 1 ,
               60 text-l05 COLOR 1 .
      LOOP AT itg_error
           WHERE erreur EQ '4'.
        WRITE : /1  itg_error-hkont ,
                 13 itg_error-dmbtr ,
                 30 itg_error-etab  ,
                 45 itg_error-servi ,
                 60 itg_error-code  .
      ENDLOOP.


    ENDIF.

  ENDIF.



ENDFORM.                     " P_ANALYSE.






*----------------------------------------------------------------------*
*  Form P_CREATE.                                                      *
*----------------------------------------------------------------------*
*   Create of G/L account document.                                    *
*----------------------------------------------------------------------*
FORM p_create.


  DATA : v_type    TYPE bapi_mtype ,
         v_nrlevel LIKE nriv-nrlevel ,
         v_kostl   TYPE kostl ,
         v_posid   TYPE ps_posid ,
         v_aufnr   TYPE aufnr ,
         v_blart   TYPE blart ,
         v_count   TYPE posnr_acc ,


         isg_header    TYPE STANDARD TABLE OF bapiache09
                       WITH HEADER LINE ,
         itg_accountgl TYPE STANDARD TABLE OF bapiacgl09
                       WITH HEADER LINE ,
         itg_return    TYPE STANDARD TABLE OF bapiret2
                       WITH HEADER LINE ,
         itg_currency  TYPE STANDARD TABLE OF bapiaccr09
                       WITH HEADER LINE ,
         itg_tax       TYPE STANDARD TABLE OF bapiactx09
                       WITH HEADER LINE .



* Refresh.
  REFRESH : itg_accountgl, itg_currency.
  CLEAR   : itg_accountgl, itg_currency, isg_header.



* Append the header.
  MOVE :
         'RFBU'   TO isg_header-bus_act ,
         sy-uname TO isg_header-username ,
         p_bukrs  TO isg_header-comp_code ,
         p_blart  TO isg_header-doc_type ,
         p_date   TO isg_header-doc_date ,
         p_date   TO isg_header-pstng_date ,
         p_bktxt  TO isg_header-header_txt ,
         p_bktxt  TO isg_header-ref_doc_no .


* Append the post.
  LOOP AT itg_data.

    v_count = v_count + 1.
    CLEAR itg_accountgl.

    MOVE : v_count         TO itg_accountgl-itemno_acc ,
           itg_data-saknr  TO itg_accountgl-gl_account ,
           itg_data-mwskz  TO itg_accountgl-tax_code   ,
           itg_data-kostl  TO itg_accountgl-costcenter ,
           itg_data-gsber  TO itg_accountgl-bus_area .
    APPEND itg_accountgl.

*   Montant du poste
    IF itg_data-bschl EQ '50'.
      w_amount = itg_data-dmbtr.
    ELSE.
      w_amount = - itg_data-dmbtr.
    ENDIF.
    MOVE : v_count         TO itg_currency-itemno_acc,
           '00'            TO itg_currency-curr_type ,
           p_waers         TO itg_currency-currency  ,
           w_amount        TO itg_currency-amt_doccur ,
           w_amount        TO itg_currency-amt_base .
    APPEND itg_currency.

*   Tax.
    MOVE : v_count         TO itg_tax-itemno_acc ,
           itg_data-saknr  TO itg_tax-gl_account ,
           itg_data-mwskz  TO itg_tax-tax_code .

  ENDLOOP.


* Call the BAPI function
  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
    EXPORTING
      documentheader = isg_header
    IMPORTING
      obj_type       = w_obj_type
      obj_key        = w_obj_key
      obj_sys        = w_obj_sys
    TABLES
      accountgl      = itg_accountgl
      currencyamount = itg_currency
      accounttax     = itg_tax
      return         = itg_return.

  IF sy-subrc EQ space.
    COMMIT WORK AND WAIT.
    IF sy-subrc NE space.
      CLEAR itg_return.
      MOVE : 'E'   TO itg_return-type,
             'S&'  TO itg_return-id,
             '150' TO itg_return-number ,
             'ERROR !!'
                   TO itg_return-message.
      APPEND itg_return.
      DELETE itg_return
             WHERE number = '605'.
    ENDIF.
  ENDIF.


* Edit the result of the BAPI.
  LOOP AT itg_return.
    PERFORM p_message_return USING itg_return.
    SKIP 1.
  ENDLOOP.

* It the document is create, edit the number.
  READ TABLE itg_return
       WITH KEY number = '605'.
  IF sy-subrc EQ space.
    SKIP 1.
    WRITE : /1 text-003 ,
               ':' ,
               itg_return-message_v2+0(10).
    SET PARAMETER ID 'BLN' FIELD itg_return-message_v2+0(10).
  ENDIF.


ENDFORM.                     " P_CREATE







*----------------------------------------------------------------------*
*   Form P_MESSAGE_RETURN.                                             *
*----------------------------------------------------------------------*
*   Edit the return message.                                           *
*----------------------------------------------------------------------*
FORM p_message_return
     USING struct_return STRUCTURE bapiret2.


* Color depends of the error type.
  CASE struct_return-type.
    WHEN 'A'.
      FORMAT COLOR 6.
      WRITE : /1  'Termination !' ,
               20 'Classe de message :',
                  struct_return-id ,
               45 'Numéro :' ,
                  struct_return-number ,
              /1  '' ,
              /1  struct_return-message.
      FORMAT COLOR OFF.
    WHEN 'E'.
      FORMAT COLOR 6.
      WRITE : /1  'Error !      ' ,
               20 'Classe de message :',
                  struct_return-id ,
               45 'Numéro :' ,
                  struct_return-number ,
              /1  '' ,
              /1  struct_return-message.
      FORMAT COLOR OFF.
    WHEN 'I'.
      FORMAT COLOR 5.
      WRITE : /1  'Information. ' ,
               20 'Classe de message :',
                  struct_return-id ,
               45 'Numéro :' ,
                  struct_return-number ,
              /1  '' ,
              /1  struct_return-message.
      FORMAT COLOR OFF.
    WHEN 'S'.
      FORMAT COLOR 4.
      WRITE : /1  'Status.      ' ,
               20 'Classe de message :',
                  struct_return-id ,
               45 'Numéro :' ,
                  struct_return-number ,
              /1  '' ,
              /1  struct_return-message.
      FORMAT COLOR OFF.
    WHEN 'W'.
      FORMAT COLOR 3.
      WRITE : /1  'Warning !    ' ,
               20 'Classe de message :',
                  struct_return-id ,
               45 'Numéro :' ,
                  struct_return-number ,
              /1  '' ,
              /1  struct_return-message.
      FORMAT COLOR OFF.
    WHEN 'X'.
      FORMAT COLOR 6.
      WRITE : /1  'Short dump !!' ,
               20 'Classe de message :',
                  struct_return-id ,
               45 'Numéro :' ,
                  struct_return-number ,
              /1  '' ,
              /1  struct_return-message.
      FORMAT COLOR OFF.
  ENDCASE.


ENDFORM.                     " P_MESSAGE_RETURN

Read only

Former Member
0 Likes
604

Hi,

look here:

or search in this forum for BAPI_ACC_DOCUMENT_POST and example.

Regards, Dieter