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