Как настроить произвольный запрос СКД для получения фактических данных в бюджетировании 1С:ERP, если цифры не совпадают?

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

При работе с подсистемой бюджетирования в 1С:ERP или 1С:Комплексная автоматизация одной из самых гибких возможностей является использование произвольных запросов через Систему компоновки данных (СКД) для получения фактических данных. Однако пользователи и разработчики часто сталкиваются с ситуацией, когда один и тот же запрос в консоли СКД выдает верные цифры, а в бюджетном отчете — колоссальные расхождения (например, вместо миллионов система показывает миллиарды). Рассмотрим, почему это происходит и как правильно настроить правила получения факта.

Почему возникает разница в суммах при использовании произвольного запроса?

Разберем типичную ситуацию: вы создаете простейший запрос по оборотам счета (например, 8410 «Вспомогательные производства»). В консоли отчетов или при проверке «Результата работы правил» вы видите корректную сумму — 290 млн. Но как только эта статья попадает в структуру бюджета, сумма превращается в 65 млрд. Проанализируем причины такого поведения системы:

  1. Динамическая трансформация запроса: Подсистема бюджетирования не выполняет ваш запрос «как есть». Она использует механизм КомпоновщикМакета, который оборачивает ваш текст во внешний запрос, добавляя свои условия по периоду, организации, сценарию и валюте.
  2. Игнорирование внутренних фильтров: Если вы жестко прописали условие по счету внутри текста запроса (в блоке ГДЕ), но не вывели это поле в доступные поля компоновки или не настроили параметры, движок бюджетирования может «отрезать» это условие при оптимизации запроса.
  3. Дублирование при соединениях: При использовании LEFT JOIN с таблицами аналитики отсутствие четких фильтров по регистратору или периоду во вложенных таблицах приводит к тому, что суммы начинают кратно множиться (происходит «раздувание» выборки).

Механизм работы подсистемы с произвольными данными

Выясним, как именно БСП (Библиотека стандартных подсистем) модифицирует ваш код. Когда вы загружаете схему СКД в «Правило получения фактических данных», система ищет в ней определенные маркеры. Рассмотрим пример структуры запроса, который считается «безопасным»:


ВЫБРАТЬ
    ХозрасчетныйОбороты.Счет КАК Счет,
    ХозрасчетныйОбороты.Подразделение КАК Подразделение,
    ХозрасчетныйОбороты.СуммаОборот КАК Сумма,
    ХозрасчетныйОбороты.Период КАК Период
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Месяц, , , , , ) КАК ХозрасчетныйОбороты

Важно понимать: если в этом запросе параметр &НачалоПериода не будет соответствовать стандартным именам, которые ожидает бюджетный движок, система может попытаться выгрести данные за весь период существования базы, что и приводит к астрономическим суммам.

Решение проблемы через параметры и отборы

Проанализируем наиболее эффективные способы исправления ситуации, которые подтвердили свою работоспособность на практике.

Способ 1: Использование вкладки «Параметры» в СКД

Если вам нужно жестко ограничить выборку конкретным счетом, самым надежным способом будет указание значения счета непосредственно на вкладке «Параметры» внутри схемы СКД. Посмотрим, как это работает:

Этот метод гарантирует, что при любой трансформации запроса подсистемой параметр &Счет останется в структуре и будет применен.

Способ 2: Настройка отборов в правилах получения данных

Рассмотрим ситуацию, когда запрос должен быть универсальным. В этом случае счет нельзя «зашивать» в СКД. Выясним, как правильно прокинуть настройки:

  1. В тексте запроса СКД поле Счет должно быть обязательно выбрано в секции ВЫБРАТЬ.
  2. На закладке «Настройки» в конструкторе СКД это поле должно быть добавлено в выбранные поля.
  3. После загрузки схемы в «Правило получения фактических данных», перейдите на закладку «Отбор» в интерфейсе 1С:ERP.
  4. Добавьте новый элемент отбора: Счет Равно 8410.

Важный нюанс: Отборы, указанные в самом Правиле, имеют приоритет. Если вы оставите отбор в Правиле пустым, система может проигнорировать внутренние ограничения СКД и попытаться собрать данные по всем счетам, что снова приведет к неверному результату.

Анализ различий в генерируемых запросах

Если суммы все равно не сходятся, рекомендуем выполнить «расковыривание» запроса в отладке. Вы можете сохранить СКД, которая генерируется бюджетным отчетом в момент выполнения. Рассмотрим, какие различия обычно обнаруживаются:

Чтобы избежать этого, всегда используйте стандартные псевдонимы для итоговых полей: Сумма, Количество, СуммаУпр, СуммаСцн. Это помогает подсистеме бюджетирования правильно идентифицировать ресурсы для агрегации.

Рекомендации по написанию надежных запросов для факта

Проанализируем лучшие практики, которые минимизируют риск ошибок:

Таким образом, решение проблемы кроется в том, чтобы сделать все ключевые аналитики «видимыми» и управляемыми для подсистемы бюджетирования. Вынося настройки из жесткого кода запроса в параметры или явные отборы правила, вы позволяете механизмам ERP корректно модифицировать запрос без потери смысла данных. Если требуется готовое решение для план-фактного анализа без ручной настройки правил сбора факта, можно использовать расширение для план-фактного анализа БДДС с детализацией до документов.

← На главную