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