Режим поділу підсумків і «БлокіроватьДляІзмененія»

Привіт друзі! Сьогодні ми поговоримо про властивість регістра «Режим поділу підсумків». Всі чули, що таке існує, але на практиці мало хто знає – що це за звір.

Отже, як зазвичай, є проблема – великий час очікування надання блокування, помилки таймаута блокувань:

Зараз я розповім, що тут відбувається. Кілька людей одночасно пишуть дані в 1 регістр по одному набору вимірів. Ніякої проблеми немає – створюється кілька записів. Але під час запису в регістр система намагається оновити таблиці підсумків, про які я говорив в попередній статті. А в цій таблиці по одному набору вимірів тільки один рядок. Виникає конфлікт – всі чекають, поки проведеться документ одного користувача.

І тут ми включаємо режим поділу підсумків регістра. Технічно, це виглядає так:

Система додала колонку в таблицю підсумків «_Splitter», Або роздільник. Тепер, коли кілька людей одночасно пишуть дані по одному набору вимірів, всі рядки потрапляють в таблиці підсумків, але з різними значеннями роздільник (0, 1, 2 …).

Коли ж система хоче вважати підсумки по набору вимірів, вона підсумовує значення з різними роздільниками і отримує актуальні дані. А при перерахунку підсумків значення підсумовуються і перезаписувати одним рядком.

Тому, я рекомендую включати режим поділу підсумків у регістрах. Зараз 1С ставить галочку за замовчуванням при створенні реєстру.

Але у кожного рішення є і негативні сторони. Зараз в 1С «модно» контролювати залишки методом «посмертного розтину» – спочатку записуються руху, а потім зчитуємо залишки і дивимося, чи не пішли ми в мінус. І тут нас чекає наступна проблема:

2 користувача успішно записали дані в регістр одночасно завдяки режиму поділу підсумків, а потім хочуть проконтролювати залишки. І кожен намагається прочитати Усе дані по набору вимірів.

У підсумку перший користувач чекає, коли другий користувач завершить транзакцію, щоб прочитати дані. А другий користувач чекає першого. Типовий випадок взаимоблокировки. Один з користувачів побачить помилку і його транзакція скасується.

Щоб цього не відбувалося, в тих місцях, де використовується метод «посмертного розтину» набору записів необхідно встановлювати властивість «БлокіроватьДляІзмененія». При цьому встановиться керована блокування на регістр по нашим вимірам, а також буде неприпустимо використання режиму поділу підсумків в даній ситуації. Це і логічно, ми як би повідомляємо системі – «ми не просто пишемо дані, а хочемо потім перевірити залишки, і інші користувачі не повинні змінити ці дані, поки ми не закінчимо».

Ссылка на основную публикацию