callback

Отказ от модальности

В связи со сложностями при выводе интерфейса платформы в веб-клиенте, фирма 1С настоятельно не рекомендует использовать модальные вызовы в конфигурации. Были разработаны безмодальные аналоги некоторых методов (с использование механизма CallBack) и даже добавлено несколько помощников перевода конфигурации на новую идеологию.

Признаюсь, мне лично новые правила дались достаточно нелегко. Привожу несколько готовых рецептов выполнения стандартных операций в режиме отказа от модальности.

Выбор значения из СпискаЗначений

Требуется предоставить пользователю выбор из заранее сформированного списка значений, а после обработать выбранное пользователем значение. Ранее использовался метод ВыбратьЭлемент();

    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("МассивКонтрагентов", МассивСсылокКонтрагентов);
    Оповещение = Новый ОписаниеОповещения("КонтрагентыОрганизацииПослеВыбора", ЭтотОбъект, СтруктураПараметров);
    ПоказатьВыборИзСписка(Оповещение, СписокВыбора);
    //...

&НаКлиенте
Процедура КонтрагентыОрганизацииПослеВыбора(ЗначениеВыбора, ДопПараметры) Экспорт
    Если ЗначениеВыбора <> Неопределено Тогда
        Для Каждого ТекМассивКонтрагентов Из ДопПараметры.МассивКонтрагентов Цикл

        КонецЦикла;
    Иначе
        // Пользователь отказался. Ничего не делаем.
    КонецЕсли;
КонецПроцедуры

Вопрос с подтверждением

Требуется вызвать диалог с кнопками Да и Нет, а после обработать выбранное значение. Ранее использовался метод Вопрос();

    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Счет", ВыбранноеИзмерение);
    ТекстВопроса = НСтр("ru = ' '");
    Режим = РежимДиалогаВопрос.ДаНет;
    Оповещение = Новый ОписаниеОповещения("ПодтверждениеЗаписиЛимитаЗавершение", ЭтаФорма, СтруктураПараметров);
    ПоказатьВопрос(Оповещение, ТекстВопроса, Режим, 0);
    //...
    
&НаКлиенте
Процедура ПодтверждениеЗаписиЛимитаЗавершение(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Нет Тогда
        // Пользователь отказался.
    Иначе       
        Если ЗначениеЗаполнено(Параметры.Счет) Тогда

        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Выбор из меню

Требуется вызвать альтернативное меню около некоего элемента формы, а после обработать выбранное значение. Ранее использовался метод ВыбратьИзМеню();

    Список = Новый СписокЗначений;
    Список.Добавить("Доставка",,Истина);
    Список.Добавить("Разгрузка",,Ложь);
    Список.Добавить("Картинка",,,БиблиотекаКартинок.Картинка1);
    Оповещение = Новый ОписаниеОповещения("ПослеВыбораИзМеню", , Параметры);
    ПоказатьВыборИзМеню(Оповещение, Список, Элементы.Кнопка1);
    //...

&НаКлиенте
Процедура ПослеВыбораИзМеню(ВыбранныйЭлемент, Параметры) Экспорт
    // Обработка выбранного элемента
КонецПроцедуры;

Открыть значение

Требуется открыть значение на клиенте. Ранее использовался метод ОткрытьЗначение();

ПоказатьЗначение(, Элемент.ТекущиеДанные.Ссылка);

Открыть файл на диске

Требуется вызвать диалог открытия файла на диске, а после обработать выбранный файл. Ранее использовался метод Выбрать();

    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбораФайла.Фильтр = "Графическая схема (*.grs)|*.grs|Все файлы (*.*)|*.*";
    ОписаниеОповещения = Новый ОписаниеОповещения("ВыборФайлаЗавершение", ЭтаФорма);
    ДиалогВыбораФайла.Показать(ОписаниеОповещения);

&НаКлиенте
Процедура ВыборФайлаЗавершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
    Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
        Если ВыбранноеЗначение.Количество() > 0 Тогда
            ПервыйЭлемент = ВыбранноеЗначение[0];
            ГрафСхема.Прочитать(ПервыйЭлемент);
        Иначе
            ТекстСообщения = НСтр("ru = 'Не удалось считать файл'");
            ОбщегоНазначенияУХ.СообщитьОбОшибке(ТекстСообщения);
        КонецЕсли;
    Иначе
        ТекстСообщения = НСтр("ru = 'Не удалось считать файл'");
        ОбщегоНазначенияУХ.СообщитьОбОшибке(ТекстСообщения);
    КонецЕсли;
КонецПроцедуры

Ввести число

Требуется организовать ввод числового значения. Ранее использовался метод ВвестиЧисло()

Оповещение = Новый ОписаниеОповещения("ПослеВводаКоличества", ЭтотОбъект);
ПоказатьВводЧисла(Оповещение, 1, "Введите количество", 10, 2);
//...

&НаКлиенте
Процедура ПослеВводаКоличества(Число, Параметры) Экспорт
Если НЕ Число = Неопределено Тогда
Сообщить(Строка(Число));
КонецЕсли;
КонецПроцедуры

Аналогично, можно организовать ввод строки и даты (методы ПоказатьВводДаты() и ПоказатьВводСтроки())

Ввести значение

Требуется организовать ввод значения произвольного типа. Ранее использовался метод ВвестиЗначение()

    Перем ВыбЗнач;
    Массив = Новый Массив;
    Массив.Добавить(Тип("Число"));
    Массив.Добавить(Тип("Строка"));
    Массив.Добавить(Тип("Дата"));
    КЧ = Новый КвалификаторыЧисла(12,2);
    КС = Новый КвалификаторыСтроки(20);
    КД = Новый КвалификаторыДаты(ЧастиДаты.Дата);
    Массив.Добавить(Тип("СправочникСсылка.Номенклатура"));
    ОписаниеТипов = Новый ОписаниеТипов(Массив, КЧ, КС, КД);
    Оповещение = Новый ОписаниеОповещения("ПослеВводаЗначения", ЭтаФорма, Параметры);
    ПоказатьВводЗначения(Оповещение, ВыбЗнач, "Введите значение", ОписаниеТипов);
    //...

&НаКлиенте
Процедура ПослеВводаЗначения(ВыбЗнач, Параметры) Экспорт
    Если ВыбЗнач<>Неопределено Тогда
        // обработка введенного значения
        Сообщить("Введенное значение: " + ВыбЗнач);
    КонецЕсли;
КонецПроцедуры

Открыть форму для выбора значения

Требуется открыть форму выбора для произвольного объекта, а после обработать выбранное пользователем значение. Ранее использовался метод ОткрытьФормуМоадально()

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ГруппаНоменклатуры", ГруппаНоменклатуры);
ОписаниеОЗакрытии = Новый ОписаниеОповещения("ВыборНоменклатуры_Завершение", ЭтотОбъект);
ОткрытьФорму("Справочники.Номенклатура.ФормаЭлемента", СтруктураПараметров, , , , , ОписаниеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

&НаКлиенте
Процедура ВыборНоменклатуры_Завершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
Если ВыбранноеЗначение <> Неопределено Тогда
//...
КонецЕсли;
КонецПроцедуры

 

Надеюсь, приведённые примеры помогут быстрее и безболезннее освоить новый стиль разработки.

Один комментарий на «“Отказ от модальности”»

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *