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