При разработке и адаптации отчетов на базе системы компоновки данных (СКД) в конфигурации «Управление производственным предприятием» разработчики нередко сталкиваются с ситуацией, когда при попытке детализировать отчет по номенклатуре возникает ошибка вида «Параметр не найден "ДатаНачПл"», а сам отчет сворачивается только до общих итогов. Разберем по шагам, почему возникает эта ошибка, как правильно настроить параметры и группировки, а также как скрыть лишние колонки показателей в плановой части отчета.
Проанализируем поведение платформы при работе со встроенным конструктором настроек отчета в режиме «1С:Предприятие». Ошибка отсутствия параметра запроса обычно вызвана сочетанием двух факторов:
&НачалоПериода и &КонецПериода (или стандартным периодом &Период). Если в тексте запроса разработчик использует собственные имена параметров (например, &ДатаНачПл, &ДатаКонПл), СКД не может связать их с выбором периода в шапке формы автоматически без явного указания формул расчета.Чтобы избежать ошибок с ненайденными параметрами и исключить необходимость их постоянного ручного ввода пользователем, настроим параметры в схеме компоновки данных декларативно:
ДатаНачПл и ДатаКонПл).
&Период.ДатаНачала
а для параметра окончания периода:
&Период.ДатаОкончания
Если планирование ведется помесячно, выражение можно привести к началу и концу соответствующего интервала с помощью встроенных функций компоновки: НачалоПериода(&Период.ДатаНачала, "Месяц") и КонецПериода(&Период.ДатаОкончания, "Месяц").Период проверим установку флага доступности в пользовательских настройках, чтобы пользователь мог интерактивно выбирать границы анализа.Частая ошибка при интерактивной работе с отчетом — попытка добавить поле Номенклатура на вкладку «Поля» (Выбранные поля) вместо изменения структуры строк. Разберем разницу между этими элементами СКД:
Номенклатура должно быть добавлено именно как строка группировки в дереве структуры отчета. Для этого в настройках варианта отчета добавляем новую группировку с типом «Номенклатура» в качестве дочерней или основной строки таблицы.Также проверим соединение таблиц в запросе набора данных. Если данные по планам (регистр накопления ПланыПродаж) и фактическим отгрузкам (регистр накопления Продажи) объединяются через ПОЛНОЕ СОЕДИНЕНИЕ, обязательно используем функцию ЕСТЬNULL для выводимой номенклатуры:
ВЫБОР
КОГДА План.Номенклатура ЕСТЬ NULL ТОГДА Факт.Номенклатура
ИНАЧЕ План.Номенклатура
КОНЕЦ КАК Номенклатура
Если выбрать номенклатуру только из таблицы планов, то все фактические продажи, по которым не было составлено планов, попадут в пустую строку или не будут сгруппированы корректно.
В типовых отчетах план-фактного анализа таблица формируется со сложной шапкой: отдельно выводятся плановые показатели, отдельно фактические, а показатели отклонений имеют смысл только для фактической секции или общих итогов. Выводить отклонения внутри колонки «План» бессмысленно. Рассмотрим два способа решения этой задачи.
Решим задачу декларативно без доработки программного кода модулей:
КоличествоПлан и СтоимостьПлан.КоличествоФакт, СтоимостьФакт, а также вычисляемые поля: ОтклонениеКоличества и ОтклонениеСтоимости.При таком подходе СКД физически не будет формировать колонки отклонений для плановой ветки данных, что полностью исключит необходимость программного скрытия областей табличного документа.
Если отчет формируется с использованием собственной процедуры вывода в табличный документ, ширину колонок можно скорректировать программно после компоновки макета. Найдем в модуле объекта или модуле формы процедуру формирования отчета:
Процедура СформироватьОтчет(ТабличныйДокумент)
// Стандартный вывод отчета через ПроцессорВывода
ТабличныйДокумент.Очистить();
// ... Вывод макета компоновки данных ...
// Поиск и скрытие колонок плановых отклонений
ОбластьОтклонениеПлан = ТабличныйДокумент.НайтиТекст("Отклонение количества (план)");
Пока ОбластьОтклонениеПлан <> Неопределено Цикл
ТабличныйДокумент.Область(, ОбластьОтклонениеПлан.Лево, , ОбластьОтклонениеПлан.Право).ШиринаКолонки = 0;
ОбластьОтклонениеПлан = ТабличныйДокумент.НайтиТекст("Отклонение количества (план)", ОбластьОтклонениеПлан);
КонецЦикла;
КонецПроцедуры
Однако ручная манипуляция шириной колонок через табличный документ ухудшает читаемость кода и может вызывать артефакты при экспорте отчета в сторонние форматы. Поэтому предпочтительно использовать декларативное разделение полей по группировкам СКД.
При план-фактном анализе в УПП обратим внимание на важную методическую деталь: периодичность хранения данных в регистрах. Движения регистра Продажи имеют точную дату (до секунды), тогда как регистр ПланыПродаж всегда фиксирует данные на дату начала периода сценария планирования (день, неделя, декада, месяц или квартал).
Если пользователь формирует отчет за произвольный интервал (например, с 15 марта по 15 апреля), плановые данные за март попадут в отчет целиком (так как датой записи в регистре является 01 марта), а фактические отгрузки учтутся только за вторую половину месяца. Чтобы избежать методических расхождений, рекомендуется выравнивать границы интервала отчета по границам периодичности выбранного сценария планирования.