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