Как в УПП 1.3 в отчете «Продажи» добавить в группировку реквизит документа-регистратора?

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

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

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

Выясним причину такого поведения системы, рассмотрим по шагам интерфейсное решение проблемы и проанализируем альтернативный программный метод обхода ограничений.

Почему реквизитов конкретного документа нет в стандартном списке группировок?

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

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

Способ 1. Настройка вывода через интерфейс (Расширенная настройка)

Если вам требуется вывести реквизит документа движения (например, «Менеджер» или «Договор» из Реализации товаров и услуг) в отчете, выполним настройку по шагам:

  1. Откроем отчет «Продажи» в режиме 1С:Предприятие.
  2. Нажмем кнопку «Настройки» на панели инструментов отчета.
  3. В открывшемся окне настроек в нижней части найдем и включим флаг «Расширенная настройка». Это откроет доступ к дополнительным вкладкам конфигурации отчета.
  4. Перейдем на вкладку «Группировки». Нам обязательно нужно добавить в структуру отчета сам документ-источник. Добавим поле Документ движения (регистратор) в список активных группировок строк. Важно: без вывода самого документа-владельца в группировку система не сможет сопоставить данные его реквизитов с итоговыми строками отчета.
  5. Перейдем на вкладку «Дополнительные поля». Нажмем кнопку «Добавить».
  6. В открывшемся дереве доступных полей найдем ветку Документ движения (регистратор) и раскроем ее по значку «плюс». Внутри раскроется список всех доступных реквизитов документов, которые могут делать движения по регистру. Найдем необходимый реквизит (например, Ответственный или Договор контрагента) и выберем его.
  7. В колонке «Положение» для добавленного реквизита установим значение «В отдельной колонке».
  8. Вернемся на вкладку «Общие» и убедимся, что установлен флаг «Выводить детальные записи».
  9. Нажмем кнопку «Сформировать».

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

Ограничения интерактивного метода

Рассмотрим важную особенность работы ПостроителяОтчета в старых конфигурациях на обычных формах (УПП 1.3, Управление торговлей 10.3). При выводе дополнительных полей составного регистратора в настройках настоятельно рекомендуется добавлять поле Период в группировки или колонки перед реквизитом регистратора. Это исключает риск «задвоения» записей и обеспечивает корректное распределение суммовых показателей по строкам.

Также помните главное правило: реквизит регистратора выведется на экран только в том случае, если сам «Документ движения» присутствует в группировках отчета.

Способ 2. Программное решение (для разработчиков)

Что делать, если бизнес-требование строго запрещает выводить сам документ-регистратор в строки отчета, но при этом необходимо сгруппировать продажи по реквизиту этого документа (например, сгруппировать продажи по «Подразделению» или «Сделке» из документа Реализации)?

Стандартными пользовательскими настройками Универсального отчета эту задачу решить невозможно, так как система требует обязательного вывода родительского поля-регистратора в группировку. В данном случае потребуется минимальное вмешательство программиста в конфигураторе.

Разберем по шагам логику изменения схемы запроса:

  1. Откроем конфигуратор и найдем отчет «Продажи» (или внешнюю форму отчета, если мы не хотим снимать конфигурацию с поддержки).
  2. Перейдем в модуль объекта отчета.
  3. Найдем процедуру УстановитьНачальныеНастройки() (или место инициализации текста запроса для УниверсальныйОтчет.ПостроительОтчета.Текст).
  4. Нам необходимо модифицировать исходный текст запроса. По умолчанию отчет выбирает данные из виртуальной таблицы оборотов регистра накопления Продажи.Обороты. Чтобы вытащить реквизит конкретного документа без группировки по самому документу, добавим левое соединение к таблице этого документа.

Рассмотрим пример изменения текста запроса в коде:


// Пример модификации исходного запроса Универсального отчета
ТекстЗапроса = 
"ВЫБРАТЬ
|	ПродажиОбороты.Номенклатура КАК Номенклатура,
|	ПродажиОбороты.КоличествоОборот КАК Количество,
|	ПродажиОбороты.СтоимостьОборот КАК Стоимость,
|	ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.РеализацияТранспортныхУслуг).ДоговорКонтрагента КАК ДоговорРеализации
|{ВЫБРАТЬ
|	Номенклатура.*,
|	Количество,
|	Стоимость,
|	ДоговорРеализации.* КАК ДоговорРеализации}
|ИЗ
|	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПродажиОбороты
|{ГРУППИРОВКА
|	Номенклатура.*,
|	ДоговорРеализации.* КАК ДоговорРеализации}";

В данном примере мы использовали конструкцию ВЫРАЗИТЬ(... КАК ...) для приведения составного типа поля Регистратор к конкретному типу документа (например, Документ.РеализацияТоваровУслуг или Документ.РеализацияТранспортныхУслуг). Это позволяет напрямую обратиться к его реквизиту (в примере — ДоговорКонтрагента) и объявить его как полноценное отдельное поле запроса с псевдонимом ДоговорРеализации.

После добавления этого поля в секции описания доступных полей компоновщика/построителя (фигурные скобки {ВЫБРАТЬ} и {ГРУППИРОВКА}), поле появится в общем списке доступных полей группировок. Пользователю больше не потребуется добавлять сам документ движения в отчет — группировка будет строиться напрямую по значению реквизита документа.

Резюме

Мы проанализировали особенности работы с реквизитами документов движения в отчете «Продажи» конфигурации УПП 1.3. Для быстрого решения задачи силами пользователя достаточно использовать «Расширенную настройку» с выводом самого документа движения в группировку строк и вынесением целевого реквизита в отдельную колонку дополнительных полей. Если же требуется сложная группировка без вывода документов, наилучшим решением станет точечная модификация запроса отчета в конфигураторе с использованием конструкции ВЫРАЗИТЬ.

← На главную