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

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

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

Разбор архитектуры хранения дополнительных сведений

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

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

Пошаговое решение задачи соединения таблиц

Для вывода плотности (или любого другого дополнительного сведения) в отчет, нам необходимо соединить данные оборотов счета с регистром сведений. Разберем этот процесс по шагам.

  1. Подготовка основного запроса: Мы используем временную таблицу для хранения оборотов, чтобы в дальнейшем корректно выполнить левое соединение.
  2. Выполнение соединения: Используем конструкцию ЛЕВОЕ СОЕДИНЕНИЕ, чтобы не потерять данные, если для какого-то подразделения дополнительное сведение не заполнено.
  3. Условие связи: Указываем связь по объекту и по наименованию свойства.

Рассмотрим пример кода, который позволит нам получить нужные данные:


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

ВЫБРАТЬ 
    Плотность5.ПериодМесяц5, 
    Плотность5.Организация5, 
    Плотность5.СтруктурноеПодразделение5, 
    Плотность5.Плотность 
ИЗ 
    Плотность5 КАК Плотность5;

Почему возникают ошибки «Поле не найдено»?

Частая проблема при работе с временными таблицами в СКД — это несоответствие имен полей. Если вы в пакете запросов даете полю псевдоним (например, КАК Плотность), убедитесь, что в финальном запросе вы обращаетесь к этому же псевдониму.

Также важно помнить про следующие аспекты:

Рекомендации по отладке

Если запрос в СКД не возвращает данные, не пытайтесь угадать причину «на глаз». Всегда используйте консоль запросов:

  1. Скопируйте текст вашего запроса в консоль запросов 1С.
  2. Установите значения параметров (например, ваш МассивСчетов).
  3. Выполните запрос и проверьте, есть ли записи в колонке Плотность. Если колонка пустая, значит, условие связи РегДопы.Свойство.Наименование не находит соответствия в базе.
  4. Проверьте регистр ДополнительныеСведения вручную — существуют ли там записи для нужных объектов и правильно ли написано наименование свойства в базе данных (пробелы, регистр букв имеют значение).

Использование Наименование в запросе — это рабочий, но не самый идеальный вариант с точки зрения архитектуры. В долгосрочной перспективе, если вы часто используете одни и те же дополнительные сведения, лучше передавать ссылку на свойство через параметр запроса, предварительно найдя её в коде (например, ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("...")). Это сделает ваш код более устойчивым к изменениям в пользовательском интерфейсе.

Следование этим простым правилам позволит вам быстро и безболезненно интегрировать любые дополнительные данные в ваши отчеты СКД.

← На главную