Работа с нумераторами

Для упрощения автоматической нумерации документов в системе предусмотрены специальные объекты — нумераторы.

Нумераторы выполняют следующие функции:
  • Выделение диапазонов номеров для документов.

  • Ассоциация (закрепление) диапазонов номеров за пользователями системы.

  • Автоматическое выделение номеров новым документам.

  • Резервирование номеров.

  • Контроль и освобождение занятых и зарезервированных номеров.

В системе может одновременно существовать несколько нумераторов.

Каждый нумератор отвечает следующим принципам:
  • Определяет непрерывное пространство номеров (например, 1…1000).

  • Пространство номеров может содержать несколько диапазонов, закрепленных за конкретными пользователями системы (например, 1..100, 500..800).

  • Может содержать несколько именованных зон, номера в которых могут совпадать (например, "2004 год", "2005 год").

  • Каждый номер может обладать собственным статусом:

    • Свободен.

    • Занят.

    • Зарезервирован.

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

Карточка нумератора

Системная карточка нумератора NumeratorCard содержит свойства и методы для работы с конкретным экземпляром нумератора. Для создания нового нумератора требуется создать экземпляр этой карточки.

Зона нумератора

Зона нумератора представляет собой именованную совокупность номеров. Внутри одного нумератора может существовать несколько параллельных зон, номера в которых совпадают. Вся работа, связанная с получением или освобождением номеров, производится именно в конкретной зоне нумератора. Для работы с зонами в менеджере объектов предусмотрен объект NumeratorZone.

Диапазон нумератора

Диапазон нумератора представляет собой подмножество номеров, закрепленных за определённым пользователем системы. Для работы с диапазонами в менеджере объектов предусмотрен объект NumeratorRange.

Таким образом, для работы с нумератором следует выполнить следующие действия:
  • Создать экземпляр карточки нумератора.

  • Определить границы пространства номеров.

  • Создать в нумераторе как минимум одну нумерованную зону.

  • При необходимости добавить один или несколько диапазонов номеров.

Пример работы с нумератором:
const string NUMERATOR_CARD_TYPE = "959FF5E2-7E47-4F6F-9CF6-E1E477CD01CF"; (1)

NumeratorCard numerator = (NumeratorCard)session.CardManager.CreateCard(new Guid(NUMERATOR_CARD_TYPE)); (2)

numerator.ChangeStartNumber(1, true);
numerator.ChangeEndNumber(1000, true);
numerator.Name = "MyNumerator"; (3)

NumeratorZone zone = numerator.Zones.AddNew(DateTime.Now.Year.ToString()); (4)

Guid outId;
int number = zone.GetNumber(Guid.Empty, true, out outId); (5)
1 Константа, идентификатор типа карточки нумератора.
2 Создание новой карточки нумератора.
3 Первичная инициализация нумератора.
4 Создание зоны.
5 Получение номера.