Автонумерация элементов справочника

Во время работы приложения стандартным поведением является автоматическое формирование кода для нового элемента справочника. Это избавляет пользователя от необходимости каждый раз вводить код.

Простые коды

В простейшем случае в качестве кода сервер присваивает новому элементу справочника некоторый номер.

Если в проекте стандартный реквизит справочника Код имеет тип Число, то во время работы приложения для вычисления номера нового элемента сервер возьмет максимальный код из имеющихся элементов справочника и добавит к нему единицу. Таким образом элементы справочника будут иметь коды, идущие последовательно: 1, 2, 3, 4 и т. д.

Если, например, элемент с кодом 3 был в последствии удален и сервер не перезапускался, то для нового элемента справочника сервер снова выберет номер 3. Таким образом она заполняет пропущенные номера. А для следующего элемента она выберет номер 5.

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

Если в проекте у справочника стандартный реквизит Код имеет тип Строка, то сервер вычисляет номер для нового элемента справочника по таким же правилам. Отличие заключается только в типе номера — Строка. То есть это строковое представление числа и оно может иметь лидирующие нули, чтобы длина кода была одинаковой у всех элементов справочника. За это отвечает свойство реквизита КодАвтонумерация.ДлинаНумерации.

Сложные коды типа «Строка»

Ситуация, когда сервер формирует код элемента справочника только из номера — это простейший случай. В общем случае строковый код элемента справочника может содержать префикс, номер, постфикс и разделители, например:
  • АА-00345/ББ
  • АА-00346/ББ
  • НК-00022/ПС
  • НК-00023/ПС

Формальная запись такого кода выглядит следующим образом:

<Префикс><РазделительПрефикса><Номер><РазделительПостфикса><Постфикс>

Вид Справочник содержит набор свойств для настройки каждого из перечисленных компонентов кода.

Стандартные префикс и постфикс
Во-первых, вы можете задать в проекте стандартные значения префикса и постфикса, которые сервер будет использовать для всех элементов справочника. За это отвечают свойства стандартного реквизита справочника Код: Автонумерация.Префикс и Автонумерация.Постфикс.
Также вы можете задать разделители: Автонумерация.Формат.РазделительПрефикса и Автонумерация.Формат.РазделительПостфикса.
Длина префикса и постфикса
Префикс и постфикс могут вычисляться во время работы приложения и устанавливаться с помощью встроенного языка, методами
  • имя-справочника.Объект.УстановитьПрефикс() и
  • имя-справочника.Объект.УстановитьПостфикс().
В этом случае в проекте у стандартного реквизита справочника Код необходимо указать длину префикса и постфикса:
  • Автонумерация.Формат.ДлинаПрефикса и
  • Автонумерация.Формат.ДлинаПостфикса
Автонумерация в пределах префикса, постфикса и владельца
Номер для нового элемента справочника может вычисляться на основе анализа как всех имеющихся элементов, так и на основе анализа только их части. Например, элементы, имеющие один префикс, имеют собственную нумерацию, а элементы, имеющие другой префикс — собственную. Таким образом могут быть элементы с одинаковыми номерами, но с разными префиксами. Например:
  • АА-00002/ББ
  • НК-00002/ПС
Также номер элемента справочника может быть уникальным в пределах подчинения владельцу. Два элемента с разными владельцами могут иметь одинаковые коды. Примером может служить ячеистое хранение на складах, где справочник Стеллажи владеет элементами справочника Ячейки. Тогда у каждого стеллажа могут быть свои ячейки с одинаковой нумерацией:
  • Стеллаж 1 — Ячейка 1
  • Стеллаж 1 — Ячейка 2
  • Стеллаж 2 — Ячейка 1
  • Стеллаж 2 — Ячейка 2
В проекте за это отвечает свойство справочника СерииНумерации.
Ограничения по символам
Если длина префикса или постфикса не ограничена или если не используются разделители, то серверу может быть трудно определить, где заканчивается префикс и начинается номер. Например: в коде НК001245 префиксом может быть как НК, так и НК0 или НК00. В этом случае можно установить свойство стандартного реквизита справочника КодАвтонумерация.Формат.ОграниченияПоСимволам. Оно накладывает следующие ограничения: префикс не может заканчиваться на цифру и постфикс не может содержать цифры.
Отключение контроля формата
Если вы хотите использовать возможности автонумерации справочника, но при этом иногда (например, при импорте данных из другой системы) вам нужно записать элемент с «неправильным» кодом, используйте свойство стандартного реквизита справочника КодАвтонумерация.КонтрольФормата. Установите его в значение Выключено.