Нередко разработчики и пользователи сталкиваются с ситуацией, когда в отчете, построенном на Системе компоновки данных (СКД), определенные поля, которые видны в конфигураторе, пропадают из списка доступных для выбора в пользовательском режиме "1С:Предприятия". Такая проблема может значительно затруднить настройку отчетов и использование их полного функционала. Давайте рассмотрим подробнее основные причины и шаги для устранения этой неполадки.
Предположим, мы разрабатываем отчет, который должен выводить различные детали по реализации товаров и услуг, включая такой специфический реквизит, как КомментарийБухгалтера из документа реализации. В конфигураторе мы добавили это поле в схему компоновки данных, но при запуске отчета в пользовательском режиме, это поле не появляется в списке "Выбранные поля" или в доступных полях для добавления.
Одной из наиболее неочевидных и при этом частых причин, по которой поля СКД могут не отображаться в пользовательских настройках, является наличие собственной формы отчета. Когда мы создаем собственный макет формы для отчета, мы берем на себя ответственность за вывод всех элементов управления и настроек.
Рассмотрим ситуацию: отчет имеет собственную форму, и эта форма не настроена должным образом для работы с универсальными настройками СКД. Стандартные формы отчета, которые генерируются платформой автоматически, включают в себя табличное поле, которое динамически отображает все доступные пользовательские настройки, включая "Выбранные поля", группировки, отборы и другие параметры. Если же мы используем свою форму, то необходимо вручную разместить на ней элемент управления, который будет отвечать за вывод этих настроек.
В случае, описанном в исходной теме, решение проблемы заключалось именно в удалении пользовательской формы отчета. После удаления формы, платформа начинает использовать стандартную форму, которая корректно отображает все доступные поля СКД. Это означает, что если вы создали свою форму, но не реализовали в ней вывод универсальных настроек СКД, то пользователь не сможет получить доступ к некоторым полям или даже ко всем настройкам.
Если нам необходимо сохранить собственную форму отчета, но при этом обеспечить доступ ко всем настройкам СКД, мы должны выполнить следующие шаги:
ПолеНастройкиКомпоновщикаДанных.НастройкиКомпоновщикаДанных.НастройкиОтчета или аналогичный путь к объекту, который хранит текущие настройки СКД.Этот подход требует более глубокого понимания взаимодействия формы с СКД и правильной настройки всех элементов. Однако, если такая кастомизированная форма не является критически необходимой, ее удаление и возврат к стандартному поведению платформы часто является самым быстрым и эффективным решением. Для реализации этой задачи можно использовать инструмент для стыковки элементов управляемой формы и пользовательских настроек СКД.
Одной из распространенных причин "пропажи" полей в пользовательском режиме являются ограничения прав доступа. Если поле имеет составной тип данных (например, может ссылаться на Документ.РеализацияТоваровУслуг, Документ.СчетНаОплатуПокупателю или Справочник.ЗаказыПокупателей), и у пользователя нет прав на просмотр хотя бы одного из типов, входящих в состав, то поле может быть полностью недоступно. Платформа 1С в целях безопасности скрывает такие поля.
Проанализируем пример из запроса, где мы выбираем КомментарийБухгалтера из временной таблицы ВТ_Реализация, которая формируется на основе Документ.РеализацияТоваровУслуг:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Ссылка,
РеализацияТоваровУслуг.КомментарийБухгалтера КАК КомментарийБухгалтера
ПОМЕСТИТЬ ВТ_Реализация
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
(ВЫРАЗИТЬ(РеализацияТоваровУслуг.КомментарийБухгалтера КАК СТРОКА(500))) <> ""
И РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ОсновнаяТаблица.ДоговорКонтрагента КАК ДоговорКонтрагента,
ОсновнаяТаблица.ЗаказПокупателя КАК ЗаказПокупателя,
ОсновнаяТаблица.СтатусПартии КАК СтатусПартии,
ОсновнаяТаблица.Номенклатура КАК Номенклатура,
ОсновнаяТаблица.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ОсновнаяТаблица.Цена КАК Цена,
ОсновнаяТаблица.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
ОсновнаяТаблица.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
ОсновнаяТаблица.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
ОсновнаяТаблица.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки,
ОсновнаяТаблица.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки,
ОсновнаяТаблица.НачальныйОстаток КАК НачальныйОстаток,
ОсновнаяТаблица.Приход КАК Приход,
ОсновнаяТаблица.Расход КАК Расход,
ОсновнаяТаблица.КонечныйОстаток КАК КонечныйОстаток,
ЕСТЬNULL(ОстаткиИтог.Остаток, 0) КАК ОстатокНаСкладе,
ОсновнаяТаблица.СуммаВзаиморасчетовНачальныйОстаток КАК СуммаВзаиморасчетовНачальныйОстаток,
ОсновнаяТаблица.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,
ОсновнаяТаблица.СуммаВзаиморасчетовПриход КАК СуммаВзаиморасчетовПриход,
ОсновнаяТаблица.СуммаВзаиморасчетовРасход КАК СуммаВзаиморасчетовРасход,
ОсновнаяТаблица.Номенклатура.ОтветственныйМенеджерЗаПокупки КАК ОтветственныйМенеджерЗаПокупки,
ВЫРАЗИТЬ(ВТ_Реализация.КомментарийБухгалтера КАК СТРОКА(500)) КАК КомментарийБухгалтера,
ВТ_Реализация.Ссылка КАК Ссылка
ИЗ
ОсновнаяТаблица КАК ОсновнаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиИтог КАК ОстаткиИтог
ПО ОсновнаяТаблица.ЗаказПокупателя.Дата = ОстаткиИтог.Дата
И ОсновнаяТаблица.Номенклатура = ОстаткиИтог.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Реализация КАК ВТ_Реализация
ПО ОсновнаяТаблица.ЗаказПокупателя.Ссылка = ВТ_Реализация.Ссылка.Сделка
И ОсновнаяТаблица.ДоговорКонтрагента = ВТ_Реализация.Ссылка.ДоговорКонтрагента
Здесь ВТ_Реализация.Ссылка является ссылкой на документ РеализацияТоваровУслуг. Если пользователь, запускающий отчет, не имеет прав на чтение или просмотр этого типа документа, то поле КомментарийБухгалтера может быть недоступно. Даже если мы явно выражаем его как СТРОКА(500), проблема может оставаться, поскольку источник данных (ВТ_Реализация.Ссылка) все еще является документом. Для обхода ограничений прав доступа при работе с отчетами можно использовать метод запуска отчета СКД в привилегированном режиме.
Для решения этой проблемы необходимо:
ВЫБРАТЬ(ВЫРАЗИТЬ(<Поле> КАК <КонкретныйТип>)) в запросе. Это может помочь платформе корректно определить доступность поля. Например, для поля ЗаказПокупателя, которое может быть составного типа, можно попробовать явно выразить его: ВЫРАЗИТЬ(ОсновнаяТаблица.ЗаказПокупателя КАК Документ.ЗаказПокупателя).Как и во многих системах, в 1С активно используется кэширование для оптимизации производительности. Пользовательские настройки отчета, схема компоновки данных и другая метаинформация могут кэшироваться как на стороне сервера, так и на стороне клиентского приложения. Если вы внесли изменения в схему СКД или в код отчета, но не видите этих изменений в пользовательском режиме, причиной может быть устаревший кэш.
Для устранения этой проблемы попробуйте следующие действия:
Не всегда проблема кроется в правах или формах. Иногда причина может быть прямо в самой схеме компоновки данных, которую мы создаем в конфигураторе.
В современных конфигурациях 1С активно используются функциональные опции. Эти опции позволяют включать или отключать определенные подсистемы, объекты или реквизиты в зависимости от потребностей пользователя. Если поле присутствует в наборах данных или вычисляемых полях СКД, но его использование отключено в функциональных опциях конфигурации, то в пользовательском режиме оно не будет отображаться среди доступных полей. В конструкторе схемы компоновки данных такое поле часто помечается красным крестиком, указывающим на его недоступность.
Для проверки и решения этой проблемы:
Иногда причина может быть связана с менее очевидными ошибками:
Регистратор.Дата) и не отображается, необходимо убедиться, что запрос корректен и все связанные объекты существуют и доступны. Используйте конструктор запросов для отладки и проверки.
Как мы видим, проблема с отсутствием "Выбранных полей" в пользовательских настройках отчета СКД может иметь множество причин, от тонкостей настройки самой схемы компоновки данных до влияния пользовательских форм и прав доступа. Важно систематически подходить к диагностике: начать с проверки формы отчета, затем перейти к правам доступа, кэшу и, наконец, детально проанализировать настройки СКД и сам запрос. В большинстве случаев внимательный анализ и последовательное исключение возможных причин приводят к успешному решению.