SAP BRFplus Configuration and Learning Guide

SAP BRFplus

Configuration and Learning Guide

Business Rule Framework plus on SAP S/4HANA, with a worked Output Determination example

A self-contained, paper-based guide for learning BRFplus without access to an SAP system, designed so that every step can later be repeated in a real system.

At a glance
Target release SAP S/4HANA (differences from ECC / NetWeaver 7.x noted)
Transactions BRF+ / BRFPLUS (workbench), OPD (output parameter determination), SPRO
Worked example Sales order output determination: output type, channel, language, copies
Screens Illustrative mock-ups only, clearly labelled. No SAP screenshots are reproduced.
Edition October 2026
How to use this guide. Read Part 1 once. Follow Part 2 step by step with pen and paper (or a spreadsheet), using the paper test cases. Use Part 3 to see where else BRFplus applies, and Part 4 for checklists, troubleshooting and exercises. Items marked [VARIES BY RELEASE] differ between SAP releases; confirm them in your system.

Table of Contents

If the table of contents appears empty, right-click it in Word and choose Update Field, then Update entire table.

PART 1 - Foundations

1.1 What BRFplus is, in plain words

BRFplus (Business Rule Framework plus, often written BRF+) is a tool inside SAP's ABAP technology stack (SAP NetWeaver) that lets you describe business rules in tables and simple expressions instead of writing ABAP code. A rule is a decision such as: "If the document type is OR and the plant is 1000, send the order confirmation by e-mail in English."

Think of it as Excel-style decision logic that lives inside SAP. You already know how a lookup table or an IF formula works; BRFplus gives you the same ideas (input columns, result columns, conditions, formulas) with SAP governance around them: versioning, transport to production, tracing and testing.

Excel idea you know BRFplus equivalent
A lookup table with input columns and result columns Decision table (an Expression type)
IF / AND / OR formulas Rule with a condition expression (Boolean, formula, etc.)
Named cells / named ranges Data objects (elements, structures, tables)
A worksheet that takes inputs and returns an answer Function (the interface to the calling program)
A workbook Application (the container for everything)
Evaluate Formula / step through Simulation and Trace
Save As version / track changes Versioning

Why it matters to a functional consultant: key business changes (a new plant, a new customer group, a new output channel) can be made by changing table rows, usually without an ABAP developer, and the same change can be tested and transported like any other customizing.

1.2 Where BRFplus sits in SAP

Release note (ECC vs S/4HANA). In SAP Community, an SAP product expert explains that transaction BRFPLUS needs NetWeaver 7.02, which is bundled with ECC enhancement package 5. On NetWeaver 7.01 (ECC EhP4) only a limited early version exists, started with transaction FDT_WORKBENCH. So for an older ECC 6.0 system, check the enhancement package level first. In S/4HANA, BRFplus is always available.
ILLUSTRATIVE MOCK-UP | How the pieces fit together (flow diagram)
  Business application (e.g. Sales order, Purchase order, MDG save)
        |
        |  1. passes CONTEXT values (document type, plant, ...)
        v
  +---------------------------+
  |   BRFplus FUNCTION        |   <- the interface (signature)
  |   Context  ->  Result     |
  +-------------+-------------+
                |
                v
  +---------------------------+
  |   RULE SET                |   <- holds one or more rules
  |    Rule 1: condition ...  |
  |            action  ...    |
  +-------------+-------------+
                |
                v
  +---------------------------+
  |  EXPRESSIONS              |   <- decision table, formula,
  |  (Decision table, ...)    |      database lookup, etc.
  +---------------------------+
                |
        2. RESULT values go back (output type, channel, ...)
                v
  Business application continues with the result

Figure 1 - Illustrative flow diagram, not an SAP screenshot.

1.3 The object hierarchy

Everything in BRFplus is an object with a name, a text, a version and an active/inactive status. The objects nest as follows.

ILLUSTRATIVE MOCK-UP | Object tree as shown in the left navigation panel (illustrative)
  Applications
  +-- ZOUT_DET_APP                      (Application)
      +-- Data Objects
      |   +-- Elements
      |   |   +-- DOC_TYPE              (Element, text)
      |   |   +-- PLANT                 (Element, text)
      |   |   +-- OUTPUT_TYPE           (Element, text)
      |   +-- Structures
      |   |   +-- S_CONTEXT
      |   |   +-- S_RESULT
      |   +-- Tables
      +-- Expressions
      |   +-- DT_OUTPUT                 (Decision Table)
      +-- Functions
      |   +-- F_DETERMINE_OUTPUT        (Function)
      +-- Rulesets
      |   +-- RS_OUTPUT                 (Rule set)
      |       +-- R_FIND_OUTPUT         (Rule)
      +-- Catalogs
          +-- CAT_OUTPUT                (Catalog, optional)

Figure 2 - Illustrative object tree. Folder names in your release may differ slightly.

Object What it is Excel analogy
Application The container for all objects belonging together. It carries the development package, the storage type (decides if objects can be transported) and default settings such as versioning. The workbook file
Function The interface between ABAP code and the rules. Its signature lists the context data objects (inputs) and the result data object (output). A function holds one or more rule sets. A named input/output area
Rule set A collection of rules. It can also hold its own variables and a priority; SAP Insider notes that a rule set with priority 0 runs first and one with priority 99 runs last. A sheet with several formulas
Rule A condition (when does it apply) plus actions (what happens). The central entity of the framework. An IF formula
Expression A computational unit that returns a value. Types include decision table, formula, database lookup, procedure call, and others. Formulas and lookup ranges
Action Something performed outside BRFplus, for example sending a message or calling a method. A macro
Data object A data carrier: an element (single value such as DOC_TYPE), a structure (group of elements) or a table (list of structures). Elements can be bound to ABAP Dictionary (DDIC) data elements so value help works. Named cell / range
Catalog A folder-like way to group and find objects. Helps navigation only; not versioned. A tab colour or index sheet

1.4 Expression types you will meet

1.5 Key concepts

Concept Meaning Where you use it
Context The input data the calling program hands to the function. Defined in the function signature. Function > Signature
Result The output data returned by the function. Function > Signature
Simulation You type values for the context and run the function in the workbench to see the result. SAP Help compares it to function-module testing. It is available for functions, expressions and actions. Function > Simulation
Trace A record of what the engine did. Lean trace logs only steps that contributed to the result; technical trace logs every step, including dead ends. Simulation uses the trace tool too. Simulation result; trace mode of the calling code
Versioning Keeps older states of an object, based on the timestamp of save and activation, so you can see what a rule looked like on a given date. Default modes are set per application on the Default Settings tab: Off, Enforced (recommended if you use Lean Trace) and Transport-dependent. Catalogs are never versioned. Application > Default Settings
Transport Moving active objects from development to quality and production. Works through a normal transport request if the application storage type is transportable, or through XML export/import in Expert Mode. Save dialog; Expert Mode XML
Activation Objects are created inactive, then saved and activated. Only the active version is used at run time. Every object
Simple vs Expert mode Expert Mode unlocks advanced features such as XML export and import. Workbench settings
Trace and versioning belong together. SAP Help explains that Lean Trace normally requires every traced object to be versioned, because otherwise the system cannot tell which object state was used. If nothing has changed since the trace was recorded, the trace can still be displayed.

1.6 Workbench layout (what you will see)

ILLUSTRATIVE MOCK-UP | BRFplus workbench - typical layout (illustrative)
+----------------------------------------------------------------------------+
| BRFplus Workbench                              [Mode: Expert] [Settings]   |
+--------------------+-------------------------------------------------------+
| NAVIGATION PANEL   |  DETAIL AREA                                          |
|                    |  Object: F_DETERMINE_OUTPUT   Type: Function          |
| [Search........]   |  Status: Active    Version: 1                         |
|                    |  +--------+---------+----------+----------+          |
| > Applications     |  |Signature|Assigned |Simulation|Settings  |          |
|   > ZOUT_DET_APP   |  |        |Rulesets |          |          |          |
|     > Functions    |  +--------+---------+----------+----------+          |
|     > Expressions  |                                                       |
|     > Rulesets     |  Context data objects:   [ DOC_TYPE ] [ PLANT ] ...   |
|     > Data Objects |  Result data object:     [ S_RESULT ]                 |
|                    |                                                       |
+--------------------+-------------------------------------------------------+
| [Save] [Activate] [Check] [Where-used] [Create Object v] [Export XML]       |
+----------------------------------------------------------------------------+

Figure 3 - Illustrative layout. SAP Help describes a navigation panel on the left and a detail area on the right; the tabs shown depend on the object type. Right-click the background and choose Display Quick Help to get on-screen explanations while you learn.

Where to see real screenshots. This guide uses reconstructed mock-ups. For genuine SAP screens, use: (1) the SAP Learning course "Customizing Output Control in SAP S/4HANA Sales" at learning.sap.com, lesson "Determining Output Parameters"; (2) SAP Help Portal pages for "BRFplus workbench", "Versioning" and "Trace"; (3) the SAP Community blog posts listed in the Sources section, several of which include full-screen walkthroughs.

PART 2 - Hands-on configuration walkthrough: Output Determination

2.1 The scenario

A company sells from two plants. When a sales order is saved, the business wants the system to decide four things automatically: which output type to create, through which channel, in which language, and how many copies. We will build this rule set in BRFplus from scratch and test it on paper.

Inputs the rule looks at (context):

Context (input) Meaning Example values
DOC_TYPE Sales document type OR, ZOR, RE
PLANT Delivering plant 1000, 2000
CUST_COUNTRY Country of the customer (stands in for the customer) IN, DE, US

Outputs the rule returns (result):

Result (output) Meaning Example values
OUTPUT_TYPE Which output document to create ORDER_CONF, PROFORMA (illustrative names)
CHANNEL How it is sent PRINT, EMAIL
LANGUAGE Output language EN, DE
COPIES Number of copies (text in this exercise to keep it simple) 1, 2

The business rule, written as a table (this becomes our decision table). A blank cell means "any value". Rows are checked from top to bottom and the first match wins.

# DOC_TYPE PLANT CUST_COUNTRY -> OUTPUT_TYPE CHANNEL LANGUAGE COPIES
1 OR 1000 IN ORDER_CONF EMAIL EN 1
2 OR 1000 (blank) ORDER_CONF PRINT EN 2
3 OR 2000 DE ORDER_CONF EMAIL DE 1
4 ZOR (blank) (blank) PROFORMA PRINT EN 1
5 (blank) (blank) (blank) ORDER_CONF PRINT EN 1

Row 5 is the catch-all default that applies when nothing above matched. Output type names are invented for this exercise.

Read this before you start - how this exercise relates to real S/4HANA output management.

In SAP S/4HANA, SAP delivers its own BRFplus applications for output parameter determination, one per business object (sales document, billing document, purchase order, and so on). Their function signatures are fixed by SAP and are called by SAP code. You normally do not create your own application and plug it in. Instead you maintain the rows of the SAP-delivered decision tables, using transaction OPD (or the Output Parameter Determination app in SAP S/4HANA Cloud).

So the exercise in Steps 1 to 8 builds a practice twin: a complete BRFplus application you own, which teaches every BRFplus skill the real thing uses. Step 9 then shows how the same logic is maintained in the real integration. Step 10 covers transport for both. Treat Steps 1 to 8 as your safe training ground and Step 9 as the day-to-day consulting work.

2.2 Step 0 - Prerequisites checklist

Item What to confirm Done?
Authorization Role SAP_BC_FDT_ADMINISTRATOR (or a custom subset) is in your user [ ]
Development package A package for the new application, for example ZBRF_TRAINING, or $TMP if the objects are local-only [ ]
Transport request A customizing transport request, if the application must travel to other systems [ ]
Browser/Web Dynpro Web Dynpro ABAP is active and the embedded browser works [ ]
Mode Expert Mode available if you want XML export/import later [ ]

Step 1 - Open the BRFplus workbench

1. Navigation / transaction

2. Screen (reconstructed mock-up)

ILLUSTRATIVE MOCK-UP | Workbench start screen
+------------------------------------------------------------------+
| BRFplus Workbench                                                |
+------------------+-----------------------------------------------+
| Navigation Panel |  Welcome                                      |
|                  |                                               |
| [Search.......]  |  Recently used objects:                       |
|                  |   (none yet)                                  |
| > Applications   |                                               |
|     (empty)      |  [ Create Object v ]                          |
+------------------+-----------------------------------------------+

Figure 4 - Illustrative. If the screen is blank, wait for Web Dynpro to load and check that you are not in a restricted browser mode.

3. Field-by-field entries

Field / control Enter / select Notes
Mode switch (Settings) Choose Expert Mode if available Needed later for XML export/import
Quick help Right-click the background > Display Quick Help SAP recommends this for newcomers

4. Why this matters

5. Common errors and fixes

Symptom Fix
"Transaction BRFPLUS does not exist" Older ECC: the system is below NetWeaver 7.02. Try BRF+ or FDT_WORKBENCH (limited version on 7.01), or upgrade the enhancement package.
Authorization error or empty workbench Ask your administrator to add SAP_BC_FDT_ADMINISTRATOR to your user.
White screen Web Dynpro ABAP services are not active. Ask Basis to activate them (SICF).

Step 2 - Create the application

1. Navigation / transaction

2. Screen (reconstructed mock-up)

ILLUSTRATIVE MOCK-UP | Create Object dialog - Application
+-----------------------------------------------------------+
| Create Object                                       [ X ] |
+-----------------------------------------------------------+
| Object Type:      [ Application                  v ]      |
| Name:             [ ZOUT_DET_APP                   ]      |
| Description:      [ Output determination - training ]     |
|                                                           |
| Storage Type:     (o) Customizing  ( ) System  ( ) Local  |
| Development Pkg:  [ ZBRF_TRAINING                  ]     |
| Transport Req.:   [ DEVK900123                     ]     |
|                                                           |
|        [ Create And Navigate To Object ]  [ Cancel ]      |
+-----------------------------------------------------------+

Figure 5 - Illustrative dialog. Field labels and the available storage types can differ by release. [VARIES BY RELEASE]

3. Field-by-field entries

Field / control Enter / select Notes
Object Type Application Fixed for this dialog
Name ZOUT_DET_APP Use the customer namespace (Z or Y)
Description Output determination - training Meaningful text helps search
Storage Type Customizing SAP Help: transportable storage types are System and Customizing. Local objects cannot be transported.
Development Package ZBRF_TRAINING Use $TMP only for throw-away practice
Transport Request Your customizing request Asked when saving, not always on this dialog
Default Settings tab > Versioning Enforced (tick/select it) Recommended if you intend to use Lean Trace

4. Why this matters

5. Common errors and fixes

Symptom Fix
"Name already exists" Choose another name; names are unique per system.
Cannot assign a transport request The package is local ($TMP) or the storage type is Local. Use a transportable package and storage type.
Objects not traced as expected later Versioning was Off at creation. Switch the default and re-save objects.

Step 3 - Create the data objects (inputs and outputs)

1. Navigation / transaction

2. Screen (reconstructed mock-up)

ILLUSTRATIVE MOCK-UP | Create Object - Data Object (Element)
+-----------------------------------------------------------+
| Create Object                                       [ X ] |
+-----------------------------------------------------------+
| Object Type:      [ Data Object                  v ]      |
| Name:             [ DOC_TYPE                       ]      |
| Description:      [ Sales document type            ]      |
| Data Object Type: [ Element                      v ]      |
| Element Type:     [ Text                         v ]      |
| Binding to DDIC:  [ AUART (optional)               ]      |
|                                                           |
|                       [ Create ]  [ Cancel ]              |
+-----------------------------------------------------------+

Resulting tree:
  Data Objects
   +-- Elements:   DOC_TYPE, PLANT, CUST_COUNTRY,
   |               OUTPUT_TYPE, CHANNEL, LANGUAGE, COPIES
   +-- Structures: S_CONTEXT (DOC_TYPE, PLANT, CUST_COUNTRY)
                   S_RESULT  (OUTPUT_TYPE, CHANNEL, LANGUAGE, COPIES)

Figure 6 - Illustrative. Labels and the way structures are assembled vary by release. [VARIES BY RELEASE]

3. Field-by-field entries

Field / control Enter / select Notes
DOC_TYPE Element, Text; optional DDIC binding AUART Binding gives value help and length checks
PLANT Element, Text; optional DDIC binding WERKS_D Same
CUST_COUNTRY Element, Text; optional DDIC binding LAND1 Same
OUTPUT_TYPE, CHANNEL, LANGUAGE, COPIES Elements, Text No binding needed for a training app
S_CONTEXT Structure containing the three context elements Optional: you may use single elements instead
S_RESULT Structure containing the four result elements A structure lets the function return all four values together

4. Why this matters

5. Common errors and fixes

Symptom Fix
Value help is missing in the decision table later The element has no DDIC binding. Add one or type the values by hand.
"Data object is not active" Save and activate the element before using it in other objects.
Mismatch between simulation input and the table Check upper/lower case; text elements are case-sensitive.

Step 4 - Create the function (the interface)

1. Navigation / transaction

2. Screen (reconstructed mock-up)

ILLUSTRATIVE MOCK-UP | Function F_DETERMINE_OUTPUT - Signature tab
+-----------------------------------------------------------------+
| Function: F_DETERMINE_OUTPUT                     Status: Inactive|
+--------------+-----------------+------------+-------------------+
| Signature    | Assigned Rulesets| Simulation | Settings         |
+--------------+-----------------+------------+-------------------+
|                                                                 |
| Context Data Objects                                            |
|   [ Add ] [ Remove ]                                            |
|   +----+--------------+-------------------------------+         |
|   |    | Name         | Description                   |         |
|   +----+--------------+-------------------------------+         |
|   | 1  | DOC_TYPE     | Sales document type           |         |
|   | 2  | PLANT        | Delivering plant              |         |
|   | 3  | CUST_COUNTRY | Country of customer           |         |
|   +----+--------------+-------------------------------+         |
|                                                                 |
| Result Data Object:  [ S_RESULT                         ]       |
+-----------------------------------------------------------------+

Figure 7 - Illustrative. The tabs match what SAP community tutorials describe (Signature, Assigned Rulesets, Simulation); extra tabs depend on the release. [VARIES BY RELEASE]

3. Field-by-field entries

Field / control Enter / select Notes
Name F_DETERMINE_OUTPUT
Description Determine output type, channel, language, copies
Context Data Objects DOC_TYPE, PLANT, CUST_COUNTRY These are what the calling program must supply
Result Data Object S_RESULT What the function returns
Function mode Leave the default (normal) Other modes exist for special uses; not needed here

4. Why this matters

5. Common errors and fixes

Symptom Fix
Cannot add a data object to the signature The data object is inactive or belongs to a different application. Activate it or create it in this application.
Result structure not offered Create it first (Step 3) or create it directly from the signature.

Step 5 - Build the decision table (the heart of the rule)

1. Navigation / transaction

2. Screen (reconstructed mock-up)

ILLUSTRATIVE MOCK-UP | Decision table DT_OUTPUT - Table Contents
+----------------------------------------------------------------------------+
| Expression: DT_OUTPUT   Type: Decision Table              Status: Inactive |
+----------------+---------------------+-------------------------------------+
| Table Settings | Table Contents      | Where-Used                          |
+----------------+---------------------+-------------------------------------+
| [ Insert Column v ] [ Insert Row ] [ Delete Row ] [ Move Up ] [ Move Down ] |
|                                                                            |
|          |------ CONDITIONS ------|  |--------- RESULTS ---------|        |
|  # | DOC_TYPE | PLANT | CUST_CTRY |  OUTPUT_TYPE| CHANNEL|LANG|COPIES     |
|  1 | = OR     | = 1000| = IN      |  ORDER_CONF | EMAIL  | EN | 1         |
|  2 | = OR     | = 1000|           |  ORDER_CONF | PRINT  | EN | 2         |
|  3 | = OR     | = 2000| = DE      |  ORDER_CONF | EMAIL  | DE | 1         |
|  4 | = ZOR    |       |           |  PROFORMA   | PRINT  | EN | 1         |
|  5 |          |       |           |  ORDER_CONF | PRINT  | EN | 1         |
+----------------------------------------------------------------------------+

Figure 8 - Illustrative. A blank condition cell means "any value" in SAP's output parameter determination tables. In your own table, confirm the blank-cell behaviour in simulation (see Step 8). [VARIES BY RELEASE]

3. Field-by-field entries

Field / control Enter / select Notes
Result Data Object (Table Settings) S_RESULT Tells the table what columns it fills
Condition columns DOC_TYPE, PLANT, CUST_COUNTRY with operator "Equals" Other operators such as ranges or patterns are offered by the workbench
Result columns OUTPUT_TYPE, CHANNEL, LANGUAGE, COPIES One column per element of S_RESULT
Row order Most specific first, catch-all last Because the first match wins
Exit / exclusive indicator (if offered) Tick on rows that must stop further evaluation In SAP's output tables, the indicator stops the determination at that row and no later rule is applied
Return mode First match Alternatives such as "all matches" exist; wording varies by release

4. Why this matters

5. Common errors and fixes

Symptom Fix
No row is found in simulation No row matched and there is no catch-all. Add row 5.
Wrong row picked A less specific row sits above a more specific one. Reorder rows.
Empty cell does not behave as "any value" Your table uses the default condition type. Use the operator that treats blank as wildcard, or add an explicit alternative row.
Table cannot be activated A column refers to an inactive data object. Activate the data objects first.

Step 6 - Create the rule set and the rule

1. Navigation / transaction

2. Screen (reconstructed mock-up)

ILLUSTRATIVE MOCK-UP | Rule set RS_OUTPUT with rule R_FIND_OUTPUT
+-----------------------------------------------------------------+
| Ruleset: RS_OUTPUT                          Status: Inactive    |
+-----------------------------------------------------------------+
| Header                                                          |
|   Description: Rules for output determination                  |
|   Priority:    [ 50 ]       Variables: 0                        |
|                                                                 |
| Rules                                                           |
|   [ Insert Rule ] [ Delete Rule ] [ Move Up ] [ Move Down ]     |
|   +---+---------------+--------------------+-------------------+|
|   | # | Rule          | Condition          | Action            ||
|   +---+---------------+--------------------+-------------------+|
|   | 1 | R_FIND_OUTPUT | (always true)      | Process DT_OUTPUT ||
|   |   |               |                    | -> result S_RESULT||
|   +---+---------------+--------------------+-------------------+|
+-----------------------------------------------------------------+

Figure 9 - Illustrative. SAP Insider describes opening the rule set from the function's Assigned Rulesets tab, and notes that rule sets run in priority order (0 first, 99 last).

3. Field-by-field entries

Field / control Enter / select Notes
Ruleset name RS_OUTPUT
Priority Leave the default, or 50 Matters only if several rule sets are assigned to the function
Rule name R_FIND_OUTPUT
Rule condition Always true (leave the condition empty / default) The decision table itself does the filtering
Rule action Process the expression DT_OUTPUT and assign the outcome to the function result S_RESULT Exact action names differ by release. [VARIES BY RELEASE]

4. Why this matters

5. Common errors and fixes

Symptom Fix
Function returns an empty result The rule action does not write to the result. Re-check the assignment to S_RESULT.
Rule set never runs It is not listed under the function's Assigned Rulesets, or it is inactive.

Step 7 - Check and activate

1. Navigation / transaction

2. Screen (reconstructed mock-up)

ILLUSTRATIVE MOCK-UP | Activation log (success)
+-----------------------------------------------------------+
| Activation                                                |
+-----------------------------------------------------------+
| [OK]   DOC_TYPE            activated                      |
| [OK]   PLANT               activated                      |
| [OK]   CUST_COUNTRY        activated                      |
| [OK]   S_RESULT            activated                      |
| [OK]   DT_OUTPUT           activated                      |
| [OK]   RS_OUTPUT           activated                      |
| [OK]   F_DETERMINE_OUTPUT  activated                      |
|                                                           |
| Transport request: DEVK900123  [x] Transport Objects      |
+-----------------------------------------------------------+

Figure 10 - Illustrative. The tick "Transport Objects" and the Transport Request field appear in the confirmation dialog when the application is transportable (as described in SAP Help on versioning).

3. Field-by-field entries

Field / control Enter / select Notes
Check Run on every object Reveals missing references before activation
Transport Objects (tick) Tick it Records changed objects on the transport request
Transport Request Your customizing request If the application is already assigned to a request, its ID is shown and cannot be changed

4. Why this matters

5. Common errors and fixes

Symptom Fix
"Object X is inactive" while activating the function Activate X first, then repeat.
Transport dialog does not appear Application is Local or in $TMP. Change storage type before relying on transports.
Active version differs from what you tested You edited after activating; activate again.

Step 8 - Simulate and trace (your paper-friendly test)

1. Navigation / transaction

2. Screen (reconstructed mock-up)

ILLUSTRATIVE MOCK-UP | Function F_DETERMINE_OUTPUT - Simulation tab
+-----------------------------------------------------------------+
| Simulation                                                      |
+-----------------------------------------------------------------+
| Context input                                                   |
|   DOC_TYPE      [ OR   ]                                        |
|   PLANT         [ 1000 ]                                        |
|   CUST_COUNTRY  [ IN   ]                                        |
|                                                                 |
|   Trace mode: (o) Lean   ( ) Technical        [ Execute ]       |
|                                                                 |
| Result                                                          |
|   OUTPUT_TYPE = ORDER_CONF                                      |
|   CHANNEL     = EMAIL                                           |
|   LANGUAGE    = EN                                              |
|   COPIES      = 1                                               |
|                                                                 |
| Trace                                                           |
|   F_DETERMINE_OUTPUT                                            |
|    +-- RS_OUTPUT > R_FIND_OUTPUT (condition true)               |
|         +-- DT_OUTPUT: row 1 matched                            |
+-----------------------------------------------------------------+

Figure 11 - Illustrative. SAP Help compares simulation to function-module testing; the simulation uses the same trace tool as production runs. Lean trace logs only the steps that contributed to the result; technical trace logs every step.

3. Field-by-field entries

Field / control Enter / select Notes
DOC_TYPE / PLANT / CUST_COUNTRY See test cases below Type exactly as stored; text is case-sensitive
Trace mode Lean first; Technical when debugging Lean needs versioned objects (see Step 2)

4. Why this matters

5. Common errors and fixes

Symptom Fix
Result is empty No row matched. Add or fix a row.
Trace is truncated Hover the line; SAP Help says the full text is shown in the tooltip.
Trace not displayed An object was changed and is not versioned. Turn versioning on (Step 2) and run again.

Paper test cases. Run each one in the simulation and compare. The "Expected" column is what the decision table in Section 2.1 must return.

Test DOC_TYPE PLANT CUST_COUNTRY Expected row Expected result
T1 OR 1000 IN 1 ORDER_CONF, EMAIL, EN, 1
T2 OR 1000 US 2 ORDER_CONF, PRINT, EN, 2
T3 OR 2000 DE 3 ORDER_CONF, EMAIL, DE, 1
T4 OR 2000 IN 5 (default) ORDER_CONF, PRINT, EN, 1
T5 ZOR 3000 FR 4 PROFORMA, PRINT, EN, 1
T6 RE 1000 IN 5 (default) ORDER_CONF, PRINT, EN, 1

Step 9 - The real integration: output parameter determination (OPD)

This is the step where your BRFplus knowledge meets standard S/4HANA output management. Facts below come from SAP Learning, SAP Community and SAP Help (see Sources).

How it works

Navigation

ILLUSTRATIVE MOCK-UP | Transaction OPD - Output Parameter Determination (illustrative)
+----------------------------------------------------------------------------+
| Output Parameter Determination                                             |
+----------------------------------------------------------------------------+
| Show Rules for:  [ Sales Document                     v ]                  |
|                                                                            |
| Determination steps (the exact list depends on the business object)       |
|   (o) Step 1: Output type                                                  |
|   ( ) Step 2: Channel                                                      |
|   ( ) Step 3: Form template                                                |
|   ( ) Step 4: E-mail template / recipient                                  |
|   ( ) ...                                                                  |
|                                                                            |
| [ Check ] [ Add Column ] [ Save ] [ Activate ]  [ Additional actions v ]   |
|                                                                            |
|  Excl. | Sales Doc. Type | Sales Org. | -> Output Type    | Description    |
|  [ ]   | OR              | 1000       |    ORDER_CONF     | Order conf.    |
|  [x]   | ZOR             |            |    PROFORMA       | Stop here      |
|  [ ]   |                 |            |    ORDER_CONF     | Default        |
+----------------------------------------------------------------------------+

Figure 12 - Illustrative only. Real step names, columns and button labels differ per business object and release. For genuine screens, see the SAP Learning lesson "Determining Output Parameters".

A realistic consulting task, step by step

  1. Confirm that SAP S/4HANA output management is active for your application object (for example sales document).

  2. Open OPD and choose the business rule (for example Sales Document).

  3. Select the determination step you need to change, for example the channel step.

  4. Add a row: fill the condition columns (for example Sales Document Type = ZOR) and the result column (for example Channel = EMAIL).

  5. Tick the exclusive indicator if no later row should be applied.

  6. Choose Check to validate, then Save and Activate. In S/4HANA Cloud the check can report that a selected form template is not valid for the chosen output type, or that a channel is not supported; fix the combination as SAP KBA 2843926 describes.

  7. Test with a real document (create a sales order and see which output is proposed) and, if needed, debug using the output management classes described in the SAP Community troubleshooting blog.

  8. Transport the change as shown in Step 10.

Limits to know. The scope of SAP S/4HANA output management is not identical to NAST; IDocs are restricted to business applications that previously used NAST; and for some objects (for example quality notifications and inspection lots) SAP KBA 3535356 states that BRFplus-based OPD is not supported. Always check the application-specific SAP Note for your object.

Step 10 - Transport

There are two ways to move BRFplus content between systems.

Option A - Normal transport request (recommended)

Option B - XML export and import (Expert Mode)

ILLUSTRATIVE MOCK-UP | Import XML (illustrative)
+-----------------------------------------------------------+
| Import BRFplus XML                                  [ X ] |
+-----------------------------------------------------------+
| File:            [ C:\temp\ZOUT_DET_APP.xml        ] [...] |
| Import type:     [ Normal                          v ]    |
| Transport:       (o) Customizing request  ( ) Workbench   |
| Request ID:      [ DEVK900123                      ]      |
| [x] Test Run (simulate, do not write)                     |
|                                                           |
|                [ Import ]  [ Cancel ]                     |
+-----------------------------------------------------------+

Figure 13 - Illustrative. Based on the SAP Help description of XML export and import.

Symptom Fix
Transport request missing the BRFplus objects The "Transport Objects" tick was not set on save. Re-save the objects with the tick set.
Import into target fails on a missing data object Dependent objects were not in the request or the target. Include them or import them first.
Objects exist in target but behave as before They are inactive in the target. Activate them.
Trace not available in target Versioning is off on those objects. See Step 2.

PART 3 - Other common uses of BRFplus

BRFplus is a general rules tool, but SAP does not use it for every topic you listed. To avoid giving you the wrong picture, each section states plainly whether BRFplus is the standard SAP mechanism, an available option or a custom extension idea. Where the standard engine is something else (condition technique, dunning procedure, availability check), BRFplus is only useful for custom logic around it.

Use case Status Standard engine if not BRFplus
Output determination Standard in S/4HANA output management (older: NAST condition technique)
Pricing / surcharge logic Custom option; SAP Press tutorial builds one Pricing condition technique (VK11, pricing procedure)
Workflow routing / approvers Commonly used option Workflow agent assignment, flexible workflow
Fiori / BOPF validations Available option for rule logic BOPF determinations/validations in ABAP
Master data checks Standard in SAP MDG; option elsewhere Validation exits, BAdIs
Tax / account / posting Custom option Tax procedures, account determination (OBYC, VKOA)
Dunning / credit / ATP Custom option Dunning procedure, credit management, availability check

The status column reflects the sources listed at the end plus general SAP practice. Verify each item against the documentation of your own release before relying on it in a project.

3.1 Output determination and output parameter determination

Aspect Detail
Status in SAP Standard in S/4HANA output management (from the 1511 era onward for several applications). SAP Community also notes that BRFplus gained prominence with release 1610.
What BRFplus does Decision tables decide output type, channel, form template, recipient, language and copies for sales, billing, delivery, purchasing and inventory (goods movement) documents.
Mini-example Goods receipt (transaction/event type WE) posts a material document; the system checks whether the new output management is active for that event and then reads the OPD rules for the business rule "Goods Movement". A row such as Plant 1000 + movement type 101 -> output type GOODS_RECEIPT_SLIP, channel PRINT could be maintained in OPD. (Output type name illustrative.)
See Part 2, Step 9, for the maintenance procedure.

3.2 Pricing, condition and surcharge logic

Aspect Detail
Status in SAP Not the standard pricing engine. Standard SAP pricing uses the condition technique. BRFplus is an option for custom calculations. The SAP Press BRFplus book includes a tutorial that creates a pricing application in the workbench.
What BRFplus does A function takes order data (customer group, quantity, delivery distance) and returns a surcharge percentage through a decision table or formula.
Mini-example Context: CUST_GROUP, DELIVERY_ZONE, ORDER_VALUE. Decision table returns SURCHARGE_PCT: Zone A = 0, Zone B = 2.5, Zone C = 5, and orders above 100000 are exempt (exclusive row on top). A formula expression multiplies the order value by SURCHARGE_PCT.
Use this only where the standard pricing procedure cannot express the rule. Call the BRFplus function from an enhancement/user exit, and keep pricing in SAP's condition technique wherever possible.

3.3 Workflow routing and approver determination

Aspect Detail
Status in SAP Commonly used option. Rules decide who approves what.
What BRFplus does The function returns a user, role or organizational unit depending on document amount, company code and document type.
Mini-example Context: DOC_TYPE, AMOUNT, COMPANY_CODE. Decision table: AMOUNT up to 5000 -> role MANAGER; 5001 to 50000 -> role DIRECTOR; above 50000 -> role CFO_OFFICE. The workflow step reads the result and creates the work item for that role.
The way BRFplus is attached to workflow differs between classic Business Workflow and flexible workflow. Check the documentation for your release. [VARIES BY RELEASE]

3.4 Fiori / BOPF validations and determinations

Aspect Detail
Status in SAP Available option. BOPF (Business Object Processing Framework) objects can hold validations and determinations written in ABAP; rule-heavy ones are candidates for BRFplus.
What BRFplus does A validation rejects a save when business conditions are not met; a determination fills fields automatically. Business users can then change thresholds without code.
Mini-example Rule on a custom Fiori order app: if PAYMENT_TERMS is "immediate" and ORDER_VALUE exceeds the credit limit table value for the customer group, return an error message "Credit limit exceeded for this group". The decision table holds the limit per group.
Because BRFplus runs inside the save transaction, keep functions small and avoid heavy database lookups to protect response time.

3.5 Master data checks (vendor, material, customer)

Aspect Detail
Status in SAP Standard in SAP Master Data Governance (MDG). An IBsolution tutorial describes a BRFplus function wired into the Business Data Toolset (BDT) so that when the user saves master data the rules run and validated data is returned.
What BRFplus does Rules such as "entry date must not be in the future", mandatory fields per country, allowed value combinations.
Mini-example Rule: if ENTRY_DATE is later than the current date, return error "Entry date is in the future". A second decision table lists required tax-number formats per country; the function returns an error message if the format check fails.
The same IBsolution article notes that BRFplus is not bound to a single SAP system type; it runs in S/4HANA, ERP and MDG.

3.6 Tax, account and posting determination

Aspect Detail
Status in SAP Custom option. Standard SAP uses its own procedures: tax procedures (tax codes), account determination tables for materials (OBYC) and for sales revenue (VKOA).
What BRFplus does BRFplus can hold company-specific logic that the standard tables cannot express, for example choosing a clearing account depending on several attributes at once.
Mini-example Context: GL_ACCOUNT_TYPE, COST_CENTER_GROUP, PROFIT_CENTER, DOC_TYPE. Decision table returns POSTING_KEY and TARGET_GL_ACCOUNT. A BAdI during posting calls the function and replaces the default account.
Posting logic has audit implications. Version everything, document test cases and involve finance before use.

3.7 Dunning, credit and ATP rule-based decisions

Aspect Detail
Status in SAP Custom option. Standard SAP uses a dunning procedure (with levels), credit management (FSCM) and the availability check (checking group/rule).
What BRFplus does Decision tables can add business rules around these, for example choose a dunning letter variant by customer segment and overdue days, or choose an ATP scope by product group.
Mini-example Context: CUSTOMER_SEGMENT, DAYS_OVERDUE, AMOUNT_OVERDUE. Decision table: SEGMENT=KEY and DAYS 1-15 -> Reminder email; SEGMENT=KEY and DAYS above 45 -> Account manager call task; other segments and DAYS above 30 -> Legal notice template.
Never use BRFplus to bypass a standard control (for example credit blocks) without explicit sign-off from the process owner.

PART 4 - Reference section

4.1 Checklist of settings before go-live

# Area Check Done?
1 Application Storage type is Customizing (or System for SAP content); package is transportable [ ]
2 Application Default versioning mode set (Enforced if Lean Trace is wanted) [ ]
3 Data objects All active; DDIC bindings set where value help is needed [ ]
4 Decision tables Rows ordered most-specific first; catch-all row present if intended [ ]
5 Decision tables Blank-cell behaviour proven in simulation [ ]
6 Rule set Assigned to the function; priority sensible; active [ ]
7 Function Signature matches what the caller supplies and expects [ ]
8 Testing All paper test cases simulated and signed off by the process owner [ ]
9 Testing Negative cases tested (no match, wrong case, empty input) [ ]
10 Transport "Transport Objects" ticked at every save; request released [ ]
11 Target system Objects activated; simulation repeated in QA with the same cases [ ]
12 OPD / Output Mgmt Output management active for the application object; OPD rows activated [ ]
13 Authorizations Business key users have only the roles they need; admin role restricted [ ]
14 Documentation Rule owner, change process and test cases recorded [ ]
15 Rollback Previous version known (versioning) or XML backup exported [ ]

4.2 Troubleshooting table

Symptom Likely cause What to do
Transaction BRFPLUS not found Older ECC below NetWeaver 7.02, or wrong tcode spelling Try BRF+; on NW 7.01 use FDT_WORKBENCH; otherwise plan an enhancement-package upgrade
Workbench opens blank or error Web Dynpro services inactive, or missing authorization Basis activates services; add SAP_BC_FDT_ADMINISTRATOR
Wrong row selected Row order or operator Reorder rows; check operators; use technical trace
No result returned No row matched and no default row Add a catch-all row
Function result empty but table works in isolation Rule action does not write to result Check the action in the rule
Trace missing Objects not versioned Set versioning to Enforced; re-save objects
Check in OPD: "form template not valid for output type" Combination not allowed (SAP KBA 2843926) Choose a valid template or remove the rule
Check in OPD: channel not supported (Cloud) Application does not support the channel Remove the rule; add channels only through supported configuration
Output not created in the business document New output management not active for the application, or no matching OPD row Check activation path; test with simulation; debug according to the SAP Community troubleshooting blog
Object type not offered in OPD Business object not supported (for example quality notification) See SAP KBA 3535356; use another output mechanism
Changes not in QA Objects not on a transport request Re-save with "Transport Objects" ticked
Import fails with missing dependency Dependent objects not transported Add them to the request or import first

4.3 Glossary

Term Meaning
Action A task BRFplus performs outside its own logic, such as sending a message or calling a method.
Application The container for BRFplus objects; carries package, storage type and default settings.
ATP Available-to-Promise: the availability check on sales orders.
BAdI Business Add-In: an SAP enhancement point in ABAP code.
BOPF Business Object Processing Framework: ABAP framework for business objects with validations and determinations.
BRFplus Business Rule Framework plus: SAP's rules framework in NetWeaver ABAP.
CDS Core Data Services: view technology in S/4HANA used for data models and extensions.
Catalog Optional grouping of BRFplus objects for navigation; never versioned.
Context Input data passed to a function.
Data object Element, structure or table carrying values in BRFplus.
DDIC ABAP Dictionary: the system's data definition repository.
Decision table Expression holding rows of conditions and results.
ECC SAP ERP Central Component: the generation of SAP ERP before S/4HANA.
EhP Enhancement Package: ECC upgrade package.
Expert Mode Workbench mode unlocking advanced features such as XML export/import.
Exclusive indicator In OPD tables: stops evaluation at this row.
Expression Computational unit returning a value (decision table, formula, lookup, etc.).
FDT Functional Data Types: technical prefix for the BRFplus repository.
Function Interface between calling code and rules; defines context and result.
IDoc Intermediate Document: SAP's standard electronic message format.
IMG / SPRO Implementation Guide: SAP customizing menu, opened with transaction SPRO.
Lean trace Trace that logs only steps contributing to the result; needs versioned objects.
MDG SAP Master Data Governance.
NAST Table of the classic condition-based output control.
NetWeaver SAP's technical platform for ABAP applications.
OPD Output Parameter Determination: transaction and app for maintaining output rules.
Result Output data returned by a function.
Rule Condition plus actions inside a rule set.
Rule set Collection of rules, executed by priority.
Simulation Workbench test of a function, expression or action with typed inputs.
Storage type Application property: Customizing, System or Local; decides transportability.
Technical trace Trace that logs every step regardless of contribution.
Transport Moving objects between SAP systems (development to production).
Versioning Keeping older states of objects, based on timestamps.
Web Dynpro ABAP UI technology in which the workbench is built.

4.4 Practice exercises with answer keys

Do these on paper first, then repeat them later in a real or training system.

Exercise A - Extend the decision table

Task. Add a new rule: for DOC_TYPE = RE (returns) in plant 1000, output type RETURN_SLIP, channel PRINT, language EN, copies 1. Where must the new row sit, and why? Which test case would prove that other rows are not affected?

Answer key. Insert the row above the catch-all row 5. Placing it before row 1 or 2 is fine because DOC_TYPE = RE differs from OR; placing it after row 5 would make it unreachable, because row 5 matches everything. Test with DOC_TYPE = RE, PLANT = 1000, CUST_COUNTRY = IN. Expected: RETURN_SLIP, PRINT, EN, 1. Then re-run T1 to T6 to check that nothing else changed.

Exercise B - Debug a wrong result

Task. The table has rows in this order: (1) DOC_TYPE blank, PLANT blank, CUST_COUNTRY blank -> PRINT; (2) DOC_TYPE OR, PLANT 1000 -> EMAIL. A tester says orders from plant 1000 always print. Why, and what is the fix?

Answer key. Row 1 matches everything and the first match wins, so row 2 is never reached. Fix: move the catch-all row to the bottom. A technical trace would show row 1 as the matched row.

Exercise C - Design the data objects

Task. Management wants the channel to depend on the customer's preferred contact method (EMAIL or PRINT) and on the order value (above 50000 requires PRINT with 2 copies regardless). List the context elements, the result elements and the first two rows of the table.

Answer key. Context: PREF_CONTACT, ORDER_VALUE (plus any existing ones). Result: OUTPUT_TYPE, CHANNEL, LANGUAGE, COPIES.

Row 1 (exclusive or first): ORDER_VALUE above 50000 -> CHANNEL = PRINT, COPIES = 2 (any PREF_CONTACT).

Row 2: PREF_CONTACT = EMAIL -> CHANNEL = EMAIL, COPIES = 1.

Then a catch-all PRINT row. The big-order row must be first so that it overrides the customer preference.

Exercise D - OPD thinking

Task. In OPD you add a row for Sales Document Type = ZOR with channel EMAIL and tick the exclusive indicator. A lower row says Sales Organization = 1000 -> channel PRINT. A ZOR order from sales organization 1000 is created. Which channel results, and why?

Answer key. EMAIL. The exclusive indicator stops the determination at the ZOR row, so the lower PRINT row is not applied.

Exercise E - Transport plan

Task. You built ZOUT_DET_APP in a local package ($TMP) and now want to move it to QA. What is the problem and what are your two options?

Answer key. Local objects (and a Local storage type) cannot be recorded on a transport request. Option 1: recreate or assign the application to a transportable package with Customizing storage type, then save with "Transport Objects" ticked. Option 2: in Expert Mode, export the application as XML and import it in QA with a Customizing request and Test Run first.

Exercise F - Choose the right tool

Task. For each requirement say whether BRFplus is the standard tool, an option, or the wrong choice: (1) which output form to print for a sales order, (2) the base price of a material, (3) validating a vendor tax number format in MDG, (4) the posting account for goods receipt.

Answer key. (1) Standard: S/4HANA output management through OPD. (2) Wrong choice for the base price: the standard condition technique handles it; BRFplus only for custom surcharges. (3) Standard in MDG validations. (4) Standard account determination (OBYC); BRFplus only as a custom enhancement if the standard table cannot express the rule.

Sources

Verified by web search on 29 October 2026. Several pages are older SAP documentation; always confirm against the documentation of your own release.

SAP Help and SAP Learning

SAP Knowledge Base Articles (SAP for Me login may be required)

SAP Community and practitioner articles

What could not be verified. Exact button labels, tab names, determination step names and the precise wording of dialogs differ between S/4HANA releases and could not be confirmed against a live system. These are flagged as [VARIES BY RELEASE] throughout, and every screen is an illustrative reconstruction, not an SAP screenshot. All names such as ZOUT_DET_APP, ORDER_CONF and PROFORMA are invented for this exercise.