Ситуация такова:
Есть экран, который разработан ScreenPainter-ом. На нем поля. Поля на экране берутся из переменной типа структура. Эта структура объявлена в программе.
Проверка корректности введенных пользователем данных происходит с помощью конструкций chain - в PBO.
На некоторых копьютерах, если было неправильное значение поля(на уровне введенных символов, например в числовом поле - точка как разделитель добной части вместо запятой), то выдается сообщение "Неправильное числовое значение", Даже если потом значение было исправлено, происходит как бы зацикливание: покинуть поле уже невозможно- только по кнопке "Назад" на стандарной САПовской панели инструментов.
Из нескольких провернных компьютеров только один такой был обнаружен. Причем на нем же пытались войти в систему САП под другим логином - не помогло.
На других машинах все нормально - к примеру для числовых полей выдается сообщение " Ввод должен соответствовать форме ___.___~,___" и после исправления значения все благополучно работает дальше.
Т.е. даже разный текст сообщения при ошибке в одном и том же поле.
Пытались решить проблему такими методами:
1. Анализ настроек пользователя в САП и Windows - не помогло.
2. Ипользовали в качестве полей для экрана поля из структуры, объявленной в Соваре данных - помогло, но эти поля не проверялись в chain. Сделали предположение, что проблема именно в этих блоках. Отключили соответствующие блоки chain - помогло даже для тех полей, что были описаны в программе, а не СД. Сделали Вывод- что проблема не в том, где описана структура для полей, а именно в блоках Chain.
Но проверку все же нужно делать. Понятно, что можно ее реализовать посредством подпрограммы, но все же хотелось бы оставить стандартное поведение при ошибках.
Code:
PROCESS AFTER INPUT.
MODULE Exit_0200 AT EXIT-COMMAND.
...
chain.
field: RecoveryDoc-Oil_qnt , RecoveryDoc-Oil_massa.
module Check_oil. on chain-input.
endchain .
MODULE USER_COMMAND_0200.
....
MODULE Check_Oil INPUT.
perform Check_2DependFields
using RecoveryDoc-Oil_Qnt RecoveryDoc-Oil_Massa
'Поля "Доливка масла-кількість" та "Вага" заповнюютья тільки разом!'.
ENDMODULE.
form Check_2DependFields using fieldValue1 fieldValue2 MessageText.
if ( fieldValue1 is initial and
fieldValue2 is initial )
or ( fieldValue1 is not initial and
fieldValue2 is not initial ) .
return.
endif.
message MessageText type 'E' display like 'A'.
endForm.