Как получить понятное наименование регистратора в отчете СКД?

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

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

Метод 1: Использование функции ТипЗначения()

Если вам нужно быстро получить строковое представление типа документа, не перечисляя каждый вид в запросе, воспользуйтесь встроенной функцией ТипЗначения(). Это наиболее универсальный способ, который работает для любого количества документов-регистраторов.

Чтобы вывести информацию в поле представления, используйте следующее выражение в настройках набора данных СКД:


Формат(Регистратор.Дата, "ДФ = dd.MM.yyyy") + "   " + 
Строка(Регистратор.Контрагент) + "   " + 
Строка(ТипЗначения(Регистратор))

Этот подход вернет строку вида "Документ объект: Приходная накладная". Это решение отлично подходит, когда количество видов документов в базе постоянно меняется и вы не хотите поддерживать сложную логику «ВЫБОР-КОГДА».

Метод 2: Использование оператора ВЫБОР для жестко заданных имен

Если требуется выводить строго определенные синонимы (например, без префикса «Документ объект»), и количество регистраторов невелико, можно воспользоваться конструкцией ВЫБОР непосредственно в тексте запроса СКД. Это позволяет полностью контролировать то, что увидит пользователь в отчете.

Разберем пример реализации такой логики:


ВЫБОР
    КОГДА Регистратор ССЫЛКА Документ.ПриходнаяНакладная ТОГДА "Приходная накладная"
    КОГДА Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ТОГДА "Реализация товаров"
    ИНАЧЕ "Прочий документ"
КОНЕЦ КАК ВидРегистратора

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

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

Для профессиональной разработки рекомендуется выносить логику определения вида документа в вычисляемые поля или общие модули. Прямой доступ к Регистратор.Метаданные().Имя в выражении поля СКД может приводить к синтаксическим ошибкам, так как объект Метаданные не всегда доступен в контексте исполнения запроса СКД напрямую.

Рассмотрим пошагово оптимальный алгоритм действий:

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

Функция ПолучитьПредставлениеВидаДокумента(СсылкаНаДокумент) Экспорт
    Если ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
        Возврат СсылкаНаДокумент.Метаданные().Синоним;
    КонецЕсли;
    Возврат "";
КонецФункции

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

Итоги и рекомендации

Выбор метода зависит от ваших задач:

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

← На главную