Тип данных реквизита в Конфигураторе 1С 8.3: от строки до составного типа

· 10 мин

Содержание

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

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

Где в Конфигураторе находится тип реквизита

Порядок действий одинаков для справочника, документа, регистра и обработки. Всё описанное относится к платформе 1С:Предприятие 8.3 и не зависит от конфигурации.

  1. Запустите базу в режиме Конфигуратор и откройте дерево: Конфигурация → Открыть конфигурацию.
  2. Разверните нужный объект, например Справочники → Номенклатура, затем ветку Реквизиты. Для реквизита табличной части разверните табличную часть.
  3. Новый реквизит добавляют через контекстное меню ветки Реквизиты → Добавить. Существующий просто выделите.
  4. Откройте палитру свойств: двойной щелчок по реквизиту или контекстное меню → Свойства.
  5. В группе Основные найдите свойство Тип.

У поля Тип два способа выбора:

  • 🔽 выпадающий список — для простых типов и быстрого выбора одного ссылочного типа;
  • 🔲 кнопка ... — открывает окно «Редактирование типа данных», где видны все доступные типы, флажок составного типа и квалификаторы.

Новый реквизит по умолчанию получает тип Строка длиной 10 символов. Если забыть его поменять, в базе появится поле, куда помещается разве что короткий код.

В окне редактирования типа есть строка поиска. Наберите часть имени, например «Контраг», — список отфильтруется до СправочникСсылка.Контрагенты и родственных типов. В больших конфигурациях это быстрее, чем листать дерево.

После любой правки сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Пока этого не сделано, пользователи работают со старой структурой.

Простой тип или составной: что выбрать

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

ТипЧто хранитПример реквизита
СтрокаТекст, длина задаётсяАртикул, Комментарий
ЧислоЦелое или дробное числоКоличество, Цена, Сумма
ДатаДату, время или обаДата поставки
БулевоИстина или ЛожьУслуга, Не использовать
Уникальный идентификаторGUIDИдентификатор во внешней системе
Хранилище значенияЛюбое сериализуемое значение, файл, картинкуФото товара
СправочникСсылка, ДокументСсылка и другие ссылкиСсылку на объект базыКонтрагент, Договор, Основание

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

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

Как понять, что составной тип оправдан:

  • ✅ значение действительно бывает разной природы, и это нормальная ситуация, а не исключение;
  • ✅ число типов небольшое и понятное пользователю;
  • ❌ не стоит делать составным реквизит «на всякий случай» — запросы к такому полю сложнее и медленнее;
  • ❌ не смешивайте строку и число, чтобы «хранить что угодно» — потом не получится ни отсортировать, ни сложить.

При выборе значения в составное поле пользователь сначала видит окно выбора типа, а уже потом список объектов. Если типов три-четыре, это терпимо, если двадцать — неудобно.

Кроме конкретных типов в списке есть обобщённые: Любая ссылка, СправочникСсылка (любой справочник), ДокументСсылка (любой документ). Они удобны для служебных реквизитов, но пользователю с ними работать сложнее всего.

Определяемые типы

Если один и тот же набор типов нужен в десятке объектов, заведите определяемый тип: Общие → Определяемые типы. Задайте в нём состав типов один раз, а у реквизитов выберите этот определяемый тип. Чтобы добавить в набор новый документ, правите одно место, а не каждый реквизит. Этим приёмом активно пользуется Библиотека стандартных подсистем, на которой построены типовые конфигурации.

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

Чтобы реквизит хранил, например, контрагента, в окне редактирования типа раскройте узел справочников и отметьте СправочникСсылка.Контрагенты. Для документа — узел документов и нужный ДокументСсылка.<Имя>.

В базе такой реквизит хранит не наименование, а ссылку на элемент. Если элемент справочника переименуют, во всех документах автоматически покажется новое имя.

После выбора ссылочного типа в палитре свойств становятся полезны дополнительные настройки:

  • 📂 Выбор групп и элементов — для иерархических справочников: можно ли выбрать папку, только элемент или и то и другое;
  • 🔗 Связи параметров выбора — отбор по другому реквизиту. Пример: в поле Договор показывать только договоры контрагента, выбранного в поле Контрагент;
  • 🎯 Параметры выбора — фиксированный отбор, например только элементы с признаком «Услуга»;
  • ⚠️ Проверка заполнения — значение «Выдавать ошибку» не даст записать объект с пустым полем;

Справочник, документ или перечисление, на которые вы ссылаетесь, должны уже существовать в конфигурации. Если объекта ещё нет, сначала создайте его, иначе нужного типа просто не будет в списке.

Тип «Характеристика»

Для плана видов характеристик есть особый вариант. Реквизит может иметь тип, который определяется значением другого реквизита. Его задают через свойство Связь по типу: тип поля Значение берётся из выбранного вида характеристики. Так устроены свойства товаров и дополнительные реквизиты.

Длина, точность и формат: квалификаторы типа

Квалификаторы — нижняя часть окна редактирования типа. Они уточняют простой тип.

Строка

  • Длина — максимальное число символов, допустимо до 1024. Значение 0 означает неограниченную строку.
  • Допустимая длина — переменная или фиксированная. При фиксированной короткие значения дополняются пробелами справа, поэтому для обычных полей ставят переменную.

Неограниченную строку используйте только для длинных текстов: комментариев, описаний. Такие поля нельзя индексировать и неудобно использовать в условиях запросов — сравнивать их приходится через ВЫРАЗИТЬ(Поле КАК СТРОКА(100)) или ПОДСТРОКА.

Число

  • Длина — общее количество разрядов, включая дробную часть. Максимум 38.
  • Точность — сколько из этих разрядов приходится на дробную часть.
  • Неотрицательное — запрещает ввод минуса.

Проверим на примере. Длина 15, точность 2 — это до 13 цифр в целой части и 2 в дробной, то есть суммы до 9 999 999 999 999,99. Для количества товара обычно берут длину 15 и точность 3, для цены — 15 и 2.

НазначениеДлинаТочностьНеотрицательное
Сумма в рублях152нет
Цена152да
Количество153да
Процент скидки52да
Порядковый номер100да

Дата

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

Формат отображения

Формат вывода задают отдельными свойствами реквизита: Формат и Формат редактирования. Открывается конструктор форматной строки, где можно выбрать, например, разделитель групп разрядов или вид даты. Для строк есть свойство Маска — например, +7 (999) 999-99-99 для телефона, где 9 обозначает цифру.

Формат меняет только отображение. Если реквизит хранит 2 знака после запятой, формат с 4 знаками не добавит точности.

Перечисления и булевы реквизиты

Реквизит с выбором из фиксированного списка

Когда вариантов немного и они не меняются пользователем (статус «Новый / В работе / Закрыт», вид оплаты), делайте перечисление:

  1. В дереве конфигурации: Перечисления → Добавить. Задайте имя, например СтатусыЗаявок.
  2. На закладке Значения добавьте элементы: Новая, ВРаботе, Закрыта. Синонимы — то, что увидит пользователь.
  3. У реквизита выберите тип ПеречислениеСсылка.СтатусыЗаявок.
  4. Если нужно значение по умолчанию, укажите его в свойстве Значение заполнения реквизита.

Перечисление или справочник — выбор простой:

КритерийПеречислениеСправочник
Кто добавляет вариантыТолько разработчикПользователь
Можно ли ссылаться в кодеДа, Перечисления.СтатусыЗаявок.НоваяТолько через предопределённые элементы
Дополнительные поля у значенияНетДа

Булево

Тип Булево хранит Истина или Ложь и на форме обычно выводится флажком. Пустого значения у него нет: по умолчанию Ложь.

Если в задаче три состояния («да», «нет», «не указано»), булево не подойдёт. Используйте перечисление из двух значений — пустая ссылка и будет «не указано».

Чтобы в отчёте вместо «Да/Нет» выводилось что-то своё, задайте формат, например БЛ=Нет; БИ=Да или БЛ=Товар; БИ=Услуга.

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

В типовых конфигурациях на Библиотеке стандартных подсистем (Бухгалтерия предприятия 3.0, ЗУП 3.1, Управление торговлей 11) можно добавить реквизит в режиме 1С:Предприятие, не снимая конфигурацию с поддержки.

  1. Включите функцию: в БП 3.0 — Администрирование → Общие настройки, флажок Дополнительные реквизиты и сведения.
  2. Перейдите по ссылке Дополнительные реквизиты в том же разделе.
  3. Выберите набор, например справочник Номенклатура, и создайте новый реквизит.
  4. В поле Тип значения выберите строку, число, дату, булево, ссылку на справочник или вариант со своим списком значений.

Список типов здесь ограничен, и квалификаторы задаются проще, чем в Конфигураторе. Зато реквизит не потеряется при обновлении типовой конфигурации.

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

Программная установка типа: ОписаниеТипов

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

Создание описания типов:

// Число 15.2, неотрицательное
ТипСумма = Новый ОписаниеТипов("Число",
    Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный));

// Строка 100 символов переменной длины
ТипСтрока = Новый ОписаниеТипов("Строка", ,
    Новый КвалификаторыСтроки(100, ДопустимаяДлина.Переменная));

// Только дата, без времени
ТипДата = Новый ОписаниеТипов("Дата", , ,
    Новый КвалификаторыДаты(ЧастиДаты.Дата));

// Составной тип из двух ссылок
ТипОснование = Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента, ДокументСсылка.СчетНаОплату");

Колонка таблицы значений с заданным типом:

Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Таблица.Колонки.Добавить("Сумма", ТипСумма);

Типизированные колонки важны, если таблицу потом передают в запрос как временную: без типа платформа не сможет поместить колонку во временную таблицу.

Реквизит формы, добавленный кодом

&НаСервере
Процедура ДобавитьРеквизитСумма()

    Добавляемые = Новый Массив;
    Добавляемые.Добавить(Новый РеквизитФормы("СуммаДоплаты",
        Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)), , "Сумма доплаты"));
    ИзменитьРеквизиты(Добавляемые);

    Поле = Элементы.Добавить("СуммаДоплаты", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеВвода;
    Поле.ПутьКДанным = "СуммаДоплаты";

КонецПроцедуры

Третий параметр РеквизитФормы — путь, пустой означает реквизит верхнего уровня формы. Четвёртый — заголовок.

Проверка и приведение типа

  • ТипЗнч(Значение) = Тип("СправочникСсылка.Контрагенты") — проверить, что лежит в составном реквизите;
  • ОписаниеТипов.СодержитТип(Тип("Число")) — узнать, допускает ли описание нужный тип;
  • ОписаниеТипов.ПривестиЗначение(Значение) — привести значение к описанию: лишние символы строки обрежутся, неподходящее значение превратится в пустое.

Тип реквизита метаданных можно прочитать: Метаданные.Справочники.Номенклатура.Реквизиты.Артикул.Тип возвращает его ОписаниеТипов.

Ошибки при установке и смене типа

Диагностика: выберите симптом

Самая опасная операция — смена ссылочного типа у заполненного реквизита. Если реквизит хранил ссылки на справочник А, а вы поменяли тип на справочник Б, старые значения при реструктуризации не станут ссылками на Б. Данные в поле фактически теряются.

Перед сменой типа у реквизита с данными сделайте резервную копию базы через Администрирование → Выгрузить информационную базу. Безопасный путь: добавьте новый реквизит нужного типа, перенесите данные обработкой, проверьте результат и только потом удаляйте старый.

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

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

Можно ли изменить тип реквизита в рабочей базе без выгона пользователей?
Для изменения структуры таблиц обычно нужен монопольный доступ. Платформа может предложить динамическое обновление, но изменения структуры данных применяются только при монопольном режиме. Планируйте такую правку на время, когда в базе никто не работает.
Чем отличается тип реквизита от типа поля на форме?
Тип реквизита определяет, что хранится в базе. Поле формы лишь показывает данные: поле ввода, флажок, переключатель. Флажок можно вывести только для булева значения.
Сколько типов можно включить в составной тип?
Жёсткого практического ограничения в окне нет, но каждый ссылочный тип усложняет запросы и выбор значения. Если типов больше пяти-шести, подумайте об определяемом типе или о перестройке модели данных.
Почему у реквизита типа Число в базе хранится 0, а не пусто?
У числа нет отдельного пустого значения: пустое число равно нулю. Если нужно отличать «не заполнено» от нуля, заведите отдельный булев признак «Заполнено» или проверяйте заполнение по смыслу документа.
Можно ли поменять тип реквизита в расширении?
Надёжный путь — не трогать типовой реквизит, а добавить в расширении собственный реквизит нужного типа к заимствованному объекту. Так правка переживёт обновление типовой конфигурации.