В системе 1С:ERP подсистема бюджетирования построена как гибкий конструктор. В отличие от плановых данных, которые фиксируются напрямую в регистрах при проведении бюджетных экземпляров, получение фактических данных требует понимания архитектуры связей между оперативными регистрами и специализированным регистром накопления бюджетирования. Рассмотрим подробно, как извлечь факт по статьям бюджетов и на какие ресурсы следует опираться.
Основным ресурсом, в котором аккумулируется вся «признанная» системой фактическая информация для нужд бюджетирования, является регистр накопления ФактическиеДанныеБюджетирования. Проанализируем его структуру: в отличие от регистра ОборотыБюджетов, который чаще всего хранит плановые значения, именно в ФактическиеДанныеБюджетирования стекаются данные из всех контуров учета (оперативного, регламентированного, международного).
Если вам необходимо программно получить итоги по факту для отчета или внешней обработки, обращение к таблицам оборотов этого регистра — самый правильный путь. Однако важно понимать, что данные в нем появляются не «сами по себе», а в результате работы механизма трансляции.
Разберем процесс формирования записей в целевом регистре. Чтобы данные попали в факт бюджета, для каждой СтатьиБюджетов должны быть настроены «Правила получения фактических данных». Выясним, что именно указывается в этих правилах:
ВыручкаИСебестоимость, ДвиженияДенежныхСредств, РасчетыСКлиентами. Также существует возможность создать произвольный запрос на СКД к любым таблицам базы данных.Проанализируем ситуацию: если вы видите пустые значения в отчетах по бюджету, в первую очередь нужно проверить наличие и корректность этих правил для конкретной статьи.
Зачастую программисту требуется понять, откуда именно система «черпает» информацию до того, как она попадет в бюджет. Рассмотрим основные регистры накопления, которые выступают источниками для СКД правил получения факта:
ВыручкаИСебестоимостьПродаж: служит базой для всех доходных статей и анализа маржинальной прибыли.ДвиженияДенежныеСредстваДоходыРасходы: основной источник для БДДС (Бюджета движения денежных средств).ПрочиеРасходы и ПрочиеДоходы: используются для отражения управленческих и косвенных затрат.ПартииТоваровПредприятия: если факт требует детализации до конкретных документов поступления или ГТД.РасчетыСКлиентами / РасчетыСПоставщиками: для отражения дебиторской и кредиторской задолженности в прогнозном балансе.Как отмечалось в обсуждении на форуме, справочник ХозяйственныеОперации играет критическую роль в фильтрации данных. В настройках правил получения факта почти всегда указывается фильтр по конкретным операциям. Рассмотрим пример: для статьи бюджета «Поступление оплаты от покупателей» источником будет регистр денежных средств, но фильтрация будет идти строго по хозяйственной операции ПоступлениеОплатыОтКлиента. Если при разработке запроса не учитывать этот фильтр, данные бюджета не сойдутся с данными оперативного контура.
Выясним причину, по которой данные могут отсутствовать в регистре ФактическиеДанныеБюджетирования, даже если правила настроены верно. В настройках параметров бюджетирования существует два режима:
Отражение фактических данных бюджетирования. Если вы пишете запрос к регистру факта, обязательно убедитесь, что процедура отражения была выполнена за интересующий вас период.Рассмотрим техническую особенность хранения данных. В регистре ФактическиеДанныеБюджетирования нет явных полей «Контрагент» или «Номенклатура». Вместо этого используются 6 универсальных измерений Аналитика1...Аналитика6.
Чтобы понять, что хранится в Аналитика1, нужно проанализировать настройки конкретной СтатьиБюджетов. В ней определен список аналитик. Система сопоставляет их в правилах получения данных. Например, если в статье первая аналитика — «Партнер», то при трансляции из регистра ВыручкаИСебестоимостьПродаж значение из поля АналитикаУчетаПоПартнерам.Партнер будет записано в Аналитика1 регистра факта.
Важно упомянуть нюанс, озвученный в экспертных материалах: фактические данные *могут* находиться в регистре ОборотыБюджетов. Это происходит в том случае, если в справочнике Сценарии для конкретного сценария (например, с названием «ФАКТ») установлен флаг «Использовать для отражения фактических данных». В этом случае система будет дублировать записи. Однако в современных архитектурах ERP рекомендуется использовать специализированный регистр ФактическиеДанныеБюджетирования, так как он оптимизирован для хранения больших объемов транзакционных данных из разных источников.
Посмотрим на пример структуры запроса, который позволяет получить обороты факта в разрезе статей:
ВЫБРАТЬ
ФактическиеДанные.СтатьяБюджета КАК СтатьяБюджета,
ФактическиеДанные.Организация КАК Организация,
ФактическиеДанные.СуммаОборот КАК СуммаФакт,
ФактическиеДанные.Аналитика1 КАК Аналитика1,
ФактическиеДанные.Аналитика2 КАК Аналитика2
ИЗ
РегистрНакопления.ФактическиеДанныеБюджетирования.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ФактическиеДанные
При использовании такого запроса помните, что типы значений в полях Аналитика являются составными. Для получения строковых представлений или конкретных ссылок потребуется соединение с метаданными статьи бюджета, чтобы определить, какой именно справочник «скрывается» за каждой аналитикой.
Таким образом, для получения фактических показателей мы не просто ищем «волшебный регистр», а анализируем всю цепочку: Первичный документ -> Оперативный регистр -> Правило получения данных (СКД + Хоз. операция) -> Регистр фактических данных бюджетирования. Только понимание этой цепочки позволит корректно извлекать и интерпретировать данные в 1С:ERP.