Многие разработчики, работающие с платформой 1С, сталкиваются с вопросом выбора механизма ограничения доступа к данным. Часто возникает путаница между транзакционными и объектными (пессимистическими) блокировками. Давайте разберемся, в каких именно ситуациях разработчику стоит программно накладывать пессимистическую блокировку, чтобы обеспечить целостность бизнес-процессов.
Пессимистическая блокировка — это инструмент, позволяющий «захватить» объект информационной базы (например, элемент СправочникСсылка или ДокументСсылка) на произвольно длительный срок. В отличие от транзакционной блокировки, которая автоматически снимается при завершении транзакции, объектная блокировка существует в рамках сеанса пользователя. Это значит, что пока мы ее не снимем программно, другие пользователи не смогут внести изменения в этот конкретный объект.
Рассмотрим сценарии, в которых использование этого механизма становится не просто прихотью, а необходимостью для защиты данных:
Представим ситуацию: на основании заказа клиента мы запускаем процесс подготовки нескольких документов. Чтобы в этот период никто не мог внести изменения в исходный заказ, мы накладываем объектную блокировку. Рассмотрим, как это выглядит в коде:
// Установка блокировки на объект
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Документ.ЗаказКлиента");
ЭлементБлокировки.Значение = СсылкаНаЗаказ;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Попытка
Блокировка.Заблокировать();
// Здесь выполняем длительные действия с заказом
// Например: создание на основании, пересчет сумм, запись связанных объектов
Исключение
// Обработка ситуации, если объект уже кем-то занят
Сообщить("Объект в данный момент редактируется другим пользователем!");
КонецПопытки;
Важно помнить, что основной риск использования таких блокировок — это риск «зависания» сеанса. Если пользователь ушел, а блокировка осталась, объект может стать недоступным для всех остальных на длительное время. Всегда используйте блоки Попытка...Исключение и следите за тем, чтобы блокировка снималась корректно.
Не забывайте, что в большинстве случаев (около 95%) достаточно стандартной оптимистической блокировки, которая реализована в платформе автоматически через механизм версионирования. Система просто проверяет, изменились ли данные с момента их чтения, и если да — выдает сообщение об ошибке при попытке записи. Это гораздо более «легкий» и современный подход, который не блокирует работу других пользователей. Используйте пессимистическую блокировку только тогда, когда цена конфликта при одновременном редактировании критически высока для бизнеса.
Подводя итог: пессимистическая блокировка — это «тяжелая артиллерия». Применяйте ее осознанно, строго в тех местах, где логика процесса требует жесткой последовательности действий без риска вмешательства извне, и обязательно обеспечивайте механизм принудительного снятия блокировок, чтобы не парализовать работу отдела.