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

Problem in posting multiple documents in FB70 through BDC...

Former Member
0 Likes
1,602

Hi,

I am facing a problem while posting multiple documents from a flat file in FB70 thourgh BDC batch input by using session method. However, the session is getting terminated after posting the first document. Please clarify my problem.

Below is a sample of the data in my flat file -

Customer,Invoice Date,Posting Date,Amount,G/L Account,Amount in doc. Curr.

34,03.06.2009,03.06.2009,100,211000,100

34,03.06.2009,03.06.2009,200,211000,200

34,03.06.2009,03.06.2009,300,211000,300

And below is the sample code of my program.

REPORT ZANI2_BDC_FB70
       NO STANDARD PAGE HEADING LINE-SIZE 255.



TYPES: BEGIN OF TY_STR_FB70,
         ACCNT(20)      TYPE C,     "Customer
         BLDAT(20)      TYPE C,     "Invoice Date
         BUDAT(20)      TYPE C,     "Posting Date
         WRBTR(20)      TYPE C,     "Basic Data - Amount
         HKONT(20)      TYPE C,     "G/L Account
         ITEM_WRBTR(20) TYPE C,
         "Line Item Amount In Document Currency
       END OF TY_STR_FB70,


      BEGIN OF TY_STR_FILEDATA,
         FIELDS TYPE STRING,
      END OF TY_STR_FILEDATA.



*----------------------------------------------------------------------*
*   data definition
*----------------------------------------------------------------------*
*       Batchinputdata of single transaction
DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE,
*       messages of call transaction
        MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.





DATA: IT_STR_FILEDATA TYPE STANDARD TABLE OF TY_STR_FILEDATA,
      WA_STR_FILEDATA TYPE TY_STR_FILEDATA,
      IT_STR_FB70 TYPE STANDARD TABLE OF TY_STR_FB70,
      WA_STR_FB70 TYPE TY_STR_FB70,
      G_STR_FILENAME TYPE STRING,
      G_FLG_ERROR TYPE I,
      G_INDEX TYPE I,
      G_STR_INDEX TYPE STRING,
      G_STR_FIELDNAME TYPE STRING.


SELECTION-SCREEN BEGIN OF BLOCK INPUT.
PARAMETERS: P_FILE TYPE IBIPPARMS-PATH,
            P_SES  TYPE APQI-GROUPID.
SELECTION-SCREEN END OF BLOCK INPUT.



AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      PROGRAM_NAME  = SYST-CPROG
      DYNPRO_NUMBER = SYST-DYNNR
      FIELD_NAME    = 'P_FILE'
    IMPORTING
      FILE_NAME     = P_FILE.

Continued in the next thread..

9 REPLIES 9
Read only

Former Member
0 Likes
1,010

...Continued from previous thread

START-OF-SELECTION.
  G_FLG_ERROR = 0.
  G_STR_FILENAME = P_FILE.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME                      = G_STR_FILENAME
      FILETYPE                      = 'ASC'
      HAS_FIELD_SEPARATOR           = ','
    TABLES
      DATA_TAB                      = IT_STR_FILEDATA
   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.
    G_FLG_ERROR = 4.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.



END-OF-SELECTION.


  IF G_FLG_ERROR IS INITIAL.
    CLEAR WA_STR_FILEDATA.


"FM GUI_UPLOAD is not being able to split the data from flat file at the commas even after putting
"HAS_FIELD_SEPARATOR = ',' . So the data is manually splitted below..
 
    LOOP AT IT_STR_FILEDATA INTO WA_STR_FILEDATA .
      IF G_INDEX <> 0.
        CLEAR WA_STR_FB70.
        SPLIT WA_STR_FILEDATA-FIELDS AT ',' INTO WA_STR_FB70-ACCNT
                                                 WA_STR_FB70-BLDAT
                                                 WA_STR_FB70-BUDAT
                                                 WA_STR_FB70-WRBTR
                                                 WA_STR_FB70-HKONT
                                                 WA_STR_FB70-ITEM_WRBTR.
        APPEND WA_STR_FB70 TO IT_STR_FB70.
      ENDIF.
      G_INDEX = 4.
      CLEAR WA_STR_FILEDATA.
    ENDLOOP.

Continued in the next thread....

Read only

0 Likes
1,010

...Continued from the previous thread.

PERFORM OPEN_GROUP.
    G_INDEX = 1.   
    LOOP AT IT_STR_FB70 INTO WA_STR_FB70.
       PERFORM BDC_DYNPRO      USING 'SAPMF05A' '1200'.
      PERFORM BDC_FIELD       USING 'RF05A-BUSCS'
                                     'R'.
     "Customer
      PERFORM BDC_FIELD       USING 'INVFO-ACCNT' 
                                     WA_STR_FB70-ACCNT.   
  
      "Invoice Date
      PERFORM BDC_FIELD       USING 'INVFO-BLDAT' 
                                    WA_STR_FB70-BLDAT.                                

      "Posting Date
      PERFORM BDC_FIELD       USING 'INVFO-BUDAT' 
                                    WA_STR_FB70-BUDAT.                                 

     "Basic data - Amount
      PERFORM BDC_FIELD       USING 'INVFO-WRBTR' 
                                    WA_STR_FB70-WRBTR.      
      PERFORM BDC_FIELD       USING 'INVFO-WAERS'
                                    'EUR'.

      G_STR_INDEX = G_INDEX.
      IF G_INDEX < 10.
        CONCATENATE '0' G_STR_INDEX INTO G_STR_INDEX.
      ENDIF.

      CONDENSE G_STR_INDEX NO-GAPS.
      CLEAR G_STR_FIELDNAME.
      CONCATENATE  'ACGL_ITEM-WRBTR(' G_STR_INDEX ')' INTO
      G_STR_FIELDNAME.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    G_STR_FIELDNAME.
                                    "'ACGL_ITEM-WRBTR(01)'.

      "G/L Acct
      CONCATENATE  'ACGL_ITEM-HKONT(' G_STR_INDEX ')' INTO
      G_STR_FIELDNAME.
      PERFORM BDC_FIELD       USING  G_STR_FIELDNAME        
                                     WA_STR_FB70-HKONT.     

        "Amount .
      CONCATENATE  'ACGL_ITEM-WRBTR(' G_STR_INDEX ')' INTO
      G_STR_FIELDNAME.
      PERFORM BDC_FIELD       USING G_STR_FIELDNAME    
                                    WA_STR_FB70-ITEM_WRBTR.
                                

      "PERFORM BDC_DYNPRO      USING 'SAPMF05A' '1200'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=BU'.

      CLEAR WA_STR_FB70.
    ENDLOOP.

    IF G_FLG_ERROR IS INITIAL.
      PERFORM BDC_TRANSACTION USING 'FB70'.
    ENDIF.

    IF G_FLG_ERROR IS INITIAL.
      PERFORM CLOSE_GROUP.
      MESSAGE 'Session created successfully.' TYPE 'I'.
    ENDIF.

  ENDIF.

Continued in the next thread..

Read only

0 Likes
1,010

... Continued from the previous thread

********************************************
*          FORM DECLARARIONS.
*********************************************


*----------------------------------------------------------------------*
*        Start new screen                                              
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  CLEAR BDCDATA.
  BDCDATA-FNAM = FNAM.
  BDCDATA-FVAL = FVAL.
  APPEND BDCDATA.
ENDFORM.                    "BDC_FIELD


*----------------------------------------------------------------------*
*   create batchinput session                                          
*   (not for call transaction using...)                                
*----------------------------------------------------------------------*
FORM OPEN_GROUP.
*   open batchinput group
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
      GROUP                     = P_SES
      KEEP                      = 'X'
    USER                      = SY-UNAME
    PROG                      = SY-CPROG
   EXCEPTIONS
     CLIENT_INVALID            = 1
     DESTINATION_INVALID       = 2
     GROUP_INVALID             = 3
     GROUP_IS_LOCKED           = 4
     HOLDDATE_INVALID          = 5
     INTERNAL_ERROR            = 6
     QUEUE_ERROR               = 7
     RUNNING                   = 8
     SYSTEM_LOCK_ERROR         = 9
     USER_INVALID              = 10
     OTHERS                    = 11
            .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  IF NOT SY-SUBRC IS INITIAL.
    G_FLG_ERROR = 4.
  ENDIF.
ENDFORM.                    "OPEN_GROUP

Continued in the next thread....

Read only

0 Likes
1,010

...Continued from previous thread

*----------------------------------------------------------------------*
*   end batchinput session                                             *
*   (call transaction using...: error session)                         *
*----------------------------------------------------------------------*
FORM CLOSE_GROUP.
*   close batchinput group
  CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDFORM.                    "CLOSE_GROUP




*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
  DATA: L_MSTRING(480).
  DATA: L_SUBRC LIKE SY-SUBRC.


  CALL FUNCTION 'BDC_INSERT'
   EXPORTING
     TCODE                  = 'FB70'
*   POST_LOCAL             = NOVBLOCAL
*   PRINTING               = NOPRINT
    SIMUBATCH              = 'X'
*   CTUPARAMS              = ' '
    TABLES
      DYNPROTAB              = BDCDATA
   EXCEPTIONS
     INTERNAL_ERROR         = 1
     NOT_OPEN               = 2
     QUEUE_ERROR            = 3
     TCODE_INVALID          = 4
     PRINTING_INVALID       = 5
     POSTING_INVALID        = 6
     OTHERS                 = 7
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  IF NOT SY-SUBRC IS INITIAL.
    MESSAGE 'Error in creating session.' TYPE 'I'.
    G_FLG_ERROR = 4.
  ENDIF.

  REFRESH BDCDATA.
ENDFORM.                    "BDC_TRANSACTION

Read only

Former Member
0 Likes
1,010

Hi,

What was the message u r getting in the SESSION?

I think U must always post with 2 line items, one is for CREDIT (Customer) & one is for DEBIT (G/L Account) then only it will POST the document...Contact FI functional to know it exactly...

Rgds,

Pavan

Read only

0 Likes
1,010

Hi vishnu,

No error msg is being shown. After running the program, it is showing the success message. But when I am processing the session in SM35 in the foreground mode, only the first data is being processed and the session is getting terminated. Any suggestions?

Read only

0 Likes
1,010

Hi Anirban,

Are you able to find the solution for this problem?

Please let me know the solution as I am facing the similar issue.

Regards,

Rajesh Kumar

Read only

0 Likes
1,010

Edited by: Michael.Sumaya on Feb 3, 2012 5:43 PM

(sorry didn't realize that this post was just raised back from the dead)

Read only

eduardo_hinojosa
Active Contributor
0 Likes
1,010

Hi Anirban,

One question, why don't you use a BAPI? Any change in customizing, upgrades and so on is a nightmare with all related with BDC. It's a suggestion.

If you are interested, please, see these notes

SAP Note 306504 - Collective note: BAPIs for the AC interface

SAP Note 487722 - Using EXTENSION1 for accounting BAPIs

SAP Note 556311 - BAPI in the extended withholding tax

I hope this helps you

Regards

Eduardo