Имя: Пароль:
1C
1С v8
Помогите разобраться с блокировкой объектов
0 Игорь_МММ
 
14.12.16
10:57
Мне нужно выполнить некоторые манипуляции с разными объектами в одной транзакции (то бишь либо все либо ничего). Как гарантировано заблокировать все объекты ? Так понял что метод Заблокировать - не гарантия в целом. Объект БлокировкаДанных можно навесить только на целый справочник, на конкретный объект (справочник, документ) его навесить не получится?
1 Рэйв
 
14.12.16
11:08
получится
2 bodri
 
14.12.16
11:14
(0) Если не MS SQL то не получится, т.к. вроде только MS SQL может блокировать строку таблицы. В файловой точно не получится, т.к. блокируется полностью таблица.
3 Лефмихалыч
 
14.12.16
11:15
(0) если база не файловая, то ты всё понял не правильно. Если файловая, то правильно лишь от части
4 Мимохожий Однако
 
14.12.16
11:17
(0) НачатьТранзакцию() и т.п.не помогает?
5 Fragster
 
гуру
14.12.16
11:20
.заблокировать - это проверить, что ни один юзер не получит "Версия была изменена или удалена", пока пол часа заполняет документ инвентаризации
6 Игорь_МММ
 
14.12.16
11:33
(4) в транзакции пробовал НачатьТранзакцию()/ЗафиксироватьТанзакцию(). Но по ходу выполнения поставил ОтменитьТранзакцию() - так все что было сделано, то осталось (в частности удаление дока)
(5) как я понял .Заблокировать просто добавляет 1 в версию, но если кто-то откроет док после этого, то запросто сделает все что захочет.
(2) (3) сейчас файловая, но предполагаю переход на клиент-серверную.

Блокировка = Новый БлокировкаДанных;
        ЭлементБлокировки = Блокировка.Добавить("Справочник.Полуфабрикаты");
        ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
        ЭлементБлокировки.УстановитьЗначение("Ссылка", Справочники.Полуфабрикаты.НайтиПоКоду("1"));
        Блокировка.Заблокировать();

- так будет корректно?
7 DSSS
 
14.12.16
11:35
Правильный ответ в (4)
8 Fragster
 
гуру
14.12.16
11:46
(6).2 неправильно понял посмотри, как сделано в Зацените канбан доску на 1с с перетаскиванием на доске и формой итерации
9 Fragster
 
гуру
14.12.16
11:51
всё или ничего - это начать транзакцию/зафиксировать транзакцию. блокировка данных и/или Для изменения в запросе - для того, чтобы не менялись данные, на которые ты опираешься в своих действиях. объект.заблокировать() - чтобы не было ошибки про несоответствие версии у пользователя или двух несогласованных изменений объекта при программном изменении в разных сеансах.
10 Игорь_МММ
 
14.12.16
11:57
(9) спасибо, буду разбираться с материалом