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