Помогите разобраться с блокировками в групповых обработках

1. dominus_augustus 19.04.21 13:49 Сейчас в теме
Здравствуйте. помогите разобраться с тем, какие блокировки использовать и когда.

Следующая ситуация: есть групповая обработка, которая записывает набор записей в регистр сведений. Регистр сведений состоит из 2-х измерений, без ресурсов. Каждое измерение является ссылкой на справочник. Обработка работает след. образом, создаем коллекции из ссылок на объекты справочника для первого измерения и, соответственно, также для второго. Создаем набор записей, куда в цикле добавляем записи. После того, как цикл закончился, мы записываем набор в регистр.

Здесь у меня возникает сложность в понимании того, что и каким образом мы должны блокировать. Не могу понять следующего, допустим первое измерение содержит ссылку на справочник автозапчасти, а второе - ссылку на модели автомобилей. Когда я нажимаю кнопку, запускающую обработку, я пишу в регистр запись: измерение1: "Передний тормозной диск", измерение2: "ВАЗ 2110". Мне необходимо, чтобы в регистр попала запись именно с этими значениями, чтобы никакой пользователь и никакой скрипт не изменил значение реквизитов этих объектов, пока запись не выполнена. также мне необходимо, чтобы никто после начала обработки, но до записи наборов в регистр, не удалил никакой из этих объектов, дабы избежать записи в регистр ссылки на несуществующий объект. Нужны ли здесь объектные блокировки или транзакционные блокировки или нет, да и вообще, как решаются подобные проблемы, которые я назвал?

Или второй пример, мы массово меняем значения реквизитов объектов в обработке, есть условие, должны быть изменены или все объекты или ни одного, раз так, значит нам необходимо делать все это в единой транзакции, чтобы в случае ошибки, отменить всю транзакцию. Как я понимаю нам нужно на каждый изменяемый объект наложить объектную блокировку, Нужно ли нам в транзакции помимо этого устанавливать транзакционные блокировки на все изменяемые объекты справочника или нет?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. DenisVol 3 19.04.21 14:04 Сейчас в теме
я никогда аже не задумывался над таким. Запустите свою обработку,когда никто не работает в базе
3. volex 19.04.21 14:24 Сейчас в теме
1. Работа происходит со ссылками, смысл париться о состоянии объекта, как может элемент справочника "ВАЗ 2110" превратится в "Porsche Cayenne", если это происходит, то кому то надо вправить мозг.
2. Транзакция все сделает за тебя сама.
4. Leon75 19.04.21 14:41 Сейчас в теме
Одно из ключевых свойств объекта - его мутабельность.
Не изменилось во время записи, изменится потом.
На то он и объект.
5. andy_zhav 197 19.04.21 14:53 Сейчас в теме
(1)
При записи набора записей явно блокировать что-то не обязательно. Платформа неявным образом открывает транзакцию и устанавливает блокировки. Если у вас запись происходит в несколько регистров и в случае ошибки должны откатываться записи из всех регистров - тогда устанавливайте отдельную транзакцию.

Для принудительного блокирования записей регистра до окончания записи набора можно воспользоваться объектом БлокировкаДанных - почитайте про него в синтаксис-помощнике. Но тут есть подводные камни. Если у вас 8.2 или режим совместимости с 8.2 и режим управления блокировками автоматический, то блокировка данных будет вызывать исключение.

Для этих целей будет использоваться транзакционная блокировка.
Объектная блокировка - немного не то, как вы ее понимаете. Она больше нужна для того чтобы выводить сообщения пользователям при попытке изменить заблокированный объект. Они устанавливаются только автоматически платформой
6. andy_zhav 197 19.04.21 14:57 Сейчас в теме
Да, если увас записей сильно много в наборе получается - 20 000 для 8.2 и 100 000 для 8.3 - у вас автоматом будет блокироваться вся таблица регистра и никто ничего в ней не сможет сделать
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день