Как программно и интерактивно добавить колонку в отчет на базе «Универсального отчета» в 1С?

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

Разработчики часто сталкиваются с задачей доработки типовых отчетов в конфигурациях на обычных формах (таких как Управление торговлей 10.3, Управление производственным предприятием 1.3 или Комплексная автоматизация 1.1). Если отчет создан на базе механизма «Универсальный отчет», то при попытке найти привычный текст запроса в модуле формы или модуля объекта программист может обнаружить лишь одну строку вызова общего модуля. Выглядит это примерно так:


Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
    УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокумент,,, ЭтотОбъект);
КонецПроцедуры

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

Поймем архитектуру: куда исчез запрос?

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

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

Способ 1. Программное добавление колонок через модуль объекта

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

В зависимости от того, какую колонку мы хотим добавить, мы будем использовать различные методы API объекта УниверсальныйОтчет.

1. Добавление стандартного показателя (числового поля)

Если нам нужно вывести в отчет числовую колонку (например, сумму или количество), которая уже присутствует в таблице-источнике, но не выводится по умолчанию, мы используем метод ДобавитьПоказатель. Разберем пример добавления колонки НДС:


// Добавляем показатель в список доступных полей отчета
// Параметры: ИмяПоля, Представление, ОтображатьПоУмолчанию, Формат, ИмяГруппы, ПредставлениеГруппы
УниверсальныйОтчет.ДобавитьПоказатель("СуммаНДС", "Сумма НДС", Истина, "ЧЦ=15; ЧДЦ=2");

2. Расчет вычисляемого поля (ресурса) на лету

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


// Добавление вычисляемого ресурса
// Параметры: ИмяНовогоПоля, ФормулаРасчета, ЗаголовокКолонки
УниверсальныйОтчет.ДобавитьПолеРесурс("СредняяЦена", "СтоимостьОборот / КоличествоОборот", "Средняя цена");

3. Регистрация новых реквизитов и группировок

Если новая колонка должна выводить текстовые данные или ссылочные реквизиты (например, артикул номенклатуры или ИНН контрагента), нам необходимо зарегистрировать это поле в специальной структуре представлений, чтобы построитель отчета понял, как отображать это поле в интерфейсе настроек:


// Регистрируем текстовое поле для вывода в отчет
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Номенклатура.Артикул", "Артикул номенклатуры");

Способ 2. Добавление свойств и категорий в качестве колонок

В типовых конфигурациях 1С (УТ 10.3, УПП) активно используется механизм дополнительных свойств и категорий объектов. Если вам нужно вывести в Универсальный отчет свойство номенклатуры (например, "Цвет" или "Производитель") отдельной колонкой, переписывать запрос не нужно. Выясним, как это делается программно:


// Включаем использование свойств и категорий в механизме отчета
УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = Истина;

// Добавляем связь для конкретного поля таблицы
// Параметры: ПутьКДанным, ИмяПоляСвязи, Представление, НазначениеСвойств
УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(
    "Номенклатура", 
    "Номенклатура", 
    "Свойства номенклатуры", 
    ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура
);

После добавления этого кода в процедуру УстановитьНачальныеНастройки() пользователь сможет в настройках отчета выбрать любое дополнительное свойство номенклатуры в качестве отдельной колонки или группировки.

Способ 3. Интерактивное добавление колонок пользователем (без изменения кода)

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

Рассмотрим по шагам, как вывести реквизит связанного справочника отдельной колонкой в обычном приложении 1С:

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

Если же вы работаете в современной конфигурации на управляемых формах (например, ERP 2, УТ 11, Бухгалтерия предприятия 3.0), где Универсальный отчет построен на базе Системы компоновки данных (СКД), алгоритм будет следующим:

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

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

← На главную