• February 1, 2026
  • Kishore Thutaram
  • 0

Fetch Pricing Condition Records Using Dynamic Tables with ad-hoc where condition in ABAP

Business Scenario:

“Business Scenario: Fetch the condition records dynamically when there are multiple access sequence tables configured. Ex: pricing”

Use the below code at any place


type : BEGIN OF gty_field_map,
         atab_field TYPE string         
       END OF gty_field_map.
data : gt_field_map TYPE STANDARD TABLE OF gty_field_map WITH EMPTY KEY.
*^^* populate the mapping (use all known a-table FIELDS from condition tables
  gt_field_map = VALUE #(
    ( atab_field = 'VKORG' )
    ( atab_field = 'VTWEG' )  " example, adapt
    ( atab_field = 'MATNR' )
    ( atab_field = 'ALAND' )
    ( atab_field = 'LLAND' )   
  ).


*^^* Fetch all the A tables for conditions
    SELECT kolnr,kotabnr, kozgf FROM t682i
                INTO TABLE @DATA(lt_ktb)
              WHERE kappl = 'V'
              AND kvewe = 'A'
              AND kozgf = 'ZP00' "condition type
IF sy-subrc = 0.
loop at lt_data ASSIGNING FIELD-SYMBOL(). "Your data table to pass data in where condition
        LOOP AT lt_ktb ASSIGNING FIELD-SYMBOL(). 
"Conditions: Access Sequences (Fields)
                       SELECT * FROM t682z
                        INTO TABLE @DATA(lt_t682z)
                          WHERE kappl = 'V'
                        AND kvewe = 'A'
                        AND kozgf = @-kozgf
                        AND kolnr = @-kolnr.

      DATA(lt_where) = VALUE string_table( ).
          LOOP AT lt_t682z ASSIGNING FIELD-SYMBOL() 
             WHERE kozgf = -kozgf
              AND kolnr = -kolnr.
*^^* Dynamic construction of WHERE string based on ZIFNA fields:
            READ TABLE gt_field_map INTO DATA(ls_field_map) WITH KEY atab_field = -zifna.
            IF sy-subrc = 0.
              IF -kzini = 'X'.
                APPEND | { -zifna } = ' ' | TO lt_where.
              ELSE.
*^^*  Get the field value from your internal table
                ASSIGN COMPONENT ls_field_map-atab_field OF STRUCTURE  TO FIELD-SYMBOL().
                IF  IS ASSIGNED AND  IS NOT INITIAL.
                  APPEND | { -zifna } = '{  }' | TO lt_where.
                ENDIF.
              ENDIF.
            ENDIF.
          
          ENDLOOP.

*^^* Add always-valid field, e.g. valid-to-date
          APPEND | DATBI >= '{ sy-datum }' | TO lt_where.
          APPEND | KSCHL = '{ -kozgf }' | TO lt_where.

          DATA(lv_where) = COND string(
            WHEN lines( lt_where ) > 0
            THEN concat_lines_of( table = lt_where sep = ' AND ' )
            ELSE ''
          ).

          DATA(lv_tabname) = |A{ -kotabnr ALPHA = OUT }|. " e.g., 'A717'

*^^* Dynamic access: select knumh, kschl (as example) – adapt to A-table's fields
          SELECT SINGLE knumh, kschl  FROM (lv_tabname) INTO @ls_aresult
                                                        WHERE (lv_where).
          IF sy-subrc = 0.
            CLEAR ls_result.
            SELECT SINGLE  knumh, kschl, kbetr, konwa, loevm_ko   FROM  konp  WHERE knumh = @ls_aresult-knumh
                                                 INTO @ls_result.
            IF sy-subrc = 0 AND ls_result-loevm_ko NE 'X'.
             
              EXIT.     " Stop at first successful match in sequence
            ELSE.
              CLEAR ls_result.
              CONTINUE.
            ENDIF.
          ENDIF.
          CLEAR: lv_where, lv_tabname, lt_where.
        ENDLOOP.
       ENDLOOP.
    endif.
   
    

Kishore Thutaram

"SAP solution architect with a strong problem-solving mindset, sharing practical SAP S/4HANA and ABAP insights from real-world projects."

https://fiowelt.com