Как исправить ошибку компоновки макета «Поле не найдено» при работе с характеристиками в СКД?

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

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

Ошибка компоновки макета по причине: Поле не найдено "Подразделение.[Розничная точка]"

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

Причина возникновения ошибки

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

Когда вы добавляете характеристику объекта, СКД создает динамическое левое соединение к регистру сведений. Если компоновщик считает, что ключевое поле или измерение связи не является обязательным, он пропускает ветку виртуального соединения, из-за чего путь Объект.[ИмяСвойства] становится недоступным на этапе формирования макета.

Решение 1. Установка флага «Обязательное» для полей и измерений

Основное решение проблемы заключается в явном указании платформe, что используемые поля и измерения не должны исключаться при оптимизации запроса.

Проанализируем необходимые действия в конфигураторе:

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

Благодаря флагу Обязательное компоновщик СКД больше не будет исключать служебные измерения из соединения, и динамическое поле Подразделение.[ЗначениеСвойства] будет успешно скомпоновано.

Решение 2. Сброс пользовательских настроек отчета

Если в схему компоновки недавно вносились правки, но у пользователя сохранена старая структура вариантов отчета, компоновщик может пытаться применить старый вариант макета к новой схеме.

Разберем, как проверить этот вариант:

  1. Откроем отчет в режиме 1С:Предприятие.
  2. Перейдем в меню Еще (или кнопка «Настройка»).
  3. Выполним команду Установить стандартные настройки.
  4. Повторно сформируем отчет.

Решение 3. Явное приведение типов (оператор ВЫРАЗИТЬ)

Часто в регистре сведений ЗначенияСвойствОбъектов измерение Объект имеет составной тип данных. Из-за этого СКД не всегда корректно связывает справочник конкретного типа с измерением регистра.

Посмотрим на пример запроса для получения видов характеристик с явным приведением типов:


ВЫБРАТЬ
    СвойстваОбъектов.Ссылка КАК Свойство,
    СвойстваОбъектов.Наименование КАК Наименование,
    СвойстваОбъектов.ТипЗначения КАК ТипЗначения
ИЗ
    ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
ГДЕ
    СвойстваОбъектов.НазначениеСвойства = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Подразделения)
    И НЕ СвойстваОбъектов.ПометкаУдаления

А в запросе источников значений при получении данных из регистра примените ВЫРАЗИТЬ к полю Объект:


ВЫБРАТЬ
    ВЫРАЗИТЬ(ЗначенияСвойств.Объект КАК Справочник.Подразделения) КАК Подразделение,
    ЗначенияСвойств.Свойство КАК Свойство,
    ЗначенияСвойств.Значение КАК Значение
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств

Решение 4. Альтернативное решение через ЛЕВОЕ СОЕДИНЕНИЕ в запросе

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


ВЫБРАТЬ
    Подразделения.Ссылка КАК Подразделение,
    ЗначенияСвойств.Значение КАК РозничнаяТочка
ИЗ
    Справочник.Подразделения КАК Подразделения
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств
        ПО ЗначенияСвойств.Объект = Подразделения.Ссылка
        И ЗначенияСвойств.Свойство = &СвойствоРозничнаяТочка

Этот способ позволяет полностью контролировать формируемый SQL-запрос и избежать ошибок оптимизатора СКД при генерации макета.

← На главную