Имя: Пароль:
1C
1С v8
Обработчик ПередСохранениемЗначений в модальном окне: баг или фича?
0 Steini
 
18.09.15
14:11
Платформа 8.2.19.130 обычные формы.

Есть обработчик ПередСохранениемЗначений(Отказ), в котором программист может настроить сохранение особых пользовательских настроек. В СП сказано, что можно отключить сохранение в каком-нибудь случае, установив Отказ = Истина.

Однако, если форма вызвана модально, то при установке Отказ = Истина в этом обработчике, Отказ устанавливается и во всех последующих обработчиках, и форма не закроется никогда.

Тут как бы СП не наврал, значения действительно не сохраняются, но и работать дальше невозможно =)

Опытные дядьки, подскажите, пожалуйста, это старый баг или в этом какая-то особенная логика (в том, что в модальном случае переменная Отказ - это не локальная переменная обработчика ПередСохранениемЗначений, а глобальная переменная, которая "путешествует" во все последующие обработчики)?
1 aleks_default
 
18.09.15
14:26
ну как бы логично, что отказ в данном случае это отказ в закрытии формы, а не в сохранении значений.
может в СП ошибка в описании
2 Steini
 
18.09.15
14:28
(1) в немодальном режиме отказ - это именно отказ от сохранения, а не от закрытия
3 aleks_default
 
18.09.15
14:30
в 8.3 1с отказывается от модальных вызовов, вот и решили забить на этот небольшой косячок
4 Nuobu
 
18.09.15
14:31
(3) От которого не закрывается 1С и пользователю нужно его закрывать из командной строки.
5 Steini
 
18.09.15
14:44
В немодальном случае, однако, такое поведение тоже повторяется.

С (1) в том, что это логично, не соглашусь.
Остается: либо баг, на который всем пофигу, либо некорректная формулировка в СП (в СП как раз написано так, как должно быть по логике).

Способы обхода этой неприятной вещи - использовать функции СохранитьЗначение() и ВосстановитьЗначение()
Некошерность способа заключается в том, что галочку "Сохранять значения" убирать нельзя, и получается, что форма по своему стандартному механизму сохраняет что-то, а Вы потом поверх этой работы варварски переписываете восстановленные значения в указанных выше обработчиках так, как нужно.
Ошибка? Это не ошибка, это системная функция.