VALUE CHECK дополнение используется когда необходимо удостоверится в том что значения введенные пользователем для параметра есть либо фиксированных значениях домена, либо если указываем на внешний ключ, они присутствуют в таблице. Однако, когда речь заходит о нескольких параметрах, есть некоторая особенность, которая и будет рассмотрена далее.
Рассмотрим пример:
1 2 3 4 5 6 7 |
PROGRAM zvalue_check_test. PARAMETERS: p_carr TYPE sbook-carrid VALUE CHECK. START-OF-SELECTION. WRITE 'Checked'. |
В результате появляется возможность выбора значений:
А при попытке указать не верное значение, система выдаст ошибку:
Предположим мы захотели указать кроме авиакомпании еще и номер авиасообщения и переделали код следующим образом:
1 2 3 4 5 6 7 8 |
PROGRAM zvalue_check_test. PARAMETERS: p_carr TYPE sbook-carrid VALUE CHECK, p_conn TYPE sbook-connid VALUE CHECK. START-OF-SELECTION. WRITE 'Checked'. |
Как и ранее выбор работает замечательно, указываем номер авиасообщения, на экран автоматически выводится код авиакомпании:
Однако при проверке указанных значений, несмотря на то что они есть в базе данных, система выдаст ошибку:
Почему так происходит можно посмотреть в коде 1000 экрана который генерируется автоматически:
Как можно убедится, для поля с номером авиасообщения, значение авиакомпании система пытается получить из структуры SBOOK, которой нет в нашей программе, исправим наш код:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PROGRAM zvalue_check_test. TABLES: sbook. PARAMETERS: p_carr TYPE sbook-carrid VALUE CHECK, p_conn TYPE sbook-connid VALUE CHECK. AT SELECTION-SCREEN ON p_carr. sbook-carrid = p_carr. START-OF-SELECTION. WRITE 'Checked'. |
В результате получим работоспособную проверку по обоим полям.
Nice explanation and clean site.. Good for ABAPers..
Regards,
Raju
Thanks!