При изменении для программно созданных элементов формы
Здравствуйте, подскажите программно создаю реквизиты формы для таблицы значений реквизит формы. Сами реквизиты колонки динамические, то есть могут быть разные в зависимости от входящих данных. Создаю элементы формы для этих реквизитов-колонок, далее для них создаю обработчики при изменении. Но только теперь понял, что раз обработчики созданы динамически, то сами процедуры при изменении я не могу вызвать т.к. их не прописать не зная заранее все реквизиты. Или я не правильно в данном механизме что то понял. Как то можно использовать программно созданные обработчики событий, для программно созданных элементов(динамически) или так нельзя?
мЭлемент = Элементы.Добавить(КолонкаТаблицы.ДинамическаяКолонка, Тип("ПолеФормы"), Элементы.ТаблицаЗагрузки);
мЭлемент.Вид = ВидПоляФормы.ПолеВвода;
мЭлемент.ПутьКДанным = "ТаблицаЗагрузки." + КолонкаТаблицы.ДинамическаяКолонка;
мЭлемент.УстановитьДействие("ПриИзменении", "ВыполнитьДействиеПриИзмененииДанных");
По теме из базы знаний
- Программное создание элементов формы
- Программное создание динамического списка на управляемой форме. (Динамическое создание динамического списка). Готовая процедура + обработка - демонстрационный пример
- Программное создание реквизита управляемой формы с помощью механизма расширений
- [Шпаргалка] Программное создание элементов формы
- Программное создание элементов в форме при использовании расширения
Найденные решения
(1)Вариант такой пишите для всех элементов 1 обработчик и внем в зависимости от элемента делаете чтото.
Можно например, по имени элемента проверять, если состав колонок заранее известен (т.е. их 10 штук, но в зависимости от условий от 3 до 10 показывается)
Можно например, по имени элемента проверять, если состав колонок заранее известен (т.е. их 10 штук, но в зависимости от условий от 3 до 10 показывается)
мЭлемент.УстановитьДействие("ПриИзменении", "ВыполнитьДействиеПриИзмененииДанных");
Процедура ВыполнитьДействиеПриИзмененииДанных(Элемент)
Если Элемент.Имя = "СписокЭлементКонтрагент" Тогда
ИначеЕсли Элемент.Имя = "СписокЭлементОрганизация"
КонецЕсли;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Вариант такой пишите для всех элементов 1 обработчик и внем в зависимости от элемента делаете чтото.
Можно например, по имени элемента проверять, если состав колонок заранее известен (т.е. их 10 штук, но в зависимости от условий от 3 до 10 показывается)
Можно например, по имени элемента проверять, если состав колонок заранее известен (т.е. их 10 штук, но в зависимости от условий от 3 до 10 показывается)
мЭлемент.УстановитьДействие("ПриИзменении", "ВыполнитьДействиеПриИзмененииДанных");
Процедура ВыполнитьДействиеПриИзмененииДанных(Элемент)
Если Элемент.Имя = "СписокЭлементКонтрагент" Тогда
ИначеЕсли Элемент.Имя = "СписокЭлементОрганизация"
КонецЕсли;
КонецПроцедуры
Показать
(6)Логика такая, с эксель загружаются данные по доп реквизитам, колонки могут быть разные. После всех проверок выводится данные на форму, где отображаются и ошибки. Пользователь должен иметь возможность изменять их прям из формы. Ошибки эти пишутся в таблицу формы. И вот для того чтобы они удалялись из этой таблицы нужно чтобы при изменении значений этих программно созданных колонок проводилась проверка на правильность в базе и если все ок, то из реестра ошибок удаляем.
(4) А что вы хотите сделать при изменении с реквизитом?
Если вы заранее не знаете имя колонки, значит у вас общая логика обработки изменения, независящая от ее имени.
Если вы заранее не знаете имя колонки, значит у вас общая логика обработки изменения, независящая от ее имени.
&НаКлиенте
Процедура ВыполнитьДействиеПриИзмененииДанных(Элемент)
ВыполнитьДействиеПриИзмененииДанныхНаСервере(Элемент.Имя)
КонецПроцедуры
&НаСервере
Процедура ВыполнитьДействиеПриИзмененииДанныхНаСервере(Знач ИмяКолонки)
ТекущиеДанные = ТаблицаЗагрузки.НайтиПоИдентификатору(Элементы.ТаблицаЗагрузки.ТекущаяСтрока);
Элемент = Элементы[ИмяКолонки];
ЧастиПути = СтрРазделить(Элемент.ПутьКДанным, ".");
ИмяПоля = ЧастиПути[ЧастиПути.ВГраница()];
ЗначениеПоля = ТекущиеДанные[ИмяПоля];
Сообщить("Изменено значение поля " + ИмяПоля + " : " + ЗначениеПоля);
КонецПроцедуры
Показать
(5)Логика такая, с эксель загружаются данные по доп реквизитам, колонки могут быть разные. После всех проверок выводится данные на форму, где отображаются и ошибки. Пользователь должен иметь возможность изменять их прям из формы. Ошибки эти пишутся в таблицу формы. И вот для того чтобы они удалялись из этой таблицы нужно чтобы при изменении значений этих программно созданных колонок проводилась проверка на правильность в базе и если все ок, то из реестра ошибок удаляем.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот