Дня доброго. 1С 8.3.20, SQL 2019, MDOP=1, флаг 1211 включен
Есть регистр, подчиненный регистратору, с Итогами среза последних и, допустим, одним измерением.
При попытке записи в него 2-х документов с одинаковым измерением, получаем конфликт блокировок при выполнении транзакции.
Естественно, когда Итоги выключены, ничего такого нет.
Пример вот
https://disk.yandex.ru/d/xk3N9YReFX0xcA
Нужно запустить 2 сеанса 1С, в первом запустить проведение "Установка цен номенклатуры 000000001", во 2-ом - второго документа, не позднее 30 секунд от первого. Естественно на SQL.
Предполагаемая причина:
https://reefcentral.ru/forum/uploads/monthly_12_2021/post-9541-0-70123400-1638959533.jpg
Ну а серьезно, эти кедры воот таким запросом просто выпиливают все итоговые записи по набору измерений, но без установки отбора по периоду и регистратору. Поэтому накладывается блокировка на диапазон кластерного индекса по всему значению измерения
DELETE FROM T1
FROM dbo._InfoRgSL147 T1
INNER JOIN dbo._InfoRg143 T2
ON T2._Fld144RRef = T1._Fld144RRef
WHERE (T2._RecorderRRef =
P1) AND (T2._Fld144RRef = T1._Fld144RRef)
Скорее всего, достаточно простой советской копеечной...
DELETE FROM T1
FROM dbo._InfoRgSL147 T1
INNER JOIN dbo._InfoRg143 T2
ON T2._Fld144RRef = T1._Fld144RRef
AND T2._Period= T1._Period
AND T2._RecorderRRef= T1._RecorderRRef
WHERE (T2._RecorderRRef =
P1) AND (T2._Fld144RRef = T1._Fld144RRef)
но это не точно.
При попытке ручного удаления записей через НаборЗаписей с пересекающимися измерениями вообще можно словить deadlock, но я пока не понял почему, но лениво.
Пишите, жмите...