#0
by decdmb
Необходимо заблокировать выбираемую запись из периодического независимого регистра сведений на чтение (у конфы стоит режим упр. блок. - Автоматический): ВЫБРАТЬ ПЕРВЫЕ 1 СтатусыДокументовСрезПоследних.Объект, СтатусыДокументовСрезПоследних.Период, СтатусыДокументовСрезПоследних.Статус ИЗ РегистрСведений.СтатусыДокументов.СрезПоследних КАК СтатусыДокументов Про ДЛЯ ИЗМЕНЕНИЯ написано: Предложение ДЛЯ ИЗМЕНЕНИЯ предназначено для указания необходимости блокировки считываемых в транзакции данных. Считанные данные становятся недоступными для чтения в других сессиях. Для файлового варианта блокируются указанные таблицы, а для клиент-серверного варианта — только выбранные записи. Блокировка снимается после завершения транзакции. Что означает "Блокировка снимается после завершения транзакции."? Т.е. чтение из регистра необходимо завернуть в НачатьТранзакцию - ЗафиксироватьТранзакцию? Но про НачатьТранзакцию написано: Транзакция предназначена для записи в информационную базу согласованных изменений. Про блокировку на чтение не указано.
#3
by decdmb
Можно ли использовать объект БлокировкаДанных при Автоматическом режиме и будет ли он работать?
#4
by ProgAL
Смысл в том что в каждом куске кода где вы хотите запретить чтение записи РС, предварительно надо делать внутри ваш запрос с ДЛЯ ИЗМЕНЕНИЯ ЗафиксироватьТраназакцию; Аналогичный код должен быть во всех местах разных обработок или где откуда вы читаете свой регистр сведений. Либо такой код ставите в одну конкретную обработку, при этом другой экземпляр обработки, запущенный другим пользователем, будет ждать завершения траназкции в первом экземпляре обработки.
#5
by ProgAL
Если вы свой код вызываете из обработки проведения или другого события , начинающего неявную транзакцию, то конструкции начать/зафиксировать транзакцию не нужны.
#6
by decdmb
Понятно, просто смутило в описании НачатьТранзакцию - Транзакция предназначена для записи в информационную базу согласованных изменений. Про чтение там не написано.
#7
by ProgAL
Код чиения выполняется только после наложения блокировки. В этом и весь смысл. Если блокировка не накладывается, то происходит ожидание на блокировке, либо дожидаемся когда она сможет наложится и выполнится нижестоящий код на чтение, либо отвалимся по таймауту.
#9
by Господин ПЖ
>ДЛЯ ИЗМЕНЕНИЯ не блокирует запись на чтение. здрасти приехали... shared и sharedforupdate между собой уже не совместимы
#12
by MrStomak
Напиши в microsoft, что у них неверная таблица совместимости ;) U блокировка несовместима с другой U и с X. То есть запрос без конструкции "Для изменения" в транзакции легко сможет прочитать эти данные.
#13
by Господин ПЖ
>а вот в списках форм действительно не блокируется там везде nolock впендюривается...
#17
by бомболюк
+100500 истина в последнем абзаце. к сожалению от чтения с nolock спасет только запуск реиндексации нужной таблицы, что лежит за рамками штатных возможностей в рантайме. надо везде при чтении ставить ДЛЯ ИЗМЕНЕНИЯ тоже.
#20
by Ненавижу 1С
меня другое смущает, вот код: и такой же код для другой валюты, написано что для скуля должно блокировать выбранные строки, а оно блокирует усе, но ведь валюты же разные!
#22
by Господин ПЖ
зависит от размера таблицы и ее строения... РС блокируется диапазонами... записи одной даты блокируются все насколько я помню
#23
by MrStomak
если на serializable выполняется, то заблокирует соседние записи кластерного индекса вдовесок.
#25
by MrStomak
nolock это указание СУБД использовать READ UNCOMMITTED. Я возразил, что это не влияет, даже Serializable в этом случае прочитает. Потом ты говоришь, что не надо приплетать уровни изоляций. Это несколько противоречиво.
#26
by Господин ПЖ
>говоришь, что не надо приплетать уровни изоляций я писал что не надо валить в кучу. а не "приплетать"
#27
by Господин ПЖ
>nolock это указание СУБД использовать READ UNCOMMITTED. Я возразил, что это не влияет, даже Serializable в этом случае прочитает список обновляется даже пока транзакция не завершена >даже Serializable в этом случае прочитает каким образом?
#28
by MrStomak
>список обновляется даже пока транзакция не завершена Спасибо, кэп, мне известна работа на уровне изоляций read uncommitted - на нём не ставятся блокировки в читающих запросах. >каким образом? Он скажет СУБД: хочу прочитать таблицу на Serializable, та посмотрит правила - так, мы должны наложить RangeS-S, но у нас уже есть U, посмотрит таблицу совместимости, ага, RangeS-S совместим с U, наложит блокировку RangeS-S и отдаст данные. Примерно так.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Как заблокировать копм от несанкционированного доступа?
- v8: Как получить удаляемую запись регистра сведений при интерактивном удалении
- как выбрать из регистра накопления последнюю запись с заданным отбором
- Не удалось заблокировать запись. Как правильно удалять ссылку на форму?
- отчет по данным регистра накопления и регистра бухгалтерии
- v8: не удалось заблокировать таблицу 'SESSIONS'
- Не удалось заблокировать запись. Как снять блокировку?
- Перезаписать запись регистра сведений.
- Заполнить новую запись регистра сведений, без регистратора.
- Как заблокировать горячие клавиши в 1с8?
- Запись бух. операции сильно тормозит (запись в регистр бухгалтерии)
В этой группе 1С
- Удалить команду "Провести" из контекстного меню документа
- Доступ к номенклатуре на уровне записей в УПП
- Расчет налогов нарастающим итогом
- Остановка отладки при com-соединении
- Возврат товаров от покупателя УТ 10.3
- Выгрузка в YML
- Web-клиент 1С в Safari (Mac OS X)
- 1С УПП. можно ли провести частичное сторнирование документа
- Последовательность в производстве (УПП)
- 8.3.4 Не работает отбор на форме набора записей регистра
- Не загружается dt
- ЗУП 2.5 Отпуск и больничный в текущем месяце
- Дополнительные поля в СКД
- При пробитии чека после 0:00 ошибка Контроль даты и времени (1С Ресторан)
- ЗУП (ЗБУ) повторные вычеты в регистрации разовых начислений
- Нет движений по регистру при проведении документов обработкой
- Преобразование типов в языке выражений компоновки данных 1с
- ЗУП. Исправление больничного листа
- Перебор и изменение значений полей табличной части (макет)
- УТ 10.3 не сохраняет файлы в Том хранения файлов.