[ Вопрос дня ] Почему в управляемых формах нужно использовать создание источника доступных настроек именно для адреса схемы компоновки данных?

Доброго дня, коллеги!
В рамках курса по СКД глубоко думающий и очевидно очень внимательный слушатель задал вопрос из серии “тонкие моменты работы с СКД, на которые большинство специалистов не обращают внимания”. Скорее всего и Вы не обратили внимание на особенность создания источника доступных настроек с помощью адреса СКД во временном хранилище. Тем интереснее будет “Вопрос дня” при прочтении!

Вопрос

Не совсем понятно, зачем помещать во временное хранилище схему компоновки данных в одном и том же серверном вызове? Вроде бы как КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)) нормально отрабатывает. Не пойму смысл.

Ответ

Добрый день! Разработчики платформы рекомендуют для управляемых форм применять такой способ – поместить схему во временное хранилище и инициализировать источник доступных настроек полученным адресом:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)   
    СКД = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор);   
    ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресВоВременномХранилище);
    КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
    КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);   
КонецПроцедуры

В противном случае может возникать непонятное поведение системы, например, в пользовательском режиме список доступных полей отбора окажется пустым. Тут дело в том, что в управляемом приложении на клиенте схема компоновки данных отсутствует. Подробнее в статье на сайте ИТС – Редактирование настроек для не основной схемы компоновки данных.

Вопрос

В моем пониманию временное хранилище – это переменная на сервере доступная по адресу и предназначена для хранения объектов доступных только на сервере или данных, которых нет смысла гонять с сервера на клиент туда-сюда, чтобы не нагружать канал и используется временное хранилище именно для межсерверных вызовов. В одном серверном вызове мы туда поместили данные, на клиент передали адрес и во втором серверном вызове по адресу используем. А так получается в одном контексте условно – переменная А = 1, мы эту переменную помещаем в хранилище и по адресу получаем значение 1, если это значение и так доступно нам, что и вызывает недоумение. Я извиняюсь за дотошность, но либо я чего-то недопонимаю по работе временного хранилище, либо это просто надо запомнить как аксиому для Компоновщика?

Ответ

Да, это нужно запомнить. В управляемых формах нужно использовать создание источника доступных настроек именно для адреса схемы компоновки данных. Как этот нюанс объясняют разработчики платформы (https://partners.v8.1c.ru/forum/t/1245259/m/1246544):

“Источник на основании схемы нельзя использовать в управляемом приложении, т.к. на клиенте схема компоновки данных отсутствует.”

Лейбович Максим (1С, Москва)

Действительно, работа пользователя с компоновщиком настроек происходит на клиенте (например, настройка структуры отчета, отборов и т.д.). На клиенте схема компоновки данных недоступна. В Синтакс-помощнике смотрим доступность: сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер. Поэтому чтобы на клиенте корректно отображались доступные поля используется именно адрес во временном хранилище. А вот для обычной формы можно создавать источник доступных настроек для схемы компоновки данных. И это будет работать, поскольку в толстом клиенте схема компоновки данных доступна.

Это пример разобранного вопроса из Мастер-группы курса
Профессиональная разработка отчетов в 1С 8.3 на СКД.

Описание курса и примеры видео

Комментарии / обсуждение (4):

  1. gusenica1337

    Добрый день, а что значит метод:
    КомпоновщикНастроек.Инициализировать(ИсточникНастроек) ?
    Зачем вообще нужна эта инициализация? Ведь мы просто можем взять Настройки из самой схемы и загрузить их через метод ЗагрузитьНастройки компоновщика настроек

    • Василий Ханевич

      Добрый день!
      Этот метод “обучает” компоновщик настроек на основании схемы компоновки данных. “Рассказывает” компоновщику, какие поля из схемы доступны для выбора, для отборов, какие параметры есть в схеме.
      Дело в том, что в самих настройках компоновки нет перечисленных выше сведений, а они нужны для того, чтобы пользователь мог настраивать вариант отчета.

      • gusenica1337

        Спасибо за ответ. Получается, если мы не собираемся настраивать вариант отчёта, то инициализировать доступные поля нам не обязательно?
        Кстати, я заметил, что в Объекте НастройкиКомпоновкиДанных. есть свойство ДоступныеПоля(названиенастройки) и в самом этой же настройке.
        Например: НастройкиКомпоновкиДанных.ДоступныеПоляПорядка и НастройкиКомпоновкиДанных.Порядок.ДоступныеПоляПорядка.
        Они чем-то отличаются?

        • Василий Ханевич

          1. Пробуйте на практике, на Вашей реальной задаче, платформа может неявно инициализировать компоновщик, например, при работе в форме отчета.

          2. Не обнаружил разницы между этими свойствами.

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

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

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.