А почему в конце ролика при установке ручной блокировки в качестве значения указывается ссылка, а не значение поля «Документ» из строки табличной части? Сам РС независимый, движения в нем создаются вне зависимости от контекста модуля проведения документа поступления на расчетный счет. Не совсем понял этот момент.
Да, вы совершенно правы, спасибо за внимательность. Должно быть так: ЭлементБлокировки.УстановитьЗначение("Документ", стр.Документ); К сожалению, в видео допущена ошибка. Но основная цель - показать, что перед чтением набора записей необходимо устанавливать исключительную блокировку, мы старались проиллюстрировать именно это.
@@ВладимирШаров-к5ж Набор записей регистра сведений всегда считывается в НЕЯВНОЙ транзакции с наложением S-блокировки, поэтому без X-блокировки нельзя. Статус "оплачен" нельзя всегда ставить, так как записи в наборе может и не быть, что должно быть понятно по коду.
Елена, отличные видео, большое спасибо, очень жду следующих. Есть огромная просьба, прикладывать архив с ТЖ, что бы можно было самостоятельно провести анализ. Вопрос по первой блокировке, почему не взаимоблокируется еще и поле "ИмяФайла", которое тоже есть измерение и вроде как должно попадать всеми значениями в блок, как неуказанное?
Большое спасибо, рады, что видео показались полезными. По поводу логов с воспроизведением демо-примера - думаю, что чуть позже сможем их выложить. По вопросу: ИмяФайла - ресурс, а не измерение.
Спасибо за видео! Очень жду следующие части. Жаль, что так редко выходят. Поясните, пожалуйста, момент, озвученный в 13:53. У меня не получается проследить связь указанной взаимоблокировки с захватом ресурсов в разном порядке. По идее, второе соединение не смогло бы установить эксклюзивную блокировку на всё пространство "часть файлов = *", т.к. на это же пространство уже наложена блокировка первым соединением? Напрашивается вывод, что на пространство "часть файлов = *" оба соединения устанавливают разделяемую блокировку. А затем оба пытаются наложить явную эксклюзивную блокировку на конкретные значения: "часть файлов = 1" и "часть файлов = 2", что приводит к взаимоблокировке из-за взаимной попытки повышения уровня изоляции на общий ресурс.
В видео все верно. Разделяемых блокировок нигде не накладывается. Если обе транзакции начались примерно одновременно, то они накладывают сначала успешно перед запросом непересекающиеся эксклюзивные блокировки в первом пространстве, потом при записи нз они на первое пространство пытаются наложить эксклюзивную блокировку целиком на все, первая начинает ждать вторую, как только вторая делает то же самое возникает дедлок.
Добрый день. А можно в каком-то виде воспроизведение выкладывать? Хотя бы только ТЖ в архиве + файл выгрузки .bak из SQL, где будет только пустая база?
Смутить скорее должно чтение набора записей в цикле, потому что это не что иное, как запрос. Но и это зависит от кейса, точнее, от количества итераций, в данном случае по смыслу их должно быть очень мало.
А почему в конце ролика при установке ручной блокировки в качестве значения указывается ссылка, а не значение поля «Документ» из строки табличной части? Сам РС независимый, движения в нем создаются вне зависимости от контекста модуля проведения документа поступления на расчетный счет. Не совсем понял этот момент.
Да, вы совершенно правы, спасибо за внимательность. Должно быть так:
ЭлементБлокировки.УстановитьЗначение("Документ", стр.Документ);
К сожалению, в видео допущена ошибка. Но основная цель - показать, что перед чтением набора записей необходимо устанавливать исключительную блокировку, мы старались проиллюстрировать именно это.
@@elenaskvortsova4478 Спасибо за наглядные примеры. Кстати кажется можно было без проверки на статус и без блокировки всегда писать статус "оплачен".
@@ВладимирШаров-к5ж Набор записей регистра сведений всегда считывается в НЕЯВНОЙ транзакции с наложением S-блокировки, поэтому без X-блокировки нельзя. Статус "оплачен" нельзя всегда ставить, так как записи в наборе может и не быть, что должно быть понятно по коду.
Елена, отличные видео, большое спасибо, очень жду следующих. Есть огромная просьба, прикладывать архив с ТЖ, что бы можно было самостоятельно провести анализ.
Вопрос по первой блокировке, почему не взаимоблокируется еще и поле "ИмяФайла", которое тоже есть измерение и вроде как должно попадать всеми значениями в блок, как неуказанное?
Большое спасибо, рады, что видео показались полезными. По поводу логов с воспроизведением демо-примера - думаю, что чуть позже сможем их выложить.
По вопросу: ИмяФайла - ресурс, а не измерение.
Спасибо за видео! Очень жду следующие части. Жаль, что так редко выходят.
Поясните, пожалуйста, момент, озвученный в 13:53. У меня не получается проследить связь указанной взаимоблокировки с захватом ресурсов в разном порядке. По идее, второе соединение не смогло бы установить эксклюзивную блокировку на всё пространство "часть файлов = *", т.к. на это же пространство уже наложена блокировка первым соединением? Напрашивается вывод, что на пространство "часть файлов = *" оба соединения устанавливают разделяемую блокировку. А затем оба пытаются наложить явную эксклюзивную блокировку на конкретные значения: "часть файлов = 1" и "часть файлов = 2", что приводит к взаимоблокировке из-за взаимной попытки повышения уровня изоляции на общий ресурс.
В видео все верно. Разделяемых блокировок нигде не накладывается. Если обе транзакции начались примерно одновременно, то они накладывают сначала успешно перед запросом непересекающиеся эксклюзивные блокировки в первом пространстве, потом при записи нз они на первое пространство пытаются наложить эксклюзивную блокировку целиком на все, первая начинает ждать вторую, как только вторая делает то же самое возникает дедлок.
Добрый день. А можно в каком-то виде воспроизведение выкладывать? Хотя бы только ТЖ в архиве + файл выгрузки .bak из SQL, где будет только пустая база?
Здравствуйте. В ближайшее время добавим в описание.
Блокировка в цикле это норм? 21:43
Смутить скорее должно чтение набора записей в цикле, потому что это не что иное, как запрос. Но и это зависит от кейса, точнее, от количества итераций, в данном случае по смыслу их должно быть очень мало.