Как в СКД сгруппировать данные по пустым значениям Плана Видов Характеристик (ПВХ)?

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Постановка проблемы: почему пустые значения ПВХ не группируются или не отображаются?

Мы, как разработчики, знаем, что в 1С значения дополнительных реквизитов (характеристик) хранятся не в самом объекте (например, Справочнике «Номенклатура»), а в специализированных регистрах сведений (например, «Значения свойств объектов»). Когда мы подключаем эти данные в наш набор данных СКД, мы обычно используем левое соединение с таблицами этих регистров.

Рассмотрим ситуацию: если для какого-либо элемента справочника не было задано значение определенной характеристики, то в регистре сведений «Значения свойств объектов» просто не будет соответствующей записи. При выполнении левого соединения с таким регистром, для строк, не имеющих пары, поля из таблицы регистра сведений будут заполнены значением NULL.

СКД по умолчанию может по-разному обрабатывать NULL-значения при группировке или фильтрации: либо игнорировать их, либо создавать отдельную группу без явного наименования, что не всегда удобно для пользователя. Наша задача — не просто отобразить эти строки, но и явно выделить их в отдельную, понятную пользователю группу, например, «Без категории» или «Не заполнено».

Решение проблемы: используем вычисляемое поле с функцией ЕСТЬNULL

Наиболее эффективным и гибким способом решения этой задачи является создание вычисляемого поля в СКД, которое будет явно обрабатывать NULL-значения и представлять их в удобном для группировки виде. Для этого мы воспользуемся функцией ЕСТЬNULL, доступной в языке запросов 1С и выражениях СКД, а также конструкцией ВЫБОР КОГДА ... ТОГДА ... ИНАЧЕ ... КОНЕЦ.

  1. Откроем схему компоновки данных (СКД).

    В конфигурации, где мы работаем с отчетом, перейдем к схеме компоновки данных.

  2. Создадим набор данных-запрос.

    Убедимся, что наш набор данных содержит поля, которые подключают значения характеристик. Если мы уже работаем с данными, где характеристика подключена (например, через виртуальную таблицу среза последних регистра сведений значений свойств), то у нас должно быть поле, представляющее значение ПВХ (например, Свойство.Значение или Характеристика.Значение).

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

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

    В этом примере ГруппаСвязанныхКомпаний является значением из ПВХ, которое мы хотим группировать. Именно это поле может содержать NULL.

  3. Добавим вычисляемое поле.

    Перейдем на вкладку «Вычисляемые поля» в нашей схеме компоновки данных. Создадим новое поле, присвоим ему понятное имя, например, ЗначениеПВХДляГруппировки.

  4. Определим выражение для вычисляемого поля.

    В качестве выражения для нашего нового поля мы используем следующую конструкцию:

    
    ВЫБОР
        КОГДА ЕСТЬNULL(ГруппаСвязанныхКомпаний, "") = ""
            ТОГДА "Без категории"
        ИНАЧЕ ГруппаСвязанныхКомпаний
    КОНЕЦ
    

    Рассмотрим это выражение подробнее:

    • ГруппаСвязанныхКомпаний: Это ссылка на наше поле из набора данных, которое содержит значение характеристики (ПВХ) и может быть NULL. В вашем случае это может быть ПВХ.Значение или Свойство.Значение.
    • ЕСТЬNULL(ГруппаСвязанныхКомпаний, ""): Функция ЕСТЬNULL предназначена для замены значения NULL на другое указанное значение. В данном случае, если ГруппаСвязанныхКомпаний имеет значение NULL, оно будет заменено на пустую строку (""). Если же ГруппаСвязанныхКомпаний имеет какое-либо значение (не NULL), то это значение и будет возвращено.
    • КОГДА ... = "" ТОГДА "Без категории": После применения ЕСТЬNULL мы проверяем, является ли результат пустой строкой. Если да, это означает, что исходное значение ПВХ было NULL. В этом случае мы явно присваиваем нашей группе строку "Без категории" (или любую другую, которую вы сочтете подходящей, например, "Не заполнено", "Отсутствует").
    • ИНАЧЕ ГруппаСвязанныхКомпаний: Если же результат ЕСТЬNULL не является пустой строкой, значит, исходное значение ПВХ было заполнено. В этом случае мы просто возвращаем оригинальное значение характеристики.

    Таким образом, наше вычисляемое поле ЗначениеПВХДляГруппировки всегда будет содержать либо реальное значение характеристики, либо строку "Без категории" для тех строк, где характеристика не была заполнена.

  5. Используем новое поле для группировки.

    Перейдем на вкладку «Настройки» СКД. В структуре отчета (обычно в «Детальные записи») добавим новый уровень группировки. В качестве поля для этой группировки выберем наше только что созданное вычисляемое поле ЗначениеПВХДляГруппировки.

    Теперь при формировании отчета СКД будет создавать отдельную группу для всех объектов, у которых значение выбранной характеристики не было заполнено, и назовет эту группу "Без категории". Все остальные объекты будут сгруппированы по их фактическим значениям характеристик.

Важные аспекты и дополнительные советы

Таким образом, используя вычисляемые поля и функцию ЕСТЬNULL, мы можем эффективно управлять отображением и группировкой данных по характеристикам в отчетах СКД, обеспечивая полноту и наглядность информации для конечных пользователей.

← На главную