Top.Mail.Ru
25 июля в 17:00 по МСК
Регистрируйся!
Онлайн-митап по 1С «Типовой механизм многопоточности БСП»

Управляемые формы: как запросить у пользователя ввод произвольного значения без создания формы

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

Рассмотрим привычный вариант ввода таких значений, для примера возьмем заполнение таблицы значений.

С созданием формы

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

С данным вариантом все понятно, но можно попробовать сделать по-другому.

Без создания формы

Добавляем на основную форму группу с поведением «Всплывающая».

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

При нажатии на кнопку «Ввод значения» описываем всплывание окна и установку видимости нашей группы. При нажатии на кнопку «Записать значения» описываем скрытие и отмены видимости группы. Видимость убираем, чтобы пользователь не смог интерактивно нажать на группу.

Придется через обработчик ожидания описать отображение группы, т.к. при установке видимости метод Показать() не срабатывает. Также подключаем обработчик ожидания для скрытия группы, т.к группу могут закрыть через стандартный «крестик» закрытия окна.

&НаКлиенте
Процедура ВводЗначения(Команда)
	
	Элементы.ГруппаВводЗначения.Видимость = Истина;
	
	ПодключитьОбработчикОжидания("ПоказатьГруппуВвода", 0.1, Истина);
	ПодключитьОбработчикОжидания("СкрытьГруппуВвода", 5);
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьГруппуВвода()
	
	Элементы.ГруппаВводЗначения.Показать();

КонецПроцедуры

&НаКлиенте
Процедура СкрытьГруппуВвода()
	
	Если Элементы.ГруппаВводЗначения.Скрыта() И Элементы.ГруппаВводЗначения.Видимость Тогда 
		Элементы.ГруппаВводЗначения.Видимость = Ложь;
		ОтключитьОбработчикОжидания("СкрытьГруппуВвода");
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьЗначения(Команда)
	
	Элементы.ГруппаВводЗначения.Видимость = Ложь;
	Элементы.ГруппаВводЗначения.Скрыть();
	
КонецПроцедуры

При нажатии на кнопку открывается группа, которая выглядит для пользователя как новое окно формы.

В таком варианте не нужно описывать передачу данных, т.к. редактируется сам объект. Но придется описывать имитацию открытия формы. Нашей «форме» нельзя изменять размеры и выбирать варианты открытия окна, блокируется всегда окно владельца.

Возможно, этот вариант вам когда-нибудь пригодится.

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar