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