Тип данных реквизита в Конфигураторе 1С 8.3: от строки до составного типа
Содержание
Тип реквизита в 1С устанавливают в Конфигураторе: откройте объект в дереве конфигурации, выделите реквизит и в палитре свойств нажмите кнопку выбора ... у свойства Тип. Откроется окно редактирования типа данных: там выбирают строку, число, дату, булево или ссылку на справочник, документ, перечисление, а внизу задают длину и точность.
Частое заблуждение — что тип можно «поправить» в режиме 1С:Предприятие, прямо в форме документа. Нельзя: тип реквизита — часть метаданных, он меняется только в конфигурации и вступает в силу после обновления конфигурации базы данных. Исключения — дополнительные реквизиты типовых конфигураций и реквизиты, которые создаются программно в форме. О них ниже.
Где в Конфигураторе находится тип реквизита
Порядок действий одинаков для справочника, документа, регистра и обработки. Всё описанное относится к платформе 1С:Предприятие 8.3 и не зависит от конфигурации.
- Запустите базу в режиме Конфигуратор и откройте дерево:
Конфигурация → Открыть конфигурацию. - Разверните нужный объект, например
Справочники → Номенклатура, затем ветку Реквизиты. Для реквизита табличной части разверните табличную часть. - Новый реквизит добавляют через контекстное меню ветки Реквизиты → Добавить. Существующий просто выделите.
- Откройте палитру свойств: двойной щелчок по реквизиту или контекстное меню → Свойства.
- В группе Основные найдите свойство Тип.
У поля Тип два способа выбора:
- 🔽 выпадающий список — для простых типов и быстрого выбора одного ссылочного типа;
- 🔲 кнопка
...— открывает окно «Редактирование типа данных», где видны все доступные типы, флажок составного типа и квалификаторы.
Новый реквизит по умолчанию получает тип Строка длиной 10 символов. Если забыть его поменять, в базе появится поле, куда помещается разве что короткий код.
В окне редактирования типа есть строка поиска. Наберите часть имени, например «Контраг», — список отфильтруется до СправочникСсылка.Контрагенты и родственных типов. В больших конфигурациях это быстрее, чем листать дерево.
После любой правки сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Пока этого не сделано, пользователи работают со старой структурой.
Простой тип или составной: что выбрать
В окне редактирования типа данных список делится на две части. Вверху — примитивные типы, ниже — ссылки на объекты конфигурации.
| Тип | Что хранит | Пример реквизита |
|---|---|---|
| Строка | Текст, длина задаётся | Артикул, Комментарий |
| Число | Целое или дробное число | Количество, Цена, Сумма |
| Дата | Дату, время или оба | Дата поставки |
| Булево | Истина или Ложь | Услуга, Не использовать |
| Уникальный идентификатор | GUID | Идентификатор во внешней системе |
| Хранилище значения | Любое сериализуемое значение, файл, картинку | Фото товара |
| СправочникСсылка, ДокументСсылка и другие ссылки | Ссылку на объект базы | Контрагент, Договор, Основание |
Простой тип — реквизит хранит значения одного типа. Это вариант по умолчанию, и в большинстве случаев его достаточно.
Составной тип включают флажком Составной тип данных в верхней части окна. После этого можно отметить несколько типов сразу. Классический пример — реквизит Основание, куда пользователь выбирает то заказ, то счёт, то договор.
Как понять, что составной тип оправдан:
- ✅ значение действительно бывает разной природы, и это нормальная ситуация, а не исключение;
- ✅ число типов небольшое и понятное пользователю;
- ❌ не стоит делать составным реквизит «на всякий случай» — запросы к такому полю сложнее и медленнее;
- ❌ не смешивайте строку и число, чтобы «хранить что угодно» — потом не получится ни отсортировать, ни сложить.
При выборе значения в составное поле пользователь сначала видит окно выбора типа, а уже потом список объектов. Если типов три-четыре, это терпимо, если двадцать — неудобно.
Кроме конкретных типов в списке есть обобщённые: Любая ссылка, СправочникСсылка (любой справочник), ДокументСсылка (любой документ). Они удобны для служебных реквизитов, но пользователю с ними работать сложнее всего.
Определяемые типы
Если один и тот же набор типов нужен в десятке объектов, заведите определяемый тип: Общие → Определяемые типы. Задайте в нём состав типов один раз, а у реквизитов выберите этот определяемый тип. Чтобы добавить в набор новый документ, правите одно место, а не каждый реквизит. Этим приёмом активно пользуется Библиотека стандартных подсистем, на которой построены типовые конфигурации.
Ссылка на справочник или документ в качестве типа
Чтобы реквизит хранил, например, контрагента, в окне редактирования типа раскройте узел справочников и отметьте СправочникСсылка.Контрагенты. Для документа — узел документов и нужный ДокументСсылка.<Имя>.
В базе такой реквизит хранит не наименование, а ссылку на элемент. Если элемент справочника переименуют, во всех документах автоматически покажется новое имя.
После выбора ссылочного типа в палитре свойств становятся полезны дополнительные настройки:
- 📂 Выбор групп и элементов — для иерархических справочников: можно ли выбрать папку, только элемент или и то и другое;
- 🔗 Связи параметров выбора — отбор по другому реквизиту. Пример: в поле Договор показывать только договоры контрагента, выбранного в поле Контрагент;
- 🎯 Параметры выбора — фиксированный отбор, например только элементы с признаком «Услуга»;
- ⚠️ Проверка заполнения — значение «Выдавать ошибку» не даст записать объект с пустым полем;
Справочник, документ или перечисление, на которые вы ссылаетесь, должны уже существовать в конфигурации. Если объекта ещё нет, сначала создайте его, иначе нужного типа просто не будет в списке.
Тип «Характеристика»
Для плана видов характеристик есть особый вариант. Реквизит может иметь тип, который определяется значением другого реквизита. Его задают через свойство Связь по типу: тип поля Значение берётся из выбранного вида характеристики. Так устроены свойства товаров и дополнительные реквизиты.
Длина, точность и формат: квалификаторы типа
Квалификаторы — нижняя часть окна редактирования типа. Они уточняют простой тип.
Строка
- Длина — максимальное число символов, допустимо до 1024. Значение 0 означает неограниченную строку.
- Допустимая длина — переменная или фиксированная. При фиксированной короткие значения дополняются пробелами справа, поэтому для обычных полей ставят переменную.
Неограниченную строку используйте только для длинных текстов: комментариев, описаний. Такие поля нельзя индексировать и неудобно использовать в условиях запросов — сравнивать их приходится через ВЫРАЗИТЬ(Поле КАК СТРОКА(100)) или ПОДСТРОКА.
Число
- Длина — общее количество разрядов, включая дробную часть. Максимум 38.
- Точность — сколько из этих разрядов приходится на дробную часть.
- Неотрицательное — запрещает ввод минуса.
Проверим на примере. Длина 15, точность 2 — это до 13 цифр в целой части и 2 в дробной, то есть суммы до 9 999 999 999 999,99. Для количества товара обычно берут длину 15 и точность 3, для цены — 15 и 2.
| Назначение | Длина | Точность | Неотрицательное |
|---|---|---|---|
| Сумма в рублях | 15 | 2 | нет |
| Цена | 15 | 2 | да |
| Количество | 15 | 3 | да |
| Процент скидки | 5 | 2 | да |
| Порядковый номер | 10 | 0 | да |
Дата
Квалификатор Состав даты принимает три значения: Дата, Время, Дата и время. Для даты рождения или срока оплаты ставьте «Дата» — тогда в поле не будет лишних нулей времени, а отбор «на день» сработает предсказуемо.
Формат отображения
Формат вывода задают отдельными свойствами реквизита: Формат и Формат редактирования. Открывается конструктор форматной строки, где можно выбрать, например, разделитель групп разрядов или вид даты. Для строк есть свойство Маска — например, +7 (999) 999-99-99 для телефона, где 9 обозначает цифру.
Формат меняет только отображение. Если реквизит хранит 2 знака после запятой, формат с 4 знаками не добавит точности.
Перечисления и булевы реквизиты
Реквизит с выбором из фиксированного списка
Когда вариантов немного и они не меняются пользователем (статус «Новый / В работе / Закрыт», вид оплаты), делайте перечисление:
- В дереве конфигурации:
Перечисления → Добавить. Задайте имя, напримерСтатусыЗаявок. - На закладке Значения добавьте элементы:
Новая,ВРаботе,Закрыта. Синонимы — то, что увидит пользователь. - У реквизита выберите тип
ПеречислениеСсылка.СтатусыЗаявок. - Если нужно значение по умолчанию, укажите его в свойстве Значение заполнения реквизита.
Перечисление или справочник — выбор простой:
| Критерий | Перечисление | Справочник |
|---|---|---|
| Кто добавляет варианты | Только разработчик | Пользователь |
| Можно ли ссылаться в коде | Да, Перечисления.СтатусыЗаявок.Новая | Только через предопределённые элементы |
| Дополнительные поля у значения | Нет | Да |
Булево
Тип Булево хранит Истина или Ложь и на форме обычно выводится флажком. Пустого значения у него нет: по умолчанию Ложь.
Если в задаче три состояния («да», «нет», «не указано»), булево не подойдёт. Используйте перечисление из двух значений — пустая ссылка и будет «не указано».
Чтобы в отчёте вместо «Да/Нет» выводилось что-то своё, задайте формат, например БЛ=Нет; БИ=Да или БЛ=Товар; БИ=Услуга.
Тип дополнительного реквизита без Конфигуратора
В типовых конфигурациях на Библиотеке стандартных подсистем (Бухгалтерия предприятия 3.0, ЗУП 3.1, Управление торговлей 11) можно добавить реквизит в режиме 1С:Предприятие, не снимая конфигурацию с поддержки.
- Включите функцию: в БП 3.0 —
Администрирование → Общие настройки, флажок Дополнительные реквизиты и сведения. - Перейдите по ссылке Дополнительные реквизиты в том же разделе.
- Выберите набор, например справочник Номенклатура, и создайте новый реквизит.
- В поле Тип значения выберите строку, число, дату, булево, ссылку на справочник или вариант со своим списком значений.
Список типов здесь ограничен, и квалификаторы задаются проще, чем в Конфигураторе. Зато реквизит не потеряется при обновлении типовой конфигурации.
Тип дополнительного реквизита, у которого уже есть заполненные значения, менять неудобно. Продумайте его сразу.
Программная установка типа: ОписаниеТипов
Тип реквизита метаданных из кода не меняется. Программно тип задают для объектов, которые создаются во время работы: реквизитов формы, колонок таблицы значений, параметров запроса. Для этого служит объект ОписаниеТипов.
Создание описания типов:
// Число 15.2, неотрицательное
ТипСумма = Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный));
// Строка 100 символов переменной длины
ТипСтрока = Новый ОписаниеТипов("Строка", ,
Новый КвалификаторыСтроки(100, ДопустимаяДлина.Переменная));
// Только дата, без времени
ТипДата = Новый ОписаниеТипов("Дата", , ,
Новый КвалификаторыДаты(ЧастиДаты.Дата));
// Составной тип из двух ссылок
ТипОснование = Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента, ДокументСсылка.СчетНаОплату");
Колонка таблицы значений с заданным типом:
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Таблица.Колонки.Добавить("Сумма", ТипСумма);
Типизированные колонки важны, если таблицу потом передают в запрос как временную: без типа платформа не сможет поместить колонку во временную таблицу.
Реквизит формы, добавленный кодом
&НаСервере
Процедура ДобавитьРеквизитСумма()
Добавляемые = Новый Массив;
Добавляемые.Добавить(Новый РеквизитФормы("СуммаДоплаты",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)), , "Сумма доплаты"));
ИзменитьРеквизиты(Добавляемые);
Поле = Элементы.Добавить("СуммаДоплаты", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "СуммаДоплаты";
КонецПроцедуры
Третий параметр РеквизитФормы — путь, пустой означает реквизит верхнего уровня формы. Четвёртый — заголовок.
Проверка и приведение типа
ТипЗнч(Значение) = Тип("СправочникСсылка.Контрагенты")— проверить, что лежит в составном реквизите;ОписаниеТипов.СодержитТип(Тип("Число"))— узнать, допускает ли описание нужный тип;ОписаниеТипов.ПривестиЗначение(Значение)— привести значение к описанию: лишние символы строки обрежутся, неподходящее значение превратится в пустое.
Тип реквизита метаданных можно прочитать: Метаданные.Справочники.Номенклатура.Реквизиты.Артикул.Тип возвращает его ОписаниеТипов.
Ошибки при установке и смене типа
Конфигурация → Поддержка → Настройка поддержки) или добавьте свой реквизит через расширение, не трогая типовой.Самая опасная операция — смена ссылочного типа у заполненного реквизита. Если реквизит хранил ссылки на справочник А, а вы поменяли тип на справочник Б, старые значения при реструктуризации не станут ссылками на Б. Данные в поле фактически теряются.
Перед сменой типа у реквизита с данными сделайте резервную копию базы через Администрирование → Выгрузить информационную базу. Безопасный путь: добавьте новый реквизит нужного типа, перенесите данные обработкой, проверьте результат и только потом удаляйте старый.
Перед принятием изменений платформа показывает окно реорганизации информации со списком изменённых объектов. Прочитайте его, а не нажимайте «Принять» по привычке: там видно, какие таблицы будут перестроены.