1с как получить тип документа в запросе 1с

Раз и навсегда запомните, как получить тип документа в запросе 1С. Короткий пример кода, никакой воды — только рабочий синтаксис для разработчиков.

Бесплатная консультация юриста

+7 (800) 302-87-29

Реклама jurik.ru

При разработке на платформе 1С:Предприятие 8 часто возникает задача определить тип документа прямо в тексте запроса. Это бывает нужно при построении отчётов, объединении данных разных видов документов, фильтрации по типу регистратора и т.д. В этой статье разберём основные способы получения типа документа в запросе 1С.

Способ 1: Функция ТИПЗНАЧЕНИЯ

В языке запросов 1С существует функция ТИПЗНАЧЕНИЯ, которая возвращает тип переданного ей значения. Чаще всего её используют совместно с функцией ТИП для сравнения типа с конкретным видом документа.

Пример проверки типа в условии ГДЕ

ВЫБРАТЬ
 РеализацияТоваровУслуг.Ссылка КАК Документ
ИЗ
 Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
 ТИПЗНАЧЕНИЯ(РеализацияТоваровУслуг.ДокументОснование) = ТИП(Документ.ЗаказКлиента)

В данном примере отбираются только те реализации, у которых документом-основанием является именно «Заказ клиента».

Способ 2: Оператор ССЫЛКА

Более лаконичный способ проверки типа ссылочного поля — оператор ССЫЛКА:

ВЫБРАТЬ
 Таблица.Регистратор КАК Регистратор
ИЗ
 РегистрНакопления.ТоварыНаСкладах КАК Таблица
ГДЕ
 Таблица.Регистратор ССЫЛКА Документ.ПриходныйОрдерНаТовары

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

Способ 3: Получение типа как значения через ВЫБОР

Если нужно не отфильтровать, а вывести тип документа в результат запроса (например, для отчёта на СКД), используется конструкция ВЫБОР:

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

Обратите внимание: напрямую вывести результат ТИПЗНАЧЕНИЯ в поле выборки нельзя, запрос вернёт значение типа «Тип», которое не всегда корректно отображается. Поэтому на практике тип преобразуют в строку через ВЫБОР либо обрабатывают уже на стороне кода.

Способ 4: Представление ссылки

Если нужно получить текстовое представление документа (включая его вид, номер и дату), можно использовать функцию ПРЕДСТАВЛЕНИЕ:

ВЫБРАТЬ
 ПРЕДСТАВЛЕНИЕ(Таблица.Регистратор) КАК ДокументПредставление
ИЗ
 РегистрНакопления.ТоварыНаСкладах КАК Таблица

Представление ссылки по умолчанию включает синоним вида документа, что часто закрывает потребность отобразить тип в отчёте.

Способ 5: Определение типа вне запроса (в коде)

Если тип нужно узнать уже после выполнения запроса, используйте встроенные функции языка:

Выборка = Запрос.Выполнить.Выбрать;
Пока Выборка.Следующий Цикл
 ТипДок = ТипЗнч(Выборка;Регистратор);
 Если ТипДок = Тип("ДокументСсылка.ПриходныйОрдерНаТовары") Тогда
 // обработка
 КонецЕсли;
  // Имя вида документа через метаданные:
 ИмяВида = Выборка.Регистратор.Метаданные.Имя;
КонецЦикла;

Полезные рекомендации

  • Для фильтрации по типу предпочитайте оператор ССЫЛКА — он работает эффективнее, чем ТИПЗНАЧЕНИЯ с ТИП.
  • При работе с составными типами (например, «ДокументОснование») всегда учитывайте, что поле может содержать NULL или значения разных видов.
  • В запросах к регистрам поле Регистратор — типичный кандидат на определение типа документа.
  • Для отчётов на СКД выводите тип через ВЫБОР со строковыми значениями — это удобно для группировок и отборов.
  • Помните, что сравнение ТИПЗНАЧЕНИЯ с ТИП не использует индексы, поэтому на больших таблицах фильтруйте данные заранее.

Получить тип документа в запросе 1С можно несколькими способами: через функцию ТИПЗНАЧЕНИЯ, оператор ССЫЛКА, конструкцию ВЫБОР для вывода в результат, а также через функции встроенного языка ТипЗнч и Метаданные после выполнения запроса. Выбор конкретного подхода зависит от задачи: для фильтрации лучше подходит ССЫЛКА, для отображения в отчётах — ВЫБОР или ПРЕДСТАВЛЕНИЕ, а для гибкой логики — обработка в коде.