Задача:
Получить ДеревоЗначений из запроса и вывести в ТабличноеПоле. Для некоторых полей добавить кнопки и обработчики событий.
Если бы мы создавали и заполняли табличное поле не программно, то проблем особо не было бы, НО нам нужно программно. Речь пойдет о 8.2 и обычном приложении.
Добавляем на форму ТабличноеПоле с ТипомЗначения ДеревоЗначений (удобно при группировках):
Далее создаем процедуру, которая будет отвечать за загрузку данных в ТабличноеПоле.
Далее нужно определиться, где что будет. В моем случае мне нужно в первую колонку добавить кнопку "Открыть" (тип поля Справочники.Номенклатура.Ссылка, т.е. кнопка выбора и очистки там уже есть). Для последней колонки (тип Строка (ПолеВвода)) мне нужна кнопка выбора со своим обработчиком (выбор файла). В процедура ЗагрузитьСписокГрупп() последняя строка вызывает другую процедуру, отвечающую за обработку колонок.
Теперь создаем процедуру с названием ВыборГиперссылки(), с параметрами Элемент (кто вызвал событие) и СтандартнаяОбработка (Ложь, типа мы сами определим что хотим). В моем случае нужен выбор файла, и запись в Элемент его пути.
Ну вот и все )))
Получить ДеревоЗначений из запроса и вывести в ТабличноеПоле. Для некоторых полей добавить кнопки и обработчики событий.
Если бы мы создавали и заполняли табличное поле не программно, то проблем особо не было бы, НО нам нужно программно. Речь пойдет о 8.2 и обычном приложении.
Добавляем на форму ТабличноеПоле с ТипомЗначения ДеревоЗначений (удобно при группировках):
Далее создаем процедуру, которая будет отвечать за загрузку данных в ТабличноеПоле.
Процедура КоманднаяПанель1ЗагрузитьСписок(Кнопка)
ЗагрузитьСписокГрупп()
КонецПроцедуры
Процедура ЗагрузитьСписокГрупп()
ТекстЗапроса=Новый Запрос;
ТекстЗапроса.Текст= "ВЫБРАТЬ
| Номенклатура.Ссылка КАК Группа,
| Номенклатура.СсылкаСайтГруппа КАК Ссылка,
| Номенклатура.СсылкаКартинкаГруппа КАК Картинка,
| Номенклатура.Ссылка.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка.ЭтоГруппа
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура.Ссылка.ЭтоГруппа ИЕРАРХИЯ,
| Номенклатура.Ссылка.Наименование";
Результат=ТекстЗапроса.Выполнить();
Выгрузка=Результат.Выбрать();
Обход=ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;
ТЧНаФормеТЗ=Новый ДеревоЗначений;
ТЧНаФормеТЗ=Результат.Выгрузить(Обход);
ЭлементыФормы.ТЧНаФормеТЗ.СоздатьКолонки();
ОбработатьКолонки();
КонецПроцедуры
Далее нужно определиться, где что будет. В моем случае мне нужно в первую колонку добавить кнопку "Открыть" (тип поля Справочники.Номенклатура.Ссылка, т.е. кнопка выбора и очистки там уже есть). Для последней колонки (тип Строка (ПолеВвода)) мне нужна кнопка выбора со своим обработчиком (выбор файла). В процедура ЗагрузитьСписокГрупп() последняя строка вызывает другую процедуру, отвечающую за обработку колонок.
Процедура ОбработатьКолонки()
//Колонку мне надо было скрыть
ЭлементыФормы.ТЧНаФормеТЗ.Колонки[3].Видимость=Ложь;
//Добавляем кнопку выбора для колонки 2
ЭлементыФормы.ТЧНаФормеТЗ.Колонки[2].ЭлементУправления.КнопкаВыбора=Истина;
//Указываем свой обработчик событий для События
ЭлементыФормы.ТЧНаФормеТЗ.Колонки[2].ЭлементУправления.УстановитьДействие("НачалоВыбора",Новый Действие("ВыборГиперссылки"));
//Добавляем кнопку открытия для СправочникЭлемент
ЭлементыФормы.ТЧНаФормеТЗ.Колонки[0].ЭлементУправления.КнопкаОткрытия=Истина;
//Включаем Непосредственно редактирование (без двойного клика) для всех колонок через цикл
Для Каждого Колонка Из ЭлементыФормы.ТЧНаФормеТЗ.Колонки Цикл
Колонка.РежимРедактирования=РежимРедактированияКолонки.Непосредственно;
КонецЦикла;
КонецПроцедуры
Теперь создаем процедуру с названием ВыборГиперссылки(), с параметрами Элемент (кто вызвал событие) и СтандартнаяОбработка (Ложь, типа мы сами определим что хотим). В моем случае нужен выбор файла, и запись в Элемент его пути.
Процедура ВыборГиперссылки(Элемент,СтандартнаяОбработка=Ложь)
// Вставить содержимое обработчика.
Файл=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Файл.Фильтр="Картинки (*.jpeg;*.png;*.jpg;*.gif)|*.jpeg;*.png;*.jpg;*.gif|";
Если Файл.Выбрать() Тогда
Элемент.Значение=Файл.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Ну вот и все )))
Комментариев нет:
Отправить комментарий