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