Почему в отчете СКД возникает ошибка «Параметр не найден» и как настроить план-фактный анализ продаж?

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

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

Причины возникновения ошибки «Параметр не найден» при изменении структуры

Проанализируем поведение платформы при работе со встроенным конструктором настроек отчета в режиме «1С:Предприятие». Ошибка отсутствия параметра запроса обычно вызвана сочетанием двух факторов:

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

Как правильно настроить параметры периода в схеме компоновки

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

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

Почему отчет не разворачивается по номенклатуре: поля и группировки

Частая ошибка при интерактивной работе с отчетом — попытка добавить поле Номенклатура на вкладку «Поля» (Выбранные поля) вместо изменения структуры строк. Разберем разницу между этими элементами СКД:

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

Также проверим соединение таблиц в запросе набора данных. Если данные по планам (регистр накопления ПланыПродаж) и фактическим отгрузкам (регистр накопления Продажи) объединяются через ПОЛНОЕ СОЕДИНЕНИЕ, обязательно используем функцию ЕСТЬNULL для выводимой номенклатуры:


ВЫБОР
    КОГДА План.Номенклатура ЕСТЬ NULL ТОГДА Факт.Номенклатура
    ИНАЧЕ План.Номенклатура
КОНЕЦ КАК Номенклатура

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

Как скрыть колонки отклонений в плановой части отчета

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

Способ 1. Настройка выбранных полей для колонок таблицы (рекомендуемый)

Решим задачу декларативно без доработки программного кода модулей:

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

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

Способ 2. Программное скрытие колонок в модуле отчета

Если отчет формируется с использованием собственной процедуры вывода в табличный документ, ширину колонок можно скорректировать программно после компоновки макета. Найдем в модуле объекта или модуле формы процедуру формирования отчета:


Процедура СформироватьОтчет(ТабличныйДокумент)
    // Стандартный вывод отчета через ПроцессорВывода
    ТабличныйДокумент.Очистить();
    
    // ... Вывод макета компоновки данных ...
    
    // Поиск и скрытие колонок плановых отклонений
    ОбластьОтклонениеПлан = ТабличныйДокумент.НайтиТекст("Отклонение количества (план)");
    Пока ОбластьОтклонениеПлан <> Неопределено Цикл
        ТабличныйДокумент.Область(, ОбластьОтклонениеПлан.Лево, , ОбластьОтклонениеПлан.Право).ШиринаКолонки = 0;
        ОбластьОтклонениеПлан = ТабличныйДокумент.НайтиТекст("Отклонение количества (план)", ОбластьОтклонениеПлан);
    КонецЦикла;
КонецПроцедуры

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

Особенности сопоставления периодов в УПП

При план-фактном анализе в УПП обратим внимание на важную методическую деталь: периодичность хранения данных в регистрах. Движения регистра Продажи имеют точную дату (до секунды), тогда как регистр ПланыПродаж всегда фиксирует данные на дату начала периода сценария планирования (день, неделя, декада, месяц или квартал).

Если пользователь формирует отчет за произвольный интервал (например, с 15 марта по 15 апреля), плановые данные за март попадут в отчет целиком (так как датой записи в регистре является 01 марта), а фактические отгрузки учтутся только за вторую половину месяца. Чтобы избежать методических расхождений, рекомендуется выравнивать границы интервала отчета по границам периодичности выбранного сценария планирования.

← На главную