При изменении для программно созданных элементов формы

1. VoVo 17.10.23 15:36 Сейчас в теме
Здравствуйте, подскажите программно создаю реквизиты формы для таблицы значений реквизит формы. Сами реквизиты колонки динамические, то есть могут быть разные в зависимости от входящих данных. Создаю элементы формы для этих реквизитов-колонок, далее для них создаю обработчики при изменении. Но только теперь понял, что раз обработчики созданы динамически, то сами процедуры при изменении я не могу вызвать т.к. их не прописать не зная заранее все реквизиты. Или я не правильно в данном механизме что то понял. Как то можно использовать программно созданные обработчики событий, для программно созданных элементов(динамически) или так нельзя?

мЭлемент = Элементы.Добавить(КолонкаТаблицы.ДинамическаяКолонка, Тип("ПолеФормы"), Элементы.ТаблицаЗагрузки);
		
мЭлемент.Вид = ВидПоляФормы.ПолеВвода;
		
мЭлемент.ПутьКДанным = "ТаблицаЗагрузки." + КолонкаТаблицы.ДинамическаяКолонка;
		
мЭлемент.УстановитьДействие("ПриИзменении", "ВыполнитьДействиеПриИзмененииДанных");
По теме из базы знаний
Найденные решения
3. newlogin1 17.10.23 16:25 Сейчас в теме
(1)Вариант такой пишите для всех элементов 1 обработчик и внем в зависимости от элемента делаете чтото.
Можно например, по имени элемента проверять, если состав колонок заранее известен (т.е. их 10 штук, но в зависимости от условий от 3 до 10 показывается)

мЭлемент.УстановитьДействие("ПриИзменении", "ВыполнитьДействиеПриИзмененииДанных");

Процедура ВыполнитьДействиеПриИзмененииДанных(Элемент)
Если Элемент.Имя = "СписокЭлементКонтрагент" Тогда

ИначеЕсли Элемент.Имя = "СписокЭлементОрганизация"

КонецЕсли;
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. newlogin1 17.10.23 16:25 Сейчас в теме
(1)Вариант такой пишите для всех элементов 1 обработчик и внем в зависимости от элемента делаете чтото.
Можно например, по имени элемента проверять, если состав колонок заранее известен (т.е. их 10 штук, но в зависимости от условий от 3 до 10 показывается)

мЭлемент.УстановитьДействие("ПриИзменении", "ВыполнитьДействиеПриИзмененииДанных");

Процедура ВыполнитьДействиеПриИзмененииДанных(Элемент)
Если Элемент.Имя = "СписокЭлементКонтрагент" Тогда

ИначеЕсли Элемент.Имя = "СписокЭлементОрганизация"

КонецЕсли;
КонецПроцедуры
Показать
10. VoVo 17.10.23 17:55 Сейчас в теме
(3)Думаю такой вариант подойдет, у меня есть сохраненные имена колонок и с чем сравнивать, не додумался, что какую процедуру при изменении устанавливаешь, такая и отрабатывает, думал каждому свою только, это решает вопрос.
6. Sashares 33 17.10.23 17:24 Сейчас в теме
(1)А что нужно делать то в ПриИзменении?
8. VoVo 17.10.23 17:50 Сейчас в теме
(6)Логика такая, с эксель загружаются данные по доп реквизитам, колонки могут быть разные. После всех проверок выводится данные на форму, где отображаются и ошибки. Пользователь должен иметь возможность изменять их прям из формы. Ошибки эти пишутся в таблицу формы. И вот для того чтобы они удалялись из этой таблицы нужно чтобы при изменении значений этих программно созданных колонок проводилась проверка на правильность в базе и если все ок, то из реестра ошибок удаляем.
2. Ravil_ 17.10.23 16:15 Сейчас в теме
если я правильно понял также и используешь как и не для программно созданных. Попробуй хотя бы для начала
4. VoVo 17.10.23 16:45 Сейчас в теме
(2)Там вопрос в том что заранее саму процедуру при изменении не пропишешь для каждого такого элемента, т.к. заранее его имя не известно, может подойти второй коммент
5. SlavaKron 17.10.23 17:22 Сейчас в теме
(4) А что вы хотите сделать при изменении с реквизитом?
Если вы заранее не знаете имя колонки, значит у вас общая логика обработки изменения, независящая от ее имени.
&НаКлиенте
Процедура ВыполнитьДействиеПриИзмененииДанных(Элемент)
	ВыполнитьДействиеПриИзмененииДанныхНаСервере(Элемент.Имя)
КонецПроцедуры

&НаСервере
Процедура ВыполнитьДействиеПриИзмененииДанныхНаСервере(Знач ИмяКолонки)
	
	ТекущиеДанные = ТаблицаЗагрузки.НайтиПоИдентификатору(Элементы.ТаблицаЗагрузки.ТекущаяСтрока);
	
	Элемент = Элементы[ИмяКолонки];
	ЧастиПути = СтрРазделить(Элемент.ПутьКДанным, ".");
	ИмяПоля = ЧастиПути[ЧастиПути.ВГраница()];
	
	ЗначениеПоля = ТекущиеДанные[ИмяПоля];
	
	Сообщить("Изменено значение поля " + ИмяПоля + " : " + ЗначениеПоля);
	
КонецПроцедуры
Показать
7. VoVo 17.10.23 17:50 Сейчас в теме
(5)Логика такая, с эксель загружаются данные по доп реквизитам, колонки могут быть разные. После всех проверок выводится данные на форму, где отображаются и ошибки. Пользователь должен иметь возможность изменять их прям из формы. Ошибки эти пишутся в таблицу формы. И вот для того чтобы они удалялись из этой таблицы нужно чтобы при изменении значений этих программно созданных колонок проводилась проверка на правильность в базе и если все ок, то из реестра ошибок удаляем.
9. VoVo 17.10.23 17:52 Сейчас в теме
(5)Не обязательно, имена я могу брать из колонок таблицы уже с созданными реквизитами
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот