Программирование - это просто
Advertisement
Главная arrow 1С:Предприятие arrow Разные статьи по 1С arrow 1С 8.2. Блокировка информации в базе данных.
08.05.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
1С 8.2. Блокировка информации в базе данных. Печать E-mail
Автор megabax   
10.02.2014 г.
New Page 1

1С 8.2. Блокировка информации в базе данных.

Зачастую в базе данных 1С одновременно работает несколько пользователей. В принципе, это нормальное явление, 1С для этого и создавалась, что бы обеспечить возможность работы нескольких пользователей одновременно. Но тут могу возникнуть нюансы.

Предположим, что два пользователя одновременно запрашивают одну и ту же информацию, например, информацию об остатках. Допустим, на складе имеется сто телевизоров. Два менеджера по продажам одновременно пытаются отгрузить этот товар покупателю, и при этом узнают, сколько же товара есть на складе. Допустим, первый продает 60 штук, а второй 70. На складе 100 телевизоров. Теоретически, оба могут продать. Но практически им телевизоров не хватит: продают то они 60+70=130, а на складе только 100!

Как выйти из этого положения? Использовать блокировки. Начнем с того, что два пользователя все же не одновременно обращаются к базе данных. Это только так кажется, что одновременно, потому что разница может быть в несколько микросекунд. Тоесть, кто то все равно запросил остаток первый. Так вот, пользователь, обращающийся к базе данных, блокирует эту информацию от чтения другим пользователем. И это блокировка сохраняется до тех пор, пока он не спишет проданные товары со склада. После этого блокировка освобождается и второй юзер получает реальный остаток.

Тут может возникнуть еще вот какой нюанс. Допустим, первый пользователь "завис" и не снял блокировку. Второй пользователь пытается считать данные и не может. Так вот, что бы он тоже не "завис", при чтении информации задается какой то таймаут, в течении которого он может ожидать завершения блокировки. Если в течении этого времени данные не освободятся, то транзакция второго пользователя завершается с ошибкой.

Что бы заблокировать данные, в запросе достаточно указать "для изменения":

Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| ОстаткиОстатки.Номенклатура,
| СУММА(ОстаткиОстатки.КоличествоОстаток) КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.Остатки.Остатки(, Номенклатура = &Товар) КАК ОстаткиОстатки
|
|СГРУППИРОВАТЬ ПО
| ОстаткиОстатки.Номенклатура
|
|ДЛЯ ИЗМЕНЕНИЯ"
;

Можно указать конкретные таблицы, которые будут блокироваться:

Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| ОстаткиОстатки.Номенклатура,
| СУММА(ОстаткиОстатки.КоличествоОстаток) КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.Остатки.Остатки(, Номенклатура = &Товар) КАК ОстаткиОстатки
|
|СГРУППИРОВАТЬ ПО
| ОстаткиОстатки.Номенклатура
|
|ДЛЯ ИЗМЕНЕНИЯ
| РегистрНакопления.Остатки.Остатки"
;

Таким образом, прямо в запросе мы можем средствами платформы блокировать таблицы.
 

 

 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги