Ускоряем регистрацию объектов в МОД (для SQL)

Менеджер обмена данными - популярный и очень своеобразный продукт. В статье рассматривается решение одной из его проблем - получения нового уникального IDD.

Опубликовано в блоге Вадимко/

Менеджер обмена данными - популярный и очень своеобразный продукт. В статье рассматривается решение одной из его проблем - получения нового уникального IDD.

После оптимизации проведения ключевых документов у нас начались блокировки констант. Переделывать будем эту функцию:

Функция ПолучитьНовыйИДД()

//Предусматриваем одновременное обращение к константе нескольких пользователей

Блокировка=1;

Пока Блокировка=1 Цикл

Попытка

НачатьТранзакцию();

Константа.УникальныйIDD=Константа.УникальныйIDD;//блокируем

Блокировка=0;//константа заблокирована не была - можем работать

Исключение//константа заблокирована !!

ОтменитьТранзакцию();

//Ожидание для возможности работы других пользователей (по совету Олега Яковлева из ЧПТФ "ЮСИ")

Стр=ТекущееВремя();

Пока Стр=ТекущееВремя() Цикл

КонецЦикла;

КонецПопытки;

КонецЦикла;

//Увеличиваем счетчик в константе на единицу

Константа.УникальныйIDD=Число(Константа.УникальныйIDD)+1;

Рез=Прав("0000000"+СокрЛП(Константа.IDD),7)+прав("0000000000"+СокрЛП(Константа.УникальныйIDD),10);

ЗафиксироватьТранзакцию();

Возврат Рез;

КонецФункции



Итак, приступим. Будем использовать 1С++.
В глобальном модуле в процедуру ПриначалеРаботыСистемы() добавим следующие строки для создания таблицы и заполнения ее значениями:

//таблица IDD для МОДа

ТекстЗапроса = "

|if not exists (select name from dbo.sysobjects where name = 'UIDD' and xtype = 'U ')

|create table UIDD (idd char(7), uidd numeric(10,0))

|";

RecordSet.ВыполнитьИнструкцию(ТекстЗапроса);

//начальное заполнение значений таблицы

ТекстЗапроса= "

|if (select count(*) from UIDD (nolock)) = 0

|insert into UIDD values (:ИДД,:УникальныйИДД)

|";

RecordSet.УстановитьТекстовыйПараметр("ИДД", Константа.IDD);

RecordSet.УстановитьТекстовыйПараметр("УникальныйИДД", Число(Константа.УникальныйIDD));

RecordSet.ВыполнитьИнструкцию(ТекстЗапроса);



Теперь переделанный текст функции (спасибо за обсуждение на 1cpp.ru коллегам):

Функция ПолучитьНовыйИДД() Экспорт

ТекстЗапроса = "

|begin tran

|select right('0000000' + LTrim(idd), 7) + right('0000000000' + LTrim(str(uidd + 1, 10)),10)

|from UIDD (updlock)

|update UIDD

|set uidd = uidd + 1

|commit tran

|";

ТЗ= RecordSet.ВыполнитьИнструкцию(ТекстЗапроса);

Возврат ТЗ.ПолучитьЗначение(1,1);

КонецФункции



Слово Экспорт добавили не зря. В обработках конфигурации мы найдем изобилие конструкций с блокировкой константы, которые также нужно переделать
Пример переделанного кода:

Для ы=1 по Метаданные.Справочник() Цикл

НачатьТранзакцию();

//Блокировка=1;

//Пока Блокировка=1 Цикл

// Попытка

// НачатьТранзакцию();

// Константа.УникальныйIDD=Константа.УникальныйIDD;//блокируем

// Блокировка=0;//константа заблокирована не была - можем работать

// Исключение//константа заблокирована !!

// ОтменитьТранзакцию();

// //Ожидание для возможности работы других пользователей (по совету Олега Яковлева из ЧПТФ "ЮСИ")

// Стр=ТекущееВремя();

// Пока Стр=ТекущееВремя() Цикл

// КонецЦикла;

// КонецПопытки;

//КонецЦикла;

КолПрогрессора=КолПрогрессора+10;

Прогрессор(КолПрогрессора);//**************** прогрессор

Ст=Метаданные.Справочник(ы).Идентификатор;

Если (ст<>"ПравилаЗагрузки") и (ст<>"ПравилаВыгрузки") и (ст<>"ПериферийныеБазы") Тогда

Спр=СоздатьОбъект("Справочник."+Ст);

М_Состояние("Обработка "+Ст);

Спр.ВыбратьЭлементы(0);

Пока Спр.ПолучитьЭлемент()>0 Цикл

Если (Сокрлп(Спр.IDD)="")ИЛИ(ФлНовый=1) Тогда

//Константа_УникальныйIDD=Константа_УникальныйIDD+1;

//Спр.IDD=Сокрлп(Константа_IDD+прав("0000000000"+Константа_УникальныйIDD,10));

Спр.IDD = ПолучитьНовыйИДД();

Попытка

Спр.Записать();

Исключение

Сообщить("Ошибка на : "+Спр.Вид()+", владелец "+Спр.Владелец+", элемент="+Спр.ТекущийЭлемент()+", код="+Спр.Код+" . Внимание: найдите данный элемент справочника вручную и измените код !!");

КонецПопытки;

КонецЕсли;

Если РежимИниц=1 Тогда

ПриИзмененииОбъектаМОД(Спр,Спр,'01.01.1976',0);//для периодических реквизитов надо задавать период выгрузки

ПриИзмененииОбъектаМОД(Спр,Спр,РабочДата,0);//у нас период равен: 01.01.1976 - рабочая дата

КонецЕсли;

КонецЦикла;

КонецЕсли;

//Константа.УникальныйIDD=Строка(Число(Константа_УникальныйIDD)+1);

ЗафиксироватьТранзакцию();

КонецЦикла;


Не забывайте о том, что МОД при нахождении неуникальных IDD присваивает уникальные значения УЖЕ СУЩЕСТВУЮЩИМ объектам.

Начать дискуссию

Уголовное дело Елены Блиновской передали в суд

Блогер спрятала от налоговой 906 млн рублей, из них 716 млн вывела через две подконтрольные фирмы. Следователи допросили больше 200 свидетелей и провели свыше 20 обысков.

Бесплатно с Госзакупки

Ведение казначейского счета: начало работы, требования к предоставляемым подтверждающим документам

Казначейский счет — это специальный 71 счет, который открывается для учета бюджетных средств в рамках казначейского сопровождения.

Ведение казначейского счета: начало работы, требования к предоставляемым подтверждающим документам

Брокер ВТБ запустил голосовые рекомендации для инвесторов

Голосовые советы позволят инвесторам быстрее принимать решения о проведении наиболее выгодных сделок.

Курсы повышения
квалификации

18
Официальное удостоверение с занесением в госреестр Рособрнадзора
Расчетный счет

Расчетно-кассовое обслуживание для ИП: как найти свой идеальный тариф

Открытие расчетного счета — один из первых шагов для любого индивидуального предпринимателя. С помощью РКО ИП ведет безналичные расчеты, принимает оплату от клиентов на счет, переводит средства контрагентам и бюджету. Банки предлагают разные тарифы на расчетно-кассовое обслуживание, которые отличаются по стоимости и условиям. 

Расчетно-кассовое обслуживание для ИП: как найти свой идеальный тариф

15 курсов бренд-менеджера для начинающих 

Бренд-менеджер — это специалист в области маркетинга, который занимается продвижением бренда. Его задача: сформировать мнение у покупателей по продукту, услуге или самой компании, склонить их к приобретению. На всех этапах он должен следить за репутацией компании и торговой марки.

15 курсов бренд-менеджера для начинающих 
ПСН

Как совместить патент с УСН и что делать, если ИП превысил лимиты

Индивидуальный предприниматель теряет право на применение патентной системы налогообложения, когда его совокупный доход превышает 60 млн рублей. В таком случае нужно применять только УСН и пересчитать весь налог.

Опытом делятся эксперты-практики, без воды
ЭДО

Хранение документов. На бумаге или в электронном виде? Затраты и риски

Документооборот — это настоящее и прошлое любой организации. В данном материале рассмотрим варианты форм хранения документа, сравним, какие затраты на это потребуются, обозначим преимущества того или иного метода хранения и возможные риски.

Хранение документов. На бумаге или в электронном виде? Затраты и риски
Право

Как подписать соглашение NDA с самозанятым

Для нормальной работы самозанятому нужен доступ к конфиденциальной информации. Но плательщик НПД — не штатный работник, он не подписывает ЛНА компании и на него нельзя повлиять дисциплинарными мерами ответственности. Проблему может решить соглашение о конфиденциальности (NDA). Рассказываем, как его правильно оформить.

Как подписать соглашение NDA с самозанятым
Охрана труда

Новый порядок оказания первой помощи с 1 сентября 2024 года. Что нужно знать работодателю

С 1 сентября 2024 года вступает в силу новый порядок оказания первой помощи.

Новый порядок оказания первой помощи с 1 сентября 2024 года. Что нужно знать работодателю

Жителям ЕС запретили участвовать в обмене заблокированными акциями

Власти Евросоюза призвали инвесторов и компании не участвовать в обмене заблокированных ценных бумаг, поскольку в этом механизме участвует подсанкционный Национальный расчетный депозитарий.

НДС на УСН, выбор СНО, топ претензий от ФНС, и господдержка бизнеса — какие вебинары пройдут в августе 2024 года

Подготовили для вас анонс предстоящих вебинаров в августе.

НДС на УСН, выбор СНО, топ претензий от ФНС, и господдержка бизнеса — какие вебинары пройдут в августе 2024 года
УСН

В законе о налоговой реформе-2025 в части УСН есть спорные моменты

Федеральный закон от 12.07.2024 № 176-ФЗ о совершенствовании налоговой системы России с 2025 года содержит много изменений и новшеств по УСН. Уже сейчас возникают вопросы, как их применять и трактовать на практике.

Куда не движется движимость

Рассуждение на одну из вечных тем в налоговом праве: переквалификация налоговыми органами движимого имущества в недвижимое.

Куда не движется движимость

Что такое амортизация облигаций и зачем инвестору про нее знать

Облигация — это долговая ценная бумага, по которой эмитент (тот, кто выпускает такую ценную бумагу) получает денежные средства в долг от инвестора. Взамен эмитент гарантирует, что выплатит инвестору в определенный срок стоимость облигации (номинал) и процент за пользование средствами (купонный доход) в будущем. Величина прибыли, которую инвестор получает в результате вложений в облигации, называется доходностью облигаций.

Что такое амортизация облигаций и зачем инвестору про нее знать
ПСН

Отказ от патента не отменить, как считать лимит для ПСН, особенности учета при переходе с УСН: что нужно знать бухгалтеру и ИП

ПСН на первый взгляд простой режим, но есть много нюансов. Разбираем три ситуации, в которых путаются бухгалтеры и ИП.

Иллюстрация: Вера Ревина/Клерк.ру

Прямые и косвенные расходы: пересмотрите их перечень, чтобы законно экономить на налоге на прибыль

Проверьте, верно ли вы классифицировали расходы на прямые и косвенные. Основная сложность в том, что Налоговый кодекс позволяет самостоятельно определять их перечень. Причем неверное распределение, а также некорректные положения учетной политики, могут привести к многомиллионным доначислениям. В статье рассказали, на что обратить внимание при распределении затрат с учетом актуальной судебной практики.

Прямые и косвенные расходы: пересмотрите их перечень, чтобы законно экономить на налоге на прибыль

На Новый год-2025 каникулы продлятся 11 дней

Вышел проект постановления Минтруда о праздничных днях в 2025 году. На майских россияне будут отдыхать восемь дней, а в Новый год — 11 дней.

ФСБУ

Поступление аренды в 1С отражают как услугу или услугу аренды: от чего зависит

Заполнение в 1С поступления предметов аренды как просто услуг или услуг аренды зависит от статуса компании и сдачи их в субаренду.

ОСАГО

На маркетплейсе Сбера водители купили 534 тысячи полисов ОСАГО

Водители могут застраховать машину онлайн за несколько минут. Достаточно ввести данные документов и выбрать страховщика на маркетплейсе.

Интересные материалы

Общество

Для автопутешественников подготовили 50 маршрутов

К 2030 году число туристических поездок на автомобилях вырастет с 26 млн до 50 млн.