При работе с Универсальным отчетом или отчетами, построенными на базе Построителя отчета и Системы компоновки данных (СКД), программисты часто сталкиваются с досадной проблемой: в списке доступных отборов поле (например, Номенклатура) отображается, но его невозможно «развернуть». Отсутствие значка «плюс» рядом с именем поля означает, что пользователь не может выбрать вложенные реквизиты, такие как Артикул, Производитель или Вес, для фильтрации данных.
В этой статье мы подробно разберем причины этой проблемы и рассмотрим методы ее решения, начиная от нюансов написания запросов и заканчивая тонкими настройками метаданных.
Проанализируем ситуацию, с которой столкнулся автор темы. Проблема заключалась в том, что запрос состоял из нескольких пакетов. В 1С при использовании Построителя отчета (который часто является ядром Универсального отчета) критически важно, как именно описаны поля в секции {ГДЕ ...}.
Если ваш запрос содержит несколько временных таблиц или пакетов, 1С должна четко понимать типизацию полей на каждом этапе. Если в финальном пакете вы указали поле для отбора, но в первом пакете (где данные только выбираются во временную таблицу) это поле не было подготовлено для работы построителя, «плюсик» может исчезнуть.
Решение: Убедитесь, что во всех частях запроса, где фигурирует целевое поле, корректно расставлены инструкции для построителя. Рассмотрим пример структуры запроса:
// Первый пакет запроса
ВЫБРАТЬ
Товары.Номенклатура КАК Номенклатура,
Товары.Склад КАК Склад
ПОМЕСТИТЬ ВТ_Данные
ИЗ
РегистрНакопления.ТоварыНаСкладах КАК Товары
{ГДЕ
Товары.Номенклатура.*,
Товары.Склад.*}
;
// Второй пакет запроса
ВЫБРАТЬ
ВТ_Данные.Номенклатура,
ВТ_Данные.Склад
ИЗ
ВТ_Данные КАК ВТ_Данные
{ГДЕ
ВТ_Данные.Номенклатура.*,
ВТ_Данные.Склад.*}
Обратите внимание на использование символа * (звездочка) после имени поля в фигурных скобках. Именно эта конструкция сообщает построителю, что данное поле является ссылочным и его реквизиты должны быть доступны для выбора в интерфейсе отчета.
Если отчет построен на Системе компоновки данных, причина может крыться в настройках набора данных. Рассмотрим шаги для проверки этого предположения:
Номенклатура).Если этот флаг установлен, система намеренно блокирует раскрытие «плюсика», чтобы упростить интерфейс или снизить нагрузку на сервер при формировании сложных запросов с множеством соединений через «точку».
Выясним еще одну важную деталь: иногда при сложных соединениях или использовании функций (например, ЕСТЬNULL) платформа 1С может потерять информацию о том, что поле является ссылкой на конкретный справочник. В этом случае поле воспринимается как имеющее тип ЛюбаяСсылка или вообще преобразуется в строку/число.
Чтобы принудительно вернуть полю его свойства, мы должны использовать оператор ВЫРАЗИТЬ. Проанализируем пример кода в запросе:
ВЫБРАТЬ
ВЫРАЗИТЬ(Таблица.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура
ИЗ
РегистрНакопления.Остатки КАК Таблица
{ГДЕ
(ВЫРАЗИТЬ(Таблица.Номенклатура КАК Справочник.Номенклатура)).* КАК Номенклатура}
Применение ВЫРАЗИТЬ гарантирует, что система компоновки «увидит» метаданные справочника Номенклатура и позволит пользователю обращаться к его реквизитам.
Если реквизит имеет составной тип (например, ДокументОснование, который может быть и Заказом, и Реализацией), система изначально не знает, чьи именно реквизиты показывать. В Универсальном отчете «плюсик» часто не появляется до тех пор, пока в колонке «Значение» отбора не будет выбран конкретный тип данных.
Разберем, как это работает:
Хотя разработчики часто заявляют о наличии полных прав, стоит проверить настройки RLS (Record Level Security). Если на уровне записей запрещено чтение связанных таблиц (например, запрещен доступ к справочнику ЕдиницыИзмерения, который является реквизитом Номенклатуры), система может скрыть возможность раскрытия полей, чтобы предотвратить ошибки исполнения запроса.
Также проверьте свойство «Быстрый выбор» в метаданных справочника. В некоторых режимах работы платформы специфические настройки выбора могут накладывать ограничения на отображение иерархии полей в стандартных формах отборов.
Иногда технически всё настроено верно, но пользователь продолжает видеть «старую» картину без возможности раскрытия реквизитов. Это происходит из-за сохранения старых настроек компоновки в кэше или в регистре сведений «Сохраненные настройки».
Посмотрим, как это исправить:
Резюме: В большинстве случаев проблема решается либо добавлением .* в фигурных скобках {ГДЕ ...} во всех пакетах запроса, либо проверкой ограничений вложенных полей в схеме СКД.