- 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.





















