Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как работает ЗаблокироватьДанныеДляРедактирования()?

Как работает ЗаблокироватьДанныеДляРедактирования()?
Я
   D_E_S_131
 
13.09.21 - 22:28
В конфигурации имеется некий документ "Док1" и пара регистров сведений ("РС1" и "РС2"). В каждом регистре есть измерение со ссылкой на Док1. Делаю обработку, в которой выбираю ссылку Док1 и блокирую данные в РС1 по ключу с указанием УИД формы обработки. В другом сеансе пытаюсь так же заблокировать данные по ключу со ссылкой на тот же документ, но уже ДРУГОГО регистра РС2. Получаю исключение "Данные заблокированы в другом сеансе..."! Как же так, это же вообще разные объекты данных, хоть и имеют ссылку на один документ? Или я что не так понимаю в этом методе??

Код блокировки:

Процедура Тест1НаСервере()
    
    КлючРС = РегистрыСведений.РС1.СоздатьКлючЗаписи(Новый Структура("Док", ВыбДок));
    
    Попытка
    
        Если БлокировкаФормы Тогда
        
            ЗаблокироватьДанныеДляРедактирования(КлючРС,, УникальныйИдентификатор);
        
        Иначе
        
            ЗаблокироватьДанныеДляРедактирования(КлючРС);
        
        КонецЕсли;
    
    Исключение
        
        СтрИнфо = СтрШаблон("РС №1 уже заблокирован! %1 (%2)", КтоЗаблокировалФорму(ОписаниеОшибки()), УникальныйИдентификатор);
        
        Сообщить(СтрИнфо , СтатусСообщения.ОченьВажное);
        
        Отказ = Истина;
        
        Возврат;
        
    КонецПопытки;
    
КонецПроцедуры

P.S. Если заблокировать в одном сеансе данные РС1 или РС2 по ключу, а в другом сеансе блокировать саму ссылку на Док1, то все работает корректно.

P.P.S. Проверялось на платформах 8.3.15.1830 и 8.3.17.1851.
   D_E_S_131
 
1 - 13.09.21 - 22:30
Если не указывать УИД формы, то по ключу регистра сведений не блокируется ничего вообще.
   D_E_S_131
 
2 - 14.09.21 - 18:26
Неужели никто не использует пессимистичные блокировки?
   Ёпрст
 
3 - 14.09.21 - 18:37
   H A D G E H O G s
 
4 - 14.09.21 - 18:38
Скинь cf-шник
   D_E_S_131
 
5 - 14.09.21 - 19:04
   D_E_S_131
 
6 - 14.09.21 - 19:05
(3) В статье как нарочно избегают примеров с блокировкой набора записей РС по ключу. По ссылке на объект все блокируется нормально.
   H A D G E H O G s
 
7 - 14.09.21 - 19:12
Да, походу баг платформы
   D_E_S_131
 
8 - 14.09.21 - 19:18
Наверное если открыть исходники, то в блоке, где должны обрабатываться РС, написано //todo :)
   Ёпрст
 
9 - 14.09.21 - 19:30
(5)
у меня так: если не указывать ид формы в методе, то не блокируется ничего
   Ёпрст
 
10 - 14.09.21 - 19:30
если указать ид формы - то да, есть эффект
   Ёпрст
 
11 - 14.09.21 - 19:31
8.3.18.1334 без режима совместимости
   Вафель
 
12 - 14.09.21 - 19:40
Если не указывать ид формы, то блокируется вроде только до конца процедуры
   Ёпрст
 
13 - 14.09.21 - 19:42
(12) да, есть такое.
И для ключа РС, по-ходу тупо блокирует все объекты этого ключа.
   D_E_S_131
 
14 - 14.09.21 - 19:45
Тут бы попробовать сымитировать через "Основной реквизит формы", т.к. по идее кодом должно работать так же как это отработало бы на форме, но не понятно какого типа должен быть этот "основной реквизит". "Набор записей" вроде как является типом Объекта, когда открываешь на редактирование из списка какую-то запись.
Хотя следуя этой логике, может нужно не ключ РС передавать, а набор записей с установленным отбором.
   D_E_S_131
 
15 - 14.09.21 - 19:51
Не, набор записей не дает передать в процедуру ЗаблокироватьДанныеДляРедактирования().
   Вафель
 
16 - 14.09.21 - 20:01
(13) до конца процедуры нормально блокируется. У меня так от повторных вызовов вебсервисов защита
   Гений 1С
 
17 - 14.09.21 - 21:51
(0) вот я ничего не знаю про управляемые блокировки, но это не мешает мне быть высококалифицированным и востребованным специалистом.
   acanta
 
18 - 14.09.21 - 21:57
(17) вообще бывают такие специалисты, которым не поможет даже знание про управляемые блокировки.
   Олеша Попович
 
19 - 20.09.21 - 16:54
(0) Создал свою базу, воспроизвел, отправил на V8 https://regevent.1c.ru/sbo/tp/fd8cbf71-1a02-11ec-815d-0050569f2415/info/
   Олеша Попович
 
20 - 20.09.21 - 16:55
Попробую пройти квест с регистрацией ошибки, бгг
   Олеша Попович
 
21 - 27.09.21 - 16:02
Зарегистрирована ошибка платформы 10234370.
   lodger
 
22 - 27.09.21 - 16:52
(19)
Номер обращения: HL-389714
Дата обращения: 20.09.2021 14:07:51
Тема: Метод ЗаблокироватьДанныеДляРедактирования() по ключу записи блокирует также запись другого регистра сведений
Статус обращения: Ожидание инициатора 
Вам было отправлено письмо, мы ожидаем от Вас ответ. Если ответа не будет в течении 4 дней обращение будет закрыто.
Дата последнего изменения: 27.09.2021 15:34:31
   lodger
 
23 - 27.09.21 - 16:54
при этом https://bugboard.v8.1c.ru/error/000114847
Код ошибки: 10234370
Код(ы) обращения: HL-389714

у них медленная синхронизация какая-то.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.