Доброго дня, коллеги!
В рамках курса по СКД глубоко думающий и очевидно очень внимательный слушатель задал вопрос из серии “тонкие моменты работы с СКД, на которые большинство специалистов не обращают внимания”. Скорее всего и Вы не обратили внимание на особенность создания источника доступных настроек с помощью адреса СКД во временном хранилище. Тем интереснее будет “Вопрос дня” при прочтении!
Вопрос
Ответ
Добрый день! Разработчики платформы рекомендуют для управляемых форм применять такой способ – поместить схему во временное хранилище и инициализировать источник доступных настроек полученным адресом:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) СКД = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет"); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор); ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресВоВременномХранилище); КомпоновщикНастроек.Инициализировать(ИсточникНастроек); КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); КонецПроцедуры
В противном случае может возникать непонятное поведение системы, например, в пользовательском режиме список доступных полей отбора окажется пустым. Тут дело в том, что в управляемом приложении на клиенте схема компоновки данных отсутствует. Подробнее в статье на сайте ИТС – Редактирование настроек для не основной схемы компоновки данных.
Вопрос
Ответ
Да, это нужно запомнить. В управляемых формах нужно использовать создание источника доступных настроек именно для адреса схемы компоновки данных. Как этот нюанс объясняют разработчики платформы (https://partners.v8.1c.ru/forum/t/1245259/m/1246544):
“Источник на основании схемы нельзя использовать в управляемом приложении, т.к. на клиенте схема компоновки данных отсутствует.”
Лейбович Максим (1С, Москва)
Действительно, работа пользователя с компоновщиком настроек происходит на клиенте (например, настройка структуры отчета, отборов и т.д.). На клиенте схема компоновки данных недоступна. В Синтакс-помощнике смотрим доступность: сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер. Поэтому чтобы на клиенте корректно отображались доступные поля используется именно адрес во временном хранилище. А вот для обычной формы можно создавать источник доступных настроек для схемы компоновки данных. И это будет работать, поскольку в толстом клиенте схема компоновки данных доступна.
Профессиональная разработка отчетов в 1С 8.3 на СКД.
Добрый день, а что значит метод:
КомпоновщикНастроек.Инициализировать(ИсточникНастроек) ?
Зачем вообще нужна эта инициализация? Ведь мы просто можем взять Настройки из самой схемы и загрузить их через метод ЗагрузитьНастройки компоновщика настроек
Добрый день!
Этот метод “обучает” компоновщик настроек на основании схемы компоновки данных. “Рассказывает” компоновщику, какие поля из схемы доступны для выбора, для отборов, какие параметры есть в схеме.
Дело в том, что в самих настройках компоновки нет перечисленных выше сведений, а они нужны для того, чтобы пользователь мог настраивать вариант отчета.
Спасибо за ответ. Получается, если мы не собираемся настраивать вариант отчёта, то инициализировать доступные поля нам не обязательно?
Кстати, я заметил, что в Объекте НастройкиКомпоновкиДанных. есть свойство ДоступныеПоля(названиенастройки) и в самом этой же настройке.
Например: НастройкиКомпоновкиДанных.ДоступныеПоляПорядка и НастройкиКомпоновкиДанных.Порядок.ДоступныеПоляПорядка.
Они чем-то отличаются?
1. Пробуйте на практике, на Вашей реальной задаче, платформа может неявно инициализировать компоновщик, например, при работе в форме отчета.
2. Не обнаружил разницы между этими свойствами.