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