Объектные блокировки

17.08.16

Разработка - Механизмы платформы 1С

При работе с объектными данными (справочники, документы, планы счетов и т.д.) система «1С:Предприятие» обеспечивает два вида объектных блокировок: пессимистическую и оптимистическую. Они позволяют выполнять целостные изменения объектов при одновременной работе нескольких пользователей.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Учебная база
.dt 184,65Kb
15
15 Скачать (1 SM) Купить за 1 850 руб.

Блокировки

При работе с объектными данными (справочники, документы, планы счетов и т.д.) система «1С:Предприятие» обеспечивает два вида объектных блокировок: пессимистическую и оптимистическую. Они позволяют выполнять целостные изменения объектов при одновременной работе нескольких пользователей.

Объектная пессимистическая блокировка

Пессимистическая объектная блокировка предназначена для запрета изменений данных объекта, пока блокировка не будет снята. Система (с помощью соответствующих расширений формы объекта) автоматически устанавливает пессимистическую блокировку, в момент, когда пользователь пытается произвести изменение данных объекта. Если после этого другой пользователь, например, попытается выполнить редактирование того же объекта, ему будет выдано сообщение о том, что не удалось заблокировать объект. Когда форма будет закрыта пользователем, данная блокировка будет снята.

Рассмотрим пример.
Войдем в учебную информационную базу под пользователем «Васильев В.В.», откроем форму документа «Поступление товаров 00000000001 от 01.06.2016» и внесем изменения в поле комментарий (рис. 1.3).

Не сохраняя документ войдем в информационную базу под пользователем «Иванов И.И.», откроем тот же документ и попробуем внести изменения в любом реквизите документа. Система не даст нам внести изменения и выдаст сообщение об ошибке (рис. 1.4).

Отсюда следует, что пессимистическая блокировка гарантирует, что пользователь, начав изменять данные объекта, сможет записать эти изменения в информационную базу.

Разработчик используя средства встроенного языка может задействовать пессимистическую блокировку. Используя метод «Заблокировать()» происходит установка пессимистической объектной блокировки, а для снятия используется метод «Разблокировать()».


Давайте рассмотрим другой пример. Под пользователем «Васильев В.В.» в разделе «Нормативно-справочная информация» откроем элемент справочника «Склады» с наименованием «Склад №1» и внесем изменения в наименование (рис. 1.5).


Не сохраняя переключимся в окно информационной базы, который был запущен под пользователем «Иванов В.В.», в разделе «Нормативно-справочная информация» откроем обработку «Удаление объекта». Выберем в качестве удаляемого объекта выберем элемент справочника «Склады» с наименованием «Склад №1» и нажмем «Удалить объект» (рис. 1.6).

В результате система позволит удалить данный элемент справочника и система не выдаст сообщение об ошибке. Дело в том, что операция блокирования не препятствует операции изменения или удаления объекта в базе данных.

Для того, чтобы обеспечить невозможность изменения или удаления заблокированного объект необходимо произвести проверку на блокировку объекта.

Есть два способа проверки:

  1. Метод «Заблокирован()» используется для проверки блокировки объекта базы данных текущим сеансом. Данный метод не предоставляет возможность проверки заблокирован ли объект вообще.
  2. Для проверки заблокирован объект базы данных вообще используется метод «Заблокировать()». Попытка блокировки заблокированного объекта вызывает исключение, которое может быть обработано конструкцией «Попытка…..Исключение…..КонецПопытки».

Пессимистическая блокировка в управляемых формах

При работе с управляемыми формами методы «Заблокировать()», «Разблокировать()» и «Заблокирован()» могут не подойти из-за специфики работы управляемого приложения.

Дело в том, что данные методы используются для объектов базы данных. Объект базы данных существует только на сервере. Получается разработчику придется выполнить серверный вызов, получить объект базы данных путем преобразования основного реквизита формы с помощью метода формы «РеквизитФормыВЗначение». Далее вызывается один из методов объекта «Заблокировать()», «Разблокировать()» или «Заблокирован()». Но данный способ блокировки будет бесполезен, если задача стоит, чтобы объект был заблокирован пока открыта форма, так как полученный объект будет жить до конца серверного вызова.

Для работы с блокировками из управляемой формы необходимо использовать методы: «ЗаблокироватьДанныеФормыДляРедактирования()» и «РазблокироватьДанныеФормыДляРедактирования()». Данные методы используются для блокировки или разблокировки данных основного реквизита формы.

Рассмотрим пример. В разделе «Нормативно-справочная информация» откроем любой элемент справочника «Номенклатура» под пользователем «Васильев В.В.», внесем изменения в наименование и не сохраняя под пользователем «Иванов И.И.» отроем тот же элемент справочника. При попытки внесения изменений система выдаст сообщение об ошибке.


Далее в форме элемента справочника под пользователем «Васильев В.В.» нажмем на кнопку «Разблокировать» (рис. 1.7) и попробуем снова внести изменения в данный элемент справочника под пользователем «Иванов И.И.». В данном случае система даст внести изменения и записать элемент справочника.


Для отключения пессимистической блокировки в управляемых формах в свойстве основного реквизита надо снять флаг «Сохраняемые данные». Данный флаг определяет будет ли при интерактивном редактировании блокироваться данные основного реквизита, или нет рис(1.8).

Объектная оптимистическая блокировка

Оптимистическая блокировка представляет собой проверку, которая выполняется перед записью объекта в базу данных. У объекта есть свойство «ВерсияДанных», которая вместе с объектом считывается из базы данных. Оптимистическая блокировка производит перед записью производит сравнение значения свойства «ВерсияДанных» объекта, который находится в оперативной памяти с значением свойства «ВерсияДанных» объекта находящийся в базе данных. Если значения свойства «ВерсияДанных» у объектов отличается, то оптимистическая блокировка запрещает запись объекта в базу данных и выдает сообщение об ошибке.

Рассмотрим пример.

В разделе «Нормативно-справочная информация» откроем любой элемент справочника «Номенклатура» под пользователем «Васильев В.В.», далее не закрывая форму элемента под пользователем «Иванов И.И.» в разделе «Нормативно-справочная информация» откроем обработку «Изменить объект».

В обработке выберем ту же номенклатуру и нажмем кнопку «Изменить объект». Данная команда добавит в конце наименования «!!!» (рис. 1.9).

После изменения попробуем записать открытый элемент справочника номенклатуры под пользователем «Васильев В.В.». Система выдаст предупреждение о том, что данные объекты были изменены или удалены и не даст записать данный объект (рис. 1.10).

Для отключения оптимистической блокировки необходимо перед записью объекта находящийся в оперативной памяти сравнить версию с версией объекта базы данных. Если версии данных отличаются, то получаем объект из базы данных и переносим изменения в него, далее записываем.

Блокировка объектные блокировки статья

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7525    bayselonarrend    20    

154

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5975    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    17843    YA_418728146    26    

71

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23791    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14794    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Noxie41 17.08.16 12:55 Сейчас в теме
А где рисунки?
ПС: ссылку на ИТС было бы уместно добавить: https://its.1c.ru/db/metod8dev#content:5839:hdoc
Дмитрий74Чел; +1 Ответить
2. Ranis1286 184 29.08.16 09:53 Сейчас в теме
(1) Noxie41, В начале статьи есть рисунки)
3. Synoecium 786 28.02.17 11:34 Сейчас в теме
Интересный пункт про отключение пессимистической блокировки в УФ, в статье ИТС такого не нашел. Вопрос - можно ли каким то образом отключить эту блокировку в обычных формах?
Небольшое дополнение для УФ, после записи объекта, пессимистическая блокировка все равно устанавливается даже при отключенной галочке "Сохраняемые данные", но ее можно тут же снять в событии после записи объекта.
4. Ranis1286 184 28.02.17 14:47 Сейчас в теме
Добрый день! В обычных формах к сожалению такого сделать нельзя насколько я знаю.
5. user612295_death4321 30.08.18 20:25 Сейчас в теме
6. EvgenMokrousov 1 09.11.20 10:55 Сейчас в теме
7. Дмитрий74Чел 239 03.05.21 12:21 Сейчас в теме
Не могу найти в документации точную формулировку, что именно влияет на отключение механизма пессимистической блокировки: "сохраняемые данные" или "основной реквизит". В разных источниках - по разному.

Например. На ИТС https://its.1c.ru/db/v8std/content/490/hdoc сказано что "платформа автоматически устанавливает блокировку объекта, указанного в качестве основного реквизита формы. ", а не "сохраняемые данные". Но у описания метода ЗаблокироватьДанныеФормыДляРедактирования() сказано именно про "Устанавливает блокировку сохраняемых данных формы", а не "основного реквизита".
frkbvfnjh; Serj1C; eeeio; +3 Ответить
8. Alexwarsis 03.05.23 17:33 Сейчас в теме
(7) работает только для основного реквизита, заставить работать для сохраняемых данных не удалось. как и снять такую блокировку из другого сеанса, как это делает сама платформа по умолчанию, метод forceUnlock оказался недоступен для простых смертных

Для отключения пессимистической блокировки в управляемых формах в свойстве основного реквизита надо снять флаг «Сохраняемые данные». Данный флаг определяет будет ли при интерактивном редактировании блокироваться данные основного реквизита, или нет рис(1.8).
Жаль это работает только для основного реквизита.
9. frkbvfnjh 805 07.09.23 10:19 Сейчас в теме
У вас номера рисунков не совпадают с тем, что написано, было бы хорошо размещать рисунки непосредственно в тексте - читать просто не выносимо, постоянно переключаясь между лентой изображений и текстом
Student1C; +1 Ответить
10. Rafaraf 37 27.08.24 12:40 Сейчас в теме
Предварительно прочитав статью на ИТС, вернулся сюда и выковырял изюминки )
Оставьте свое сообщение