Отказ от модальности
В связи со сложностями при выводе интерфейса платформы в веб-клиенте, фирма 1С настоятельно не рекомендует использовать модальные вызовы в конфигурации. Были разработаны безмодальные аналоги некоторых методов (с использование механизма CallBack) и даже добавлено несколько помощников перевода конфигурации на новую идеологию.
Признаюсь, мне лично новые правила дались достаточно нелегко. Привожу несколько готовых рецептов выполнения стандартных операций в режиме отказа от модальности.
Выбор значения из СпискаЗначений
Требуется предоставить пользователю выбор из заранее сформированного списка значений, а после обработать выбранное пользователем значение. Ранее использовался метод ВыбратьЭлемент();
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("МассивКонтрагентов", МассивСсылокКонтрагентов);
Оповещение = Новый ОписаниеОповещения("КонтрагентыОрганизацииПослеВыбора", ЭтотОбъект, СтруктураПараметров);
ПоказатьВыборИзСписка(Оповещение, СписокВыбора);
//...
&НаКлиенте
Процедура КонтрагентыОрганизацииПослеВыбора(ЗначениеВыбора, ДопПараметры) Экспорт
Если ЗначениеВыбора <> Неопределено Тогда
Для Каждого ТекМассивКонтрагентов Из ДопПараметры.МассивКонтрагентов Цикл
КонецЦикла;
Иначе
// Пользователь отказался. Ничего не делаем.
КонецЕсли;
КонецПроцедуры
Вопрос с подтверждением
Требуется вызвать диалог с кнопками Да и Нет, а после обработать выбранное значение. Ранее использовался метод Вопрос();
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Счет", ВыбранноеИзмерение);
ТекстВопроса = НСтр("ru = ' '");
Режим = РежимДиалогаВопрос.ДаНет;
Оповещение = Новый ОписаниеОповещения("ПодтверждениеЗаписиЛимитаЗавершение", ЭтаФорма, СтруктураПараметров);
ПоказатьВопрос(Оповещение, ТекстВопроса, Режим, 0);
//...
&НаКлиенте
Процедура ПодтверждениеЗаписиЛимитаЗавершение(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Нет Тогда
// Пользователь отказался.
Иначе
Если ЗначениеЗаполнено(Параметры.Счет) Тогда
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Выбор из меню
Требуется вызвать альтернативное меню около некоего элемента формы, а после обработать выбранное значение. Ранее использовался метод ВыбратьИзМеню();
Список = Новый СписокЗначений;
Список.Добавить("Доставка",,Истина);
Список.Добавить("Разгрузка",,Ложь);
Список.Добавить("Картинка",,,БиблиотекаКартинок.Картинка1);
Оповещение = Новый ОписаниеОповещения("ПослеВыбораИзМеню", , Параметры);
ПоказатьВыборИзМеню(Оповещение, Список, Элементы.Кнопка1);
//...
&НаКлиенте
Процедура ПослеВыбораИзМеню(ВыбранныйЭлемент, Параметры) Экспорт
// Обработка выбранного элемента
КонецПроцедуры;
Открыть значение
Требуется открыть значение на клиенте. Ранее использовался метод ОткрытьЗначение();
ПоказатьЗначение(, Элемент.ТекущиеДанные.Ссылка);
Открыть файл на диске
Требуется вызвать диалог открытия файла на диске, а после обработать выбранный файл. Ранее использовался метод Выбрать();
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Графическая схема (*.grs)|*.grs|Все файлы (*.*)|*.*";
ОписаниеОповещения = Новый ОписаниеОповещения("ВыборФайлаЗавершение", ЭтаФорма);
ДиалогВыбораФайла.Показать(ОписаниеОповещения);
&НаКлиенте
Процедура ВыборФайлаЗавершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
Если ВыбранноеЗначение.Количество() > 0 Тогда
ПервыйЭлемент = ВыбранноеЗначение[0];
ГрафСхема.Прочитать(ПервыйЭлемент);
Иначе
ТекстСообщения = НСтр("ru = 'Не удалось считать файл'");
ОбщегоНазначенияУХ.СообщитьОбОшибке(ТекстСообщения);
КонецЕсли;
Иначе
ТекстСообщения = НСтр("ru = 'Не удалось считать файл'");
ОбщегоНазначенияУХ.СообщитьОбОшибке(ТекстСообщения);
КонецЕсли;
КонецПроцедуры
Ввести число
Требуется организовать ввод числового значения. Ранее использовался метод ВвестиЧисло()
Оповещение = Новый ОписаниеОповещения("ПослеВводаКоличества", ЭтотОбъект);
ПоказатьВводЧисла(Оповещение, 1, "Введите количество", 10, 2);
//...
&НаКлиенте
Процедура ПослеВводаКоличества(Число, Параметры) Экспорт
Если НЕ Число = Неопределено Тогда
Сообщить(Строка(Число));
КонецЕсли;
КонецПроцедуры
Аналогично, можно организовать ввод строки и даты (методы ПоказатьВводДаты() и ПоказатьВводСтроки())
Ввести значение
Требуется организовать ввод значения произвольного типа. Ранее использовался метод ВвестиЗначение()
Перем ВыбЗнач;
Массив = Новый Массив;
Массив.Добавить(Тип("Число"));
Массив.Добавить(Тип("Строка"));
Массив.Добавить(Тип("Дата"));
КЧ = Новый КвалификаторыЧисла(12,2);
КС = Новый КвалификаторыСтроки(20);
КД = Новый КвалификаторыДаты(ЧастиДаты.Дата);
Массив.Добавить(Тип("СправочникСсылка.Номенклатура"));
ОписаниеТипов = Новый ОписаниеТипов(Массив, КЧ, КС, КД);
Оповещение = Новый ОписаниеОповещения("ПослеВводаЗначения", ЭтаФорма, Параметры);
ПоказатьВводЗначения(Оповещение, ВыбЗнач, "Введите значение", ОписаниеТипов);
//...
&НаКлиенте
Процедура ПослеВводаЗначения(ВыбЗнач, Параметры) Экспорт
Если ВыбЗнач<>Неопределено Тогда
// обработка введенного значения
Сообщить("Введенное значение: " + ВыбЗнач);
КонецЕсли;
КонецПроцедуры
Открыть форму для выбора значения
Требуется открыть форму выбора для произвольного объекта, а после обработать выбранное пользователем значение. Ранее использовался метод ОткрытьФормуМоадально()
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ГруппаНоменклатуры", ГруппаНоменклатуры);
ОписаниеОЗакрытии = Новый ОписаниеОповещения("ВыборНоменклатуры_Завершение", ЭтотОбъект);
ОткрытьФорму("Справочники.Номенклатура.ФормаЭлемента", СтруктураПараметров, , , , , ОписаниеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
&НаКлиенте
Процедура ВыборНоменклатуры_Завершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
Если ВыбранноеЗначение <> Неопределено Тогда
//...
КонецЕсли;
КонецПроцедуры
Надеюсь, приведённые примеры помогут быстрее и безболезннее освоить новый стиль разработки.








[…] октября 2017 admin Режим отказа от модальности в 1С, помимо очевидных преимуществ в виде поддержки […]