← Назад ко всем вопросам

Что такое блокировка уровня записи, таблицы, набора записей

1️⃣ Как кратко ответить

Блокировка уровня записи, таблицы и набора записей в 1С — это механизмы управления конкурентным доступом к данным. Блокировка уровня записи ограничивает доступ к отдельной записи, блокировка таблицы — ко всей таблице, а блокировка набора записей — к группе записей, определенной запросом. Эти механизмы предотвращают конфликты при одновременном доступе к данным.

2️⃣ Подробное объяснение темы

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

Блокировка уровня записи

Блокировка уровня записи применяется, когда необходимо ограничить доступ к конкретной записи в таблице. Это позволяет другим пользователям читать данные, но предотвращает их изменение до тех пор, пока блокировка не будет снята. Такой подход минимизирует вероятность конфликтов и позволяет более гибко управлять доступом к данным.

Пример:

Представьте, что у вас есть таблица "Заказы", и вы хотите изменить статус конкретного заказа. Вы можете заблокировать только эту запись, чтобы другие пользователи не могли изменить ее, пока вы не закончите.

// Устанавливаем блокировку на конкретную запись
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
                |   Заказы.Ссылка
                |ИЗ
                |   Документ.Заказ КАК Заказы
                |ГДЕ
                |   Заказы.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаЗаказ);
Запрос.УстановитьБлокировку(Истина); // Устанавливаем блокировку
Результат = Запрос.Выполнить();
  • Запрос.Текст — определяет текст запроса, который выбирает конкретную запись.
  • Запрос.УстановитьПараметр — задает параметр для фильтрации записи.
  • Запрос.УстановитьБлокировку(Истина) — устанавливает блокировку на выбранную запись.

Блокировка уровня таблицы

Блокировка уровня таблицы применяется, когда необходимо ограничить доступ ко всей таблице. Это более жесткий подход, который предотвращает любые изменения в таблице, пока блокировка активна. Используется в ситуациях, когда изменения в одной записи могут повлиять на другие записи.

Пример:

Если вы выполняете массовое обновление данных в таблице "Сотрудники", вы можете заблокировать всю таблицу, чтобы избежать конфликтов.

// Устанавливаем блокировку на всю таблицу
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
                |   Сотрудники.Ссылка
                |ИЗ
                |   Справочник.Сотрудники КАК Сотрудники";
Запрос.УстановитьБлокировку(Истина); // Устанавливаем блокировку на всю таблицу
Результат = Запрос.Выполнить();
  • Запрос.Текст — выбирает все записи из таблицы.
  • Запрос.УстановитьБлокировку(Истина) — блокирует всю таблицу.

Блокировка уровня набора записей

Блокировка уровня набора записей применяется, когда необходимо ограничить доступ к группе записей, определенной запросом. Это позволяет более точно контролировать доступ, чем блокировка всей таблицы, и используется, когда изменения касаются только определенной группы записей.

Пример:

Если вы хотите обновить статусы всех заказов, сделанных в определенный день, вы можете заблокировать только эти записи.

// Устанавливаем блокировку на набор записей
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
                |   Заказы.Ссылка
                |ИЗ
                |   Документ.Заказ КАК Заказы
                |ГДЕ
                |   Заказы.Дата = &Дата";
Запрос.УстановитьПараметр("Дата", ОпределеннаяДата);
Запрос.УстановитьБлокировку(Истина); // Устанавливаем блокировку на набор записей
Результат = Запрос.Выполнить();
  • Запрос.Текст — выбирает записи, соответствующие определенному критерию.
  • Запрос.УстановитьПараметр — задает параметр для фильтрации записей.
  • Запрос.УстановитьБлокировку(Истина) — блокирует выбранный набор записей.

Зачем это нужно

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

Тема: Транзакции и блокировки
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки