Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/141: Рейтинг темы: голосов - 141, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 26.05.2017
Сообщений: 10
1C 8.x

Как создать обработчик события для программно созданных реквизитов?

21.06.2017, 08:12. Показов 30960. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
У меня такая проблема. При открытии формы элемента справочника у меня создаются реквизиты и элементы по записям в независимом регистре сведений. После того, как я создал эти элементы, мне надо, чтобы при изменении какого-либо из этих элементов вызывалась процедура. Но не могу понять как вызывать процедуру для созданного элемента.
Вот так я создаю реквизиты:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    СозданиеРеквизита();
КонецПроцедуры
 
&НаСервере
Процедура СозданиеРеквизита() Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗначенияСвойствКошельков.Свойство.Наименование КАК Наименование,
        |   ЗначенияСвойствКошельков.Свойство КАК Свойство,
        |   ЗначенияСвойствКошельков.Значение КАК Значение,
        |   СвойстваКошельков.ТипЗначения КАК ТипЗначения,
        |   ЗначенияСвойствКошельков.Свойство.Ссылка КАК СвойствоСсылка
        |ИЗ
        |   РегистрСведений.ЗначенияСвойствКошельков КАК ЗначенияСвойствКошельков
        |       ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.СвойстваКошельков КАК СвойстваКошельков
        |       ПО ЗначенияСвойствКошельков.Свойство = СвойстваКошельков.Ссылка
        |ГДЕ
        |   ЗначенияСвойствКошельков.Кошелек = &Кошелек";
    Запрос.УстановитьПараметр("Кошелек", Объект.Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если Элементы.Найти(СтрЗаменить(ВыборкаДетальныеЗаписи.Наименование," ","")) = Неопределено  Тогда
            НовыеРеквизиты = Новый Массив;
            НовыйРеквизит = Новый РеквизитФормы(СтрЗаменить(ВыборкаДетальныеЗаписи.Наименование," ",""),ВыборкаДетальныеЗаписи.ТипЗначения,"",ВыборкаДетальныеЗаписи.Наименование,Истина);
            НовыеРеквизиты.Добавить(НовыйРеквизит);
            ИзменитьРеквизиты (НовыеРеквизиты);
            
            Элемент = ЭтаФорма.Элементы.Добавить(СтрЗаменить(ВыборкаДетальныеЗаписи.Наименование," ",""),Тип("ПолеФормы")); 
            Элемент.Вид = ВидПоляФормы.ПолеВвода; 
            Элемент.ПутьКДанным = СтрЗаменить(НовыйРеквизит.Имя," ","");
            ЭтаФорма[СтрЗаменить(ВыборкаДетальныеЗаписи.Наименование," ","")] = ВыборкаДетальныеЗаписи.Значение;
            
            КонецЕсли;
    КонецЦикла;
КонецПроцедуры
И дальше мне надо, чтобы при изменении в поле ввода открывался список только тех элементов, которые соответствуют данному реквизиту (значения берутся из доп. справочника с владельцем ПВХ). Значения буду брать запросом, но как мне сделать чтобы при изменении значения поля ввода вызывалась процедура?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2017, 08:12
Ответы с готовыми решениями:

Обработчик события для программно созданных кнопок
Помогите пожалуйста! Есть программно создаваемые кнопки в количестве, зависящем от введенного в TextBox числа. Нужно задать программный код...

Один обработчик события для нескольких динамически созданных объектов
Я программно создаю несколько картинок и их кол-во всегда разное. Создаю картинки циклом: for I := 1 to count_book do ...

Прикрепить обработчик события для элементов, созданных после загрузки формы
Я, возможно, заблуждаюсь в употреблении таких слов как "рантайм", но все же... Имеется listbox ... В нем я выбираю кол-во...

9
Эксперт 1С
 Аватар для Tklwegsd
845 / 608 / 211
Регистрация: 24.07.2013
Сообщений: 2,102
21.06.2017, 08:24
Цитата Сообщение от AlexeyVM Посмотреть сообщение
После того, как я создал эти элементы, мне надо, чтобы при изменении какого-либо из этих элементов вызывалась процедура.
Для элемента управления можно программно установить обработчики событий

ПолеФормы (FormField)
УстановитьДействие (SetAction)
Синтаксис:

УстановитьДействие(<ИмяСобытия>, <Действие>)
Параметры:

<ИмяСобытия> (обязательный)

Тип: Строка.
Имя события, для которого устанавливается новое действие.
<Действие> (обязательный)

Тип: Строка.
Указывается имя обработчика.
Описание:

Устанавливает обработчик события.

Доступность:

Сервер, мобильное приложение(сервер).
Но в Вашем случае лучше воспользоваться свойствами элементов управления СвязиПараметровВыбора или ПараметрыВыбора, чтобы установить необходимые отборы на выбираемые значения.
1
0 / 0 / 0
Регистрация: 26.05.2017
Сообщений: 10
21.06.2017, 08:26  [ТС]
Ну добавил в процедуру
1C
1
2
ДействиеИзменение = Новый Действие("МойОбработчикПриИзменении");
            Элемент.УстановитьДействие("ПриИзменении",ДействиеИзменение);
Ошибка: тип не определен (Действие)
Я так понимаю, это доступно только на клиенте?
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
21.06.2017, 08:32
Цитата Сообщение от AlexeyVM Посмотреть сообщение
Ошибка: тип не определен (Действие)
Я так понимаю, это доступно только на клиенте?
1C
1
Элемент.УстановитьДействие("ПриИзменении", "МойОбработчикПриИзменении");
1
0 / 0 / 0
Регистрация: 26.05.2017
Сообщений: 10
21.06.2017, 10:03  [ТС]
Спасибо, буду пробовать

Добавлено через 45 минут
Возникла другая проблема. Как мне передать имя элемента, который я изменяю в обработчик события вместо "????" ?
1C
1
2
3
4
5
6
&НаКлиенте
Процедура МойОбработчикПриИзменении(Элемент) 
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("Параметр", ?????);
    ОткрытьФорму("Справочник.ДополнительныеСвойстваКошельков.ФормаВыбора",ПараметрыОткрытия,,,,,); 
КонецПроцедуры
Добавлено через 43 минуты
Нашел - ЭтаФорма.ТекущийЭлемент.Имя
Но как мне передать тип значения ПВХСсылка.СвойстваКошельков?
Пробую так, но выдает ошибку на параметр "ПланыВидовХарактеристикСсылка.СвойстваК ошельков"
1C
1
    ПараметрыОткрытия.Вставить("Владелец", ТипЗнч(ЭтаФорма.ТекущийЭлемент.Имя) = Новый ОписаниеТипов("ПланыВидовХарактеристикСсылка.СвойстваКошельков"));
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
21.06.2017, 12:01
Странное вообще решение какое-то.

Почему было не использовать предопределенный набор записей регистра сведений - зачем было лепить динамические реквизиты на форму?

Нашел - ЭтаФорма.ТекущийЭлемент.Имя
Но как мне передать тип значения ПВХСсылка.СвойстваКошельков?
Пробую так, но выдает ошибку на параметр "ПланыВидовХарактеристикСсылка.СвойстваК ошельков"
Лучше просто Элемент.Имя
1C
1
ПланыВидовХарактеристикСсылка.СвойстваКошельков.НайтиПоНаименованию(Элемент.Имя)
0
0 / 0 / 0
Регистрация: 26.05.2017
Сообщений: 10
21.06.2017, 12:13  [ТС]
Я всего около месяца программирую, поэтому не особо понимаю, когда, что проще использовать. И вообще многого не знаю еще. Сейчас попробую так

Добавлено через 9 минут
Переменная не определена ПланыВидовХарактеристикСсылка
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
21.06.2017, 17:11
1C
1
ПланыВидовХарактеристик.СвойстваКошельков.НайтиПоНаименованию(Элемент.Имя)
0
0 / 0 / 0
Регистрация: 26.05.2017
Сообщений: 10
22.06.2017, 05:20  [ТС]
К сожалению, та же ошибка
Переменная не определена ПланыВидовХарактеристик. Может я вставляю не туда?

Если пишу вот-так
1C
1
ПараметрыОткрытия.Вставить("Владелец", ТипЗнч(ЭтаФорма.ТекущийЭлемент.Имя) = Новый ОписаниеТипов("ПланыВидовХарактеристик.СвойстваКошельков.НайтиПоНаименованию(Элемент.Имя)"));
Тогда уже в самом предприятии при изменении элемента ошибка недопустимое значение параметров (1) у описания типов.
Если пишу так
1C
1
ПараметрыОткрытия.Вставить("Владелец",ПланыВидовХарактеристик.СвойстваКошельков.НайтиПоНаименованию(Элемент.Имя));
Тогда переменная не определена сразу
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
28.06.2017, 18:18
Лучший ответ Сообщение было отмечено AlexeyVM как решение

Решение

1C
1
2
3
4
5
6
7
8
ПараметрыОткрытия.Вставить("Владелец", НайтиПВХ_В_БазеДанных(Элемент.Имя));
 
&НаСервереБезКонтекста
Функция НайтиПВХ_В_БазеДанных(Наименование)
 
   Возврат ПланыВидовХарактеристик.СвойстваКошельков.НайтиПоНаименованию(Наименование);
 
КонецФункции
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2017, 18:18
Помогаю со студенческими работами здесь

Как создать обработчик события для формы?
как создать обработчик события для формы java?

Обработчик события для объекта, созданного программно
Здравствуйте. В форме программно создано кнопочное поле. Cреда Visual Studio 2010. (в файле form1.h это строки №№ 72 и 21-32) ...

Привязать обработчик события для программно добавленного элемента управления
Такая проблема. Программно создаю DataGridView при добавлении новой вкладки на tabControl. Существует функция обработки события получения...

Как передать в обработчик события значение программно созданного pictureBox?
как передать в обработчик события значение программно созданного pictureBox? суть прилоения оно ищет в папке изображения, потом добавляет...

Создать обработчик события для класса
Добрый день. Подскажите, пожалуйста, как создать свой обработчик события для своего класса? В частности, необходимо создать событие при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru