Разработка и Конфигурация · 12 мин
Как в запросе 1С вывести тип документа
Как вывести тип документа в запросе 1С: ТИПЗНАЧЕНИЯ, ВЫРАЗИТЬ, ВЫБОР КОГДА, составные типы и регистры. Примеры кода, типичные ошибки и проверка результата.
Задача вывести тип документа в запросе возникает в двух типовых ситуациях: когда поле имеет составной тип (например, «ДокументРасчетов» в регистре взаиморасчетов может хранить ссылки на разные документы) и когда нужно в одном отчёте объединить данные разных видов документов с подписью вида каждой строки. В языке запросов 1С нет функции, которая напрямую возвращает строку «РеализацияТоваровУслуг», но есть рабочие приёмы: представление ссылки, оператор ТИПЗНАЧЕНИЯ, конструкция ВЫБОР и функция ТИП.
Выбор приёма зависит от того, что именно нужно получить: текстовое представление для пользователя, метаданный тип для группировки и отбора или ссылку конкретного вида для дальнейшей обработки в коде. Ниже разобраны все основные способы с примерами запросов, ограничениями каждого подхода и способами проверить корректность результата.
Как устроена задача: что именно нужно вывести
Прежде чем писать запрос, определите, какой результат требуется. «Тип документа» в 1С может означать три разные вещи. Первая — значение системного типа «Тип» (например, «ДокументСсылка.РеализацияТоваровУслуг»), которое можно сравнивать, по нему группировать и передавать в код. Вторая — строковое представление вида документа, заданное разработчиком, для вывода в отчёт пользователю. Третья — полное представление ссылки, включающее номер и дату документа.
От этого зависит инструмент. Функция ТИПЗНАЧЕНИЯ возвращает именно тип как значение — она подходит для логики, но в отчёте пользователь увидит техническое имя вида «Документ ссылка: Реализация товаров и услуг», что не всегда удобно. Конструкция ВЫБОР КОГДА ... ССЫЛКА позволяет вывести любую свою строку, но требует перечислить все виды документов вручную. ПРЕДСТАВЛЕНИЕ выдаёт готовый текст ссылки целиком, а не только вид документа.
Как выбрать способ
Вывод типа через ТИПЗНАЧЕНИЯ
Функция ТИПЗНАЧЕНИЯ — самый универсальный способ. Она принимает поле ссылки и возвращает значение типа «Тип». Работает с любыми ссылочными полями, включая составные, и не требует перечислять виды документов вручную:
ВЫБРАТЬ
Взаиморасчеты.ДокументРасчетов КАК ДокументРасчетов,
ТИПЗНАЧЕНИЯ(Взаиморасчеты.ДокументРасчетов) КАК ТипДокумента,
Взаиморасчеты.СуммаОстаток КАК Сумма
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК Взаиморасчеты
В результате колонка «ТипДокумента» будет содержать значения типа, которые в табличном отчёте отображаются как «Документ ссылка: Реализация товаров и услуг». По этой колонке можно строить группировки в СКД, накладывать отборы через параметры и использовать её в соединениях с таблицей, где тип уже получен аналогично.
Важное ограничение: ТИПЗНАЧЕНИЯ нельзя применить к значениям примитивных типов в поле составного типа. Если поле может хранить и ссылку, и число, функция вернёт тип соответствующего значения, но сравнивать его с типами документов нужно аккуратно — неопределённое значение (NULL) даст неопределённый тип, а не тип документа.
Вывод названия вида документа через ВЫБОР и ССЫЛКА
Когда в отчёте нужна понятная строка вроде «Реализация» или «Поступление», а не техническое «Документ ссылка: ...», используется конструкция ВЫБОР с оператором проверки типа ССЫЛКА. Каждый вид документа перечисляется явно:
ВЫБРАТЬ
Взаиморасчеты.ДокументРасчетов КАК ДокументРасчетов,
ВЫБОР
КОГДА Взаиморасчеты.ДокументРасчетов ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА "Реализация"
КОГДА Взаиморасчеты.ДокументРасчетов ССЫЛКА Документ.ПоступлениеТоваровУслуг
ТОГДА "Поступление"
КОГДА Взаиморасчеты.ДокументРасчетов ССЫЛКА Документ.ПриходныйКассовыйОрдер
ТОГДА "Приходный ордер"
ИНАЧЕ "Прочее"
КОНЕЦ КАК ВидДокумента
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК Взаиморасчеты
Ветка ИНАЧЕ обязательна на практике: составное поле почти всегда допускает больше видов документов, чем вы перечислили. Без ИНАЧЕ непредусмотренные виды получат NULL, и при группировке или сортировке в СКД это приведёт к отдельным «пустым» строкам, которые пользователи воспримут как ошибку отчёта.
Недостаток способа — поддержка. При добавлении в конфигурацию нового вида документа, участвующего в движениях, запрос придётся дополнять вручную. Поэтому конструкцию ВЫБОР разумно применять, когда набор видов стабилен и невелик.
ПРЕДСТАВЛЕНИЕ и представление ссылки
Функция ПРЕДСТАВЛЕНИЕ возвращает пользовательское представление значения. Для ссылки на документ это строка вида «Реализация товаров и услуг 0000-000123 от 15.03.2026 12:30:00». Если задача — просто показать пользователю, какой документ стоит в строке отчёта, этого достаточно, и запрос остаётся максимально простым:
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ(Взаиморасчеты.ДокументРасчетов) КАК ДокументПредставление
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК Взаиморасчеты
Учитывайте два момента. Во-первых, представление — это строка: по ней нельзя сравнивать типы и строить соединения, а сортировка будет лексикографической, а не по дате документа. Во-вторых, в СКД представление ссылки часто выводится автоматически при выводе самого поля-ссылки, поэтому отдельное ПРЕДСТАВЛЕНИЕ нужно в основном в консоли запросов и при программной обработке результата.
Если в отчёте на СКД нужна и ссылка для расшифровки, и текстовый вид документа — выведите в запросе оба поля: саму ссылку и вычисленную строку вида. Ссылку используйте в полях расшифровки, строку — в отображаемых колонках.
Отбор и группировка по типу документа
Чаще всего тип выводят не сам по себе, а чтобы отфильтровать или сгруппировать данные. Для отбора по конкретному виду документа используется оператор ССЫЛКА в секции ГДЕ — это эффективнее, чем сравнение представлений:
ВЫБРАТЬ
Взаиморасчеты.ДокументРасчетов КАК ДокументРасчетов,
Взаиморасчеты.СуммаОстаток КАК Сумма
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК Взаиморасчеты
ГДЕ
Взаиморасчеты.ДокументРасчетов ССЫЛКА Документ.РеализацияТоваровУслуг
Для группировки по видам документов в сводном отчёте группируйте по ТИПЗНАЧЕНИЯ(Поле) — тогда каждый вид документа образует свою группу независимо от реквизитов. В СКД такую группировку можно добавить и в настройках без изменения текста запроса, если поле типа уже выведено в выборку.
Отдельный сценарий — объединение таблиц разных документов через ОБЪЕДИНИТЬ ВСЕ. Здесь тип каждой строки известен заранее, поэтому вид документа задают константной строкой в каждом подзапросе объединения. Это самый быстрый и предсказуемый вариант, когда запрос собирает данные из нескольких конкретных таблиц.
Сравнение способов
Универсально, подходит для группировки и отборов; в отчёте выглядит технически
Даёт произвольные понятные названия; требует перечислять виды и обновлять запрос при расширении конфигурации
Готовый текст для пользователя без усилий; строка непригодна для сравнений и соединений
Самый быстрый вариант при объединении конкретных таблиц; не работает для составного поля одного регистра
Определение типа вне запроса: в коде и в СКД
Не всегда тип нужно вычислять именно в запросе. Если результат запроса обходится в коде, проще вывести саму ссылку и определить тип встроенной функцией ТипЗнч(), а имя вида документа получить через метаданные: ДокументСсылка.Метаданные().Имя или .Синоним. Это даёт точное имя вида без перечисления вариантов и без нагрузки на запрос.
В схеме компоновки данных есть дополнительная возможность — вычисляемые поля и ресурсы, где выражение на языке выражений СКД также может проверять тип. Однако перенос логики в код имеет цену: данные нельзя сгруппировать на уровне СУБД, поэтому для больших выборок вычисление типа в запросе обычно производительнее.
При работе с динамическими списками (например, журнал документов произвольного состава) тип документа доступен в стандартном поле «Тип» таблицы журнала — его можно вывести в список и использовать в отборах без дополнительных вычислений.
Типичные ошибки и проверка результата
Самая частая ошибка — попытка сравнить ТИПЗНАЧЕНИЯ(Поле) со строкой, например ТИПЗНАЧЕНИЯ(Поле) = "РеализацияТоваровУслуг". Тип никогда не равен строке, условие молча не сработает, и отбор вернёт пустой результат без сообщения об ошибке. Сравнивать тип нужно либо с другим ТИПЗНАЧЕНИЯ, либо через оператор ССЫЛКА.
Вторая группа ошибок связана с составными типами и соединениями. После левого соединения часть строк содержит NULL в поле документа, и вычисленная колонка типа тоже получает неопределённое значение. Если по этой колонке строится группировка, появляется отдельная строка с пустым типом — её нужно либо осмысленно подписать через ВЫБОР, либо исключить отбором.
Третья ошибка — вывод представления ссылки вместо вида документа и последующая попытка группировать по нему. Представление включает номер и дату, поэтому каждая строка уникальна и группировка не срабатывает. Для группировки всегда используйте тип или заданную строку-константу вида.
Проверка корректности результата
Перед передачей запроса в отчёт проверьте его в консоли запросов на реальной базе. Убедитесь, что колонка типа заполнена во всех строках, где ссылка на документ не пуста, и что количество строк с неопределённым типом соответствует количеству строк с NULL в ссылке. Расхождение означает ошибку в логике ВЫБОР.
Дополнительная проверка — сверка итогов: сгруппируйте результат по вычисленной колонке вида документа и сравните суммы с контрольным запросом, где отбор задан через ССЫЛКА по каждому виду. Итоги должны совпасть. Если отчёт строится на СКД, проверьте также, что расшифровка по ссылке работает, а сортировка идёт по осмысленному полю, а не по строке представления.
Как проверить результат
Тип определён во всех строках
Есть пустые значения при заполненной ссылке — не хватает ветки в ВЫБОР
Совпадают с контрольным запросом с отбором ССЫЛКА
Расхождения — часть документов попала в ИНАЧЕ или NULL
Одна группа на каждый вид документа
Группа на каждую строку — группировка построена по представлению
Частые вопросы
Можно ли получить имя вида документа строкой прямо в запросе, не перечисляя виды?
Нет, в языке запросов 1С нет функции, возвращающей имя метаданных вида документа. Варианты: перечислить виды через ВЫБОР КОГДА ... ССЫЛКА, вывести ТИПЗНАЧЕНИЯ и обработать его в коде через Метаданные(), либо использовать ПРЕДСТАВЛЕНИЕ, если устроит текст с номером и датой.
Чем отличается ССЫЛКА от ТИПЗНАЧЕНИЯ при проверке типа?
Оператор ССЫЛКА проверяет, принадлежит ли значение конкретному виду документа, и возвращает булево — его используют в условиях ГДЕ и ВЫБОР. ТИПЗНАЧЕНИЯ возвращает сам тип как значение, которое можно выводить, сравнивать с другим типом и использовать в группировках.
Почему отбор ТИПЗНАЧЕНИЯ(Поле) = ТИП(Документ.РеализацияТоваровУслуг) не работает?
Функции ТИП() в языке запросов нет. Для отбора по виду документа используйте оператор ССЫЛКА: Поле ССЫЛКА Документ.РеализацияТоваровУслуг. Это корректный и наиболее производительный способ.
Как вывести тип документа в динамическом списке журнала?
Если используется стандартный журнал документов, у его основной таблицы есть поле «Тип» — добавьте его в запрос динамического списка или в настройки списка. Для произвольного запроса динамического списка применяйте ТИПЗНАЧЕНИЯ или ВЫБОР, как в обычном запросе.
Влияет ли вычисление типа на производительность запроса?
ТИПЗНАЧЕНИЯ и ССЫЛКА — лёгкие операции, их влияние обычно незаметно. Замедление возможно при выводе ПРЕДСТАВЛЕНИЯ для больших выборок, так как представление строится для каждой строки. Если представление нужно не всегда, выводите его только в финальной выборке после группировки.
Что важно запомнить
Для логики, отборов и группировок используйте ТИПЗНАЧЕНИЯ и оператор ССЫЛКА, для понятного названия вида в отчёте — ВЫБОР КОГДА с обязательной веткой ИНАЧЕ, для показа документа пользователю — ПРЕДСТАВЛЕНИЕ. Не сравнивайте тип со строкой и не группируйте по представлению. Проверяйте результат в консоли запросов сверкой итогов по видам документов.