Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 3309

Inbound IDoc - incorrect status 51 ("No T100 message exists")

$
0
0

I am trying to load customers into SAP using message type DEBMAS02.

 

For now I am loading just a single customer in each IDoc but the IDoc claims that "Application document not posted" even though the customer was created.

 

image001.png

image002.png

image003.png

I am no expert on IDocs but I have been debugging for days now and I'm not getting much wiser...

 

One thing I have discovered is this piece of code in subroutine CALL_TRANSACTION (include LVV02F3J, program SAPLVV02):

 

 

 

CALL TRANSACTION TRANSACTION_CODE USING FT

                                    
MODE    CALL_TRANSACTION_MODE

                                    
UPDATE  C_UPDATE_SYNC

                                     MESSAGES
INTO T_BDCMSGCOLL.



    SUBRC
= SY-SUBRC.

   
DESCRIBE TABLE T_BDCMSGCOLL LINES H_TABIX.

   
READ TABLE T_BDCMSGCOLL INDEX H_TABIX.



   
IF SUBRC <> 0.

      V_WORKFLOW_RESULT
= C_WF_RESULT_ERR.

     
CLEAR T_IDOC_STATUS.

     
REFRESH T_IDOC_STATUS.

      T_IDOC_STATUS
-DOCNUM = F_IDOC_CONTROL-DOCNUM.

      T_IDOC_STATUS
-STATUS = C_IDOC_STAT_INPUT_ERROR.

      T_IDOC_STATUS
-MSGTY = SY-MSGTY.

     
if T_BDCMSGCOLL-MSGID = '00'

       
and T_BDCMSGCOLL-MSGNR = '055'. "Note 620898

        T_IDOC_STATUS
-MSGID = 'F2'.

        T_IDOC_STATUS
-MSGNO = '282'.

        T_IDOC_STATUS
-MSGV1 = T_BDCMSGCOLL-dyname.

        T_IDOC_STATUS
-MSGV2 = T_BDCMSGCOLL-dynumb.

        T_IDOC_STATUS
-MSGV3 = T_BDCMSGCOLL-fldname.

     
else.

        T_IDOC_STATUS
-MSGID = T_BDCMSGCOLL-MSGID.

      T_IDOC_STATUS
-MSGNO = T_BDCMSGCOLL-MSGNR.

      T_IDOC_STATUS
-MSGV1 = T_BDCMSGCOLL-MSGV1.

      T_IDOC_STATUS
-MSGV2 = T_BDCMSGCOLL-MSGV2.

      T_IDOC_STATUS
-MSGV3 = T_BDCMSGCOLL-MSGV3.

      T_IDOC_STATUS
-MSGV4 = T_BDCMSGCOLL-MSGV4.

     
endif.

      T_IDOC_STATUS
-UNAME = SY-UNAME.

      T_IDOC_STATUS
-REPID = SY-REPID.

     
APPEND T_IDOC_STATUS.

     
CLEAR T_RETURN_VARIABLES.

     
REFRESH T_RETURN_VARIABLES.

      T_RETURN_VARIABLES
-DOC_NUMBER = F_IDOC_CONTROL-DOCNUM.

      T_RETURN_VARIABLES
-WF_PARAM = C_RETV_ERROR_IDOCS.

     
READ TABLE T_RETURN_VARIABLES WITH KEY T_RETURN_VARIABLES.

     
IF SY-SUBRC = 0.

       
MODIFY T_RETURN_VARIABLES INDEX SY-TABIX.

     
ELSE.

       
APPEND T_RETURN_VARIABLES.

     
ENDIF.

   
ELSE.                              "i.e. subrc = 0.

     
IF ( T_BDCMSGCOLL-MSGID = C_MSG_ID_F2 AND

          
( T_BDCMSGCOLL-MSGNR = C_MSG_NO_035 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_NO_056 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_NO_170 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_NO_171 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_NO_172 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_NO_173 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_NO_174 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_NO_175 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_NO_679

          
)

        
)

       
OR

        
( T_BDCMSGCOLL-MSGID = C_MSG_ID_F4 AND

          
( T_BDCMSGCOLL-MSGNR = C_MSG_F4_311 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_F4_312 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_F4_313 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_F4_764 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_F4_765 OR

             T_BDCMSGCOLL
-MSGNR = C_MSG_F4_766

          
)

        
).



*mi/46c begin

*       Verbuchung der betriebespezifischen Daten

       
IF  IP_VERT_BETRIEB = 'X'

       
AND NOT GS_WRF1 IS INITIAL              "note 323897

       
AND GV_LOCNR_ALT IS INITIAL.            "note 538221

          GV_LOCNR_ALT
= GS_WRF1-LOCNR.         "note 538221

         
CALL FUNCTION 'SITE_START_UPDATE'

           
IMPORTING

              O_RETURN_CODE      
= RETURN_CODE

           
TABLES

              O_ERROR_TABLE      
= ERRORTABLE.

         
IF RETURN_CODE = '8'

         
OR RETURN_CODE = '12'.

            V_WORKFLOW_RESULT
= C_WF_RESULT_ERR.

           
REFRESH T_IDOC_STATUS.

           
REFRESH T_RETURN_VARIABLES.

           
LOOP AT ERRORTABLE WHERE TYPE CA 'AE'.

             
CLEAR T_IDOC_STATUS.

              T_IDOC_STATUS
-DOCNUM = F_IDOC_CONTROL-DOCNUM.

              T_IDOC_STATUS
-STATUS = C_IDOC_STAT_INPUT_ERROR.

              T_IDOC_STATUS
-MSGTY  = ERRORTABLE-TYPE.

              T_IDOC_STATUS
-MSGID  = ERRORTABLE-ID.

              T_IDOC_STATUS
-MSGNO  = ERRORTABLE-NUMBER.

              T_IDOC_STATUS
-MSGV1  = ERRORTABLE-MESSAGE_V1.

              T_IDOC_STATUS
-MSGV2  = ERRORTABLE-MESSAGE_V2.

              T_IDOC_STATUS
-MSGV3  = ERRORTABLE-MESSAGE_V3.

              T_IDOC_STATUS
-MSGV4  = ERRORTABLE-MESSAGE_V4.

              T_IDOC_STATUS
-UNAME  = SY-UNAME.

              T_IDOC_STATUS
-REPID  = SY-REPID.

             
APPEND T_IDOC_STATUS.

             
CLEAR T_RETURN_VARIABLES.

              T_RETURN_VARIABLES
-DOC_NUMBER = F_IDOC_CONTROL-DOCNUM.

              T_RETURN_VARIABLES
-WF_PARAM   = C_RETV_ERROR_IDOCS.

             
READ TABLE T_RETURN_VARIABLES WITH KEY T_RETURN_VARIABLES.

             
IF SY-SUBRC = 0.

               
MODIFY T_RETURN_VARIABLES INDEX SY-TABIX.

             
ELSE.

               
APPEND T_RETURN_VARIABLES.

             
ENDIF.

           
ENDLOOP.

           
EXIT.

         
ENDIF.

       
ENDIF.

*mi/46c end



        V_WORKFLOW_RESULT
= C_WF_RESULT_OK.

       
CLEAR T_IDOC_STATUS.

        T_IDOC_STATUS
-DOCNUM = F_IDOC_CONTROL-DOCNUM.

* Begin of insertion note 446305  / mh.

        T_IDOC_STATUS
-MSGID  = T_BDCMSGCOLL-MSGID.

        T_IDOC_STATUS
-MSGTY  = T_BDCMSGCOLL-MSGTYP.

        T_IDOC_STATUS
-MSGNO  = T_BDCMSGCOLL-MSGNR.

        T_IDOC_STATUS
-MSGV1  = T_BDCMSGCOLL-MSGV1.

        T_IDOC_STATUS
-MSGV2  = T_BDCMSGCOLL-MSGV2.

        T_IDOC_STATUS
-MSGV3  = T_BDCMSGCOLL-MSGV3.

        T_IDOC_STATUS
-MSGV4  = T_BDCMSGCOLL-MSGV4.

        T_IDOC_STATUS
-REPID  = SY-REPID.

        T_IDOC_STATUS
-UNAME  = SY-UNAME.

* End of insertion note 446305  / mh.

        T_IDOC_STATUS
-STATUS = C_IDOC_STAT_IS_POSTED.

       
READ TABLE T_IDOC_STATUS INDEX 1.

       
IF SY-SUBRC <> 0.

         
APPEND T_IDOC_STATUS.

       
ENDIF.

       
CLEAR T_RETURN_VARIABLES.

        T_RETURN_VARIABLES
-WF_PARAM = C_RETV_PROCESSED_IDOCS.

        T_RETURN_VARIABLES
-DOC_NUMBER = F_IDOC_CONTROL-DOCNUM.

       
READ TABLE T_RETURN_VARIABLES WITH KEY T_RETURN_VARIABLES.

       
IF SY-SUBRC <> 0.

         
APPEND T_RETURN_VARIABLES.

       
ENDIF.

       
CLEAR T_RETURN_VARIABLES.

        T_RETURN_VARIABLES
-WF_PARAM = C_RETV_CREATED_OBJECTS.

        T_RETURN_VARIABLES
-DOC_NUMBER = BKN00-KUNNR.

       
READ TABLE T_RETURN_VARIABLES WITH KEY T_RETURN_VARIABLES.

       
IF SY-SUBRC <> 0.

         
APPEND T_RETURN_VARIABLES.

       
ENDIF.



     
ELSE.                            "i.e. not a success message.



        V_WORKFLOW_RESULT
= C_WF_RESULT_ERR.

       
CLEAR T_IDOC_STATUS.

       
REFRESH T_IDOC_STATUS.                              "

        T_IDOC_STATUS
-DOCNUM = F_IDOC_CONTROL-DOCNUM.

        T_IDOC_STATUS
-STATUS = C_IDOC_STAT_INPUT_ERROR.

        T_IDOC_STATUS
-MSGTY = SY-MSGTY.

        T_IDOC_STATUS
-MSGID = T_BDCMSGCOLL-MSGID.

        T_IDOC_STATUS
-MSGNO = T_BDCMSGCOLL-MSGNR.

        T_IDOC_STATUS
-MSGV1 = T_BDCMSGCOLL-MSGV1.

        T_IDOC_STATUS
-MSGV2 = T_BDCMSGCOLL-MSGV2.

        T_IDOC_STATUS
-MSGV3 = T_BDCMSGCOLL-MSGV3.

        T_IDOC_STATUS
-MSGV4 = T_BDCMSGCOLL-MSGV4.

        T_IDOC_STATUS
-UNAME = SY-UNAME.

        T_IDOC_STATUS
-REPID = SY-REPID.

       
APPEND T_IDOC_STATUS.

       
CLEAR T_RETURN_VARIABLES.

       
REFRESH T_RETURN_VARIABLES.

        T_RETURN_VARIABLES
-DOC_NUMBER = F_IDOC_CONTROL-DOCNUM.

        T_RETURN_VARIABLES
-WF_PARAM = C_RETV_ERROR_IDOCS.

       
APPEND T_RETURN_VARIABLES.

     
ENDIF.       "if t_bdcmsgcoll-msgid = c_msg_id_f2 and ...



   
ENDIF.                             "if subrc <> 0.

 

 

 

 

SUBRC is 0 because CALL TRANSACTION was a success - but internal table T_BDCMSGCOLL is empty and because of that this line comes into effect:

 

        T_IDOC_STATUS-STATUS = C_IDOC_STAT_INPUT_ERROR.

 

The problem seems to be that no success message is returned from CALL TRANSACTION. I just haven't been able to determine WHY no success message is returned...

 

Any thoughts?


Viewing all articles
Browse latest Browse all 3309

Trending Articles