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

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

Как изменить тип данных в 1С

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

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

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

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

Где в 1С вообще задаётся тип данных

Тип данных в 1С встречается на нескольких уровнях, и способ изменения зависит от того, что именно нужно поменять. Путать эти уровни — частая причина ошибок.

  • Реквизиты объектов метаданных — поля справочников, документов, регистров. Тип задаётся в конфигураторе и хранится в структуре базы данных.
  • Реквизиты формы и колонки таблиц — тип определяется типом источника данных либо задаётся в свойствах элемента формы.
  • Переменные и значения в коде — тип определяется присвоенным значением; преобразование выполняется функциями платформы.
  • Данные в уже заполненной базе — сами значения, которые могут не соответствовать новому типу после его смены.

Если нужно поменять тип поля, в которое пользователи вводят данные, — это работа в конфигураторе. Если проблема в том, что в отчёте число выводится как строка, — часто достаточно преобразования в запросе или коде без изменения структуры базы.

Как изменить тип реквизита в конфигураторе

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

Порядок действий
  1. 1
    Сделайте резервную копию базы (выгрузка в .dt через конфигуратор или средствами СУБД).
  2. 2
    Откройте конфигуратор, найдите нужный объект в дереве конфигурации.
  3. 3
    Откройте реквизит, вызовите палитру свойств (правый клик → Свойства).
  4. 4
    В поле «Тип» нажмите кнопку выбора и укажите новый тип: примитивный, ссылочный или составной.
  5. 5
    Для строк задайте длину, для чисел — длину и точность, для дат — состав (дата, время).
  6. 6
    Сохраните конфигурацию и обновите конфигурацию базы данных (клавиша F7).
  7. 7
    Проверьте данные в пользовательском режиме.

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

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

Составные типы: как добавить или убрать вариант

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

Расширение составного типа (добавление нового варианта) — безопасная операция: существующие значения не затрагиваются. Сужение, наоборот, опасно: значения исключённого типа при реструктуризации будут очищены. Перед удалением типа из состава проверьте запросом, есть ли в базе значения этого типа.

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

Преобразование типов в коде и запросах

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

bsl
ЧислоИзСтроки = Число("123,45"); // преобразует строку в число
СтрокаИзЧисла = Строка(СуммаДокумента); // число или дату в строку
ДатаИзСтроки = Дата("20260115"); // строка ГГГГММДД в дату
// В запросе — функции ВЫРАЗИТЬ и приведение:
// ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 2))

Важные ограничения: функция Число() вызовет ошибку, если строка содержит нечисловые символы, поэтому перед преобразованием данные из внешних источников стоит проверять. В запросах оператор ВЫРАЗИТЬ применяется для приведения составного типа к конкретному и для задания точности чисел при группировках.

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

Как массово исправить данные после смены типа

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

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

Для массовых правок удобны типовые обработки «Групповое изменение реквизитов» (в конфигурациях на БСП) и «Поиск и замена значений». Они позволяют без программирования заменить ссылки, заполнить пустые реквизиты или привести значения к единому виду.

Проверка результата и типичные ошибки

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

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

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

Значения реквизита в типовых записях
Норма

Данные на месте, формат соответствует новому типу

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

Поля пустые или значения обрезаны

Отчёты и движения по регистрам
Норма

Суммы и аналитики совпадают с данными до изменения

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

Расхождения в итогах, пустая аналитика

Открытие форм и проведение документов
Норма

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

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

Ошибки преобразования значения при записи

Обмены и интеграции
Норма

Синхронизации проходят без ошибок формата

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

Ошибки сериализации из-за смены типа поля

Типичные ошибки
01
Смена типа без резервной копии — при неудачной реструктуризации данные восстановить не из чего.
02
Уменьшение длины строки без проверки — длинные значения беззвучно обрезаются.
03
Смена типа строка → ссылка напрямую — все старые значения теряются, нужен перенос через новый реквизит.
04
Изменение типового реквизита вместо расширения — конфигурация снимается с поддержки, обновления усложняются.
05
Забытые обмены и внешние отчёты — после смены типа поля интеграции начинают падать с ошибками формата.

Отдельно проверьте всё, что зависит от изменённого реквизита: запросы с явным указанием типа, условия ВЫРАЗИТЬ, печатные формы, форматы выгрузки. Ошибки могут проявиться не сразу, а при первом обращении к функциональности.

Итог

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

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

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

Можно ли изменить тип данных без конфигуратора?

Тип реквизита — нет, это свойство метаданных и меняется только в конфигураторе или расширении. А вот преобразовать значение при выводе (в отчёте СКД, в обработке) можно и в пользовательском режиме через настройки отчёта или встроенные функции.

Что произойдёт с данными при уменьшении длины строкового реквизита?

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

Как поменять тип реквизита в типовой конфигурации на поддержке?

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

Почему после смены типа поле стало пустым во всех документах?

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

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

Прямая функция Число() вызовет исключение. Очистите строку от нечисловых символов (например, циклом по символам или через СтрЗаменить), проверьте результат на пустоту и только потом преобразовывайте, обернув вызов в Попытка/Исключение.

Затронет ли смена типа реквизита обмены с другими системами?

Да, если поле участвует в обмене. Форматы выгрузки (XML, JSON, планы обмена) жёстко привязаны к типам, и после изменения приёмник может получить ошибку формата. После реструктуризации протестируйте все интеграции и при необходимости обновите правила конвертации.