Перейти к основному содержимому

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

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

Простые коды​

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

Если в проекте стандартный реквизит справочника Код имеет тип Число, то во время работы приложения для вычисления номера нового элемента сервер возьмет максимальный код из имеющихся элементов справочника и добавит к нему единицу. Таким образом элементы справочника будут иметь коды, идущие последовательно: 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. В этом случае можно установить свойство стандартного реквизита справочника Код — Автонумерация.Формат.ОграниченияПоСимволам. Оно накладывает следующие ограничения:

  • префикс не может заканчиваться на цифру;
  • постфикс не может содержать цифры.

Отключение контроля формата​

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