1.1 Серии кодов справочника — как работает нумерация
❓ 1.1 Серии кодов справочника — как работает нумерация
📚 Документация
Заголовок раздела «📚 Документация»-
ИТС: Методические рекомендации — Автонумерация
https://its.1c.ru/db/metod8dev/content/2745/hdoc -
ИТС: Платформа — Нумерация объектов
https://its.1c.ru/db/v8327doc#bookmark:dev:TI000001481 -
ИТС: Книги — Реализация прикладных задач в системе «1С:Предприятие 8.2» — Нумерация объектов
https://its.1c.ru/db/pubapplied#content:65:hdoc -
ИТС: Книги — Реализация прикладных задач в системе «1С:Предприятие 8.2» — Автоматическая нумерация
https://its.1c.ru/db/pubapplied#content:66:hdoc
🧠 Краткая теория
Заголовок раздела «🧠 Краткая теория»Где есть нумерация
Заголовок раздела «Где есть нумерация»Нумерация (ручная и автоматическая) используется в:
- Справочниках — код
- Документах — номер
- ПВХ — код
- Бизнес-процессах — номер
- Задачах — номер
- Планах обмена — код
Тип кода / номера
Заголовок раздела «Тип кода / номера»
- Число
- Строка
Строковый код даёт больше возможностей:
- любые символы
- префиксы
- настройка длины
Длина кода (через панель свойств)
Заголовок раздела «Длина кода (через панель свойств)»
- Фиксированная → всегда одна длина
- Переменная → длина ≤ заданной
⚠️ Важный момент:
Длина кода задаётся свойством объекта конфигурации.
Она определяет максимально возможное значение кода.
При достижении максимального значения в рамках заданной длины:
- дальнейшая автонумерация невозможна
- требуется изменение длины кода в конфигурации
Серии кодов
Заголовок раздела «Серии кодов»
Серии кодов определяют границы, в которых выполняется контроль уникальности кодов элементов справочника.
Проверка уникальности выполняется только при включенном свойстве Контроль уникальности.
В этих же границах выполняется автонумерация кода.
Варианты серий кодов
Заголовок раздела «Варианты серий кодов»Платформа позволяет задавать разные границы:
- Во всём справочнике
- В пределах подчинения (иерархии)
- В пределах владельца
На практике
Заголовок раздела «На практике»Допустим, есть справочник Номенклатура.
Если серии кодов:
-
Во всем справочнике
→ код001может существовать только один -
В пределах подчинения
→ в группе Обувь и в группе Одежда может быть по элементу с кодом001 -
В пределах владельца
→ у разных владельцев может быть одинаковый код001
Как работает автонумерация
Заголовок раздела «Как работает автонумерация»Автоматическая нумерация позволяет создавать новые объекты с заведомо уникальными номерами.
👉 В общем случае номер/код:
- определяется как max + 1
- ищется в пределах пространства номеров
- для справочников пространство номеров определяется с учетом серий кодов
- в пределах пространства номеров номер выдается в разрезе префиксов
Причём номер будет одинаково выдан:
- и при интерактивном создании
- и при программной записи
Пространство номеров и префиксы
Заголовок раздела «Пространство номеров и префиксы»Механизм автонумерации выдает номера в разрезе пространств номеров и префиксов.
Пространство номеров в зависимости от типа объекта может содержать:
- владельца
- период
- серии кодов
- и др.
В пределах пространства номеров номер выдается в разрезе префиксов.
По каждому префиксу хранится максимальный выданный номер, на основании которого выдается следующий номер.
👉 Префикс определяется автоматически:
- система приводит строковый номер к числу
- цифры анализируются справа налево
- как только встречается символ, который нельзя распознать как число, левая часть считается префиксом
Пример номера:
ABC000123- число →
123 - префикс →
ABC
Режимы автонумерации
Заголовок раздела «Режимы автонумерации»
Поведение автонумерации задаётся свойством:
- РежимАвтонумерацииОбъектов
Есть два режима:
- НеОсвобождатьАвтоматически (по умолчанию)
- ОсвобождатьАвтоматически
👉 Они определяют, будет ли повторно использоваться номер, если он был выдан, но объект не записан в базу.
Сервис нумерации
Заголовок раздела «Сервис нумерации»За выдачу номеров отвечает сервис автонумерации.
👉 Благодаря этому:
- не требуется блокировка таблиц
- повышается параллельность работы
Как сервис получает номер
Заголовок раздела «Как сервис получает номер»Работа автонумерации зависит от пространства номеров и префикса.
👉 При первом получении номера:
- выполняется неблокирующее чтение максимального номера из базы
- определяется текущее значение
max - дальше номер выдается как max + 1
👉 Это обращение к базе происходит только один раз для каждой комбинации:
- пространства номеров
- префикса
После этого:
- сервис хранит текущее значение у себя
- и выдает следующие номера без повторных чтений из БД
👉 За счет этого:
- уменьшается нагрузка на базу
- нет блокировок
- повышается параллельность работы
Связь с сериями кодов
Заголовок раздела «Связь с сериями кодов»👉 Важно:
для справочников автонумерация кода выполняется в границах, заданных сериями кодов.
Нюанс строковых номеров
Заголовок раздела «Нюанс строковых номеров»Если номер строковый, используются лидирующие нули:
00031👉 Это необходимо для:
- корректной сортировки
- правильного поиска
Проблема
Заголовок раздела «Проблема»Если пользователь вручную вводит:
4вместо:
000000004👉 система фиксирует более короткое значение как новое максимальное
➡️ автонумерация начинает работать в сокращённом диапазоне
и возвращает номера в некорректном формате
Как правильно
Заголовок раздела «Как правильно»- не давать пользователям вводить код вручную
- либо использовать единый формат с лидирующими нулями
🖥 Клиент-серверная особенность
Заголовок раздела «🖥 Клиент-серверная особенность»В клиент-серверном варианте сервис нумерации:
- хранит последний выданный номер
- отвечает за уникальность
⚠️ Возможная проблема:
при копировании базы через СУБД возникает рассинхрон между:
- таблицами БД
- сервисом нумерации
➡️ ошибка: «Номер не уникален»
Решение:
ОбновитьНумерациюОбъектов()