Почему не выводится колонка в отчете СКД, если она есть в запросе?

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

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

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

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

Проанализируем работу системы в типовых конфигурациях (УТ 11, ERP, КА). Многие реквизиты документов привязаны к функциональным опциям (ФО). Если в настройках программы отключена какая-либо возможность (например, «Обособленное обеспечение»), то платформа автоматически скрывает связанные с ней поля везде: в формах, в списках и в отчетах СКД.

Рассмотрим, что нужно проверить:

  1. Выясним, привязано ли поле (например, Обособленно) к какой-либо функциональной опции в дереве метаданных.
  2. Проверим состояние этой опции в режиме «1С:Предприятие». Если функционал не используется, СКД не выведет поле, даже если оно явно указано в тексте запроса.
  3. Если поле необходимо вывести вопреки ФО, можно попробовать убрать привязку поля к ФО в свойствах метаданных (не рекомендуется для типовых решений) или использовать вычисляемое поле.

Причина 2. Ограничения на уровне набора данных СКД

Иногда причина кроется в настройках самого набора данных внутри схемы (в том числе когда действует правило СКД: нет данных — нет столбцов). Перейдем на закладку «Наборы данных» и внимательно изучим таблицу полей. Разберем важные колонки:

Посмотрим на пример правильного оформления секции выбора в тексте запроса при отключенном автозаполнении:


ВЫБРАТЬ
    Заказ.Ссылка КАК Ссылка,
    Заказ.Обособленно КАК Обособленно
{ВЫБРАТЬ
    Ссылка.*,
    Обособленно}
ИЗ
    Документ.ЗаказКлиента КАК Заказ

Причина 3. Кэширование формы и настроек компоновщика

Часто проблема возникает из-за того, что КомпоновщикНастроек, инициализированный в форме отчета, «запоминает» старую структуру схемы. Если вы сначала создали отчет, открыли его в режиме предприятия, а потом добавили новое поле в конфигураторе — форма может продолжать использовать старый кэш настроек.

Рассмотрим способы исправления:

  1. Сброс настроек: В режиме «1С:Предприятие» в форме отчета зайдите в меню «Еще» — «Установить стандартные настройки». Это заставит компоновщик перечитать схему.
  2. Программная инициализация: Если у отчета есть своя форма, убедимся, что при ее создании настройки загружаются актуально. Выясним, не прописан ли в коде жесткий захват настроек.
  3. Удаление формы: Попробуйте временно удалить созданную вручную форму и запустить отчет с автогенерируемой формой. Если поле появилось — проблема в коде или кэше старой формы.

Причина 4. Права доступа (RLS и метаданные)

Выясним причину через быструю проверку прав. Даже если вы работаете под администратором, СКД может накладывать ограничения, если поле ограничено на уровне прав доступа к реквизиту (право «Просмотр»).

Проанализируем ситуацию: консоль запросов часто игнорирует некоторые проверки прав, которые СКД выполняет принудительно. Убедитесь, что для роли пользователя (или в расширении, если поле добавлено там) установлены флаги «Чтение» и «Просмотр» для конкретного реквизита.

Причина 5. Типизация полей в запросе

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

Попробуем применить функцию ЕСТЬNULL или конструкцию ВЫБОР:


ВЫБРАТЬ
    ВЫБОР 
        КОГДА ЗаказКлиентаТовары.Обособленно ЕСТЬ NULL ТОГДА ЛОЖЬ 
        ИНАЧЕ ЗаказКлиентаТовары.Обособленно 
    КОНЕЦ КАК ОбособленноПоле
ИЗ
    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары

Решение «Радикальное»: Пересоздание отчета

Как показывает практика (и опыт участников обсуждения), если все вышеперечисленные методы не помогают, в файле отчета (или в базе данных) мог накопиться «мусорный» кэш. В этом случае помогает создание абсолютно нового объекта отчета:

  1. Создадим новый отчет в конфигураторе.
  2. Скопируем текст запроса из старой схемы в новую.
  3. Настроим поля и группировки заново (не копированием схемы, а именно созданием с нуля).
  4. Проверим результат. Часто этот метод оказывается самым быстрым, если вы потратили более 30 минут на поиск «невидимой» причины.

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

← На главную