Почему в Универсальном отчете пропадает группировка по Документу-движения после переименования поля

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

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

Причина 1: Особенности работы Построителя отчета с системными полями

Универсальный отчет в УПП построен на базе объекта ПостроительОтчета. Для этого механизма поле Регистратор не является обычным измерением. Оно имеет системный статус и жестко связано с периодом и регистрами накопления. Проанализируем ситуацию: когда мы меняем псевдоним Регистратор на ДокументРеализация непосредственно в тексте запроса, Построитель может потерять метаданные этого поля. В результате он перестает распознавать его как объект, обладающий свойствами регистратора, что критично для построения иерархии и связи с итогами.

Причина 2: Рассинхронизация блоков в тексте запроса

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

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

Причина 3: Некорректное использование программных структур Универсального отчета

В модуле отчета (обычно это обработка УниверсальныйОтчет) управление полями происходит через специальные коллекции. Посмотрим на примеры структур, которые необходимо обновить при переименовании:

Причина 4: Кэширование настроек пользователя

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

Решение: Необходимо не просто перезапустить отчет, а полностью очистить сохраненные настройки пользователя для данного отчета или программно вызвать метод УниверсальныйОтчет.УстановитьНачальныеНастройки().

Рекомендуемый подход: Использование «Документа продажи»

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

Правильнее будет не ломать системное поле Регистратор, а использовать именно ДокументПродажи:

  1. В запросе выберите ДокументПродажи.
  2. Назначьте ему псевдоним ДокументРеализация.
  3. Это избавит вас от конфликтов с системными механизмами Построителя, которые жестко завязаны на поле Регистратор.

Инициализация типов значений

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

Резюме: Для исправления ошибки проверьте наличие поля в секции {ИТОГИ ПО...} запроса, убедитесь, что все программные структуры (мСтруктураПредставлениеПолей) обновлены, и обязательно очистите пользовательские настройки отчета.

← На главную