Как программно вызвать стандартное поведение платформы при попытке редактирования объекта?

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

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

Постановка задачи

Перед нами стоят две основные задачи:

  1. Как «заставить» объект перейти в состояние блокировки для первого пользователя, чтобы система восприняла его как редактируемый?
  2. Как сделать так, чтобы при открытии формы у второго пользователя система сразу выдавала типовое предупреждение о том, что объект уже редактируется другим сеансом?

Решение проблемы: метод ЗаблокироватьДанныеФормыДляРедактирования

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

Реализация для первого пользователя

Для первого пользователя, который открывает объект для редактирования, необходимо вызвать метод, который установит признак начала редактирования. Простой установки свойства Модифицированность в событии ПриСозданииНаСервере будет недостаточно, так как это не активирует механизм блокировок платформы.

Мы должны использовать метод ЗаблокироватьДанныеФормыДляРедактирования(). Однако, опыт показывает, что вызов этого метода непосредственно в обработчике ПриСозданииНаСервере может быть преждевременным, так как форма еще не завершила процесс своей инициализации.

Реализация для второго пользователя и работа с формами

Когда второй пользователь открывает ту же форму, платформа должна проверить наличие блокировки. Чтобы добиться максимально «типового» поведения, мы можем программно вызвать этот же метод при открытии формы. Таким образом, платформа сама «почувствует» конфликт и инициирует стандартное диалоговое окно с предупреждением.

Рекомендация по использованию обработчика ожидания

В процессе совместной работы над задачей мы пришли к выводу, что наиболее стабильный способ — это использование ПодключитьОбработчикОжидания. Это позволяет форме завершить все этапы отрисовки и инициализации элементов управления перед тем, как система попытается наложить блокировку.

Давайте посмотрим на пример кода, который можно применить в модуле формы:


&НаКлиенте
Процедура ПриОткрытии()
    // Используем обработчик ожидания для корректной инициализации формы
    ПодключитьОбработчикОжидания("БлокировкаДанныхПриОткрытии", 0.1, Истина);
КонецПроцедуры

&НаКлиенте
Процедура БлокировкаДанныхПриОткрытии()
    Попытка
        ЗаблокироватьДанныеФормыДляРедактирования();
    Исключение
        // Здесь можно обработать ситуацию, если блокировка не удалась
        // или объект уже занят
    КонецПопытки;
КонецПроцедуры

Важные замечания

Таким образом, мы выяснили, что для решения поставленной задачи оптимально подходит комбинация ЗаблокироватьДанныеФормыДляРедактирования() и ПодключитьОбработчикОжидания. Этот подход позволяет добиться ожидаемого поведения платформы, минимизируя при этом риск возникновения ошибок в процессе открытия формы.

← На главную