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

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

1С 8: как определить, справочник или документ перед вами

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

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

Определить вид объекта можно несколькими способами: визуально в интерфейсе, через конфигуратор, программно через метаданные, по структуре ссылки или запросом. Выбор способа зависит от того, где вы находитесь — в режиме предприятия, в конфигураторе или внутри программного кода.

Визуальные признаки в режиме предприятия

Быстрее всего отличить справочник от документа по внешнему виду формы. Документ всегда имеет номер и дату — эти поля присутствуют в шапке формы и в списке. Справочник в типовом виде имеет код и наименование, номера и даты у него нет.

Второй признак — кнопки проведения. У документа в командной панели есть кнопки «Провести», «Провести и закрыть», а в списке — пиктограммы состояния проведения (проведён, не проведён, помечен на удаление). У справочника таких кнопок нет: он просто записывается.

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

Номер и датаЕсть у документа

Поля «Номер» и «Дата» в шапке — признак документа

ПроведениеЕсть у документа

Кнопки «Провести» и пиктограммы проведения в списке

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

Стандартные реквизиты справочника без даты

ДвиженияТолько у документа

Кнопка «Движения документа» и связанные регистры

Определение вида объекта в конфигураторе

Если есть доступ к конфигуратору, откройте дерево конфигурации: ветки «Справочники» и «Документы» разделены, и найти нужный объект можно по имени через поиск (Ctrl+F или Ctrl+Shift+F для глобального поиска). Двойной клик по объекту открывает палитру свойств, где видно его принадлежность.

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

Дополнительно в палитре свойств документа видна вкладка «Движения» со списком регистров, а у справочника — вкладки «Иерархия», «Владельцы», «Нумерация». Уже по набору вкладок палитры свойств можно понять вид объекта, даже не глядя в дерево.

Программное определение через метаданные

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

МетаОбъект = Ссылка.Метаданные();

Если Метаданные.Справочники.Содержит(МетаОбъект) Тогда

// это справочник

ИначеЕсли Метаданные.Документы.Содержит(МетаОбъект) Тогда

// это документ

КонецЕсли;

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

bsl
ПолноеИмя = Ссылка.Метаданные().ПолноеИмя();
ВидОбъекта = СтрРазделить(ПолноеИмя, ".")[0]; // "Справочник" или "Документ"

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

Определение вида в запросе

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

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

Учтите ограничение: запрос проверяет тип значения поля, а не «вид объекта вообще». Если поле необязательное и пустое, проверка ССЫЛКА вернёт ложь даже при подходящем типе — пустые ссылки разных видов различаются, и это иногда становится источником ошибок в отборах.

Определение по строковому представлению и навигационной ссылке

Иногда объект доступен только как строка — например, из журнала регистрации, обмена или внешнего источника. Навигационная ссылка вида e1cib/data/Документ.РеализацияТоваровУслуг?ref=... прямо содержит вид объекта после «data/». Аналогично полное имя метаданных в XML-выгрузках начинается со слова «Справочник» или «Документ».

По представлению ссылки тоже можно сделать вывод: документ обычно представляется как «Реализация товаров и услуг 0000-000123 от 15.03.2026», то есть содержит номер и дату. Справочник представляется наименованием без даты. Это эвристика, а не гарантия — представление может быть переопределено в модуле менеджера объекта.

Типичные ошибки и ограничения

Типичные ошибки
01
Проверка вида по строковому представлению: представление можно переопределить, и проверка сломается — используйте метаданные
02
Определение по наличию даты в форме: у справочника могут быть реквизиты типа «Дата», это не делает его документом
03
Сравнение через ТипЗнч с перечислением всех типов: код громоздкий и ломается при добавлении новых объектов в конфигурацию
04
Игнорирование составных типов: поле может хранить и справочник, и документ, проверка одного типа даст неполный результат

Отдельная ловушка — внешние источники данных и COM-соединения. При работе через COM типы объектов другой базы не совпадают с типами текущей, и ТипЗнч там неприменим. Определяйте вид через метаданные той базы или по полному имени объекта.

Ещё одно ограничение: у пользователя может не быть прав на просмотр объекта. В этом случае обращение к метаданным в привилегированном режиме сработает, а в обычном — может вызвать ошибку доступа. Для универсальных обработок предусмотрите обработку исключений.

Маршрут решения

Как выбрать способ

Нужно быстро понять, что за объект открыт на экранеСмотрите на номер, дату и кнопки проведения — это документ, если они есть
Пишете универсальный код для любой ссылкиИспользуйте Ссылка.Метаданные() и проверку через Метаданные.Справочники.Содержит()
Нужно отобрать записи в отчёте или выборкеПрименяйте оператор ССЫЛКА в запросе
Есть только строка из журнала или обменаРазберите полное имя вида «Документ.ИмяОбъекта» по первому слову
Итог

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

Документ отличается номером, датой и проведением, справочник — кодом и наименованием. В коде вид объекта надёжно определяется через метаданные, в запросе — оператором ССЫЛКА. Проверки по строковому представлению ненадёжны.

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

Можно ли определить вид объекта, не открывая его форму?

Да. Наведите курсор на ссылку в списке или журнале — всплывающая подсказка и навигационная ссылка в строке состояния содержат полное имя вида «Справочник.Имя» или «Документ.Имя». Также видно по наличию номера и даты в представлении.

Чем отличается проверка через ТипЗнч от проверки через метаданные?

ТипЗнч сравнивает с конкретным типом и подходит, когда тип известен заранее — так быстрее. Метаданные позволяют определить вид любого неизвестного объекта и получить его имя, но вызов чуть тяжелее. Для универсальных обработок используйте метаданные.

Почему проверка ССЫЛКА в запросе возвращает ложь для подходящего поля?

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

Как определить вид объекта при работе через COM-соединение?

ТипЗнч текущей базы не сработает для объектов внешней базы. Получите метаданные через объектное представление внешнего соединения (Метаданные() у ссылки) и возвращайте в свою базу строковое полное имя вида «Документ.ИмяОбъекта».

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

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

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

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