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

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

Как изменить тип реквизита в расширении 1С

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

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

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

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

Какие изменения типа реквизита разрешены в расширении

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

К разрешённым относятся: увеличение длины строки (например, со 100 до 250 символов), увеличение длины числа и его точности, добавление новых типов к составному типу, изменение строки неограниченной длины на фиксированную в ряде версий платформы. Также можно менять представление и некоторые квалификаторы, не затрагивающие формат хранения.

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

Подготовка: заимствование объекта и реквизита

Прежде чем менять тип, реквизит нужно заимствовать. В дереве конфигурации расширения найдите нужный объект (справочник, документ), вызовите контекстное меню и выберите «Добавить в расширение». Если объект уже заимствован, достаточно заимствовать конкретный реквизит: раскройте ветку «Реквизиты» объекта в основной конфигурации и добавьте нужный реквизит в расширение через контекстное меню.

После заимствования реквизит появится в дереве расширения со значком, отличающим его от собственных реквизитов расширения. Откройте палитру свойств заимствованного реквизита — там будут доступны для редактирования только те свойства, которые платформа разрешает переопределять. Свойство «Тип» редактируется через стандартный диалог выбора типа.

Перед любыми изменениями сделайте резервную копию базы или выполняйте работу на копии. Ошибка в типе реквизита способна привести к невозможности обновления или к проблемам с уже введёнными данными.

Пошаговое изменение типа заимствованного реквизита

Рассмотрим типовой сценарий: нужно увеличить длину строкового реквизита «Комментарий» документа со 150 до 500 символов.

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

Если свойство «Тип» недоступно для редактирования (заблокировано), значит, для данного реквизита платформа запрещает переопределение типа — например, для некоторых системных реквизитов. В этом случае остаётся только вариант с собственным реквизитом расширения.

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

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

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

Новый реквизит расширения добавляется в заимствованный объект обычным образом и может иметь любой тип. Данные переносятся серверной обработкой: обход всех объектов, преобразование значения (например, поиск элемента справочника по строковому наименованию), запись. Перед массовым переносом выполните его на копии и проверьте выборочно несколько объектов.

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

Сравнение вариантов

Изменение типа заимствованного реквизита

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

Новый реквизит расширения + перенос данных

Подходит для любой замены типа, включая несовместимую. Требует обработки переноса и правки форм. Старый реквизит остаётся в базе и занимает место.

Изменение типа в основной конфигурации

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

Проверка результата и контроль данных

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

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

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

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

Проверка применимости расширения
Норма

Проверка завершается без ошибок совместимости

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

Сообщения о несовместимом изменении типа реквизита

Существующие данные после обновления
Норма

Значения отображаются полностью, объекты открываются и записываются

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

Обрезанные строки, ошибки при открытии или записи объектов

Ввод новых значений
Норма

Поле принимает значения нового формата и длины

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

Ввод ограничен старой длиной или типом

Отчёты и запросы по реквизиту
Норма

Запросы возвращают данные без ошибок типизации

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

Ошибки СКД или запросов из-за изменившегося типа

Отдельно проверьте места, где тип реквизита использовался неявно: запросы с приведением типов, условия ВЫБОР в запросах, схемы СКД, обмены данными. Добавление типа в составной реквизит может изменить поведение сравнений и соединений в запросах.

Ограничения и подводные камни

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

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

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

Типичные ошибки
01
Попытка уменьшить длину строки или заменить тип на несовместимый — проверка расширения отклоняет изменение, а время на доработку уже потрачено
02
Изменение типа без анализа запросов и СКД — после обновления «падают» отчёты и произвольные запросы, использовавшие старый тип
03
Отключение расширения с расширенной длиной строки без проверки данных — значения, не влезающие в типовой формат, теряются
04
Перенос данных в новый реквизит без резервной копии и без теста на копии — при ошибке в обработке данные испорчены в рабочей базе
05
Игнорирование обменов: тип изменён в 1С, но не во внешней системе — данные обрезаются или обмен падает с ошибкой

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

Можно ли в расширении заменить строковый реквизит на ссылку на справочник?

Нет, это несовместимое изменение типа, и платформа его запрещает. Решение — создать в расширении новый реквизит ссылочного типа, перенести данные обработкой с сопоставлением значений и скрыть старый реквизит в формах.

Почему свойство «Тип» заимствованного реквизита недоступно для редактирования?

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

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

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

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

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

Что будет, если отключить расширение, изменившее тип реквизита?

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

Конфликтует ли изменение типа с обновлением типовой конфигурации?

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

Итог

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

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