Нумератор

Нумератор – список объектов нумерации и правил расчета номеров для этих объектов.

Данные для нумерации хранятся в таблице ‘Нумератор’.

Нумерация – процедура присваивания коду объекта нового уникального номера. Номера назначаются последовательно с шагом единица.

Возможные варианты назначения кода объекта:

  1. Код полностью вводится пользователем. Пользователь самостоятельно проверяет и обеспечивает соответствие введенных символов неким условиям.
  2. Код формируется программой автоматически в соответствии в заранее указанной структурой. Пользователь не может изменить код.
  3. Код разбивается на две части. Одна часть формируется программой и не доступна пользователю, вторая часть вводится пользователем. Значение второй части может быть предварительно рассчитано.

Для реализации второго и третьего вариантов в Домино были введены нумераторы, и разработана схема нумерации на основе нумераторов.

Нумерация применяется для каталогов, партнеров, продуктов и документов. Для того чтобы нумерация выполнялась быстро, последовательно и без пропусков номеров применяются системные нумераторы.

При каждом обращении системный нумератор выдает следующий по порядку номер и, при этом, автоматически увеличивается на 1. Нумераторы хранятся в таблице ‘Нумератор’.

Каждый нумератор идентифицируется составным ключом:

  • Первый идентификатор - UID
  • Второй идентификатор - UID
  • Третий идентификатор - UID
  • Четвертый идентификатор - строка

Способ нумерации (то есть принцип, по которому создаются номера) задается на класс объекта в разделе ‘Структура кода’. Подробнее об атрибутах данного раздела написано выше, в главе ‘Основные объекты’.

Рассмотрим стандартный алгоритм нумерации объектов:

  1. Вычисляется используемый нумератор по схеме, приведенной ниже.
  2. Нумератор возвращает новый номер.
  3. Если в атрибуте ‘Вводимая часть кода’ задана ширина кода, то полученный номер дополняется слева нулями.
  4. Если в атрибуте ‘Базовая часть кода’ определены префикс(базовая часть) и разделитель, то они вычисляются и присоединяются спереди к номеру.
  5. Запускается проверка наличия в базе данных объекта с полученным кодом. Если такой объект не будет обнаружен, то полученный код назначается объекту.

Если такой объект имеется, то повторяются этапы со 2 по 5.

При отказе пользователя сохранить объект и при удалении объекта нумератор к обратному значению не возвращается.

Далее разберем схему вычисления применяемого нумератора. Как уже было сказано, нумератор идентифицируется набором из четырех параметров. При вычислении нумератора проводится анализ описания нумератора в разделе ‘Структура кода’ описания класса объекта и рассчитываются значения параметров.

  • Если задан атрибут ‘1-й UID для нумератора’, то вычисляется выражение, указанное под этим атрибутом.

Если атрибут не задан, то применяется UID класса объекта.

  • Если задан атрибут ‘2-й UID для нумератора’, то вычисляется выражение, указанное под этим атрибутом.

Если атрибут не задан, то применяется NULL.

  • Если задан атрибут ‘3-й UID для нумератора’, то вычисляется выражение, указанное под этим атрибутом.

Если атрибут не задан, то применяется NULL.

  • Если задан атрибут структуры кода ‘4-й ID для нумератора’, то вычисляется выражение, указанное под этим атрибутом.

Если атрибут не задан, то применяется пустая строка.

За исключением варианта, при котором:

    • не заданы атрибуты ‘2-й UID для нумератора’ и ‘3-й UID для нумератора’;
    • указан атрибут ‘Базовая часть кода’;
    • Установлен признак ‘Нумерация в пределах базовой части’.

В этом исключительном случае четвертый параметр принимает значение атрибута ‘Базовая часть кода’.

Кроме системных нумераторов проектировщики имеют возможность описать для своих целей другие нумераторы. Для этого достаточно завести новый тип или класс нумератора и обращаться к нему с помощью функции ‘НОВЫЙ ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР’.

Например. В библиотеке ‘# Товародвижение’ был заведен тип нумератора. Функция ‘НОВЫЙ ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР’ вызывается с параметром, в котором указан этот тип нумератора. Возвращаемый функцией номер применяется при создании кода в формате EAN13.

image-1648566190313.png

Класс и тип нумератора в библиотеке ‘# Товародвижение’

image-1648566213462.png

Пример использования функции ‘НОВЫЙ ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР’

image-1648566240040.png

Фрагмент формы ‘Штриховой код’. При заполнении поля формы применяется расчет номера с помощью специального нумератора.

В таблице ‘Нумератор’ имеются несколько записей, применяемых программой для формирования UID-ов объектов. Эти записи формируются в процессе создания базы данных и изменяются только триггерами.