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