![]() |
![]() |
![]() |
|
блокировка "Для Изменения" | ☑ | ||
---|---|---|---|---|
0
vde69
01.12.10
✎
13:42
|
есть управляемая форма, в процедуре ПриЗаписиНаСервере вызывается серверная процедура
Процедура ЗаблокироватьID_КлиентскогоДокумента (ID_Поставки) Экспорт Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 1 | КлиентскиеДокументы.ДоговорПоставки, | КлиентскиеДокументы.ТипДокумента, | КлиентскиеДокументы.НомерДокумента, | КлиентскиеДокументы.ДатаДокумента |ИЗ | РегистрСведений.КлиентскиеДокументы КАК КлиентскиеДокументы |ГДЕ | КлиентскиеДокументы.ID_Поставки = &ID_Поставки | И КлиентскиеДокументы.Основной | |ДЛЯ ИЗМЕНЕНИЯ | РегистрСведений.КлиентскиеДокументы"; Запрос.УстановитьПараметр("ID_Поставки", ID_Поставки); Запрос.Выполнить(); КонецПроцедуры смысл вызова в том, что-бы гарантировать, что пока идет транзакция записи (процедура ПриЗаписиНаСервере) все остальные клиенты не могли прочитать последний ID из регистра (то есть ОДНУ запись). Вроде работает, но есть жалобы, что блокировки очень долго висят (или может заблокировано слишком много, например вся таблица), есть предложение изменить запрос убрав последнюю строку Запрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 1 | КлиентскиеДокументы.ДоговорПоставки, | КлиентскиеДокументы.ТипДокумента, | КлиентскиеДокументы.НомерДокумента, | КлиентскиеДокументы.ДатаДокумента |ИЗ | РегистрСведений.КлиентскиеДокументы КАК КлиентскиеДокументы |ГДЕ | КлиентскиеДокументы.ID_Поставки = &ID_Поставки | И КлиентскиеДокументы.Основной | |ДЛЯ ИЗМЕНЕНИЯ"; но вот будет-ли он блокировать только 1 запись? проверить тяжело, по сколько нет тестового сервера а все выполняется только на сервере в транзакции. и еще вопрос: может-ли транзакция незакрыватся и блокировка повисать? например если был какой-то вопрос или еще какое интерактивное действие? Используется web приложение и может там какая специфика например при потере конекта или еще чего? |
|||
1
Господин ПЖ
01.12.10
✎
13:44
|
>но вот будет-ли он блокировать только 1 запись?
будет так как решит скуль. если данных мало он может заблокировать всю таблицу или диапазон |
|||
2
vde69
01.12.10
✎
14:07
|
так все-же как заблокировать существующую запись в регистре?
|
|||
3
vde69
01.12.10
✎
15:37
|
нашел, для блокировки одной записи нужен явный отбор по всем измерениям, у меня взлетело:
Процедура ЗаблокироватьID_КлиентскогоДокумента (ID_Поставки) Экспорт Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | КлиентскиеДокументы.ДоговорПоставки, | КлиентскиеДокументы.ТипДокумента, | КлиентскиеДокументы.НомерДокумента, | КлиентскиеДокументы.ДатаДокумента, | КлиентскиеДокументы.Сумма, | КлиентскиеДокументы.Валюта, | КлиентскиеДокументы.СуммаВалютная, | КлиентскиеДокументы.СуммаНДС, | КлиентскиеДокументы.ДенежноеТребование, | КлиентскиеДокументы.ДатаРегистрации, | КлиентскиеДокументы.Обработан, | КлиентскиеДокументы.ДатаПоставки, | КлиентскиеДокументы.ВладелецДатыПоставки, | КлиентскиеДокументы.БП_Обработки, | КлиентскиеДокументы.Основной, | КлиентскиеДокументы.ID_Поставки, | КлиентскиеДокументы.ДатаОтгрузки, | КлиентскиеДокументы.ПунктНазначения, | КлиентскиеДокументы.Предварительный |ИЗ | (ВЫБРАТЬ | КлиентскиеДокументы.ДоговорПоставки КАК ДоговорПоставки, | КлиентскиеДокументы.ТипДокумента КАК ТипДокумента, | КлиентскиеДокументы.НомерДокумента КАК НомерДокумента, | КлиентскиеДокументы.ДатаДокумента КАК ДатаДокумента | ИЗ | РегистрСведений.КлиентскиеДокументы КАК КлиентскиеДокументы | ГДЕ | КлиентскиеДокументы.ID_Поставки = &ID_Поставки | И КлиентскиеДокументы.Основной) КАК ВложенныйЗапрос | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлиентскиеДокументы КАК КлиентскиеДокументы | ПО ВложенныйЗапрос.ДоговорПоставки = КлиентскиеДокументы.ДоговорПоставки | И ВложенныйЗапрос.ТипДокумента = КлиентскиеДокументы.ТипДокумента | И ВложенныйЗапрос.НомерДокумента = КлиентскиеДокументы.НомерДокумента | И ВложенныйЗапрос.ДатаДокумента = КлиентскиеДокументы.ДатаДокумента | |ДЛЯ ИЗМЕНЕНИЯ | РегистрСведений.КлиентскиеДокументы"; Запрос.УстановитьПараметр("ID_Поставки", ID_Поставки); Запрос.Выполнить(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |