Задача
…перед выполнением команды необходимо пользователю задать вопрос «Табличная часть будет очищена. Продолжить?» с вариантами ответа «Да», «Нет». При ответе пользователя «Да» очищать табличную часть, при ответе «Нет» прерывать выполнение команды. …
Реализация
Как обычно пишу код:
Процедура ВыполнитьКоманду(Команда) Ответ = Вопрос("Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; //Алгоритм заполнения КонецПроцедуры
При выполнении обработки в БП 3.0 получаю ошибку «Использование модальных окон в данном режиме запрещено».
Вспоминаем, что еще в январе в зазеркалье была написана статья по работе без модальных окон.
Правильная реализация
Из статьи узнаем, что теперь необходимо создавать новый системный объект «ОписаниеОповещения»
Описание объекта ОписаниеОповещения:
Используется для описания вызова процедуры программного модуля, который будет осуществлен при наступлении какого-либо ожидаемого события, такого как закрытие формы или немодального диалога.
Так же теперь нужно заменять операторы, которые вызывали модальные окна:
- Вопрос() ПоказатьВопрос();
- Предупреждение() ПоказатьПредупреждение();
- ВвестиЧисло() ПоказатьВводЧисла();
Подробную информацию по используемым объектам и методам можно посмотреть в справке 1С.
&НаКлиенте Процедура ВыполнитьКоманду(Команда) // Вызовем конструктор ОписаниеОповещения в котором: // ВопросПродолжитьЗавершитьВыполнениеКоманды - Имя экспортной процедуры модуля которая будет вызвана; // ЭтотОбъект - Программный модуль, процедура которого будет вызвана; // ДополнительныеПараметры - Значение любого типа, которое при вызове будет передано в указанную процедуру последним параметром. Не обязательный. ДополнительныеПараметры = Новый Структура("ПроизвольныйПараметр", "произвольное занчение параметра"); Оповещение = Новый ОписаниеОповещения("ВопросПродолжитьЗавершитьВыполнениеКоманды", ЭтотОбъект, ДополнительныеПараметры); // Вызовем процедуру глобального контекста "ПоказатьВопрос" в котором: // Оповещение - Содержит описание процедуры, которая будет вызвана после закрытия окна ввода значения // ТекстВопроса - Текст задаваемого вопроса; // Кнопки - Задает состав и текст кнопок диалога, а также, связанные с кнопками значения. ТекстВопроса = "Табличная часть будет очищена. Продолжить?"; Кнопки = РежимДиалогаВопрос.ДаНет ПоказатьВопрос(Оповещение, ТекстВопроса, Кнопки); КонецПроцедуры // ВопросПродолжитьЗавершитьВыполнениеКоманды - Экспортная процедура указанная в ОписанииОповещения, которая будет вызвана // после закрытия окна ввода значения со следующими параметрами: // РезультатВопроса - результат выбора пользователя: значение системного перечисления или значение, связанное с нажатой кнопкой. // В случае закрытия диалога по истечении времени - значение Таймаут, // ДополнительныеПараметры - значение, которое было указано при создании объекта ОписаниеОповещения. &НаКлиенте Процедура ВопросПродолжитьЗавершитьВыполнениеКоманды(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда //алгоритм заполнения Иначе Возврат; КонецЕсли; КонецПроцедуры
Источник: Зазеркалье 1С