Как открыть модально документ, созданный на основании в 1С?

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

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

Классический способ: Метод ОткрытьМодально

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

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


// Получаем форму нового документа
Форма = ПолучитьФорму("Документ.НазваниеВашегоДокумента.ФормаОбъекта");

// Открываем форму модально
Результат = Форма.ОткрытьМодально();

// Анализируем результат закрытия формы (если требуется)
Если Результат = Неопределено Тогда
    Возврат;
КонецЕсли;

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

Современный подход: Блокировка интерфейса без модальности

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

Для создания эффекта модальности мы можем использовать параметр РежимОткрытияОкнаФормы.БлокироватьОкноВладельца или РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс. Посмотрим на пример кода:


ПараметрыФормы = Новый Структура;
// Здесь можно передать параметры для заполнения документа

ОткрытьФорму("Документ.ВашДокумент.Форма.ФормаДокумента", 
             ПараметрыФормы, 
             ЭтаФорма, 
             , 
             , 
             , 
             , 
             РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

При использовании БлокироватьОкноВладельца пользователь не сможет вернуться к форме-владельцу (например, к обработке), пока не закроет документ. Это наиболее мягкий и современный способ организации работы.

Автоматизация заполнения при открытии на основании

Выясним, как правильно передать данные для создания документа "на основании" при открытии формы. Вместо того чтобы вручную заполнять объект перед открытием, в 1С принято передавать ссылку на основание в параметрах формы. Платформа автоматически выполнит процедуру ОбработкаЗаполнения в модуле нового документа.

Выполним следующую последовательность действий:

  1. Подготовим структуру ПараметрыЗаполнения.
  2. Поместим в нее ключ ЗначениеЗаполнения, содержащий ссылку на документ-основание.
  3. Вызовем открытие формы с режимом блокировки.

ПараметрыЗаполнения = Новый Структура("ЗначениеЗаполнения", СсылкаНаДокументОснование);

ОткрытьФорму("Документ.НовыйДокумент.ФормаОбъекта", 
             ПараметрыЗаполнения, 
             ЭтаФорма, 
             Истина, // Уникальность окна
             , 
             , 
             , 
             РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);

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

Особенности работы с динамическими списками

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


&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    ПараметрыФормы = Новый Структура("Ключ", ВыбраннаяСтрока);
    ОткрытьФорму("Документ.МойДокумент.ФормаОбъекта", 
                 ПараметрыФормы, 
                 ЭтаФорма, 
                 , 
                 , 
                 , 
                 , 
                 РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры

Важные нюансы:

Таким образом, мы рассмотрели различные варианты блокировки интерфейса при работе с документами. Выбор конкретного метода зависит от требований к архитектуре вашего решения и настроек платформы 1С.

← На главную