Справочники и Данные · 8 мин
Как в 1С определить, документ это или справочник
Как в 1С определить, является ли объект документом или справочником: визуальные признаки, структура метаданных, поля и код на встроенном языке.
Пользователи и начинающие разработчики 1С часто сталкиваются с ситуацией: в базе есть объект — например, «Поступление товаров» или «Номенклатура» — и нужно понять, к какому типу метаданных он относится. Это важно, потому что документы и справочники ведут себя по-разному: документы проводятся и формируют движения по регистрам, а справочники хранят постоянные, редко меняющиеся данные.
Есть несколько способов отличить документ от справочника: по внешним признакам в интерфейсе, по структуре в конфигураторе, по поведению объекта и программно — через встроенный язык 1С. Ниже разобраны все варианты, от простейшего визуального до программной проверки типа.
Чем документ отличается от справочника по смыслу
Справочник — это хранилище условно-постоянной информации: контрагенты, сотрудники, номенклатура, склады. Элемент справочника создаётся один раз и используется многократно, в него лишь вносят уточнения. Удаление элемента справочника обычно недопустимо, если на него есть ссылки, — вместо этого применяют пометку на удаление.
Документ — это отражение хозяйственной операции: продажа, оплата, приём на работу, перемещение товара. Документ всегда привязан к моменту времени, имеет номер и дату, а главное — может проводиться, то есть формировать записи в регистрах учёта. Именно проведение отличает документ от любой другой сущности.
Простое мнемоническое правило: справочник отвечает на вопрос «кто/что», документ — «что произошло и когда». Контрагент — справочник, а «Реализация товаров и услуг» по этому контрагенту — документ.
Как отличить объект по внешним признакам в интерфейсе
Откройте форму объекта в режиме предприятия и посмотрите на обязательные поля. Если вверху формы есть поля «Номер» и «Дата», а внизу — кнопки «Провести», «Провести и закрыть», «Отмена проведения» — перед вами документ. Если ключевые поля — «Код» и «Наименование», а кнопок проведения нет — это справочник.
Дополнительный признак — наличие в документе табличной части с товарами или услугами и итоговой суммы. У справочников табличные части тоже бывают (например, «Контактная информация»), но там нет итогов по сумме документа и нет кнопки проведения.
В списке объектов документы обычно отображаются с колонками «Номер», «Дата», «Проведён» (иконка состояния), а справочники — с колонками «Код» и «Наименование». У документов также есть журнал — общий список, где собраны документы разных видов.
Номер и дата обязательны только у документов
Только документы проводятся по регистрам
Код и наименование — стандартные реквизиты справочника
Зелёная/серая отметка показывает состояние проведения
Как проверить тип объекта в конфигураторе
Самый надёжный способ — посмотреть дерево конфигурации. Откройте конфигуратор, затем меню «Конфигурация → Открыть конфигурацию». В дереве объектов метаданных есть отдельные ветки: «Справочники», «Документы», «Регистры сведений», «Регистры накопления» и другие. Найдите нужный объект поиском (Ctrl+F в дереве или через «Правка → Найти») — ветка, в которой он расположен, и есть его тип.
Этот способ требует права на запуск конфигуратора и, как правило, монопольный доступ не нужен для просмотра. Если конфигуратор недоступен (типовая работа пользователя), используйте визуальные признаки или функциональные опции в режиме предприятия.
- 1Откройте конфигуратор и загрузите конфигурацию
- 2Раскройте дерево объектов метаданных
- 3Найдите объект поиском по имени
- 4Посмотрите, в какой ветке он находится: Справочники или Документы
- 5При необходимости откройте свойства объекта и проверьте, какие регистры он двигает
Как определить тип программно на встроенном языке
В коде 1С тип объекта определяется через метаданные. У любой ссылки есть метод Метаданные(), который возвращает объект описания метаданных, а дальше проверяется принадлежность к коллекции «Документы» или «Справочники».
Если Метаданные.Документы.Содержит(Ссылка.Метаданные()) Тогда
Сообщить("Это документ: " + Ссылка.Метаданные().Имя);
ИначеЕсли Метаданные.Справочники.Содержит(Ссылка.Метаданные()) Тогда
Сообщить("Это справочник: " + Ссылка.Метаданные().Имя);
КонецЕсли;
Альтернативный вариант — функции Документы.ТипВсеСсылки() и Справочники.ТипВсеСсылки() с методом СодержитТип(). Для быстрой разовой проверки удобно использовать метод ТипЗнч() совместно с этими описаниями типов.
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда
// это документ
КонецЕсли;Как отличить по поведению: проведение и движения
Функциональный тест: попробуйте записать объект. Документ предложит провести его, и после проведения появятся движения — их можно посмотреть через кнопку «Движения документа» (или «Перейти → Движения по регистрам»). У справочника такой команды нет в принципе, потому что он не создаёт записей в регистрах.
Ещё один признак — отмена проведения. Если объект можно «распровести» и вернуть в состояние «не проведён», это точно документ. Справочник либо записан, либо помечен на удаление, промежуточных состояний учёта у него нет.
Как проверить результат
Кнопка есть и документ проводится — это документ
Кнопки нет — перед вами справочник или другой объект
После проведения видны записи в регистрах
Записей нет — либо документ не проведён, либо это справочник
Объект найден в Документы или Справочники
Объект не найден — возможно, это регистр, отчёт или обработка
Частые ошибки при определении типа объекта
Главная ошибка — судить по названию. Слово «Приказ» или «Счёт» встречается и в документах, и в других объектах; наоборот, некоторые справочники называются так, будто это операции. Всегда проверяйте по признакам или в конфигураторе, а не по имени.
Вторая ошибка — путать документ с регистром сведений. Регистры сведений тоже могут иметь период (дату), но у них нет номера и проведения в привычном смысле. Третья ошибка — считать, что любой объект с табличной частью и суммой — документ: у справочника «Договоры» может быть табличная часть, но проводиться он не будет.
Что делать, если объект не похож ни на документ, ни на справочник
В 1С есть и другие типы метаданных: регистры сведений и накопления, планы счетов, планы видов характеристик, бизнес-процессы, задачи, отчёты и обработки. Если у объекта нет ни кода/наименования, ни номера/даты — вероятно, это один из этих типов. Точный ответ снова даст конфигуратор.
Программно универсальную проверку можно построить через перебор коллекций метаданных: Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)) вернёт объект описания метаданных, а его свойство Имя и родительская коллекция покажут точный тип.
Что важно запомнить
Документ имеет номер, дату и проводится по регистрам; справочник имеет код и наименование и хранит постоянные данные. Точный тип объекта всегда виден в дереве конфигурации, а программно определяется через Метаданные() или ТипВсеСсылки().
Частые вопросы
Может ли справочник проводиться?
Нет. Проведение — свойство только документов. Справочник либо записан, либо помечен на удаление. Если объект проводится и создаёт движения по регистрам, это документ, даже если его назвали как справочник.
Как узнать тип объекта, если нет доступа к конфигуратору?
Откройте форму объекта в режиме предприятия: наличие полей «Номер» и «Дата» и кнопки «Провести» указывает на документ, поля «Код» и «Наименование» без проведения — на справочник. Также помогает список: у документов есть колонка состояния проведения.
Чем документ отличается от регистра сведений?
Документ имеет номер, дату и проводится, создавая записи в регистрах. Регистр сведений — это таблица данных, записи в которую вносятся напрямую или документом-регистратором; у самостоятельной записи регистра нет номера и кнопки проведения.
Как программно получить имя вида документа или справочника?
Используйте Ссылка.Метаданные().Имя — вернётся строка вида «РеализацияТоваровУслуг». Вид объекта (документ или справочник) определяется через Метаданные.Документы.Содержит(...) или Метаданные.Справочники.Содержит(...).
Почему у документа нет кнопки «Провести»?
Либо у текущего пользователя нет прав на проведение, либо в конфигурации для этого вида отключено проведение (документ работает как простая форма ввода). Проверить можно в свойствах объекта в конфигураторе — раздел «Движения» и признак «Проведение».
Можно ли превратить справочник в документ или наоборот?
Нет, тип метаданных изменить нельзя — только создать новый объект нужного типа и перенести данные обработкой. Такая операция требует резервной копии базы и аккуратной проверки всех ссылок на старый объект.