Почему пропадает группировка или поле в СКД в режиме 1С:Предприятие и как это исправить?

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

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

В этой статье мы подробно проанализируем причины такого поведения платформы "1С:Предприятие" и разберем по шагам практические методы решения этой проблемы.

Причина 1. Влияние функциональных опций

Самая распространенная причина, по которой поле или группировка пропадает в пользовательском режиме — это привязка объекта метаданных или его реквизита к функциональной опции (ФО). Если в настройках системы (в константах или регистрах сведений) данная функциональная опция выключена, платформа автоматически исключает связанные с ней поля из схемы компоновки данных. Пользователь просто перестает их видеть.

Разберем, как исправить эту ситуацию:

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

Причина 2. Ограничения прав доступа на уровне записей (RLS) и роли

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

Проанализируем сопутствующие проблемы прав:

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

Посмотрим на пример явного приведения типов в запросе:


ВЫБРАТЬ
    ВЫРАЗИТЬ(Таблица.ДокументОснование КАК Документ.ЗаказПоставщику) КАК ЗаказПоставщику,
    Таблица.Склад КАК Склад
ИЗ
    РегистрНакопления.ЗаказыПоставщикам КАК Таблица

Причина 3. Оптимизатор СКД и вырезание полей из временных таблиц

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

Выясним, как заставить СКД всегда выбирать нужное поле:

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

Причина 4. Кэширование настроек и вариантов отчетов

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

Рассмотрим методы сброса кэша настроек:

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

Причина 5. Ограничения доступности полей на уровне схемы

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

Убедимся, что для нашего поля все эти флаги сняты, либо установим/снимем флаг "Автозаполнение", чтобы система обновила структуру доступных полей.

← На главную