В процессе разработки отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда стандартные поля метаданных ведут себя непредсказуемо. Типичный пример — работа в конфигурациях уровня 1С:ERP, Комплексная автоматизация или Управление торговлей 11, где логика отображения данных тесно завязана на функциональные опции. Разберем ситуацию, когда функциональная опция Использовать партнеров и контрагентов отключена, и нам необходимо вывести поле Контрагент в отборы отчета, но система упорно подставляет технический заголовок Ссылка.
Проанализируем причину такого поведения системы. Когда в настройках конфигурации отключена определенная функциональная опция, связанные с ней поля в типовых объектах (например, в документе ЗаказКлиента) становятся невидимыми для механизмов платформы на уровне метаданных. Если мы пытаемся «обойти» это ограничение, присоединяя справочник Контрагенты через ЛЕВОЕ СОЕДИНЕНИЕ в тексте запроса СКД, система видит это поле как простую ссылку на объект. Поскольку связь с метаданными через функциональную опцию разорвана, СКД не подтягивает стандартный синоним и заменяет его системным наименованием Ссылка.
Рассмотрим подробнее несколько способов решения этой задачи, от простых манипуляций с заголовками до изменения структуры запроса.
Самый правильный и надежный метод — принудительно задать текст, который должен отображаться в интерфейсе пользователя, непосредственно в описании набора данных. Многие путают настройку заголовка в наборе данных с установкой псевдонима в запросе или представлением в отборе. Выясним разницу.
КонтрагентСсылка или Контрагенты.Ссылка).Контрагент.Контрагент.После этого, даже если функциональная опция отключена, СКД будет использовать ваш текст в качестве основного названия поля во всех элементах настроек, включая отборы.
Иногда изменение заголовка в наборе данных не срабатывает для уже созданных элементов отбора в настройках. В этом случае нам поможет детальная настройка самого элемента пользовательских настроек. Рассмотрим, как это сделать правильно, чтобы не потерять поле ввода значения.
Контрагент.Внимание: не путайте это с контекстным меню «Установить представление». Если вы используете «Установить представление», система заменит всю строку условия (например, Контрагент Равно "ООО Ромашка") на ваш текст, и пользователь действительно потеряет возможность выбирать значение, так как поле ввода исчезнет. Использование именно Заголовка в свойствах элемента сохраняет функциональность выбора значения.
Если поле все равно отображается некорректно или система «теряет» кнопку выбора (три точки), проанализируем настройки типов. Когда поле формируется сложным соединением, СКД может определить его тип как Произвольный или просто ЛюбаяСсылка.
Чтобы восстановить корректный интерфейс выбора в отборе, выполним следующие шаги:
СправочникСсылка.Контрагенты.Это принудительно заставит платформу отрисовать стандартное поле выбора для справочника контрагентов, даже если по логике метаданных это поле «скрыто» функциональной опцией.
Если стандартный механизм отборов ведет себя нестабильно из-за ограничений конфигурации, мы можем использовать параметры данных. Параметры более «жестко» контролируются разработчиком и меньше зависят от автоматических представлений СКД.
Посмотрим на пример реализации такого подхода в тексте запроса:
ВЫБРАТЬ
ЗаказКлиента.Ссылка КАК Заказ,
ЗаказКлиента.СуммаДокумента КАК Сумма,
Контрагенты.Ссылка КАК Контрагент
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО ЗаказКлиента.Контрагент = Контрагенты.Ссылка
ГДЕ
(&КонтрагентОтбор = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ИЛИ Контрагенты.Ссылка = &КонтрагентОтбор)
Для реализации этого метода выполним действия:
КонтрагентОтбор.СправочникСсылка.Контрагенты.Контрагент.Такой подход гарантирует, что на форме всегда будет поле с нужным заголовком и возможностью выбора, независимо от состояния функциональных опций системы.
Выясним причину, по которой иногда ручные настройки заголовков сбрасываются. Это часто связано с включенным флажком Автозаполнение в наборе данных запроса. Если флаг установлен, СКД при каждом изменении запроса пытается обновить список доступных полей, опираясь на метаданные. При выключенной функциональной опции «автозаполнение» видит поле как неактуальное или системное.
Если вы столкнулись с тем, что настройки «слетают», попробуйте снять флаг Автозаполнение и настроить поля вручную. Это потребует больше времени, так как нужно будет самостоятельно добавить все нужные поля в список Поля набора данных, но зато обеспечит полный контроль над заголовками и видимостью.
Подводя итог, отметим, что наиболее эффективным и «чистым» методом является сочетание Способа 1 (Заголовок в наборе данных) и Способа 3 (Явное указание типа). Это позволяет сохранить стандартный механизм отборов СКД, обеспечив при этом дружелюбный интерфейс для конечного пользователя.