Каталог решений - Быстрое получение уникального числового значения без блокировок

Быстрое получение уникального числового значения без блокировок

Быстрое получение уникального числового значения без блокировок

В наличии

Столкнулся с проблемой блокировок/тормозов при назначении уникального Штрихкода.
Работало через поиск Макс. значения в Регистре сведений и записи туда нового значения.
В принципе данный функционал можно использовать для создания уникальныхзначений.

Категория:

Описание

Только для Клиент-серверного режима работы. Только для SQL Server, но думаю что похожий функционал можно сделать и на Oracle/Postgre

Решение созрело такое:
1. Создается табличка прямо в БД 1С вида:
(для MS SQL Server)
CREATE TABLE [dbo].[zbarcodes](
    [ID] [bigint] IDENTITY([НАЧАЛЬНОЕЗНАЧЕНИЕСЧЕТЧИКА],1) NOT NULL,
 CONSTRAINT [PK_zbarcodes] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

[НАЧАЛЬНОЕЗНАЧЕНИЕСЧЕТЧИКА]  — заменить на число, например 20000000000 — первый шк в системе (или другое число — последнее в Вашей учетной системе, если хочется продолжить текущую нумерацию)

2. Создаем Процедурку в общем модуле с выполнением на сервере (для УФ)

//Процедура получения уникального штрихкода (у нас используется Code 128 — без контрольных символов)
//Параметры:
//Организация — можно сделать таблицы на каждую организацию — и получать по организации имя таблицы в БД из ЗначенияСвойствОбъектов
//СтруктураПараметров — параметры подключения к БД SQL через ADO

Функция ПолучитьНовыйШтрихкод(Организация, СтруктураПараметров) Экспорт
   
   Соединение= Новый COMObject(«ADODB.Connection»);
    Соединение.ConnectionString = «Driver={SQL Server};Server=» + СокрЛП(СтруктураПараметров.Сервер)
                                                        + «;UID=» + СокрЛП(СтруктураПараметров.Логин)
                                                        + «;pwd=» + СокрЛП(СтруктураПараметров.Пароль)
                                                        + «;Database=» + СокрЛП(СтруктураПараметров.БД);
    Соединение.ConnectionTimeOut = 40;
    Соединение.CommandTimeout = 0;
    Соединение.CursorLocation = 3;
    Попытка
        Соединение.Open();
    Исключение
        #Если Клиент Тогда
        Сообщить(«Возникла ошибка подключения к базе»);
        #КонецЕсли
        Соединение=»»;
        Возврат Неопределено;
    КонецПопытки;

        ТекстЗапроса=»INSERT into zbarcodes DEFAULT VALUES»;
        Соединение.Execute(ТекстЗапроса);   
       
        ТекстЗапроса=»SELECT @@IDENTITY»;
        Выборка=Соединение.Execute(ТекстЗапроса);       
       
        НовыйШтрихкод=Выборка.Fields(0).Value;
       
        Выборка.Close(); 
        Выборка =»»
        Соединение = «»;

    Возврат  НовыйШтрихкод;
   
КонецФункции

В итоге все забыли что такое блокировки при присвоении новых штрихкодов, и обеспечена уникальность штрихкода, + скорость получения значения!

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