#abap #internal-tables
#abap #внутренние таблицы
Вопрос:
Я пытаюсь понять, есть ли способ сделать следующее
IF line_exists( company_accounts2[ saknr 0(2) = wa_company_accounts-saknr 0(wa_account_levels-num_of_digits) ] ).
ENDIF.
Но число 2 в saknr 0(2) с параметром и, в частности, с тем, который существует по другую сторону равенства (wa_account_levels-num_of_digits). Есть ли какой-нибудь способ сделать это другим способом? Потому что, если я заменю 2 на wa_account_levels-num_of_digits, я получаю сообщение об ошибке «Спецификация длины «WA_ACCOUNT_LEVELS-NUM_OF_DIGITS» не является числовой».
Заранее спасибо
PS. Что не работает, и это то, о чем я спрашиваю, ниже приведенного выше кода приведен следующий код:
IF line_exists( tab[ matnr 0(ls_mara-num_of_digits) = ls_mara-matnr 0(ls_mara-num_of_digits) ] ).
ЭТОТ КОД НЕ РАБОТАЕТ.
Комментарии:
1. Я не смог воспроизвести проблему с этой тестовой программой . Возможно
WA_ACCOUNT_LEVELS-NUM_OF_DIGITS
, это действительно не числовое число? Каков именно его тип?
Ответ №1:
Передайте левую часть равенства в виде текстовой переменной в круглых скобках, которая содержит имя переменной и ее смещение:
DATA(lv_text) = |saknr ({ wa_account_levels-num_of_digits })|.
IF line_exists( company_accounts2[ (lv_text) = wa_company_accounts-saknr 0(wa_account_levels-num_of_digits) ] ).
CONTINUE.
ELSE.
"make the APPEND
ENDIF.
Ответ №2:
Это работает отлично, для того, чего вы хотите достичь, у вас wa_account_levels-num_of_digits
должен быть примитивный тип i
( INT1
, INT2
, INT4
, INT8
в базе данных).
Вот рабочий образец MARA
SELECT * UP TO 5 ROWS
FROM mara
INTO TABLE @DATA(tab).
READ TABLE tab INTO DATA(ls_mara) INDEX 1.
IF line_exists( tab[ matnr 0(2) = ls_mara-matnr 0(ls_mara-stfak) ] ).
ENDIF.
ОБНОВЛЕНИЕ: динамическая спецификация компонентов таблицы для доступа на чтение невозможна:
Если тип данных компонентов символьный и плоский, к имени компонента (как в доступе к подстроке) может быть добавлено смещение / длина off(len) для доступа к подобластям компонента. Для off и len могут быть указаны только непосредственно указанные числа или константы.
Комментарии:
1. Я знаю, что этот код работает. Но я хочу параметризовать левую часть равенства.