Недавно потребовалось сделать так, чтобы в одной из колонок табличного поля все ячейки стали кнопками, с соответствующей реакцией на нажатие (обычное приложение).
Способом решения данной задачи я и спешу поделиться.
Создавать колонку заранее нет необходимости — это всегда можно сделать программно, примерно так:
1 2 3 4 5 6 | НоваяКолонка = ЭлементыФормы.ТабПоле.Колонки.Вставить(5, "Тест"); НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; НоваяКолонка.УстановитьЭлементУправления(Тип("Кнопка")); НоваяКолонка.Ширина = 20; НоваяКолонка.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять; НоваяКолонка.ИзменятьПозицию = Ложь; |
В первой строке «5» это позиция колонки в табличном поле, а «Тест» — заголовок колонки. Далее по коду все вроде бы понятно.
Затем нужно определить свойства созданной кнопки:
1 2 3 | Кнопка = НоваяКолонка.ЭлементУправления; Кнопка.Заголовок = "Тест"; Кнопка.УстановитьДействие("Нажатие", Новый Действие("Тест_ОбработкаНажатие")); |
После этого создать процедуру-обработчик, это обычная процедура, единственное требование к этой процедуре — она должна быть экспортной, примерно так:
1 2 3 | Процедура Тест_ОбработкаНажатие(Элемент) Экспорт Сообщить("Тест"); КонецПроцедуры |
Результат выглядит примерно так:
Вот собственно и все, спасибо за внимание, надеюсь этот пост Вам помог.
Upd. Продолжение: кнопка в табличной части в управляемой форме.
При «расфокусировке» ячейки кнопка исчезает, а при щелчке по ячейке кнопка появляется (((. Как решить эту проблему?
Боюсь, что никак
Я думаю попробовать вставить в качестве кнопки картинку и обрабатывать события ячейки. Ведь картинка ячейки будет всегда отображаться.
Если картинка вместо кнопки устраивает, то это сработает, гарантирую
Я думаю, что моих кадровиков устроит вполне картинка-кнопка. Но все же не отпускает мысль, что должен быть способ. Флажки ведь видны постоянно в ячейках. Наверное нужно какой-то компонент внешний использовать или самостоятельно писать, чтобы реализовать эту возможность. Свою версию табличного поля например. Но это все лирика.)) Как будет время попробую на С++ или C# сделать библиотечку для этого. Вопросов конечно возникнет много. Но это интересно.
Кнопка.УстановитьДействие(«Нажатие», Новый Действие(«Тест_ОбработкаНажатие»));
Каким образом можно передать параметр в Тест_ОбработкаНажатие
Присоединяюсь к вопросу Михаила. Без параметра совсем грустно.