Skip to end of metadata
Go to start of metadata

I had this information so thought of sharing with you all.

Values of SY-SUBRC on different ABAP statements

'sy-subrc' is a return code, set by the following ABAP statements.
As a rule, if SY-SUBRC = 0, the statement was executed successfully.

  1. ASSIGN sets SY-SUBRC to 0 if the field symbol assignment was possible, otherwise to 4.
  2. AUTHORITY-CHECK sets SY-SUBRC to 0 if the user has the required authorization, otherwise to 4, 8, 12, 16, 24, 28, 32, or 36 depending on the cause of the authorization failure.
  3. CALL DIALOG with USING sets SY-SUBRC to 0 if the processing is successful, otherwise to a value other than 0.
  4. CALL FUNCTION sets SY-SUBRC in accordance with the defined exception handling.
  5. CALL METHOD sets SY-SUBRC in accordance with the defined exception handling.
  6. CALL SELECTION-SCREEN sets SY-SUBRC to 0 if the user chooses Enter or Execute, and 4 if the user chooses Cancel.
  7. CALL TRANSACTION with USING sets SY-SUBRC to 0 if the processing is successful, otherwise to a value other than 0.
  8. CATCH SYSTEM-EXCEPTIONS sets SY-SUBRC after the ENDCATCH statement if a system exception occurs. The value is set in the program.
  9. COMMIT WORK sets SY-SUBRC to 0. COMMIT WORK AND WAIT sets SY-SUBRC to 0 if the update is successful, otherwise to a value other than 0.
  10. COMMUNICATION INIT DESTINATION ... RETURNCODE sets SY-SUBRC as specified.
  11. CONCATENATE sets SY-SUBRC to 0 if the result fits into the target variable, otherwise to 4.
  12. CREATE OBJECT sets SY-SUBRC if the exceptions of the instance constructor are handled in the program.
  13. CREATE OBJECT in OLE2 sets SY-SUBRC to 0 if an external object could be created, otherwise to 1, 2, or 3, depending on the cause.
  14. DELETE sets SY-SUBRC to 0 if the operation is successful, otherwise to 4 or another value other than 0, depending on the cause.
  15. DEMAND ... MESSAGES INTO sets SY-SUBRC to 0 if the message table is empty, otherwise to a value other than 0.
  16. DESCRIBE LIST sets SY-SUBRC to 0 if the line or list exists, otherwise to 4 or 8.
  17. EXEC SQL - ENDEXEC sets SY-SUBRC to 0 in nearly all cases. It does, however, set SYSUBRC to 4 if no entry is read in a FETCH statement.
  18. FETCH sets SY-SUBRC to 0 if at least one line was read, otherwise to 4.
  19. GENERATE SUBROUTINE POOL sets SY-SUBRC to 0 if the generation was successful, otherwise to 8.
  20. GET CURSOR sets SY-SUBRC to 0 if the cursor is correctly positioned, otherwise to 4.
  21. GET PARAMETER sets SY-SUBRC to 0 if a corresponding value exists in SAP memory, otherwise to 4.
  22. IMPORT sets SY-SUBRC to 0 if the import is successful, otherwise to 4.
  23. INSERT sets SY-SUBRC to 0 if the operation is successful, otherwise to 4.
  24. LOAD REPORT sets SY-SUBRC to 0 if the operation is successful, otherwise to 4 or 8 depending on the cause of the error.
  25. LOOP sets SY-SUBRC to 0 if there is at least one pass through the extract. Otherwise, it is set to a value other than 0.
  26. LOOP AT sets SY-SUBRC to 0 if there is at least one loop pass through the internal table, otherwise to 4.
  27. MODIFY sets SY-SUBRC to 0 if the operation is successful, otherwise to 4.
  28. MODIFY LINE sets SY-SUBRC to 0 if a line in the list was changed, otherwise it sets it to a value other than 0.
  29. MODIFY sets SY-SUBRC to 0 if the operation is successful, otherwise to 4.
  30. OLE2 Automation, executed successfully, otherwise 1, 2, 3, or 4, depending on the cause of the error.
  31. OPEN DATASET sets SY-SUBRC to 0 if the file could be opened, otherwise to 8.
  32. Open SQL statements set SY-SUBRC to 0 if the operation is successful, otherwise to a value other than 0.
  33. OVERLAY sets SY-SUBRC to 0 if at least one character is overlaid, otherwise to 4.
  34. READ DATASET sets SY-SUBRC to 0 if the read operation was successful, otherwise to 4 or 8, depending on the cause of the error.
  35. READ LINE sets SY-SUBRC to 0 if a list line exists, otherwise to a value other than 0.
  36. READ TABLE sets SY-SUBRC to 0 if table lines are found, otherwise to 2, 4, or 8, depending on the context and cause of the error.
  37. REPLACE sets SY-SUBRC to 0 if the search string was replaced, otherwise to a value other than 0.
  38. SCROLL sets SY-SUBRC to 0 if the scrolling within the list was successful, otherwise to 4 or 8, depending on the cause.
  39. SEARCH sets SY-SUBRC to 0 if the search string was found, otherwise to 4.
  40. SELECT sets SY-SUBRC to 0 if at least one line was read, otherwise to 4, or possibly 8 in SELECT SINGLE FOR UPDATE.
  41. SET COUNTRY sets SY-SUBRC if the country code exists in table T005X, otherwise to 4.
  42. SET BIT sets SY-SUBRC to 0 if the bit could be set, otherwise to a value other than 0.
  43. SET TITLEBAR sets SY-SUBRC to 0 if the title exists, otherwise to 4.
  44. SHIFT ... UP TO sets SY-SUBRC to 0 if the position could be found within the string, otherwise to 4.
  45. SPLIT sets SY-SUBRC to 0 if the sizes of the target fields are adequate, otherwise to 4.
  46. UPDATE sets SY-SUBRC to 0 if the operation is successful, otherwise to 4.
  47. WRITE ... TO sets SY-SUBRC to 0 if the assignment is successful, otherwise to 4.
  • No labels

5 Comments

  1. Former Member

  2. Former Member

    Very Useful document

  3. Former Member

    1. ASSIGN sets SY-SUBRC to 0 if the field symbol assignment was possible, otherwise to 4.

    Static ASSIGN NOT set SY-SUBRC to 0 if the field symbol assignment was successful. Try example:

    DATA lv_matnr TYPE matnr.

    FIELD-SYMBOLS <s_matnr> TYPE matnr.

    sy-subrc = 4.
    ASSIGN lv_matnr TO <s_matnr>.
    IF sy-subrc = 0.
        WRITE 'Success!'.
    ELSE.
        WRITE 'Failed!'.
    ENDIF.


  4. Former Member

  5. Former Member

    Depending on the SAP Basis the ABAP statements sets SY-SUBRC or not. The higher the basis release the more use of TRY ... CATCH ... ENDTRY is required to catch error status otherwise a runtime error may occurs.

    On SAP Basis 7.31 with patchlevel 17 I have identified the following ABAP statements, which sets SY-SUBRC:

    ASSIGN - dynamic_dobj (dynamic variant) / mem_area (static variant) / COMPONENT
    AUTHORITY-CHECK
    CALL BADI … EXCEPTIONS
    CALL FUNCTION … EXCEPTIONS
    CALL METHOD … (classic) EXCEPTIONS
    CALL SELECTION-SCREEN
    CALL TRANSACTION (up to 7.31; beginning from 7.40 check on TRY … CATCH … ENDTRY is required)
    CATCH SYSTEM-EXCEPTIONS
    CLOSE DATASET
    COMMIT WORK AND WAIT
    CONCATENATE
    CONVERT INTO TIME STAMP
    CONVERT TIME STAMP
    CREATE OBJECT
    DELETE
    DELETE DYNPRO
    DELETE FROM
    DELETE REPORT
    DESCRIBE LIST
    ENDEXEC
    ENDLOOP
    ENDPROVIDE
    ENDSELECT
    FETCH
    FIND
    FREE OBJECT
    GENERATE DYNPRO
    GENERATE SUBROUTINE POOL
    GET BIT
    GET CURSOR
    GET PARAMETER
    GET PROPERTY
    IMPORT
    IMPORT DIRECTORY
    IMPORT DYNPRO
    INSERT
    INSERT TEXTPOOL
    LOAD REPORT
    LOOP AT
    MODIFY
    MODIFY LINE
    OPEN DATASET
    OVERLAY
    READ DATASET
    READ LINE
    READ REPORT
    READ TABLE
    READ TEXTPOOL
    REPLACE
    SCAN
    SCROLL LIST
    SELECT
    SET BIT
    SET COUNTRY
    SET HANDLER
    SET LANGUAGE
    SET PROPERTY - OLE
    SET TITLEBAR - Dynpro
    SHIFT
    SPLIT
    SUBMIT ... AND RETURN
    SYNTAX-CHECK
    SYNTAX-CHECK FOR DYNPRO
    SYNTAX-CHECK FOR PROGRAM
    TRUNCATE DATASET
    UPDATE
    WAIT UNTIL
    WRITE - TO

    On SAP basis 7.31 the following ABAP statements have been declared obsolete:

    CALL DIALOG with USING
    COMMUNICATION INIT DESTINATION ... RETURNCODE
    DEMAND ... MESSAGES INTO
    SEARCH

    Hope, this bings some light into darkness... (wink)