При работе с системой компоновки данных (СКД) часто возникает задача визуализации данных, например, вывода изображений товаров. Стандартное поведение СКД — привязывать вывод данных к каждой строке детальных записей. Это приводит к тому, что при группировке по Номенклатуре с детализацией по Характеристикам, изображение дублируется для каждой характеристики. Разберем, как изменить этот процесс и выводить картинку только один раз на уровне Номенклатуры.
Первая ошибка, с которой сталкиваются разработчики, — попытка поместить поле с картинкой в Ресурсы. Когда мы указываем Количество(ДвоичныеДанныеФайла), СКД пытается вычислить значение для каждой строки группировки. В результате система воспринимает картинку как показатель, который должен быть рассчитан для каждой характеристики, что нам не нужно. Также важно помнить, что СКД не всегда корректно обрабатывает прямую передачу двоичных данных, поэтому подход с вычислением через функции общего модуля является более надежным.
Чтобы успешно вывести изображение на верхнем уровне, выполним настройку по шагам:
Вычисляемые поля создадим новое поле, например, Картинка. В выражении укажем вызов функции общего модуля, которая вернет путь к файлу или само значение картинки:
РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(Номенклатура.Ссылка)
Путь к данным укажите Номенклатура.Картинка. Это позволит системе воспринимать картинку как реквизит справочника, а не как отдельный ресурс.Номенклатура перейдите в Выбранные поля и добавьте туда созданное поле Картинка. В дочерней группировке Характеристика это поле добавлять не нужно.Если при попытке добавления картинки в группировку вы получаете ошибку о запрете использования поля, проверьте следующие моменты:
Картинка не добавлено в список Ресурсы. Удаление его оттуда — критически важный шаг, так как ресурсы по умолчанию суммируются или считаются для каждой детальной записи.Поле картинки.Путь для номенклатуры указано корректное имя. Тогда СКД автоматически свяжет Номенклатура.Картинка как реквизит, и доступ к нему будет открыт на уровне группировок без ограничений.Если описанный метод требует слишком много доработок в коде общего модуля, вы можете воспользоваться следующими подходами:
Вы можете не выводить поле в структуру данных, а воспользоваться механизмом Условного оформления. В настройках СКД для группировки Номенклатура создайте новое условие. В оформлении выберите свойство Картинка. Это позволяет отвязать логику вывода от структуры детальных записей. Однако этот метод может быть менее гибким при сложном форматировании отчета.
Если требуется полный контроль над внешним видом, лучше всего создать Макет группировки. В редакторе макета вы можете нарисовать ячейку, вставить в нее область для картинки и жестко привязать ее к полю данных. Этот способ является наиболее профессиональным для верстки печатных форм и отчетов, так как он гарантирует, что изображение появится строго в одной ячейке, определенной вами в макете, независимо от количества характеристик в детальных записях.
Применяя данные подходы, вы сможете избавиться от дублирования изображений и добиться желаемого отображения отчета в 1С. Основной принцип заключается в разделении данных на группировочные поля и показатели, а также в правильной настройке области вывода в структуре отчета.