Skip to Content
Technical Articles
Author's profile photo Peter Atkin

PM/CS: Configurable Task List – without Equipment Configuration


1. Introduction

In a traditional configurable general task list process you need to create many objects in SAP such as material configuration profile, task list configuration profile, equipment configuration etc.

This process can be simplified, but it does require some ABAP programming which can allow for more complicated selection scenarios.

The basic data creation process:

The basic data flow:

In this scenario we are going to extract a characteristic value from the equipment which will then be used to select specific operation(s) from the task list onto the PM/CS order. The scenario is loosely based on functionality defined in OSS Note 111394.

We need to ensure that our equipment already has a class assigned and in this example the characteristic value we are interested in is held in the pump capacity (C201) as shown below:


The following steps detail how to set up the data:


2. Classification

2.1 Define Class/Characteristic Data (CL02/CT04):

We first need to create a new DUMMY class (type 300) which we will use to carry the pump capacity data from the equipment into the variant configuration engine:

The DUMMY characteristic is mandatory when we come to set up the configuration profile which we will define in the following steps. Other than that, it plays no other part in the process.

Note that the C201 characteristics is the same characteristic used in the equipment.



3. Variant Configuration Function

3.1 Create a Function (CU65):

We now need to create a variant configuration function that can contain our ABAP code:


3.2 Create a Function (CU65): Add Characteristics

You now need to add the characteristics via the Characteristics button above. Remember that the DUMMY characteristic is mandatory even though we don’t need it.


3.3 Create a Function (CU65): Create Function Module

You now need to create the function module via the Function Module button above.

The function module has the following parameters:


3.4 Create a Function (CU65): ABAP Code

The following ABAP code is used:

The following ABAP code is used:


function pm_get_equip_data.
*"*"Local Interface:
*"      FAIL

* Based on code in OSS Note 111394

  data: lv_c201  type cuov_01-atflv,
        lv_equnr type equnr.

  field-symbols <fs_equnr> like equi-equnr.

* Initialize return values
  match[] = query[].

* Delete any import characteristics
  delete match where atcio eq 'I'.

* Mark entry as to 'work on'
  match-atcio = space.
  modify match transporting atcio where atcio eq 'O'.

  assign ('(SAPLCOIH)CAUFVD-EQUNR') to <fs_equnr>.
  if <fs_equnr> is assigned.

    gv_equnr = <fs_equnr>.

* Read classification data
    perform read_classification.

* Set values from classification
    perform set_characteristics tables match.


    lv_c201 = 0.

    call function 'CUOV_SET_FUNCTION_ARGUMENT'
        argument = 'C201'
        vtype    = 'NUM'
        num_val  = lv_c201
        match    = match.




function-pool zpm_get_equip_data.           "MESSAGE-ID ..

* INCLUDE LZPM_GET_EQUIP_DATAD...            " Local class definition

* key of functional location
data: gv_equnr like equi-equnr.

* characteristics (and values) from classification
data: begin of class_values occurs 0,
        atinn like ausp-atinn,
        atwrt like ausp-atwrt,
        atflv like ausp-atflv,
        atbez like cabnt-atbez,
        atfor like cabn-atfor,
      end of class_values.



*& Read classification data from functional location
form read_classification.

  data: iausp like ausp occurs 0 with header line,
        klart like ausp-klart value '002',
        objek like ausp-objek.
  data: t_cabn like cabn occurs 0 with header line.
  ranges: r_cabn for cabn-atinn.

  refresh class_values.

* read characteristics
* Only classes of classtype '002' are taken into account!
  objek = gv_equnr.
  call function 'CLSE_SELECT_AUSP'
      klart                     = '002'
      objek                     = objek
      t_ausp                    = iausp
      no_entry_found            = 1
      parameters_not_sufficient = 2
      others                    = 3.

  if sy-subrc eq 0.
    loop at iausp.
* fill internal table for classification values
      move-corresponding iausp to class_values.
      append class_values.

* get name and datatype of characteristics
    loop at iausp.
      r_cabn-sign = 'I'.
      r_cabn-option = 'EQ'.
      r_cabn-low = r_cabn-high = iausp-atinn.
      append r_cabn.
    call function 'CLSE_SELECT_CABN'
        in_cabn        = r_cabn
        t_cabn         = t_cabn
        no_entry_found = 1
        others         = 2.
    if sy-subrc ne 0.
      raise internal_error.

* complete classification data with name and datatype of
* the characteristics
    loop at t_cabn.
      class_values-atbez = t_cabn-atnam.
      class_values-atfor = t_cabn-atfor.
      modify class_values transporting atbez atfor
        where atinn eq t_cabn-atinn.

endform.                    " READ_CLASSIFICATION

*       Set configuration values from classification
*      <-> MATCH    export values for configuration
form set_characteristics tables match structure cuov_01.

  data: num_value like cuov_01-atflv,
        chr_value like cuov_01-atwrt.

  loop at match.
    loop at class_values
      where atbez eq match-varnam.
    if sy-subrc eq 0.
* characteristic belongs to classification
* assign data type
      match-atfor = class_values-atfor.
      case match-atfor.
        when 'NUM'.
          clear chr_value.
          num_value = class_values-atflv.
        when 'CHAR'.
          clear num_value.
          chr_value = class_values-atwrt.
* set configuration value
      perform set_function_argument tables match
                                    using match-varnam
* determine data type only
      perform get_data_type using match-varnam match-atfor.
      modify match.

endform.                    " SET_CHARACTERISTICS

*       Evaluate additional values for configuration
*      <-> MATCH    export values for configuration
form calculate_characteristics tables match structure cuov_01.

  data: loc_match like cuov_01 occurs 0 with header line.
  data: length like match-atflv,
        width  like match-atflv,
        area   like match-atflv.

*  loc_match[] = match[].
*  loop at match
*    where atcio is initial.
** all unassigned values
*    clear: match-atwrt, match-atflv.
*    case match-varnam.
** key of functional location
*        match-atwrt = gv_equnr.
*      when 'AREA'.
** calculate area
*        loop at loc_match.
*          case loc_match-varnam.
*            when 'LENGTH'.
*              length = loc_match-atflv.
*            when 'WIDTH'.
*              width = loc_match-atflv.
*          endcase.
*        endloop.
*        area = length * width.
*        match-atflv = area.
*      when others.
** no assignments
**       ...
*    endcase.

* set configuration value
    perform set_function_argument tables match
                                  using match-varnam
*  endloop.

endform.                    " CALCULATE_CHARACTERISTICS

*&      Form  GET_DATA_TYPE
*       Determine data type of a characteristic
*      -->  VARNAM   name of characteristic
*      <--  ATFOR    datatype
form get_data_type using value(varnam) like cuov_01-varnam
                         atfor like cuov_01-atfor.

  data: all_attributes like chardata,
        t1             like cha_descr occurs 0,
        t2             like chvals occurs 0,
        t3             like cha_vdescr occurs 0,
        t4             like cha_cl_typ occurs 0,
        t5             like cha_reftab occurs 0.

  clear atfor.
      characteristic               = varnam
      with_values                  = space
      with_value_descriptions      = space
      all_attributes               = all_attributes
      descriptions                 = t1
      allowed_values               = t2
      value_descriptions           = t3
      restrict_usage_in_class_type = t4
      reference_to_table           = t5
      others                       = 1.

  if sy-subrc eq 0.
    atfor = all_attributes-datatype.

endform.                    " GET_DATA_TYPE

*       Set value for configuration (internal table MATCH)
*      <-> MATCH   internal table for configuration values
*      --> VARNAM  name of characterisitc
*      --> ATFOR   datatype ('NUM' or 'CHAR')
*      --> ATWRT   character value
*      --> ATFLV   floatingpoint value
form set_function_argument tables match structure cuov_01
                           using value(varnam) like cuov_01-varnam
                                 value(atfor) like cuov_01-atfor
                                 value(atwrt) like cuov_01-atwrt
                                 value(atflv) like cuov_01-atflv.

* set configuration value dependent on datatype
  case atfor.
    when 'CHAR'.
      call function 'CUOV_SET_FUNCTION_ARGUMENT'
          argument                = varnam
          vtype                   = 'CHAR'
          sym_val                 = atwrt
          match                   = match
          existing_value_replaced = 0
          others                  = 1.
    when 'NUM'.
      call function 'CUOV_SET_FUNCTION_ARGUMENT'
          argument                = varnam
          vtype                   = 'NUM'
          num_val                 = atflv
          match                   = match
          existing_value_replaced = 0
          others                  = 1.

endform.                    " SET_FUNCTION_ARGUMENT


Return to the configuration function header and release, then save.


4. Variant Configuration Dependencies

4.1 Create an Procedure Dependency (CU01):

We are going to create an procedure dependency which we will use un the configuration profile in a subsequent step. We need this dependency as it allows us to link into a function module where the required ABAP code is stored:


C201 = $SELF.C201)

Return to the dependency header and release, then save.


5. Task List: Part 1

5.1 Create General Task List: (IA05):

Create your general task list and add the operations as required. Add the operations for the various variations of pump capacity (C201). We will add the dependencies at a later stage.

This is required now as we need the task list name before we can create the configuration profile in the following steps.



6. Configuration Profile

6.1 Create a Configuration Profile (CU41):

We now create a configuration profile and link all the objects together:



6.2 Create a Configuration Profile (CU41): Classification Assignment:

We assign the class we created at the beginning of this process. Make sure you enter a value in the DUMMY characteristic – remember that the system needs this data, but it is of no use to us.


6.3 Create a Configuration Profile (CU41): Dependency Assignment:

We now assign the procedure dependency we created in step section 4.1 above:


Return to the configuration profile header and release, then save.


7. Selection Condition Dependencies

7.1 Create a Selection Condition Dependencies (CU01):

We will now create two selection condition dependencies that will be used in the task list to select the relevant operations:


Return to the dependency header and release, then save.


8. Task List: Part 2

8.1 Assign Selection Condition Dependencies to Task List Operations:

The two operations below have been assigned to the selection condition dependencies created in the previous step.



9. Testing

9.1 Testing with Manually Assigned Task Lists (IW31/2):

Create or change an existing order and ensure that the relevant equipment is entered in the order header.

Select the configurable general task list via menu path: Extras->Task List Selection->General Task List:

A classification screen should now be displayed and the characteristic values copied from the equipment. You can change these if required.

Green-arrow back out of this screen and the order should now be updated with the relevant operations i.e. those operations that satisfy the object dependency parameters, or those operations with no object dependency assignments.


9.2 Testing with Maintenance Plans (IP10):

Create a maintenance plan for the equipment you identified above.

Schedule the plan via IP10 and release one of the calls.


The order should now be created with the relevant operations i.e. those operations that satisfy the object dependency parameters, or those operations with no object dependency assignments. Notice that the classification popup does not appear in this case.



10. Appendix

SAP Help:


In this series:


Here are some other useful blogs:

Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Dmitry Yakovlev
      Dmitry Yakovlev

      Hello, Peter!

      Great post, thank you!
      I am wondering if equipment works with Advanced Variant Configuration?
      I wanted to create new configuration for equipment, like described here:
      SAP Library - Plant Maintenance (PM)

      But got the error:

      Config. not possible for config. material <XXX> (reason: 6)
      Message no. IS069

      Maybe some specific customizing is required?


      Best regards,
      Dmitry Yakovlev.

      Author's profile photo Pete Atkin
      Pete Atkin

      Hi Dmitry,

      I'm not sure what you mean by "Advanced Variant Configuration"??

      Have a look at the standard flow for configurable task lists:


      Author's profile photo Dmitry Yakovlev
      Dmitry Yakovlev

      Thank you, Peter!

      In your linked blog, under the step:

      2.3 Create Configuration Profile for Material (CU41):

      If you drill-down to profile name and select Config initial screen, you will see

      processing mode = A  Advanced Variant Configuration (equal to table CUCO-PROC_MODE = A)

      As I can feel, such option (Advanced Variant Configuration) declared by SAP as a new mainstream.

      But with this option, when I try to assign Configurable material to Equipment at the Configuration data tab, the error  IS069 appears (all good with classic configuration).

      Best regards,
      Dmitry Yakovlev.

      Author's profile photo Pete Atkin
      Pete Atkin

      If it works, then stay with the "classic" option.

      Author's profile photo Dmitry Yakovlev
      Dmitry Yakovlev

      Thank you, Peter!


      As discovered, system takes in account Classic Processing mode only.

      So, I just created two Configuration profiles for one material:

      1- with Advanced variant configuration Processing mode

      2- with Classic Processing mode

      All works - after that its possible to assign config material to equipment and adjust the variant inside.

      Also similar note exist for IDOCs: 3217226 - Classic AVC profile not found in MATMAS Idoc when AVC profile is available


      Best regards,

      Dmitry Yakovlev.