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

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

Длина кода в 1С: что это и как её настроить

Что такое длина кода в 1С, где задаётся длина кода справочника и документа, как работает автонумерация и что делать, когда коды заканчиваются.

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

Параметр задаётся разработчиком в конфигураторе на этапе проектирования объекта метаданных и в типовых конфигурациях уже выставлен поставщиком. Например, в справочнике «Номенклатура» код может иметь длину 9–11 символов в зависимости от конфигурации и её давности. Когда пользователь создаёт новый элемент, платформа автоматически присваивает следующий код, увеличивая предыдущий на единицу.

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

Где задаётся длина кода и что именно она ограничивает

Длина кода находится в палитре свойств объекта метаданных. Для справочника это поле «Длина кода» на вкладке «Данные» или в основных свойствах, для документа — «Длина номера». Рядом расположены связанные настройки: тип кода (число или строка), признак автонумерации и контроль уникальности.

Если тип кода — число, длина фактически ограничивает максимальное значение: при длине 5 доступны коды от 1 до 99999. Если тип — строка, длина ограничивает количество символов, и коды могут содержать буквы, например «АБ-000123». Строковый тип даёт бо́льшую ёмкость за счёт префиксов, но сортировка таких кодов идёт лексикографически, а не численно.

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

Как работает автонумерация и зачем нужны префиксы

При включённой автонумерации платформа при записи нового элемента находит максимальный существующий код и добавляет единицу. Для строковых кодов с префиксом («ЦБ-000123») увеличивается только числовая часть, префикс сохраняется. Префикс может задаваться вручную, подставляться из настроек информационной базы или из функциональных опций.

Префиксы критичны в распределённых базах и обменах: центральный узел присваивает коды с префиксом «ЦБ», периферийный — «П1», и коды не пересекаются. Без префиксов две базы создадут элементы с одинаковыми кодами, и при обмене возникнут коллизии, которые придёт разруливать вручную.

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

Как узнать текущую длину кода в своей базе

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

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

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

bsl
ДлинаКода = Метаданные.Справочники.Номенклатура.ДлинаКода;
ТипКода = Метаданные.Справочники.Номенклатура.ТипКода;

Что происходит, когда коды заканчиваются

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

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

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

Как безопасно изменить длину кода

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

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

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

Порядок действий
  1. 1
    Сделайте резервную копию информационной базы
  2. 2
    Проверьте максимальную фактическую длину существующих кодов
  3. 3
    Завершите сеансы пользователей и откройте конфигуратор
  4. 4
    Увеличьте длину кода в свойствах объекта метаданных
  5. 5
    Обновите конфигурацию базы данных и дождитесь реструктуризации
  6. 6
    Создайте тестовый элемент и проверьте автонумерацию и старые коды

Длина кода и обмены между базами

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

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

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

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

Частые вопросы о длине кода

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

Итог

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

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

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

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

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

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

Почему коды сортируются не по порядку: 1, 10, 2, 20?

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

Коды закончились, что делать в первую очередь?

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

Влияет ли длина кода на производительность базы?

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

Можно ли задать разную длину кода для подчинённых справочников?

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