Имя: Пароль:
1C
1С v8
Замещение периода в независимом регистре: кто реально ловил lost update?
0 Nedomolkov_
Ivan
 
04.08.26
14:14
Регламентный расчёт пишет в независимый регистр сведений (периодичность День), порядка 8 400 строк за прогон. Сделано в лоб: МенеджерЗаписи.Записать() в цикле.

Переписал на набор записей: отбор по периоду, Прочитать(), заместить строки, Записать(Истина) одним вызовом. На тех же данных разница в десятки раз.

Дальше начинается спор. Схема "прочитал период -> заместил" даёт окно: параллельный сеанс успевает записать строку этого же периода, и при замещении она молча пропадает. Построчный менеджер записи блокирует по ключу и от этого защищён.

Моя позиция: для регламента, который по замыслу крутится раз в сутки одним фоновым заданием, это перестраховка. Защита от двойного запуска - отдельная задача (управляемая блокировка, проверка активных заданий), и решать её надо там, а не отказом от пакетной записи в принципе.

Интересно, что видели в бою:

1. Кто-нибудь реально ловил потерю чужих строк на замещении периода? Какая была схема?
2. Если пишете пакетно - блокировку берёте на период целиком или на период+измерение?

Повод для вопроса: гонял эту задачу через несколько ИИ-агентов. Двое переписали на пакетную запись, третий отказался ровно с аргументом про lost update. Спор показался осмысленным независимо от того, кто его начал.
1 Dmitrii
 
гуру
04.08.26
14:26
Наверное при пакетной записи правильным было бы устанавливать блокировку. На период или на период+измерение - зависит уже от конкретики.

>> ...это перестраховка

Возможно.
Но если какая-то фигня может произойти, она обязательно произойдёт. Рано или поздно.
Если есть способ её избежать, лучше её избежать.
2 Homer
 
04.08.26
14:32
Переделать на 2 независимых регистра.
3 zenik
 
04.08.26
14:38
Если у пользователя что то медленно делается - он нервничает. Вот тут стоит оптимизировать и ловить секунды.
А фоновое - лучше пусть делает упор на качество, нежели скорость.
4 Ненавижу 1С
 
гуру
04.08.26
15:00
А почему параллельный процесс что-то пишет и что-то другое? Короче нужны подробности
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан