В процессе разработки отчетов в 1С на системе компоновки данных (СКД) часто возникает необходимость вывести дополнительные сведения, добавленные пользователем через механизм БСП. Рассмотрим подробнее, как правильно связать данные бухгалтерского учета с таблицей ДополнительныеСведения, чтобы избежать распространенных ошибок.
В типовых конфигурациях 1С дополнительные сведения хранятся в одноименном РегистрСведений.ДополнительныеСведения. Это независимый регистр, где для каждого объекта 1С хранится пара «Свойство — Значение». Ключевой момент, на котором часто спотыкаются разработчики: обращение к свойству по его внутреннему Имя или по Наименование.
При создании дополнительных сведений в режиме «1С:Предприятие» поле Имя может не заполняться или иметь непредсказуемое значение, тогда как Наименование является строковым представлением свойства в интерфейсе. Как показала практика, при написании запроса для СКД наиболее надежным условием является обращение именно через Наименование.
Для вывода плотности (или любого другого дополнительного сведения) в отчет, нам необходимо соединить данные оборотов счета с регистром сведений. Разберем этот процесс по шагам.
ЛЕВОЕ СОЕДИНЕНИЕ, чтобы не потерять данные, если для какого-то подразделения дополнительное сведение не заполнено.Рассмотрим пример кода, который позволит нам получить нужные данные:
ВЫБРАТЬ
ХозрасчетныйОбороты5.ПериодМесяц КАК ПериодМесяц5,
ХозрасчетныйОбороты5.Организация КАК Организация5,
ХозрасчетныйОбороты5.СтруктурноеПодразделение КАК СтруктурноеПодразделение5,
РегДопы.Значение КАК Плотность
ПОМЕСТИТЬ Плотность5
ИЗ
РегистрБухгалтерии.Типовой.Обороты(, , Авто, Счет В ИЕРАРХИИ (&МассивСчетов), , , , ) КАК ХозрасчетныйОбороты5
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ДополнительныеСведения КАК РегДопы
ПО
РегДопы.Объект = ХозрасчетныйОбороты5.СтруктурноеПодразделение
И РегДопы.Свойство.Наименование = "ПлотностьДляОтчета"
СГРУППИРОВАТЬ ПО
ХозрасчетныйОбороты5.ПериодМесяц,
ХозрасчетныйОбороты5.Организация,
ХозрасчетныйОбороты5.СтруктурноеПодразделение,
РегДопы.Значение;
ВЫБРАТЬ
Плотность5.ПериодМесяц5,
Плотность5.Организация5,
Плотность5.СтруктурноеПодразделение5,
Плотность5.Плотность
ИЗ
Плотность5 КАК Плотность5;
Частая проблема при работе с временными таблицами в СКД — это несоответствие имен полей. Если вы в пакете запросов даете полю псевдоним (например, КАК Плотность), убедитесь, что в финальном запросе вы обращаетесь к этому же псевдониму.
Также важно помнить про следующие аспекты:
СГРУППИРОВАТЬ ПО, все неагрегированные поля должны быть включены в группировку.Объект в регистре сведений совпадает по типу с тем полем, к которому вы присоединяетесь (в данном случае — СтруктурноеПодразделение).Плотность.Если запрос в СКД не возвращает данные, не пытайтесь угадать причину «на глаз». Всегда используйте консоль запросов:
МассивСчетов).Плотность. Если колонка пустая, значит, условие связи РегДопы.Свойство.Наименование не находит соответствия в базе.ДополнительныеСведения вручную — существуют ли там записи для нужных объектов и правильно ли написано наименование свойства в базе данных (пробелы, регистр букв имеют значение).Использование Наименование в запросе — это рабочий, но не самый идеальный вариант с точки зрения архитектуры. В долгосрочной перспективе, если вы часто используете одни и те же дополнительные сведения, лучше передавать ссылку на свойство через параметр запроса, предварительно найдя её в коде (например, ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("...")). Это сделает ваш код более устойчивым к изменениям в пользовательском интерфейсе.
Следование этим простым правилам позволит вам быстро и безболезненно интегрировать любые дополнительные данные в ваши отчеты СКД.