Почему "Выбранные поля" не отображаются в пользовательских настройках отчета на СКД?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Нередко разработчики и пользователи сталкиваются с ситуацией, когда в отчете, построенном на Системе компоновки данных (СКД), определенные поля, которые видны в конфигураторе, пропадают из списка доступных для выбора в пользовательском режиме "1С:Предприятия". Такая проблема может значительно затруднить настройку отчетов и использование их полного функционала. Давайте рассмотрим подробнее основные причины и шаги для устранения этой неполадки.

Предположим, мы разрабатываем отчет, который должен выводить различные детали по реализации товаров и услуг, включая такой специфический реквизит, как КомментарийБухгалтера из документа реализации. В конфигураторе мы добавили это поле в схему компоновки данных, но при запуске отчета в пользовательском режиме, это поле не появляется в списке "Выбранные поля" или в доступных полях для добавления.

Влияние пользовательской формы отчета

Одной из наиболее неочевидных и при этом частых причин, по которой поля СКД могут не отображаться в пользовательских настройках, является наличие собственной формы отчета. Когда мы создаем собственный макет формы для отчета, мы берем на себя ответственность за вывод всех элементов управления и настроек.

Рассмотрим ситуацию: отчет имеет собственную форму, и эта форма не настроена должным образом для работы с универсальными настройками СКД. Стандартные формы отчета, которые генерируются платформой автоматически, включают в себя табличное поле, которое динамически отображает все доступные пользовательские настройки, включая "Выбранные поля", группировки, отборы и другие параметры. Если же мы используем свою форму, то необходимо вручную разместить на ней элемент управления, который будет отвечать за вывод этих настроек.

В случае, описанном в исходной теме, решение проблемы заключалось именно в удалении пользовательской формы отчета. После удаления формы, платформа начинает использовать стандартную форму, которая корректно отображает все доступные поля СКД. Это означает, что если вы создали свою форму, но не реализовали в ней вывод универсальных настроек СКД, то пользователь не сможет получить доступ к некоторым полям или даже ко всем настройкам.

Если нам необходимо сохранить собственную форму отчета, но при этом обеспечить доступ ко всем настройкам СКД, мы должны выполнить следующие шаги:

  1. На нашей форме отчета необходимо разместить элемент управления типа ПолеНастройкиКомпоновщикаДанных.
  2. В свойствах этого элемента управления указываем путь к данным, который связывает его с компоновщиком настроек отчета. Как правило, это может быть НастройкиКомпоновщикаДанных.НастройкиОтчета или аналогичный путь к объекту, который хранит текущие настройки СКД.
  3. Убедимся, что все необходимые обработчики событий для сохранения и загрузки настроек, а также для обновления отображения полей, реализованы в коде формы.

Этот подход требует более глубокого понимания взаимодействия формы с СКД и правильной настройки всех элементов. Однако, если такая кастомизированная форма не является критически необходимой, ее удаление и возврат к стандартному поведению платформы часто является самым быстрым и эффективным решением. Для реализации этой задачи можно использовать инструмент для стыковки элементов управляемой формы и пользовательских настроек СКД.

Ограничения прав доступа к составным типам данных

Одной из распространенных причин "пропажи" полей в пользовательском режиме являются ограничения прав доступа. Если поле имеет составной тип данных (например, может ссылаться на Документ.РеализацияТоваровУслуг, Документ.СчетНаОплатуПокупателю или Справочник.ЗаказыПокупателей), и у пользователя нет прав на просмотр хотя бы одного из типов, входящих в состав, то поле может быть полностью недоступно. Платформа 1С в целях безопасности скрывает такие поля.

Проанализируем пример из запроса, где мы выбираем КомментарийБухгалтера из временной таблицы ВТ_Реализация, которая формируется на основе Документ.РеализацияТоваровУслуг:


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

Здесь ВТ_Реализация.Ссылка является ссылкой на документ РеализацияТоваровУслуг. Если пользователь, запускающий отчет, не имеет прав на чтение или просмотр этого типа документа, то поле КомментарийБухгалтера может быть недоступно. Даже если мы явно выражаем его как СТРОКА(500), проблема может оставаться, поскольку источник данных (ВТ_Реализация.Ссылка) все еще является документом. Для обхода ограничений прав доступа при работе с отчетами можно использовать метод запуска отчета СКД в привилегированном режиме.

Для решения этой проблемы необходимо:

  1. Проверить права доступа пользователя к объектам конфигурации, которые используются в запросе для данного поля. Убедитесь, что у пользователя есть права "Чтение" и "Просмотр" (или соответствующие полные права) на все типы данных, которые могут быть связаны с полем.
  2. Иногда помогает предоставление роли на "просмотр" объекта, а не только на "чтение".
  3. Для полей составных типов, если мы хотим работать с конкретным типом, можно использовать функцию ВЫБРАТЬ(ВЫРАЗИТЬ(<Поле> КАК <КонкретныйТип>)) в запросе. Это может помочь платформе корректно определить доступность поля. Например, для поля ЗаказПокупателя, которое может быть составного типа, можно попробовать явно выразить его: ВЫРАЗИТЬ(ОсновнаяТаблица.ЗаказПокупателя КАК Документ.ЗаказПокупателя).

Кэширование настроек и перезапуск 1С

Как и во многих системах, в 1С активно используется кэширование для оптимизации производительности. Пользовательские настройки отчета, схема компоновки данных и другая метаинформация могут кэшироваться как на стороне сервера, так и на стороне клиентского приложения. Если вы внесли изменения в схему СКД или в код отчета, но не видите этих изменений в пользовательском режиме, причиной может быть устаревший кэш.

Для устранения этой проблемы попробуйте следующие действия:

  1. Перезапустить "1С:Предприятие". Это самый простой способ сбросить кэш клиентского приложения.
  2. Очистить кэш на сервере, если вы работаете в клиент-серверном варианте. Это можно сделать через консоль кластера серверов 1С или путем перезапуска рабочего процесса сервера 1С.
  3. Для конкретного отчета можно попробовать сбросить пользовательские настройки к стандартным. В режиме "1С:Предприятие" откройте отчет, перейдите в его настройки и найдите кнопку "Заменить настройки стандартной настройкой". Это действие удалит все пользовательские настройки и загрузит те, что заданы в конфигураторе.
  4. Иногда помогает очистка кэша всей базы. Это более радикальный метод, который подразумевает удаление файлов кэша из директорий пользователя на локальном компьютере (для файлового варианта) или очистку служебной информации в серверной базе.

Настройки схемы компоновки данных (СКД)

Не всегда проблема кроется в правах или формах. Иногда причина может быть прямо в самой схеме компоновки данных, которую мы создаем в конфигураторе.

  1. Ограничение доступности поля: В настройках схемы компоновки данных, на закладке "Наборы данных" -> "Поля", для каждого поля есть флажки, определяющие его участие в отчете: "Доступные поля", "Доступные поля группировки", "Доступные поля отбора", "Доступные поля сортировки". Если для поля не установлен флажок "Доступные поля", оно не будет отображаться в списке доступных для выбора в пользовательском режиме. Убедитесь, что этот флажок установлен для всех необходимых полей.
  2. Автозаполнение доступных полей: При создании набора данных типа "Запрос", по умолчанию установлен флажок "Автозаполнение". Он указывает системе самостоятельно сформировать состав доступных полей на основании текста запроса. Если этот флажок снят, а поле не добавлено вручную на закладку "Поля", оно может не отображаться. Проверьте состояние этого флажка.
  3. Проблемы с вычисляемыми полями: Если речь идет о вычисляемом поле, причины могут быть следующими:
    • Отсутствие поля в макете отчета (если используются макеты).
    • Некорректно заданный путь к данным или ошибка в выражении вычисляемого поля (например, синтаксическая ошибка или использование несуществующих полей).
    • Неверно указанный тип значения или формат поля.
    • Отсутствие поля в ресурсах отчета (если это поле должно использоваться для итоговых значений).
    • Установленные ограничения видимости для этого вычисляемого поля.
    Всегда внимательно проверяйте выражение вычисляемого поля, его тип и доступность используемых в нем полей.
  4. Использование фиксированного макета: В некоторых случаях, если в СКД используется фиксированный макет, он может игнорировать или не выводить выбранные пользователем поля, отдавая предпочтение структуре, заложенной в макете. Проверьте, не используется ли такой макет.

Функциональные опции конфигурации

В современных конфигурациях 1С активно используются функциональные опции. Эти опции позволяют включать или отключать определенные подсистемы, объекты или реквизиты в зависимости от потребностей пользователя. Если поле присутствует в наборах данных или вычисляемых полях СКД, но его использование отключено в функциональных опциях конфигурации, то в пользовательском режиме оно не будет отображаться среди доступных полей. В конструкторе схемы компоновки данных такое поле часто помечается красным крестиком, указывающим на его недоступность.

Для проверки и решения этой проблемы:

  1. Откройте конфигуратор и проверьте свойства реквизита, который не отображается. Убедитесь, что у него нет связи с функциональной опцией, которая в данный момент отключена.
  2. Перейдите в раздел "Общие" -> "Функциональные опции" в конфигураторе и проверьте, какие опции управляют видимостью этого поля или связанных с ним объектов.
  3. В режиме "1С:Предприятие" зайдите в "Администрирование" -> "Настройки программы" (или аналогичный раздел) и убедитесь, что соответствующие функциональные опции включены.

Ошибки в запросе и несовместимость настроек

Иногда причина может быть связана с менее очевидными ошибками:

  1. Ошибки в запросе: Проблема может быть связана с ошибками в запросе, например, если реквизит получается через точку (Регистратор.Дата) и не отображается, необходимо убедиться, что запрос корректен и все связанные объекты существуют и доступны. Используйте конструктор запросов для отладки и проверки.
  2. Несовместимость настроек после обновления: После обновления конфигурации на новый релиз, ранее сохраненные пользовательские настройки отчета могут стать несовместимыми с изменениями в схеме СКД. Это может приводить к ошибкам при открытии настроек отчета или к "пропаже" полей. В таких случаях рекомендуется сбросить пользовательские настройки отчета к стандартным, как было описано выше.
  3. Режим редактирования в "Составе пользовательских настроек": В "Составе пользовательских настроек" (доступном из формы настройки отчета) есть режимы редактирования "Быстрый доступ", "Обычный" и "Недоступный". Режим "Недоступный" предназначен для того, чтобы настройка не входила в состав быстрых настроек, однако она все равно может отображаться при открытии полных настроек отчета или через "Прочее" -> "Изменить вариант отчета". Убедитесь, что поле не попало случайно в "Недоступный" режим.

Как мы видим, проблема с отсутствием "Выбранных полей" в пользовательских настройках отчета СКД может иметь множество причин, от тонкостей настройки самой схемы компоновки данных до влияния пользовательских форм и прав доступа. Важно систематически подходить к диагностике: начать с проверки формы отчета, затем перейти к правам доступа, кэшу и, наконец, детально проанализировать настройки СКД и сам запрос. В большинстве случаев внимательный анализ и последовательное исключение возможных причин приводят к успешному решению.

← На главную