SAP profile parameters

This blog will give tips and tricks for SAP profile parameters.

List of all profile parameters

Program RSPARAM will list all profile parameters:

The system default, the user defined value and the description is listed.

Program RSPFPAR can be used for a selective set of parameters.

Explanation note: 3202666 – The RSPARAM report usage.

Changing profile parameters

Transactions RZ10 and RZ11 can be used to change the profile parameters. If lost after restart, check OSS note 2228845 – RZ10: New or changed value is not active after restart.

Check also OSS note 2789094 – Maintaining ASCS profiles using RZ10.

Checking history of profile parameters

Transaction TU02 will list the profile parameter changes:

A different way to check the history is using SAP Focused Run configuration validation. Read more on this feature in this blog.

Technical tables and routines

Table TPFET contains the current parameters.

Table PAHI is keeping the history of parameter changes (if not updated, read note 3205243 – PAHI Table data is not updated).

RFC enabled function module TH_GET_PARAMETER can be used to read a profile parameter value.

Search transaction for user-exit and BADI

As ABAP developer you need to search for a user-exit and/or BADI for a certain transaction.

The helper program below can help you here. Copy and paste the source code and run the program:

Enter the transaction code and let the program search. Results will show:

You can click on the exit or badi name to jump to the definition.

The program to search for BADI or user-exit

*& Enter the transaction code that you want to search through in order *
*& to find which Standard SAP User Exits exists. *

TABLES : tstc, "SAP Transaction Codes
         tadir, "Directory of Repository Objects
         modsapt, "SAP Enhancements - Short Texts
         modact, "Modifications
         trdir, "System table TRDIR
         tfdir, "Function Module
         enlfdir, "Additional Attributes for Function Modules
         tstct, "Transaction Code Texts
*& Definition of Types *
TYPES: BEGIN OF t_badi_list,
         obj_name TYPE sobj_name,
         devclass TYPE devi_class,
         dlvunit  TYPE dlvunit,
         imp_name TYPE exit_imp,
         packname TYPE devclass,
         dlvunit2 TYPE dlvunit,
         text     TYPE sxc_attrt-text,
       END OF t_badi_list.
TYPES: BEGIN OF t_badi_list2,
         obj_name TYPE sobj_name,
         devclass TYPE devi_class,
         dlvunit  TYPE dlvunit,
       END OF t_badi_list2.
*& Data Declaration *
DATA: lt_badi_list  TYPE TABLE OF t_badi_list,
      lt_badi_list2 TYPE TABLE OF t_badi_list2,
      ls_badi_list  TYPE t_badi_list OCCURS 0 WITH HEADER LINE,
      ls_badi_list2 TYPE t_badi_list2.
RANGES: r_badi FOR tadir-obj_name ,
rt_badi FOR tadir-obj_name .
*& Variables *
       p_trkey LIKE trkey.
DATA : field1(30),
count TYPE p.
DATA : v_devclass  LIKE tadir-devclass,
       p_devclass  LIKE tadir-devclass,
       p_old_langu LIKE sy-langu,
       p_mod_langu LIKE sy-langu.
*& Selection Screen Parameters *
PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.
*& Start of report *
* Validate Transaction Code
  SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.
*Find Repository Objects for transaction code
  IF sy-subrc EQ 0.
    SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
    AND object = 'PROG'
    AND obj_name = tstc-pgmna.
    MOVE: tadir-devclass TO v_devclass.
    IF sy-subrc NE 0.
* This section is used if a FGR is involved\!
          global_lock             = 'X'
          object                  = p_tcode
          object_class            = 'TRAN'
          mode                    = 'SHOW'
          language_upd_exit       = 'RS_TRANSACTION_LANGUAGE_EXIT'
          suppress_language_check = space
          new_master_language     = p_old_langu
          modification_language   = p_mod_langu
          transport_key           = p_trkey
          devclass                = p_devclass
          canceled_in_corr        = 1
          OTHERS                  = 2.
      IF sy-subrc = 0. " Success
        MOVE: p_devclass TO v_devclass.
      ELSE. " For the case that nothing is found\!
        SELECT SINGLE * FROM trdir WHERE name = tstc-pgmna.
        IF trdir-subc EQ 'F'.
          SELECT SINGLE * FROM tfdir WHERE pname = tstc-pgmna.
          SELECT SINGLE * FROM enlfdir WHERE funcname = tfdir-funcname.
          SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
          AND object = 'FUGR'
          AND obj_name = p_devclass.
          MOVE: tadir-devclass TO v_devclass.
*Find SAP Modifactions
    SELECT * FROM tadir INTO TABLE jtab
    WHERE pgmid = 'R3TR'
    AND object = 'SMOD'
    AND devclass = v_devclass.
    SELECT SINGLE * FROM tstct WHERE sprsl EQ sy-langu
    AND tcode EQ p_tcode.
    WRITE:/(19) 'Transaction Code - ', 20(20) p_tcode, 45(50) tstct-ttext.
    WRITE:/1 'The application area is:', v_devclass.
    IF NOT jtab[] IS INITIAL.
      WRITE:/(95) sy-uline.
      WRITE:/1 sy-vline, 2 'Exit Name', 21 sy-vline, 22 'Description', 95 sy-vline.
      WRITE:/(95) sy-uline.
      LOOP AT jtab.
        SELECT SINGLE * FROM modsapt
        WHERE sprsl = sy-langu
        AND name = jtab-obj_name.
        WRITE:/1 sy-vline, 2 jtab-obj_name HOTSPOT ON, 21 sy-vline , 22 modsapt-modtext,
        95 sy-vline.
      WRITE:/(95) sy-uline.
      DESCRIBE TABLE jtab.
      WRITE:/ 'No of Exits:' , sy-tfill.
      WRITE:/(83) sy-uline.
      WRITE:/1 sy-vline, 2 'Badi Name', 22 sy-vline, 23 'Description', 83 sy-vline.
      WRITE:/(83) sy-uline.
* select the BAdI Definitions from the tables sxc_exit and sxc_attr
      SELECT t~obj_name t~devclass tc~dlvunit sx~imp_name sat~text
      FROM ( ( ( ( tadir AS t
      tdevc AS tc ON t~devclass = tc~devclass )
      sxc_exit AS sx ON sx~exit_name = t~obj_name )
      sxc_attr AS sa ON sx~imp_name = sa~imp_name )
      sxc_attrt AS sat ON sx~imp_name = sat~imp_name )
      WHERE t~pgmid = 'R3TR'
      AND t~object = 'SXSD' "means BAdI
      AND t~devclass = v_devclass "narrow down seach with Dev.Class
      AND sat~sprsl = sy-langu.
      SORT lt_badi_list.
* create Ranges
      LOOP AT lt_badi_list INTO ls_badi_list .
        r_badi-sign = 'I' .
        r_badi-option ='EQ' .
        r_badi-low = ls_badi_list-imp_name .
        r_badi-high = ls_badi_list-imp_name .
        APPEND r_badi TO rt_badi .
* select the implementations
      SELECT t~obj_name t~devclass tc~dlvunit
      FROM tadir AS t
      tdevc AS tc ON t~devclass = tc~devclass
      FOR ALL ENTRIES IN rt_badi
      WHERE t~obj_name = rt_badi-low
      AND t~pgmid = 'R3TR'
      AND t~object = 'SXCI'.
      WRITE:/(83) sy-uline.
      count = '0'.
      LOOP AT lt_badi_list INTO ls_badi_list .
        WRITE:/1 sy-vline, 2 ls_badi_list-obj_name HOTSPOT ON, 22 sy-vline,
        23 ls_badi_list-text, 83 sy-vline.
        count = count + 1.
      WRITE:/(83) sy-uline.
      DESCRIBE TABLE ls_badi_list.
      WRITE:/ 'No of BADIs:' , count.
      WRITE:/(95) 'No User Exit exists'.
    WRITE:/(95) 'Transaction Code Does Not Exist'.
*& Call SMOD or SE18 to lead the user to the selected exit or badi *
  IF field1(4) EQ 'JTAB'.
    SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
  ELSEIF field1(12) EQ 'LS_BADI_LIST'.
        exit_name = sy-lisel+1(20)

Period end shift

The finance module works with periods. Mostly this is a calendar month, but it can also be a period of 4 or 5 weeks.

In a productive system the business Finance team will take care of month end closing and opening of new financial period.

In a sandbox or development system this might not be done. As a result logistical postings might fail with a message that the financial period must be opened.

Initialization of financial periods: MMPI

To initialize the periods in a newly installed system, start transaction MMPI:

Only run in newly installed systems!

Background and warning notes:

Period shift: MMPV

The shift the period with one month, start transaction MMPV:

MMPV relevant OSS notes:

Test slow network speed for FIORI and web developments

If you are working with users across the globe you will be faced with performance complaints for your FIORI apps and web developments.

To analyze these user complaints you need to throttle you network speed so it is behaving like a far way computer:

  • Lower bandwidth
  • Higher ping response times

The applications you develop close to the server on fast network can become very sluggish when used by distant users. It is your job as developer to analyze this issues and to improve your design to have less roundtrips.

Network throttling in Chrome

The full details of Chrome network throttling can be found here.

Short instruction:

  1. Open the developer tools with F12 and go to the Network settings

2. Select the No throttling and create a new profile:

3. Now select your profile:

Enjoy the new end user experience. Don’t forget to switch back to your normal speed!