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

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

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

Разбираем, как определить вид документа в 1С: по представлению, метаданным, запросом и встроенными функциями. Примеры кода, проверка результата и частые ошибки.

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

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

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

Что именно считается видом документа

В терминах платформы 1С документ — это прикладной объект, описанный в ветке «Документы» дерева конфигурации. Вид документа определяется именем этого объекта метаданных. Два документа с одинаковым номером, но разными видами — совершенно разные объекты с разными таблицами в базе данных.

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

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

Если вы работаете в режиме «Предприятие» и перед вами открыт документ, самый простой признак — заголовок формы и название журнала, из которого документ открыт. Журнал может объединять несколько видов документов, поэтому надёжнее смотреть на саму форму: типовые конфигурации выводят название вида в заголовке окна или в начале представления объекта.

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

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

Порядок действий в режиме Предприятие
  1. 1
    Откройте журнал, в котором находится документ
  2. 2
    Посмотрите на заголовок формы документа — там указано название вида
  3. 3
    Если журнал общий — добавьте колонку «Вид документа» через «Ещё → Изменить форму» или «Вывести список»
  4. 4
    Для точного имени метаданных откройте «Функции для технического специалиста» и найдите объект по ссылке

Как определить вид документа программно

Во встроенном языке 1С вид документа определяется через свойство «Метаданные» у ссылки или объекта. Вызов ДокументСсылка.Метаданные().Имя возвращает строку с именем вида, например «РеализацияТоваровУслуг». Этот способ работает для любой ссылки, не только для документов.

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

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

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

// Способ 3: синоним для вывода пользователю
ПредставлениеВида = ДокументСсылка.Метаданные().Синоним;

Если нужно проверить, что значение вообще является документом (а не справочником или другим типом), используйте проверку принадлежности к метаданным: Метаданные.Документы.Найти(Ссылка.Метаданные().Имя) <> Неопределено либо сравнение через Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)).

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

В языке запросов 1С вид документа проверяется оператором ССЫЛКА или функцией ВЫРАЗИТЬ. Конструкция ГДЕ Реквизит ССЫЛКА Документ.РеализацияТоваровУслуг отбирает только записи, где реквизит ссылается на документ этого вида. Это стандартный способ фильтрации в запросах к регистрам и таблицам с составными типами.

Если нужно получить имя вида в результате запроса, используйте виртуальное поле ТипЗначения недоступно напрямую, но можно построить выбор через ВЫБОР с перечислением типов. На практике чаще ограничиваются отбором по конкретному виду или обходят результат в коде, где вид определяется через Метаданные().

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

Как определить вид документа через конфигуратор

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

Для поиска мест, где используется конкретный вид, применяйте поиск ссылок на объект метаданных: правый клик по виду документа → «Поиск ссылок в метаданных». Это покажет все модули, запросы и реквизиты, где упоминается данный вид — полезно при анализе чужой конфигурации.

Определение вида по представлению строки

Иногда вид нужно определить из строки представления, например «Реализация товаров и услуг 0000-000123 от 15.03.2026». Надёжного штатного способа распарсить представление обратно в вид нет — формат представления настраивается. Правильное решение — хранить и передавать ссылку, а не строку. Если строка пришла извне, ищите документ перебором по номеру и дате среди подходящих видов.

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

Самая частая ошибка — сравнение вида по синониму или представлению. Синонимы меняются от версии к версии конфигурации, локализуются и могут совпадать у разных объектов. Сравнивать нужно только по имени метаданных или через ТипЗнч().

Вторая типичная ошибка — обращение Документ.Метаданные().Имя к значению, которое не является ссылкой на документ. Если переменная содержит Неопределено, строку или объект другого типа, вызов приведёт к ошибке выполнения. Перед определением вида проверяйте, что значение заполнено и является ссылкой.

Типичные ошибки
01
Сравнение вида по синониму или представлению — ломается при обновлении конфигурации
02
Вызов Метаданные() у пустого или нессылочного значения — ошибка выполнения
03
Сравнение строки имени без учёта регистра и опечаток — используйте ТипЗнч() вместо строк
04
Попытка определить вид по номеру документа — номера не уникальны между видами

Проверка результата и ограничения

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

Учитывайте ограничения: в расширениях конфигурации новые виды документов добавлять нельзя, поэтому проверки через Тип() в расширении работают только для видов основной конфигурации. В внешних обработках имя вида может отсутствовать в конкретной базе — перед обращением к Документы.ИмяВида проверяйте наличие через Метаданные.Документы.Найти("ИмяВида").

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

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

Имя вида из кода
Норма

Совпадает с именем в ветке «Документы» конфигуратора

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

Имя не найдено в метаданных — опечатка или другая конфигурация

Проверка ТипЗнч() на тестовом документе
Норма

Возвращает Истина для нужного вида и Ложь для других

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

Всегда Ложь — ссылка другого типа или не заполнена

Работа на разных базах
Норма

Код проверяет наличие вида через Метаданные.Документы.Найти()

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

Ошибка «Объект не найден» в базе без этого вида

Часто задаваемые вопросы

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

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

Чем отличается имя документа от синонима?

Имя — это идентификатор объекта метаданных латиницей без пробелов, используется в коде и запросах и не меняется при локализации. Синоним — человекочитаемое название для интерфейса, которое может меняться между версиями конфигурации. Для программной логики используйте только имя.

Как определить вид документа-основания в цепочке документов?

Получите значение реквизита, хранящего основание (обычно «ДокументОснование»), и примените к нему Метаданные().Имя или ТипЗнч(). Учтите, что реквизит может быть составного типа, поэтому вид основания заранее не известен и его нужно определять в момент выполнения.

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

Нет. Уникальный идентификатор ссылки не содержит читаемого имени вида — вид определяется по таблице, к которой относится ссылка, и это можно выяснить только в контексте конкретной информационной базы через метаданные.

Что делать, если Метаданные().Имя вызывает ошибку?

Проверьте, что переменная содержит ссылку или объект, а не Неопределено, строку или число. Используйте ЗначениеЗаполнено() и проверку типа перед обращением. Также убедитесь, что код выполняется на сервере, если клиентский контекст не поддерживает нужные вызовы.

Как получить список всех видов документов конфигурации программно?

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

Итог

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

Вид документа — это имя объекта метаданных. Программно его получают через Метаданные().Имя или проверяют через ТипЗнч(), в запросах — через ССЫЛКА, в пользовательском режиме — по заголовку формы и «Функциям для технического специалиста». Никогда не сравнивайте вид по синониму или представлению.