Каталог решений - Генератор номеров для PSI WMS

Генератор номеров для PSI WMS

Генератор номеров для PSI WMS

В наличии

Описан вариант решения с генерацией «почти последовательных» уникальных номеров для разных типов документов.

Категория:

Описание

Текущее состояние.

Имеестся интерфейс обмена 1С с PSI WMS. Для обмена документами необходимо каждому документу генерировать уникальный номер, связка хранится в регистре сведений «Номера накладных» с измерением «Документ» тип: составной, состоящий из документов обмена и «НомерWMS» тип: число, содержит уникальный номер. Генератор номеров реализован в непереодическом регистре сведений «Счетчик номеров», с измерением «ИмяСчетчика» тип строка, и «Номер», тип целое число. Перед записью документа в регистр сведений «Номера накладных» пишется ссылка документа и уникальный порядоковый номер, получаемы из «Счетчик номеров», счетчик при этом плюсуется. Проблема возникает при получении нового номера. Перед чтением значения из «Счетчик номеров» регистр исключительно блокируется и находится в таком состоянии до конца транзакции, а именно до окончания записи документа. На месте блокировки возникает таймаут.

Решение.

Для реализации параллельного получения номера, был выбран следующий вариант: сделать 100 счетчиков и шаг счетчика не 1, а 100. Чтобы получить номер счетчика используестя генератор случайных чисел. Последовательный перебор исключен, так как небходимо где то хранить значение, которое при каждой генерации будет блокироваться, и возникнет опять узкое место. Данный метод расширяем если не хватает 100 то можно сделать N счетчиков с шагом N. При этом блокировать нужно не весь регистр, а только запись.

При реализации данного метода возникла  проблема с случайностью генератора на нагрузочном тесте из 10 фоновых заданий оставались только 3, остальные «падали» на таймауте. При разборе проблемы выяснилось что метод

ГСЧ = Новый ГенераторСлучайныхЧисел();
ГСЧ.СлучайноеЧисло(1, 100); 

не дает случайности в необходимом размере. В диапазоне целых чисел от 1 до 100 возникали до 8 подряд одинаковых номеров. Такая же проблема возникала при системном генераторе случайных чисел.

has been added to your cart:
Оформление заказа