К статье
Практический материал

Разработка и Конфигурация · 12 мин

Выбор типа данных в 1С: что это и как не ошибиться

Что такое тип данных в 1С, какие типы бывают и как выбрать подходящий для реквизита. Практические критерии выбора, типичные ошибки и проверка результата.

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

Ошибка на этом этапе обходится дорого: изменить тип реквизита после того, как база наполнена данными, можно не всегда. Например, сужение строки с 100 до 25 символов обрежет уже введённые значения, а смена типа со строки на число без специальной обработки приведёт к потере информации. Поэтому выбор типа — это проектное решение, которое принимается до запуска в эксплуатацию.

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

Что такое тип данных в платформе 1С

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

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

В конфигураторе тип задаётся в палитре свойств реквизита. Там же настраиваются уточняющие параметры: длина строки, точность числа, состав даты, допустимость неограниченной длины. Именно эти параметры чаще всего выбирают «на глаз» — и именно они потом создают проблемы.

Какие типы данных бывают в 1С

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

Для реквизитов конфигурации выбор обычно сводится к небольшому набору. Понимание назначения каждого типа избавляет от большинства ошибок.

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

Отдельного внимания заслуживает хранилище значения. Оно позволяет положить в базу почти что угодно, но данные внутри не индексируются и недоступны в запросах напрямую. Использовать его для обычных реквизитов — типичная ошибка, которая блокирует отчёты и отборы.

Как выбрать тип под конкретную задачу

Исходный вопрос при выборе типа: что физически будет храниться в поле и какие операции с ним понадобятся. Если по значению нужно считать итоги — это число. Если сортировать по алфавиту и искать подстроку — строка. Если связывать с другим объектом и получать его реквизиты через точку — ссылка.

Частая коллизия — номера документов, артикулы и коды. Они выглядят как числа, но арифметика над ними бессмысленна, а ведущие нули значимы: «00125» и «125» — разные коды. Такие данные хранят строкой. Числом делают только то, что реально участвует в расчётах.

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

Маршрут решения

Как выбрать действие

Значение участвует в суммах, средних, умноженииВыбирайте Число с достаточной точностью
Значение — идентификатор с буквами или ведущими нулямиВыбирайте Строку, даже если выглядит как номер
Нужна связь с другим объектом и доступ к его реквизитамВыбирайте ссылочный тип на нужный объект
Набор значений фиксирован и меняется только разработчикомВыбирайте Перечисление
Список значений должны пополнять пользователиСоздайте справочник и используйте ссылку на него
Нужно хранить файл или картинкуИспользуйте Хранилище значения или механизм присоединённых файлов

Как задать длину строки и точность числа

Длина строки влияет на хранение и индексы. Строка переменной длины с разумным запасом — стандартный выбор для наименований: для большинства справочников хватает 100–150 символов. Неограниченная строка удобна для комментариев и описаний, но по такому полю нельзя построить эффективный индекс и использовать его в некоторых отборах, поэтому ключевые реквизиты неограниченными не делают.

Для чисел задаются общая разрядность и число знаков после запятой. Денежные суммы обычно хранят с двумя знаками после запятой, количество — с тремя, чтобы корректно работать с дробными единицами измерения. Цены иногда требуют большей точности, чтобы при умножении на количество не накапливалась ошибка округления.

Занижать разрядность опасно: платформа откажется записывать значение, не помещающееся в заданную точность, либо округлит его. Завышать без необходимости тоже не стоит — это увеличивает объём хранения, хотя и менее критично, чем потеря данных.

Составные типы: когда они оправданы

Составной тип позволяет одному реквизиту хранить значения разных типов — например, ссылку на справочник «Контрагенты» или на справочник «Физические лица». Это законный инструмент для полей вроде «Плательщик» или «Владелец», где источник данных заранее не единственный.

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

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

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

Как проверить, что тип выбран правильно

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

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

Контрольные точки

Как проверить результат

Ввод максимально длинного значения
Норма

Значение сохраняется целиком и отображается полностью

Тревожный признак

Строка обрезается или платформа выдаёт ошибку записи

Сортировка и поиск по реквизиту
Норма

Порядок и результаты поиска соответствуют ожиданиям

Тревожный признак

Числа сортируются как строки («10» раньше «2») — тип выбран неверно

Итоги в отчётах
Норма

Суммы и количества считаются без потери копеек

Тревожный признак

Расхождения в копейках — не хватает точности числа

Обмен данными
Норма

Значения переносятся без изменений

Тревожный признак

Данные усекаются или обмен падает с ошибкой преобразования

Что делать, если тип нужно изменить после запуска

Изменение типа заполненного реквизита — операция с риском потери данных. Безопасные случаи: увеличение длины строки, увеличение разрядности числа, расширение составного типа. Опасные: уменьшение длины или разрядности, смена типа на несовместимый, сужение составного типа — платформа при обновлении конфигурации предупредит о возможной потере, и значения, не подходящие под новый тип, будут очищены.

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

Перед любыми такими действиями делается резервная копия базы, а сама операция сначала отрабатывается на копии. На рабочей базе без копии и бэкапа типы не меняют.

Типичные ошибки при выборе типа данных

Большинство проблем с типами повторяется от проекта к проекту и легко предотвращается на этапе проектирования.

Типичные ошибки
01
Хранение номеров и кодов числом: теряются ведущие нули, ломается сортировка и поиск
02
Неограниченная строка для ключевых реквизитов: невозможны индексы и быстрые отборы
03
Точность числа «впритык»: при росте сумм или дробном количестве значения перестают записываться
04
Составной тип из всех возможных объектов: тяжёлые запросы и неудобный выбор в формах
05
Хранение текстовых данных в Хранилище значения: поле недоступно в запросах, отборах и отчётах
06
Изменение типа заполненного реквизита без миграции: частичная или полная потеря данных

Ещё одна распространённая ситуация — копирование типа из типовой конфигурации без анализа. Например, разработчик берёт длину наименования 25 символов из старой конфигурации, хотя в учёте компании встречаются названия по 80–100 знаков. Типы проектируются под реальные данные конкретной организации, а не по привычке.

Итог

Что важно запомнить

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

Частые вопросы о типах данных в 1С

Чем строка отличается от числа, если значение состоит только из цифр?

Разница в поведении: числа сравниваются по величине и участвуют в арифметике, строки — посимвольно. Код «0102» как число превратится в 102 и потеряет ноль, а сортировка строк даст порядок «1, 10, 2». Если значение — идентификатор, а не величина, храните его строкой.

Какую длину строки ставить для наименования справочника?

Ориентируйтесь на реальные данные: возьмите самые длинные существующие наименования и добавьте запас. Для большинства учётных задач достаточно 100–150 символов. Неограниченную длину для наименования использовать не стоит — это мешает индексации и поиску.

Когда выбирать перечисление, а когда справочник?

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

Можно ли изменить тип реквизита, если в базе уже есть данные?

Можно, но с ограничениями. Безопасно расширять: увеличивать длину строки, разрядность числа, состав типа. Сужение типа или смена на несовместимый приведёт к потере неподходящих значений. Правильный путь — новый реквизит, перенос данных обработкой, проверка и только потом удаление старого поля, всё на копии базы.

Почему составной тип замедляет работу?

Для составного поля платформа хранит дополнительную информацию о типе каждого значения, а запросы с соединениями вынуждены проверять несколько таблиц. Чем больше типов в составе, тем сложнее план запроса. Поэтому в состав включают только реально используемые типы.

Что выбрать для хранения картинок и файлов?

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