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

Справочники и Данные · 12 мин

Как работает автонумерация справочников в 1С

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

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

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

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

Как устроен механизм автонумерации в платформе 1С

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

Для числовых кодов платформа увеличивает максимальное значение на единицу. Для строковых кодов логика сложнее: система пытается интерпретировать код как число и увеличить его, сохраняя лидирующие нули. Именно поэтому код «000000125» корректно продолжается как «000000126», а код «АБВ-15» может «сломать» последовательность — буквенная часть не инкрементируется ожидаемым образом.

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

Где включается автонумерация и какие свойства на неё влияют

Настройка выполняется в конфигураторе: откройте свойства справочника и перейдите на закладку «Нумерация». Там находятся три ключевых параметра: «Автонумерация» (флажок), «Контроль уникальности» и «Серии кодов». Дополнительно длина и тип кода задаются в свойстве «Длина кода» и «Тип кода» (число или строка) на закладке «Данные».

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

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

Как включить автонумерацию справочника
  1. 1
    Откройте конфигуратор и найдите нужный справочник в дереве конфигурации
  2. 2
    Откройте палитру свойств справочника, закладка «Нумерация»
  3. 3
    Установите флажок «Автонумерация» и при необходимости «Контроль уникальности»
  4. 4
    Проверьте тип и длину кода на закладке «Данные»
  5. 5
    Обновите конфигурацию базы данных (F7) и проверьте создание нового элемента в режиме предприятия

Как платформа выбирает следующий код

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

Классический пример: в справочник «Номенклатура» загрузили элементы с кодами вида «УТ-00012345». Длина такого кода (11 символов) превышает типовые 9, и он содержит буквы. Следующий созданный вручную элемент получит код «000000001», потому что платформа не может продолжить «буквенную» последовательность и начинает отсчёт заново. Это не ошибка программы, а следствие формата загруженных данных.

Ещё одна тонкость — коды, присвоенные программно. Если обработка загрузки или обмен присваивает код явно (через УстановитьНовыйКод или прямое присвоение), платформа учитывает эти значения при следующей автонумерации. Поэтому единичный «неудачный» код способен надолго сместить всю последовательность.

Типичные сбои автонумерации и их причины

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

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

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

Типичные ошибки
01
Загрузка элементов с кодами длиннее установленной длины кода — автонумерация сбрасывается к 1
02
Ручной ввод кодов с буквами «для красоты» — платформа перестаёт продолжать последовательность
03
Выключенный контроль уникальности при обмене данными — появляются дубли кодов
04
Исправление нумерации прямым редактированием кодов без анализа максимального значения — проблема возвращается

Как восстановить нумерацию после сбоя

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

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

В типовых конфигурациях на управляемых формах встречается встроенная стратегия автонумерации в коде модулей (процедуры ПриУстановкеНовогоКода в общих модулях подсистемы «Префиксация объектов»). Если конфигурация типовая, сначала проверьте настройки префиксации: Иногда «сбой» — это штатная работа префиксов информационной базы, и лечить нужно настройку префикса, а не коды элементов.

Программное управление нумерацией: методы и события

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

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

bsl
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
	Префикс = "НГ-";
КонецПроцедуры

Как проверить, что нумерация работает правильно

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

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

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

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

Новый элемент при записи
Норма

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

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

Код пустой или начинается с 000000001

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

Коды идут последовательно, единая длина и формат

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

В конце списка коды с буквами или другой длиной

Создание копированием
Норма

Копия получает новый уникальный код

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

Копия сохраняет код оригинала — дубль

Обмен между базами
Норма

Коды разных узлов различаются префиксами

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

Одинаковые коды у разных элементов

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

Почему новый элемент справочника получает код 000000001, хотя база большая?

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

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

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

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

У документов номер формируется в пределах периода (обычно года) и может зависеть от подчинённых структур, плюс есть механизмы нумераторов и стратегии перенумерации. У справочников код постоянен на всё время жизни элемента и уникален в пределах справочника, группы или владельца.

Нарушатся ли ссылки на элемент, если изменить его код?

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

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

Стандартный путь — переопределить событие ПриУстановкеНовогоКода в модуле объекта справочника и задавать параметр Префикс в зависимости от реквизитов элемента. В типовых конфигурациях часть этих задач решается подсистемой префиксации без доработки кода.

Почему после обмена между базами появляются элементы с одинаковыми кодами?

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

Итог

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

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