|   |   | 
| 
 | Управляемые блокировки, грязное чтение | ☑ | ||
|---|---|---|---|---|
| 0
    
        mxs089 28.10.15✎ 11:06 | 
        РС Цены, колонки - Номенклатура, Цена, регистр периодический.
 Блокировка управляемая. Открываю транзакцию, пишу новую цену и запросом читаю данные, после отменяю транзакцию, запросом получаю новую цену... Файловый вариант. Как читать зафиксированную цену? | |||
| 1
    
        DmitrO 28.10.15✎ 11:12 | 
        не всякий вызов ОтменитьТранзакцию() приводит к ее отмене )     | |||
| 2
    
        DmitrO 28.10.15✎ 11:12 | 
        как и, не всякий вызов начать транзакцию приводит к ее началу )     | |||
| 3
    
        mistеr 28.10.15✎ 11:13 | 
        Может еще где транзакция открывается?     | |||
| 4
    
        Гёдза 28.10.15✎ 11:13 | 
        ну это не вложенная транзакция, иначе повторное чтение вызвало бы ошибку     | |||
| 5
    
        Тoлько_ Просмотр 28.10.15✎ 11:13 | 
        (0) Сумбур какой-то. Где транзакцию открываешь? Только не говори что в обработке проведения документа, которым устанавливаешь цены.     | |||
| 6
    
        Господин ПЖ 28.10.15✎ 11:22 | 
        эм... а в файловой "грязное чтение" вообще возможно?     | |||
| 7
    
        scanduta 28.10.15✎ 11:25 | 
        Что бы читать зафиксированную цену  , нужно читать в транзакции     | |||
| 8
    
        H A D G E H O G s 28.10.15✎ 11:30 | 
        Автор, вы не имеете среди знакомых Павленского Пётра, а то нам ваш перформанс непонятен.     | |||
| 9
    
        ptiz 28.10.15✎ 11:33 | 
        (0) "и запросом читаю данные" - в другом сеансе или этом же?     | |||
| 10
    
        mxs089 29.10.15✎ 10:53 | 
        НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
 Блокировка = Новый БлокировкаДанных; Элемент = Блокировка.Добавить("РегистрСведений.Цены"); Элемент.УстановитьЗначение("Номенклатура", Номенклатура); Элемент.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Менеджер = РегистрыСведений.Цены.СоздатьМенеджерЗаписи(); Менеджер.Период = Дата; Менеджер.Номенклатура = Номенклатура; Менеджер.Цена = Цена; Менеджер.Записать(Истина); Ресурсы = РегистрыСведений.Цены.ПолучитьПоследнее(, Новый Структура("Номенклатура", Номенклатура)); Сообщить(Ресурсы.Цена); ОтменитьТранзакцию(); | |||
| 11
    
        mxs089 29.10.15✎ 11:23 | 
        запускаю два сеанса под разными пользователями, под одним запускаю обработку, которая меняет цены, под вторым в это время происходит чтение цены, мне вылазит старая цена, хотя после завершения обработки ценник может измениться, как произвести блокировку таблицы, чтобы остальные пользователи не могли получить старый ценник?     | |||
| 12
    
        rozer76 29.10.15✎ 11:23 | 
        (10) если чтение в том же сеансе то получаете "новую" цену также для изучения можно это посмотреть http://its.1c.ru/db/metod8dev/content/2733/hdoc/_top/%F2%F0%E0%ED%E7%E0%EA%F6%E8%E8
 Теперь если в др. сеансе: уже на "Блокировка.Заблокировать();" повиснет др. сеанс а как только транзакция кончиться - прочитает "старую" цену. Если бы явной блокировки вообще не было - файловый вариант в отличии от клиент-серверного не читает не зафиксированные данные т.е. вкл. версионирование. А для клиент сервера или использовать чтение в транзакции или вкл. версионирование в СУБД. http://its.1c.ru/db/metod8dev/content/2604/hdoc/_top/%F2%F0%E0%ED%E7%E0%EA%F6%E8%E8 | |||
| 13
    
        1sanekmaloi1 29.10.15✎ 11:29 | 
        (11)Читающий цену код показывай, транзакцией похоже там и не пахнет.     | |||
| 14
    
        mxs089 29.10.15✎ 11:35 | 
        Запись новой цены
 НачатьТранзакцию(); Менеджер = РегистрыСведений.Цены.СоздатьМенеджерЗаписи(); Менеджер.Период = Дата; Менеджер.Номенклатура = Номенклатура; Менеджер.Цена = Цена; Менеджер.Записать(Истина); Дата = ТекущаяДата(); КонецДата = ТекущаяДата() + 60; Пока Дата < КонецДата Цикл Дата = ТекущаяДата(); КонецЦикла; ОтменитьТранзакцию(); Чтение 2 пользователь Ресурсы = РегистрыСведений.Цены.ПолучитьПоследнее(, Новый Структура("Номенклатура", Номенклатура)); Сообщить(Ресурсы.Цена); | |||
| 15
    
        H A D G E H O G s 29.10.15✎ 11:39 | 
        (14) 2 пользователь пусть читает в транзакции     | |||
| 16
    
        rozer76 29.10.15✎ 11:58 | 
        (15) вроде как для файловой ИБ необязательно - см. 12     | |||
| 17
    
        rozer76 29.10.15✎ 12:00 | 
        (16) + хотя, попробуй... фиг знает какая 1сплатформа ну до кучи можно попробовать и блокировку попробовать и в записи и в чтении... интересно на каком варианте у него заработает... хотя и не логично     | |||
| 19
    
        mxs089 29.10.15✎ 13:17 | 
        (18) следи за базаром     | |||
| 20
    
        ptiz 29.10.15✎ 13:37 | 
        (14) И что не так?
 Тут ты указал, что 2ой пользователь читает после команды "ОтменитьТранзакцию". Т.е. восстановлено то, что было до записи набора. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |