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

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

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

Обязательные требования к именованию полей в СКД

Механизм бюджетирования в 1С:ERP 2.1 работает на основе жестко определенных имен полей. Даже если ваш запрос логически верен, система не сможет обработать результат, если названия колонок не соответствуют внутренним ожиданиям движка бюджетирования. Рассмотрим основные правила именования:

  1. Поля сумм: Для того чтобы система «увидела» денежные значения, они должны называться строго СуммаУпр (управленческий учет), СуммаРегл (регламентированный учет) или СуммаВВалюте (сумма в исходной валюте операции).
  2. Поле валюты: Если вы выбираете СуммаВВалюте, в схеме обязательно должно присутствовать поле Валюта, содержащее ссылку на справочник Валюты.
  3. Поля периодов: Основное поле периода должно называться Период. Если требуется детализация, используются имена ПериодДень, ПериодНеделя, ПериодМесяц и так далее.
  4. Количественные показатели: Если статья бюджета предполагает учет в натуральных единицах, результат запроса должен содержать поле Количество.

Проанализируем пример корректно сконструированного запроса, который собирает данные по расчетам с клиентами в разрезе сегментов партнеров:


ВЫБРАТЬ
    ПартнерыСегмента.Сегмент КАК Сегменты,
    ПартнерыСегмента.Партнер КАК Партнеры,
    РасчетыСКлиентамиПоДокументам.Период КАК Период,
    РасчетыСКлиентамиПоДокументам.ДолгУпр КАК СуммаУпр,
    РасчетыСКлиентамиПоДокументам.Валюта КАК Валюта,
    РасчетыСКлиентамиПоДокументам.Регистратор КАК Регистратор
ИЗ
    РегистрСведений.ПартнерыСегмента КАК ПартнерыСегмента
ВНУТРЕННЕЕ СОЕДИНЕНИЕ 
    РегистрНакопления.РасчетыСКлиентамиПоДокументам КАК РасчетыСКлиентамиПоДокументам 
ПО 
    ПартнерыСегмента.Партнер = РасчетыСКлиентамиПоДокументам.АналитикаУчетаПоПартнерам.Партнер
ГДЕ 
    РасчетыСКлиентамиПоДокументам.Период МЕЖДУ &НачалоПериода И &КонецПериода

Настройка параметров и устранение ошибки группировки по периодам

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

Чтобы избежать этой проблемы, выполним следующие шаги:

  1. Откроем схему компоновки данных в правиле получения факта.
  2. На закладке «Наборы данных» найдем наши поля периодов.
  3. В колонке «Роль» необходимо либо убрать роль «Период» вовсе, либо установить ее в значение «Без роли» для всех полей, кроме основного.
  4. Убедимся, что параметры НачалоПериода и КонецПериода объявлены на вкладке «Параметры» и для них снят флаг «Ограничение доступности». Если система не сможет передать эти параметры в ваш запрос, результат всегда будет пустым.

Сопоставление аналитик и отборы по организации

Мало просто получить данные в запросе, их нужно «привязать» к аналитике статьи бюджета. В 1С:ERP предусмотрено до 6 аналитик для каждой статьи. Рассмотрим порядок действий:

Во-первых, в самом запросе поля аналитик должны возвращать ссылки на соответствующие объекты (например, справочники Контрагенты, Номенклатура). Во-вторых, в форме настройки правила на закладке «Настройка заполнения аналитик» нужно вручную указать, какое поле из вашего запроса соответствует Аналитике 1, какое — Аналитике 2 и так далее. Если для одной статьи используется несколько правил и возникают сбои с сопоставлением значений, можно применить расширение для исправления ошибки с аналитиками в бюджетировании.

Важный нюанс с организацией: если вы хотите, чтобы в отчетах работал отбор по организации, поле Организация обязательно должно присутствовать в выборке запроса. Если его нет, система не сможет отфильтровать данные при формировании экземпляра бюджета, даже если в самом отчете выбран конкретный филиал.

Кэширование данных и фоновое отражение факта

В ERP 2.1 существует два режима работы с фактом: оперативный и с предварительным хранением. Если в правиле получения факта включена настройка «Хранить результат выполнения правил», данные записываются в специальный регистр ФактическиеДанныеБюджетирования. Если этот механизм не запущен, вы можете видеть данные в режиме расшифровки (так как запрос выполняется «на лету»), но в самом отчете в ячейках будут нули.

Проанализируем ситуацию: для того чтобы данные попали в регистр, их нужно зарегистрировать и отразить. Обычно это делает фоновое задание, но иногда требуется программное вмешательство. Рассмотрим пример кода для принудительной регистрации и отражения данных:


&НаСервере
Процедура ЗарегистрироватьИОтразитьФакт()
    // Укажем период, за который нужно обновить данные
    ДатаНачала = НачалоМесяца(ТекущаяДата());
    ДатаОкончания = КонецМесяца(ТекущаяДата());

    // Выбираем правила, требующие кэширования
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Правила.Ссылка
        |ИЗ
        |   Справочник.ПравилаПолученияФактаПоСтатьямБюджетов КАК Правила
        |ГДЕ
        |   Правила.ПромежуточноеКэшированиеРезультатовРаботыПравил = ИСТИНА";
    
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        // Определяем типы документов по схеме СКД в правиле
        ВидыДокументов = ФактическиеДанныеБюджетированияСервер.ОпределитьИменаВидовДокументовПоСКД(Результат.Ссылка.ПолучитьОбъект()).ВыгрузитьКолонку("ИмяВидаДокумента");
        
        // Регистрируем документы для отражения
        Справочники.ПравилаПолученияФактаПоСтатьямБюджетов.ЗарегистрироватьДокументыДляОтражения(ДатаНачала, ДатаОкончания, ВидыДокументов, Результат.Ссылка);
    КонецЦикла;

    // Выполняем само отражение в регистре факта
    ФактическиеДанныеБюджетированияСервер.ОтразитьДокументыВБюджетировании(ДатаНачала, ДатаОкончания);
КонецПроцедуры

Типичные ошибки и способы их решения

Выясним основные причины, по которым данные могут не отображаться:

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

← На главную