AXForum  
Вернуться   AXForum > Рынок > Другие системы на рынке
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.01.2011, 14:13   #1  
Сисой is offline
Сисой
Участник
Аватар для Сисой
Злыдни
1C
 
938 / 339 (13) ++++++
Регистрация: 05.02.2003
Адрес: Москва
Как в 1С работают транзакционные блокировки
Меня часто спрашивают о принципах транзакционных блокировок в 1С.
Вот краткая шпаргалка.
Справедливо для клиент-серверных версий 1С 8.х

1. Вне транзакций (в т.ч. отчеты) - "грязное чтение" (Read Uncommited). Теоретически можно вызвать транзакцию внутри отчета и перевести режим доступа в Repeatable Read, но тогда начинает работать п.2 и на все читаемые данные накладывается разделяемая блокировка.
2. Транзакция в автоматическом режиме блокировок (1С 8.0) - по умолчанию Repeatable Read или Serializable на уровне записей, блокируются все отбираемые записи всех таблиц, считываемые в процессе транзакции.
Если нужно наложить исключительную (неразделяемую) блокировку - программист должен в запросе к данным использовать конструкцию ДЛЯ ИЗМЕНЕНИЯ с перечислением блокируемых таблиц.
Исключительная блокировка также возникает в момент записи движений документа (в конце транзакции проведения, если в коде нет явных конструкций типа
X++:
 ..();
).
3. Управляемый режим блокировок (введен с версии 8.1, но программист может использовать и автоматический режим) - по умолчанию в рамках транзакции везде Read Commited на уровне записей,
Если нужно использовать разделяемую (по чтению) или исключительную блокировку, программист самостоятельно должен определить таблицы и записи, на которые накладывается блокировка.
X++:
Dl=New DataLock;
Element1= Dl.Add("РегистрНакопления.ОстаткиНаСкладе"); // элементов блокировки м.б. много
Element1.Mode=DataLockMode.Exclusive;
Element1.SetValue("Склад", ); // фильтр по складу
Element1.DataSource= QueryResult;  // например, результат запроса, но м.б. и табличная часть, и временная таблица.
Element1.UseFromDataSource("Товар","Номенклатура"); // фильтруем измерение Товар по колонке результата запроса Номенклатура
Dl.Lock();
Исключительная блокировка также возникает в момент записи движений документа.

Последний раз редактировалось Сисой; 17.01.2011 в 14:19.
За это сообщение автора поблагодарили: ziva (2), kosenkov (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
1С: Франчайзи - есть ли будущее? miklenew Другие системы на рынке 13 03.10.2009 12:22
Изменения ассортимента, цен, условий поставки и сопровождения ряда продуктов «1С:Предприятия 7.7» mazzy Другие системы на рынке 40 30.04.2008 23:31
Обсуждение документа "Сравнение 1С и AX" Кузнецов Александр Сравнение ERP-систем 44 20.02.2008 13:56
Платформа «1С:Предприятие» как средство разработки бизнес-приложений Morpheus Другие системы на рынке 1 26.12.2006 13:10
1С ищет стратегического инвестора Роман Кошелев Другие системы на рынке 1 16.04.2003 23:02

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:22.