Когда и зачем использовать пессимистические блокировки в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Многие разработчики, работающие с платформой 1С, сталкиваются с вопросом выбора механизма ограничения доступа к данным. Часто возникает путаница между транзакционными и объектными (пессимистическими) блокировками. Давайте разберемся, в каких именно ситуациях разработчику стоит программно накладывать пессимистическую блокировку, чтобы обеспечить целостность бизнес-процессов.

Понимание сути пессимистической блокировки

Пессимистическая блокировка — это инструмент, позволяющий «захватить» объект информационной базы (например, элемент СправочникСсылка или ДокументСсылка) на произвольно длительный срок. В отличие от транзакционной блокировки, которая автоматически снимается при завершении транзакции, объектная блокировка существует в рамках сеанса пользователя. Это значит, что пока мы ее не снимем программно, другие пользователи не смогут внести изменения в этот конкретный объект.

Когда оправдано применение пессимистических блокировок

Рассмотрим сценарии, в которых использование этого механизма становится не просто прихотью, а необходимостью для защиты данных:

  1. Длительные бизнес-процессы с участием пользователя. Если ваш процесс подразумевает выполнение серии операций, между которыми требуется ручное подтверждение или заполнение данных сотрудником, обычная транзакция здесь не подойдет. Попытка держать транзакцию открытой на время раздумий пользователя приведет к блокировке таблиц СУБД и значительному снижению производительности всей системы. Пессимистическая блокировка позволяет зафиксировать объект за пользователем на все время выполнения задачи.
  2. Защита от конкурентного редактирования сложных объектов. Если создание или изменение документа требует последовательной обработки нескольких связанных записей, и вы хотите исключить ситуацию, при которой два менеджера одновременно пытаются редактировать один и тот же заказ, объектная блокировка поможет «застолбить» документ за конкретным сеансом.
  3. Автоматизация многоэтапных операций. Как показывает практика, блокировка полезна при автоматизации, когда на основании одного документа создается ряд зависимых. Например, если процесс генерации связанных данных занимает значительное время (30-60 секунд), целесообразно установить блокировку на основной документ, чтобы избежать его изменения другими участниками до завершения всех фоновых или интерактивных процедур.

Практический пример реализации

Представим ситуацию: на основании заказа клиента мы запускаем процесс подготовки нескольких документов. Чтобы в этот период никто не мог внести изменения в исходный заказ, мы накладываем объектную блокировку. Рассмотрим, как это выглядит в коде:


// Установка блокировки на объект
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Документ.ЗаказКлиента");
ЭлементБлокировки.Значение = СсылкаНаЗаказ;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;

Попытка
    Блокировка.Заблокировать();
    // Здесь выполняем длительные действия с заказом
    // Например: создание на основании, пересчет сумм, запись связанных объектов
Исключение
    // Обработка ситуации, если объект уже кем-то занят
    Сообщить("Объект в данный момент редактируется другим пользователем!");
КонецПопытки;

Важно помнить, что основной риск использования таких блокировок — это риск «зависания» сеанса. Если пользователь ушел, а блокировка осталась, объект может стать недоступным для всех остальных на длительное время. Всегда используйте блоки Попытка...Исключение и следите за тем, чтобы блокировка снималась корректно.

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

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

Подводя итог: пессимистическая блокировка — это «тяжелая артиллерия». Применяйте ее осознанно, строго в тех местах, где логика процесса требует жесткой последовательности действий без риска вмешательства извне, и обязательно обеспечивайте механизм принудительного снятия блокировок, чтобы не парализовать работу отдела.

← На главную