|   |   | 
| 
 | Блокировки в 1С | ☑ | ||
|---|---|---|---|---|
| 0
    
        Septera 03.04.20✎ 11:15 | 
        Управляемые блокировки, надо заблокировать регистр накопления для чтения, в ОбработкаПроведения документа пишу:
 Блокировка = Новый БлокировкаДанных;
Останавливаюсь в конфигураторе, открываю в новом окне 1С, выполняю запрос на выборку из регистра и о чудо он выбирает?! Что блин происходит кто-нибудь может мне объяснить? | |||
| 1
    
        polosov 03.04.20✎ 11:27 | 
        (0) Попробуй
 Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); | |||
| 2
    
        Septera 03.04.20✎ 11:33 | 
        (1) тоже самое     | |||
| 3
    
        ptiz 03.04.20✎ 11:40 | 
        (0) "выполняю запрос на выборку из регистра " - в транзакции?     | |||
| 4
    
        Septera 03.04.20✎ 11:41 | 
        (3) нет, просто запрос Оо, а что в транзакции надо чтобы увидеть блокировку?     | |||
| 5
    
        ptiz 03.04.20✎ 11:45 | 
        (4) ага     | |||
| 6
    
        fisher 03.04.20✎ 11:49 | 
        (0) Ты управляемые блокировки с автоматическими не попутал? Управляемые блокировки только сами себя блокируют. Запросам на них плевать.     | |||
| 7
    
        fisher 03.04.20✎ 11:58 | 
        На пальцах - автоматические блокировки полностью опирались на блокировки СУБД. Но в отсутствие гибкого управления со стороны прога приходилось стрелять из пушки по воробьям (использовать максимальный уровень изоляции транзакций с плачевным результатом для параллельности).
 Поэтому решили так - уровень изоляции транзакций СУБД опустить до минимально разумного, а дальше пускай прог рулит управляемыми блокировками. СУБД вообще ни сном ни духом про управляемые блокировки. Их сервер приложений контролирует. | |||
| 8
    
        Septera 03.04.20✎ 12:00 | 
        (5) спасибо комрад!
 (6) я попутал когда решил что блокировки в 1С работают по такому же принципу как в MySQL, когда там ставишь блокировку уровня SERIALIZABLE то разницы нету в транзакции или нет делает кто-то запрос, блокировка стоит и все тут | |||
| 9
    
        Septera 03.04.20✎ 12:03 | 
        (7) "СУБД вообще ни сном ни духом про управляемые блокировки. Их сервер приложений контролирует." - вот это $#ять больше всего парит в 1С, кто сказал что так лучше, хз... сами так придумали и решили пусть будет так, а весь остальной мир живет по своим правилам     | |||
| 10
    
        mistеr 03.04.20✎ 12:04 | 
        (0) В сеансе чтения тоже нужно заблокировать.     | |||
| 11
    
        mistеr 03.04.20✎ 12:05 | 
        (9) Книжки читай, тогда будешь знать, кто придумал и зачем.     | |||
| 12
    
        fisher 03.04.20✎ 12:07 | 
        (9) Ты не шаришь. В автоматических блокировках как раз и жили в SERIALIZABLE и жили очень хреново. И 1С тут не изобретатели. Я уже встречал подобные решения. И это отличный компромисс, я тебе скажу.     | |||
| 13
    
        Cyberhawk 03.04.20✎ 12:10 | 
        (4) В 8.3 запретить другим читать вне транзакции никак не можешь     | |||
| 14
    
        Septera 03.04.20✎ 12:11 | 
        (9) по каждому языку свою книжку про особенности работы с базой или может не$%й изобретать свои идиотские принципы программирования? почему мне не приходится программирую на php переучиваться работе с транзакциями в java или python?     | |||
| 15
    
        Septera 03.04.20✎ 12:18 | 
        (12) да причем здесь автоматические или управляемые, просто привел пример в виде SERIALIZABLE для моей задачи он сейчас требуется и никто не говорит что всегда нужен, я его вообще редко использовал в СУБД потому что с блокировками надо аккуратнее, все просто может повиснуть, кроме SERIALIZABLE есть еще READ UNCOMMITTED, READ COMMTITED, REPEATABLE READ и все это вместе дает необходимый ресурс для разработчика чтобы решить проблемы с параллельным чтением/записью, просто кто-то решил что надо сделать все "по-своему"     | |||
| 16
    
        Cyberhawk 03.04.20✎ 12:24 | 
        (14) "кроме SERIALIZABLE есть еще READ UNCOMMITTED, READ COMMTITED, REPEATABLE READ и все это вместе дает необходимый ресурс для разработчика чтобы решить проблемы с параллельным чтением/записью" // Не дает     | |||
| 17
    
        timeforlive 03.04.20✎ 12:27 | 
        КОД:
 // Создание объекта блокировка Блокировка = Новый БлокировкаДанных; // Добавление элемента блокировки Элемент = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); // Установка режима блокировки Элемент.Режим = РежимБлокировкиДанных.Исключительный; // Установка полей блокировки Элемент.УстановитьЗначение("Склад", Склад); Элемент.ИсточникДанных = СписокНоменклатуры; Элемент.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); //Блокировка данных Блокировка.Заблокировать(); Источник: курсы-по-1с Из темы 11: Какие навыки в использовании управляемых блокировок потребуются на экзамене | |||
| 18
    
        mistеr 03.04.20✎ 12:28 | 
        (14) Потому что ты еще не сталкивался по-настоящему с проблемами конкурентного доступа к БД.
 И оставь свое раздражение при себе, тут не курилка, чтобы выговориться. | |||
| 19
    
        mistеr 03.04.20✎ 12:30 | 
        (15) Поставь автоматические блокировки, сделать "ВЫБРАТЬ ... ДЛЯ ИЗМЕНЕНИЯ" и будет тебе (почти) serializable.     | |||
| 20
    
        fisher 03.04.20✎ 12:31 | 
        (14) Ты ж не путай божий дар с яичницей. В других языках ты можешь контролировать все тонкости взаимодействия твоей программы с СУБД. И ты БЛЯДЬ БУДЕШЬ контролировать все тонкости. Каждый запрос ты должен понимать когда посылать и как посылать. Иначе твоя программа будет обычным говнокодом, неспособным к высокопроизводительной параллельной работе без потери целостности состояний. А 1С пытается максимально снять этот гемор с програ, чтобы каждая домохозяйка смогла писать рабочий код, не углубляясь в дебри. Не забывай, что кучу запросов 1С генерит неявно. 1С пытается максимально все упростить без большой потери гибкости. И я считаю, что у них отлично получилось. Ты просто не распробовал вкус устриц а уже брызжешь слюной потому что где-то не так как ты привык.     | |||
| 21
    
        Septera 03.04.20✎ 12:40 | 
        (20) вооо, зришь в корень, значит надо нанять стадо домохозяек и научить их кодить, платить зп продуктами, а самому жить на Бали)     | |||
| 22
    
        fisher 03.04.20✎ 12:54 | 
        (21) А ты думал, куда попал? Одинэсники эти самые домохозяины и есть :) Только жаднее, чем ты думаешь :)     | |||
| 23
    
        dmpl 03.04.20✎ 13:38 | 
        (21) Управляемые блокировки - это еще бОльшая гибкость. Хочешь - изолируешь. Не хочешь - не изолируешь. Запусти оба своих запроса на чтение в транзакции. После блокировки данных одним из запросов - фиг ты прочитаешь, пока не снимешь блокировку. Но если все-таки надо прочитать - запускаешь запрос вне транзакции и читаешь.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |