gifts2017

Групповая работа с элементами на форме

Опубликовал Jacob Jones (birk) в раздел Программирование - Практика программирования

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

Логично привязать каждый элемент к группе(условию).

У элементов формы есть свойство Подсказка. Именно здесь я указываю группу для  элемента.

Например: @1 - элемент принадлежит к группе 1

@1@3 - элемент принадлежит к группе 1 и к группе 3

При открытии формы считываю элементы в ТЗ.

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	
	ЭлементыФормыТЗ = Новый ТаблицаЗначений;
	ЭлементыФормыТЗ.Колонки.Добавить("Элемент");
	ЭлементыФормыТЗ.Колонки.Добавить("Подсказка");
	
	Для Каждого эл из ЭлементыФормы Цикл 
		Если Найти(эл.Подсказка, "@") > 0 Тогда  
			НоваяСтрока = ЭлементыФормыТЗ.Добавить(); 
			НоваяСтрока.Элемент = эл;
			НоваяСтрока.Подсказка = эл.Подсказка;
			эл.Подсказка = "";
		КонецЕсли;
	КонецЦикла;

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

А при выполнении уловия пробегаю по элементам ТЗ и выполняю необходимые действия(видимость, доступность, очистить значения и пр.)

Процедура ПереключитьВидимость(Группа, Значение) Экспорт 
	 
	Для Каждого эл из ЭлементыФормыТЗ Цикл 
		Если Найти(эл.Подсказка, "@" + Группа) > 0 Тогда
				эл.Элемент.Видимость = НЕ Значение;	
		КонецЕсли;
	КонецЦикла;
	 
КонецПроцедуры

Процедура ПереключитьДоступность(Группа, Значение) Экспорт 
	 
	Для Каждого эл из ЭлементыФормыТЗ Цикл 
		Если Найти(эл.Подсказка, "@" + Группа) > 0 Тогда
			Если Строка(эл.Элемент) = "Флажок" Или Строка(эл.Элемент) = "Надпись" 
				Или Строка(эл.Элемент) = "Кнопка" Или Строка(эл.Элемент) = "ПолеКартинки"  Тогда 
				эл.Элемент.Доступность = Значение;	
			Иначе
				эл.Элемент.ТолькоПросмотр = НЕ Значение;	
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	 
КонецПроцедуры

Процедура ОчиститьПоля(Группа) Экспорт 
	 
	Для Каждого эл из ЭлементыФормыТЗ Цикл 
		Если Найти(эл.Подсказка, "@" + Группа) > 0 Тогда
			Если Строка(эл.Элемент) = "Флажок" Тогда 
				эл.Элемент.Значение = Ложь;	
			ИначеЕсли Строка(эл.Элемент) = "ПолеВвода" Тогда 
				эл.Элемент.Значение = "";
			ИначеЕсли Строка(эл.Элемент) = "ТабличноеПоле" Тогда
				эл.Элемент.Значение.Очистить();	
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	 
КонецПроцедуры

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Пример работы с группами элементов
.epf 7,89Kb
05.07.15
1
.epf 7,89Kb 1 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. psih12 06.07.15 07:21
Идея хорошая, за что плюсанул. Но как быть с тем, что подсказка должна нести смысловую нагрузку для конечного пользователя, т.е. подсказывать определенные действия пользователем в данном элементе управления?
Созинов; madonov; +2 Ответить 1
2. Jacob Jones (birk) 06.07.15 07:52
(1) psih12,
Для сохранения подсказок можно добавить функцию:
Функция УбратьГруппыИзПодсказки(Подсказка)
	
	ПозицияПодсказки = Найти(Подсказка, " ");
	
	Если ПозицияПодсказки > 0 Тогда 
		Возврат Прав(Подсказка, СтрДлина(Подсказка) - ПозицияПодсказки);	
	КонецЕсли;
	
КонецФункции
...Показать Скрыть


А обработчик перед открытием модифицировать на:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	
	ЭлементыФормыТЗ = Новый ТаблицаЗначений;
	ЭлементыФормыТЗ.Колонки.Добавить("Элемент");
	ЭлементыФормыТЗ.Колонки.Добавить("Подсказка");
	
	Для Каждого эл из ЭлементыФормы Цикл 
		Если Найти(эл.Подсказка, "@") > 0 Тогда  
			НоваяСтрока = ЭлементыФормыТЗ.Добавить(); 
			НоваяСтрока.Элемент = эл;
			НоваяСтрока.Подсказка = эл.Подсказка;
			эл.Подсказка = УбратьГруппыИзПодсказки(эл.Подсказка);
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры
...Показать Скрыть


Тогда подсказки будет иметь вид:
@1@3 Текст подсказки
Созинов; +1 Ответить 1
3. Вадим Никонов (V.Nikonov) 08.07.15 20:20
Так ведь можно не трогать функционал подсказки! Оставьте его для пользователя в нормальном виде. Правьте имена элементов формы: добавляйте к ним префиксы/Суффиксы... Тогда это останется только для программиста.
Хотя, не практике, чаще создают списки значений с именами элементов, для последующего группового управления ими....
4. Вадим Никонов (V.Nikonov) 08.07.15 20:28
(2) birk, Одновременно с корректировкой подсказок, надо создавать списки групп элементов. И в таблице вместо полного текста подсказки, сохранять групповые метки. При включении элемента в несколько групп, под каждую группу строку... Если не хотите создавать несколько массивов/Списков/Таблиц.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа