Как добавить поле Партнер в Регистратор при расшифровке отчета на СКД

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

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

Метод 1: Использование выражения представления с дублированием поля

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

Разберем по шагам правильный алгоритм обхода этой ошибки:

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

Представление(РегистраторДляПредставления) + " (Партнер: " + Представление(Партнер) + ")"

Таким образом, мы обращаемся к значению другого поля для формирования текста, и рекурсия не возникает. Этот метод позволяет видеть партнера прямо в ячейке регистратора во всем отчете.

Метод 2: Настройка дополнительных полей в структуре отчета

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

  1. Откроем вкладку Настройки в СКД.
  2. Выберем группировку, в которой выводится Регистратор (или выберем уровень «Отчет»).
  3. Перейдем на вкладку Дополнительные поля.
  4. Добавим поле Партнер.
  5. В свойстве Расположение укажем значение Вместе с группировкой.

Проанализируем результат: теперь в колонке с регистратором через запятую (или в отдельной строке, в зависимости от настроек) будет выводиться значение партнера. Это самый «чистый» способ с точки зрения платформы 1С, так как он не требует написания кода и корректно обрабатывается при выгрузке в Excel.

Метод 3: Использование вычисляемых полей

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

  1. Перейдем на вкладку Вычисляемые поля.
  2. Добавим новое поле с заголовком «Регистратор (подробно)».
  3. В колонке Выражение просто укажем Регистратор. Это нужно для того, чтобы поле сохранило тип ссылки и по нему можно было кликнуть.
  4. В колонке Выражение представления напишем:

Строка(Регистратор) + " | " + Строка(Партнер)

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

Метод 4: Расшифровка другим отчетом

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

Для настройки такой связи:

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

Метод 5: Программная обработка события расшифровки

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

Для этого используется событие РезультатОбработкаРасшифровки. Проанализируем пример логики:


&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // Отключаем стандартное меню
    
    // Создаем объект обработки расшифровки
    Обработка = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы));
    
    // Добавляем свои настройки или выбираем действие
    ДополнительныеДействия = Новый СписокЗначений;
    ДополнительныеДействия.Добавить("ОткрытьПоПартнеру", "Показать все записи по этому партнеру");
    
    // Выводим меню пользователю
    Обработка.ВыбратьДействие(Расшифровка, ВыбранноеДействие, ПараметрыДействия);
    
    // Описываем логику для выбранного действия
    Если ВыбранноеДействие = "ОткрытьПоПартнеру" Тогда
        // Здесь ваш код открытия формы или нового отчета
    КонецЕсли;
    
КонецПроцедуры

Этот метод дает максимальный контроль: мы можем не только добавить Партнера в представление, но и полностью изменить поведение системы при клике на регистратор.

Важные замечания по типам данных

При реализации любого из методов обязательно проверьте следующие моменты:

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

← На главную