Имя: Пароль:
1C
1С v8
Отказ от модальности и ПередЗакрытием
,
0 Остап Сулейманович
 
05.03.15
12:28
Ситуация следующая :
&НаКлиенте
Процедура ОбработчикЗакрытияНепустойФормы(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        Возврат;
    КонецЕсли;
    ЭтаФорма.Закрыть();
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    Если Объект.ТоварныйСостав.Количество() > 0 Тогда
        Отказ = Истина;
        Обработчик = Новый ОписаниеОповещения("ОбработчикЗакрытияНепустойФормы", ЭтаФорма);
        Заголовок = "Операция не завершена
        |Отменить закрытие формы?";
        ПоказатьВопрос(Обработчик, Заголовок, РежимДиалогаВопрос.ДаНет, 20);
    КонецЕсли;
КонецПроцедуры

Если пользователь согласен с тем, что операцию нужно отменить и в диалоге нажимает "Нет" обработка из кода ЭтаФорма.Закрыть() уходит в обработчик ПередЗакрытием() и так по кругу.
Самый простой вариант таки почистить ТоварныйСостав, что б ПередЗакрытием не ставить отказ. Еще способ - выставить какой нибудь флаг и в ПередЗакрытием его проверять. Хотелось бы найти способ узнать как закрывается форма интерактивно или из кода. Это вообще как-то возможно?
1 lxndr
 
05.03.15
12:38
поставь для табличной части ТоварныйСостав
ПроверкаЗаполнения = Истина
2 Остап Сулейманович
 
05.03.15
12:40
(1) Вопрос не в том, какой флаг использовать. Вопрос - как сказать форме безусловно закрыться положив/поклав/забив на все проверки.
3 Остап Сулейманович
 
05.03.15
12:43
+ (2) В режиме с модальностью - все просто.
Спросили - получили ответ (не выходя из ПередЗакрытием) - выставили / не выставили отказ в зависимости от ответа.

В случае с отказом от модальности все решается за пределами ПередЗакрытием. И вот ему нужно как то сказать спрашивать или забить на все вопросы.
4 lxndr
 
05.03.15
13:23
заведи клиентскую переменную или реквизит формы. Возводи его при положительном ответе и при закрытии проверку отменяй при взведенном значении.
Хотя я щщщетаю все-равно это плохая идея.
5 Гёдза
 
05.03.15
13:25
флаг взводи
6 DrZombi
 
гуру
05.03.15
14:02
(0) Нуна
1. Позволить писать новый документ в любом виде, даже пустой
2. При проведении, начинать проверять ошибки заполнения документа, при этом не в модуле документа, а в форме. Т.е. Пользователь жамкает там "Провести" и вуаля, далее ты анализируешь в процедуре "ПередЗаписью"
3. Запретить проводить такой документ из Списка или еще откуда, т.е. нужен некий Булевский реквизит, который запретит проведение документа не из диалога.
4. Из УФ можно передать значение в Модуль документа, через "ПриЗаписиНаСервере", лишь в этот момент можно работать с параметром "ДополнительноеСвойство". Как пользоваться "Структурой", сам разберешься.
5. Все зависит от твоей фантазии и знаниях.
6. И прекращай проверять ошибки при простой записи документа или во время Проведения :)
7 Maniac
 
05.03.15
14:04
включи модальность и не парь мозг
8 Fish
 
05.03.15
14:05
(7) Модальность - это вчерашний день.
9 Остап Сулейманович
 
05.03.15
15:17
Всем спасибо. Ситуация решилась все же очисткой табличных частей. Но вопрос остался.
(6) Терки не за форму документа, а за форму обработки. Посему 1 - мимо, 2 - мимо, 3 - мимо, 4 - за флаг в каком либо виде уже упоминалось, 5 - жаль... хотелось внятного совета, 6 - опять же к обработке не относится.
(7) Хочется сделать как правильно. Как неправильно - оно само...
10 LordCMEPTb
 
05.03.15
15:44
(9) Скорее всего придется заводить булевую переменную на форме:
http://its.1c.ru/docs/v8nonmodal/
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший