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

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

Простые коды

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

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

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

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

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

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

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

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

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

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

Стандартные префикс и постфикс
Вы можете задать в проекте стандартные значения префикса и постфикса, которые сервер будет использовать для всех элементов справочника. За это отвечают свойства стандартного реквизита справочника Код: Автонумерация.Префикс и Автонумерация.Постфикс. Также вы можете задать разделители: Автонумерация.Формат.РазделительПрефикса и Автонумерация.Формат.РазделительПостфикса.
Длина префикса и постфикса
Префикс и постфикс можно вычислить во время работы приложения и устанавливать с помощью встроенного языка. В этом случае в проекте у стандартного реквизита справочника Код необходимо задать префикс и постфикс, а также указать их длину:
ВидЭлемента: Справочник
Ид: af431046-44b0-4253-8f32-42e77dde9b18
Имя: МойСправочник
ОбластьВидимости: ВПодсистеме
Реквизиты:
    -
        Имя: Код
        Тип: Строка
        Длина: 11
        Автонумерация:
            Формат:
                РазделительПрефикса: "#"
                РазделительПостфикса: "#"
                ДлинаПрефикса: -1
                ДлинаПостфикса: -1
            Префикс: ""
            Постфикс: ""
Затем в приложении задайте значения префикса и постфикса с помощью свойств имя-справочника.ПараметрыЗаписи.Префикс и имя-справочника.ПараметрыЗаписи.Постфикс:
// В методе создается новый объект справочника МойСправочник
// и задаются свойства "Префикс" и "Постфикс" параметров записи этого объекта

метод СозданиеСправочникаСПараметрамиЗаписи()
    знч Об = новый МойСправочник.Объект()

    знч ПараметрыЗаписи = новый МойСправочник.ПараметрыЗаписи()
    ПараметрыЗаписи.Префикс = "PREF"
    ПараметрыЗаписи.Постфикс = "POST"

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