Содержание:
1. Работа с модальными окнами в 1С
2. Объект ОписаниеОповещения. Устранение модальности для web клиента в 1С
3. Сравнение работы кода в режиме с модальностью окон в 1С и без нее
1. Работа с модальными окнами в 1С
Для разбора работы с модальными окнами в 1С требуется понимание того, чем эти окна отличаются от обычных окон в реализации 1С. Модальные окна в 1С - это такой тип окна, вызываемый в среде 1С, который блокирует остальной интерфейс 1С 8. Зачастую под такими окнами выступают диалоговые окна в 1С либо те формы, в которых продолжение работы не является возможным без его закрытия и возврата результата в окно владелица.
Модальные окна в 1С широко применялись в обычных формах в системе 1С 8.2, однако со временем развития платформы и перехода на управляемы формы их механика не подходила для корректной работы в тонком либо web клиенте в 1С. Однако потребность в том, что нужно в какой-то момент останавливать возможность работы пользователя осталась.
По сути, сам администратор 1С 8.3 на конкретном предприятии должен понимать нужно ли ему использовать модальность. Так, например, если в компании ведётся активная доработка системы, при этом не используются актуальные методики написания кода в 1С, а пользователи используют только толстый или тонкий клиент будет достаточно перевести работу режима использования модальности в режим «Использовать». Данную операцию выполнить весьма просто:
1) Нужно открыть конфигуратор в 1С
2) Если мы видим дерево конфигурации, то переходим к пункту 3, в противном случае выбираем меню:
Oткрыть конфигуратор в 1С
3) Щелкаем правой кнопкой мыши на голове конфигурации и выбираем пункт «Свойства», либо используем сочетание клавиш alt+enter.
Использование модальности окна в 1С
4) Режим использования модальности установить в «Использовать».
2. Объект ОписаниеОповещения. Устранение модальности для web клиента в 1С
Данный механизм поможет лишь в работе тонкого клиента в 1С, а для web клиента в 1С нужно устранить саму модальность в вызове кодом. Для этого нам понадобится тип ОбработкаОповещения в 1С.
ОписаниеОповещения – механизм платформы, который может указать метку в конфигурации, после которой продолжается выполнение кода. В параметрах данного механизма мы указываем обязательно экспортную клиентскую процедуру, которая будет вызвана при вызове. Другими словами, мы навешиваем процедуру на результат какого-либо действия: Открытие формы, предупреждения и т.д. Следует также учитывать, что в данную процедуру мы можем передавать и произвольные данные.
3. Сравнение работы кода в режиме с модальностью окон в 1С и без нее
Для более точного понимания сути работы предлагаю сравнить работу кода в режиме с модальностью и без нее.
Допустим нам нужно перезаполнить табличную часть и задать перед этим вопрос об очистке. В обычном режиме код будет выглядеть так:
&НаКлиенте
Процедура ЗаполнитьТоварыУслуги(Команда)
Результат = Вопрос(«Табличная часть услуг будет очищена. Продолжить?”, РежимДиалогаВопрос.ДаНет);
Если Результат = КодВозвратаДиалога.Нет Тогда
Возврат;
ИначеЕсли Результат = КодВозвратаДиалога.Да Тогда
//обработка кода
КонецЕсли;
КонецПроцедуры
В данном режиме произойдет блокирование интерфейса в 1С 8 до тех пор, пока открыто окно вопроса и код далее выполняться не будет. По сути окно открыто модально.
Чтобы уйти от данного режима, нужно использовать ОписаниеОповещения:
&НаКлиенте
Процедура ЗаполнитьТоварыУслуги (Команда)
Оповещение = Новый ОписаниеОповещения(“ЗаполнитьТоварыУслугиВопросЗавершение”, ЭтотОбъект);
ТекстВопроса = “Табличная часть услуг будет очищена. Продолжить?”;
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТоварыВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Нет Тогда
Возврат;
ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда
КонецЕсли;
КонецПроцедуры
В данном контексте мы создаем оповещение, которое вызовет процедуру при ответе на вопрос, при этом если после вопроса есть код - он будет выполнен, не ожидая закрытия формы вопроса.
Специалист компании «Кодерлайн»
Сергей Кулажевский