Содержание:
1. Два подхода к объединению при работе в системе 1С: «Связь» и «Объединение»
2. Практический пример: строим отчет «План-факт продаж»
Система компоновки данных (СКД) в 1С — это гибкий инструмент для построения отчетов любой сложности. Одной из ключевых его возможностей является работа с несколькими источниками данных. Часто возникает задача, когда нужную информацию невозможно получить одним SQL-подобным запросом, так как данные лежат в разных, не связанных напрямую таблицах или регистрах. Классический пример — план-фактный анализ, где данные о планах и фактических продажах хранятся раздельно.
Для решения таких задач в СКД существует механизм объединения наборов данных, который позволяет «собрать» итоговый отчет из нескольких независимых запросов.
1. Два подхода к объединению при работе в системе 1С: «Связь» и «Объединение»
Важно понимать, что в СКД есть два принципиально разных способа свести данные из нескольких источников:
1. Связь наборов данных. Это аналог оператора JOIN в языке запросов. Он используется, чтобы обогатить данные одного набора полями из другого по какому-то общему измерению (например, к таблице продаж «присоединить» из справочника номенклатуры поле «Артикул»). Этот способ добавляет колонки.
2. Объединение наборов данных. Это аналог оператора UNION ALL. Он используется, чтобы сложить строки из разных наборов данных в одну общую таблицу. Этот способ добавляет строки.
Именно второй способ идеально подходит для задачи план-фактного анализа, и мы рассмотрим его подробно.
2. Практический пример: строим отчет «План-факт продаж»
Задача: Создать отчет, который по каждой номенклатуре покажет плановое количество, фактическое количество проданного товара и отклонение.
• Источник 1 (План): Регистр накопления «ПланыПродаж».
• Источник 2 (Факт): Регистр накопления «Продажи».
Шаг 1: Создание набора данных для «Факта»
В конструкторе СКД создаем первый Набор данных - Запрос. Назовем его ФактПродаж. Текст запроса будет получать данные о фактических продажах.
Ключевой момент здесь — мы сразу должны предусмотреть поля для плановых показателей, заполнив их значением NULL. Это необходимо, чтобы структура нашего запроса совпадала со структурой запроса по планам.
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК КоличествоФакт,
NULL КАК КоличествоПлан
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
Шаг 2: Создание набора данных для «Плана»
Аналогично создаем второй Набор данных - Запрос и называем его ПланПродаж. В нем мы получаем плановые показатели, а поля для факта заполняем NULL. Важно, чтобы псевдонимы полей (КАК ...) полностью совпадали с псевдонимами в первом запросе!
ВЫБРАТЬ
ПланыПродажОбороты.Номенклатура КАК Номенклатура,
NULL КАК КоличествоФакт,
ПланыПродажОбороты.КоличествоОборот КАК КоличествоПлан
ИЗ
РегистрНакопления.ПланыПродаж.Обороты КАК ПланыПродажОбороты
Теперь у нас есть два независимых источника с одинаковой структурой колонок: Номенклатура, КоличествоФакт, КоличествоПлан.
Шаг 3: Создание набора данных «Объединение»
Это кульминация. Мы создаем третий, главный набор данных.
1. Правой кнопкой мыши по ветке «Наборы данных» -> «Добавить набор данных - Объединение». Назовем его ПланФактИтог.
2. В открывшемся окне в левой части будут доступны наши наборы ФактПродаж и ПланПродаж. Перетаскиваем их в правую часть («Используемые наборы данных»).
3. СКД автоматически сопоставит поля из обоих наборов, так как мы предусмотрительно назвали их одинаково.
После этого шага СКД будет работать с набором ПланФактИтог так, как будто это единая таблица, в которой собраны строки и из планов, и из продаж.
Шаг 4: Настройка отчета
Теперь все просто. Переходим на вкладку «Настройки».
1. Вычисляемые поля: Создаем поле «Отклонение» с формулой: ЕстьNull(КоличествоФакт, 0) - ЕстьNull(КоличествоПлан, 0). Использование ЕстьNull обязательно, так как в каждой строке одно из полей будет NULL.
2. Структура отчета:
◦ В «Строки» добавляем группировку по полю Номенклатура.
◦ В «Выбранные поля» добавляем наши ресурсы: КоличествоПлан, КоличествоФакт и вычисляемое поле Отклонение. Для ресурсов СКД автоматически применит агрегатную функцию Сумма.
В результате мы получим отчет, где по каждой номенклатуре в одной строке будут сведены и плановые, и фактические показатели, даже если по какой-то номенклатуре были только планы, но не было продаж (или наоборот).
Механизм объединения наборов данных — это мощный инструмент СКД, который позволяет решать нетривиальные задачи, не прибегая к сложным, громоздким запросам с ВЛОЖЕННЫЕ ЗАПРОСЫ и ПОЛНОЕ СОЕДИНЕНИЕ. Разделение логики на несколько простых запросов и их последующее объединение делает схему отчета более понятной, гибкой и простой в поддержке.
Специалист компании ООО "Кодерлайн"
Екатерина Плешка