Как открыть форму элемента в 1С 7.7 в режиме просмотра, не блокируя объект для других пользователей?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Понимание природы блокировок в 1С 7.7

Когда мы открываем форму элемента интерактивно через кнопку «Просмотр» в интерфейсе, платформа открывает её в режиме, который не препятствует другим пользователям работать с этим объектом. Однако, если мы программно вызываем стандартную форму редактирования, 1С по умолчанию считает, что мы намерены изменять данные, и накладывает блокировку. Установка свойства Форма.ТолькоПросмотр(1) внутри уже открытой формы происходит слишком поздно — блокировка на уровне платформы или СУБД уже активирована.

Решение 1: Переоткрытие формы через параметр функции ОткрытьФорму

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

Рассмотрим пример того, как это реализовать:


// Пример вызова из формы списка или обработки
ОткрытьФорму("Справочник.ВашСправочник", Контекст, 1);

Здесь третий параметр 1 (числовой режим) дает платформе команду открыть форму сразу в режиме просмотра. В этом случае блокировка на запись не накладывается, и объект остается доступным для других сеансов.

Решение 2: Программный запрет открытия и перенаправление

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

Разберем логику реализации:


Процедура ПриОткрытии()
    Если Форма.ТолькоПросмотр() = 0 Тогда
        // Запрещаем стандартное открытие
        СтатусВозврата(0);
        // Вызываем форму принудительно в режиме просмотра
        ОткрытьФорму("Справочник.ВашСправочник", ТекущийЭлемент(), 1);
        Возврат;
    КонецЕсли;
КонецПроцедуры

Этот метод позволяет гибко управлять доступом. Вы можете добавить дополнительные условия (например, проверку прав текущего пользователя или статуса документа) перед тем, как разрешить открытие в обычном режиме.

Решение 3: Ручное управление элементами управления

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

Проанализируем шаги реализации:

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

Использование компоненты FormEx может значительно упростить эту задачу, так как она предоставляет расширенные методы управления атрибутами формы, которые недоступны в стандартном языке 1С 7.7. Например, можно одним методом заблокировать всю форму или конкретную группу элементов.

Итоги и рекомендации

Чтобы избежать блокировки записи при открытии формы в 1С 7.7, придерживайтесь следующих правил:

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

← На главную