Работа с нумераторами
Для упрощения автоматической нумерации документов в системе предусмотрены специальные объекты — нумераторы.
-
Выделение диапазонов номеров для документов.
-
Ассоциация (закрепление) диапазонов номеров за пользователями системы.
-
Автоматическое выделение номеров новым документам.
-
Резервирование номеров.
-
Контроль и освобождение занятых и зарезервированных номеров.
В системе может одновременно существовать несколько нумераторов.
-
Определяет непрерывное пространство номеров (например, 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 | Получение номера. |