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