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