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