<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: BAPI FB01 in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-fb01/m-p/2723928#M632047</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here a full example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
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 &amp;amp; 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&amp;amp;'  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&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 27 Aug 2007 14:25:17 GMT</pubDate>
    <dc:creator>FredericGirod</dc:creator>
    <dc:date>2007-08-27T14:25:17Z</dc:date>
    <item>
      <title>BAPI FB01</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-fb01/m-p/2723927#M632046</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi guys, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;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.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;Rajev Gupta&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Aug 2007 14:19:32 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-fb01/m-p/2723927#M632046</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-08-27T14:19:32Z</dc:date>
    </item>
    <item>
      <title>Re: BAPI FB01</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-fb01/m-p/2723928#M632047</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here a full example&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
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 &amp;amp; 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&amp;amp;'  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&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Aug 2007 14:25:17 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-fb01/m-p/2723928#M632047</guid>
      <dc:creator>FredericGirod</dc:creator>
      <dc:date>2007-08-27T14:25:17Z</dc:date>
    </item>
    <item>
      <title>Re: BAPI FB01</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-fb01/m-p/2723929#M632048</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;look here: &lt;A class="jive_macro jive_macro_message" href="https://community.sap.com/" __jive_macro_name="message" modifiedtitle="true" __default_attr="2533842"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;or search in this forum for BAPI_ACC_DOCUMENT_POST and example.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards, Dieter&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Aug 2007 14:29:31 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-fb01/m-p/2723929#M632048</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-08-27T14:29:31Z</dc:date>
    </item>
  </channel>
</rss>

