К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как узнать тип документа в 1С

Как узнать тип документа в 1С: через интерфейс, код 1С (ТипЗнч, Метаданные), запрос и СКД. Примеры для пользователя и разработчика.

Тип документа в 1С — это вид объекта конфигурации, к которому относится конкретная запись: «Реализация товаров и услуг», «Поступление товаров», «Приходный кассовый ордер» и т.д. Задача определить тип возникает у обычных пользователей (когда нужно понять, что за документ перед ними), у бухгалтеров (при разборе проводок и оснований) и у разработчиков (при написании универсальных алгоритмов, обработок и запросов).

Способов несколько, и выбор зависит от роли: пользователю достаточно интерфейсных приёмов и стандартных отчётов, программисту нужны методы встроенного языка — ТипЗнч(), Тип(), обращение к метаданным через Метаданные(). Ниже разобраны все рабочие варианты с примерами кода и проверкой результата.

Как определить тип документа в интерфейсе без программирования

Самый простой случай — документ открыт на экране. Его тип указан в заголовке формы: сначала идёт название вида документа, затем номер и дата, например «Реализация (акты, накладные, УПД) 0000-001234 от 15.03.2026». Это и есть тип в пользовательском представлении.

Если документ виден только в списке, откройте журнал документов и включите отображение колонки с видом документа. В типовых конфигурациях (Бухгалтерия предприятия, Управление торговлей, ERP) общие журналы содержат колонку «Документ» или «Вид», где тип выводится перед номером. Если колонки нет, настройте состав колонок через меню «Ещё» → «Изменить форму» или «Настройка списка».

Когда документ упоминается внутри другого объекта — например, в поле «Документ-основание» или в движениях проводки, — наведите курсор на ссылку: всплывающая подсказка и префикс в представлении покажут вид документа. Клик по ссылке откроет сам документ, где тип виден в заголовке.

Как узнать тип через журнал проводок и стандартные отчёты

Бухгалтеры чаще всего сталкиваются с задачей определить тип документа, разбирая проводку. Откройте журнал проводок (раздел «Операции» → «Операции, введённые вручную» или «Проводки» в зависимости от конфигурации): в колонке «Документ» отображается регистратор с указанием его вида. Двойной клик по ячейке открывает сам документ.

В отчётах «Оборотно-сальдовая ведомость по счёту», «Анализ счёта» и «Карточка счёта» расшифровка до документа также показывает его вид. При двойном клике по сумме открывается отчёт-расшифровка, где в колонке регистратора видно полное наименование документа с типом.

Определение типа документа в коде: ТипЗнч и Тип

Основной инструмент разработчика — функция ТипЗнч(Значение). Она возвращает объект типа «Тип», который можно сравнить с конкретным типом документа через функцию Тип("ИмяТипа"). Имя типа для ссылки на документ строится по шаблону ДокументСсылка.ИмяДокумента, для объекта — ДокументОбъект.ИмяДокумента.

Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда

// это реализация

ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда

// это поступление

КонецЕсли;

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

bsl
Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда
    Сообщить("Это приходный кассовый ордер");
КонецЕсли;

Универсальное определение типа через метаданные

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

ИмяДокумента = ДокументСсылка.Метаданные().Имя;           // "РеализацияТоваровУслуг"

Синоним = ДокументСсылка.Метаданные().Синоним; // "Реализация (акты, накладные, УПД)"

ПолноеИмя = ДокументСсылка.Метаданные().ПолноеИмя(); // "Документ.РеализацияТоваровУслуг"

Метод ПолноеИмя() особенно полезен, когда заранее неизвестно, что за объект передан в процедуру: он возвращает строку вида «Документ.Имя», «Справочник.Имя», «ПланСчетов.Имя» — и по первому слову сразу понятен вид объекта. Альтернатива для старого кода — функция XMLТипЗнч() или получение типа через Строка(ТипЗнч(Ссылка)), но последний вариант возвращает локализованное представление и ненадёжен.

Как получить имя типа документа строкой
  1. 1
    Убедитесь, что в переменной находится ссылка на документ, а не структура или строка
  2. 2
    Вызовите Ссылка.Метаданные().Имя — получите имя из конфигуратора
  3. 3
    Для пользовательского названия используйте Ссылка.Метаданные().Синоним
  4. 4
    Проверьте результат через Сообщить() или отладчик

Определение типа в запросе и СКД

В языке запросов 1С тип значения проверяется функцией ТИПЗНАЧЕНИЯ() в сочетании с оператором ССЫЛКА. Это нужно, когда поле составного типа (например, «Документ-основание» или регистратор) может хранить ссылки на разные виды документов.

ВЫБРАТЬ

Взаиморасчеты.Регистратор КАК Регистратор

ГДЕ

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

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

Сравнение способов определения типа

Интерфейс (заголовок, журнал)

Подходит пользователю без прав разработчика. Ограничение — не работает для массовой обработки и не даёт имени из конфигуратора

ТипЗнч() и Тип()

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

Метаданные().Имя

Универсальный способ получить имя строкой. Только серверный контекст для некоторых объектов, чуть медленнее прямого сравнения типов

ТИПЗНАЧЕНИЯ() в запросе

Единственный вариант для фильтрации по типу на уровне СУБД. Не возвращает имя типа строкой

Проверка типа составного поля: основания и регистраторы

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

Правильная последовательность: сначала проверить тип через ТипЗнч(), и только потом обращаться к специфичным реквизитам. Либо использовать конструкцию Если ЗначениеЗаполнено(Основание) И ТипЗнч(Основание) = Тип(...) Тогда. Для проверки «это вообще любой документ, а не справочник» удобен анализ Метаданные().ПолноеИмя() или проверка через Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)).

Типичные ошибки при определении типа документа

Первая ошибка — сравнение типа по строковому представлению: Строка(ТипЗнч(Ссылка)) = "Реализация товаров и услуг". Представление зависит от языка интерфейса и синонима в конфигурации, поэтому после обновления конфигурации или смены языка такой код молча перестаёт работать. Всегда сравнивайте сами типы, а не их строки.

Вторая ошибка — путаница между ссылкой и объектом. Типы ДокументСсылка.Имя и ДокументОбъект.Имя — разные типы, и сравнение объекта с типом ссылки вернёт «Ложь». Если в переменной может оказаться и то и другое, приводите к единому виду: для объекта используйте Объект.Ссылка либо проверяйте оба варианта.

Третья ошибка — использование имени из интерфейса вместо имени из конфигуратора в функции Тип() и запросах. Строка «Реализация (акты, накладные)» в Тип() вызовет ошибку — нужно точное имя метаданных «РеализацияТоваровУслуг». Посмотреть его можно в конфигураторе или через метод Метаданные().Имя в отладчике.

Типичные ошибки
01
Сравнение типа по строковому представлению — код ломается при смене синонима или языка
02
Сравнение ДокументОбъект с типом ДокументСсылка — условие никогда не выполняется
03
Использование синонима вместо имени метаданных в Тип() и запросах — ошибка выполнения
04
Обращение к реквизитам составного поля без предварительной проверки типа — исключение в рантайме

Как проверить, что тип определён правильно

Для пользователя проверка проста: откройте документ и сверьте заголовок формы с ожидаемым видом. Для разработчика надёжный способ — отладчик: поставьте точку останова, вычислите выражение ТипЗнч(Ссылка) и Ссылка.Метаданные().ПолноеИмя() и сравните с ожиданием.

При массовой обработке выведите промежуточный результат через Сообщить() или в табличный документ до выполнения любых изменений. Если количество распознанных документов не совпадает с ожидаемым, ищите документы нестандартных видов — их легко упустить при жёстком перечислении типов через ИначеЕсли.

Контрольные точки

Как проверить результат

Заголовок открытого документа
Норма

Вид документа совпадает с ожидаемым

Тревожный признак

Другой вид — значит, ссылка или отбор вели не на тот объект

ТипЗнч(Ссылка) в отладчике
Норма

Возвращает ДокументСсылка.ИмяНужногоДокумента

Тревожный признак

Возвращает Неопределено, строку или другой тип

Количество обработанных документов
Норма

Совпадает с числом документов нужного вида в журнале

Тревожный признак

Часть документов пропущена — не все типы перечислены в условии

Итог

Что важно запомнить

Пользователю тип документа виден в заголовке формы и журналах, разработчику его дают ТипЗнч() с Тип(), метод Метаданные().Имя и ТИПЗНАЧЕНИЯ() в запросах. Сравнивайте типы, а не строки, различайте ссылку и объект, а перед обращением к реквизитам составного поля всегда проверяйте тип. Любую обработку с записью сначала проверяйте на копии базы.

Частые вопросы

Как узнать имя документа в конфигураторе, если я вижу только пользовательское название?

Откройте конфигуратор и в дереве конфигурации найдите ветку «Документы» — у каждого объекта есть колонки «Имя» и «Синоним». Синоним — это то, что видит пользователь, имя — то, что используется в коде. Если доступа к конфигуратору нет, вычислите в отладчике выражение Ссылка.Метаданные().Имя для любого документа этого вида.

Чем отличается ДокументСсылка от ДокументОбъект при определении типа?

Ссылка — это лёгкий указатель на запись в базе, объект — загруженные в память данные документа с возможностью изменения. Это разные типы: ТипЗнч(Объект) вернёт «ДокументОбъект.Имя», а не «ДокументСсылка.Имя». Для сравнения приведите объект к ссылке через свойство Ссылка или проверяйте оба варианта типа.

Можно ли узнать тип документа по его номеру?

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

Как в запросе отобрать документы нескольких разных типов сразу?

Используйте конструкцию ВЫБОР с несколькими условиями: ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.Первый) ТОГДА ИСТИНА КОГДА ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.Второй) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ. Альтернатива — оператор В с перечислением конкретных ссылок, если их немного и они известны заранее.

Почему ТипЗнч возвращает «Неопределено» или «Строка» вместо типа документа?

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

Как узнать тип документа-регистратора у проводки в типовой бухгалтерии?

Откройте журнал проводок, найдите нужную запись и посмотрите колонку «Документ» — там указан вид и номер регистратора. Двойной клик откроет сам документ. В коде тип регистратора определяется стандартно: ТипЗнч(Проводка.Регистратор) или Проводка.Регистратор.Метаданные().Имя.