Автонумерация объектов документа

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

Простые номера

В простейшем случае в качестве Номера сервер присваивает новому объекту Документа некоторый номер.

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

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

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

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

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

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

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

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

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

Стандартные префикс и постфикс
Вы можете задать в проекте стандартные значения префикса и постфикса, которые сервер будет использовать для всех объектов документа. За это отвечают свойства стандартного реквизита документа Номер: Автонумерация.Префикс и Автонумерация.Постфикс. Также вы можете задать разделители: Автонумерация.Формат.РазделительПрефикса и Автонумерация.Формат.РазделительПостфикса.
Длина префикса и постфикса
Префикс и постфикс могут вычисляться во время работы приложения и устанавливаться с помощью встроенного языка. В этом случае в проекте у стандартного реквизита документа Номер необходимо задать префикс и постфикс, а также указать их длину:
ВидЭлемента: Документ
Ид: d8a962a8-631d-4857-a2b7-21c4983e9ea7
Имя: МойДокумент
ОбластьВидимости: ВПодсистеме
Реквизиты:
    -
        Имя: Дата
        Тип: ДатаВремя
    -
        Имя: Номер
        Автонумерация:
            Формат:
                РазделительПрефикса: "#"
                РазделительПостфикса: "#"
                ДлинаПрефикса: -1
                ДлинаПостфикса: -1
            Префикс: ""
            Постфикс: ""
Затем в модуле объекта задайте значения префикса и постфикса с помощью свойств имя-документа.ПараметрыЗаписи.Префикс и имя-документа.ПараметрыЗаписи.Постфикс:
// В обработчике ПередЗаписью в модуле объекта документа МойДокумент
// устанавливаются значения префикса и постфикса автонумерации

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