0. tormozit 5621 12.07.07 02:59 Сейчас в теме

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. hopter 36 12.07.07 02:59 Сейчас в теме
Отличная штука. Сильно помогает при программном создании документов, когда надо заполнить кучу зависимых реквизитов, а прописывать каждый руками утомительно.
2. PowerBoy 2921 30.08.07 12:50 Сейчас в теме
Классно. Обязательно использую. Спасибо за подробный пример.
3. karat60 01.10.07 12:39 Сейчас в теме
4. fez 45 16.02.10 11:35 Сейчас в теме
Супернужная возможность для автоматического тестирования. Спасибо.
5. BlackLeon 3 05.08.11 12:33 Сейчас в теме
а что подразумевается под режимом редактирования строки?
установить текущую строку и текущую колонку и выполнить ИзменитьСтроку()?

извените. просто не смог запустить:) проблема оказалась в том что форма должна быть открыта:(
6. Girl_Tat 15.02.12 10:46 Сейчас в теме
Большое спасибо за процедуры!!!!! Очень помогли!!!
7. Жолтокнижниг 249 29.03.12 12:56 Сейчас в теме
Огромный жирный плюс, а нет предложений как програмно нажимать кн. "Ок"
у меня только одна идея эмуляция ctrl+enter, но чтот не гут так извращаться
8. agressor 119 21.12.12 11:39 Сейчас в теме
9. rar_xxx 23 29.12.12 13:47 Сейчас в теме
Жирный плюс !!! Можешь помочь с обработкой таблицы управляемой формы ?

Делаю так:
ФормаДок.Элементы.Товары.ТекущаяСтрока = 0;
Получилось в качестве колонки пока только это скормить: ФормаДок.Товары.ПодчиненныеЭлементы.ТоварыЦенаСоСкидкой Но значение на форме не появилось
10. denny_dv 15.04.13 23:31 Сейчас в теме
Супер крутая процедурка!!! Добавил в копилку! Префикс оставлю чтобы помнить. +
11. mcarrowd 13.04.15 13:57 Сейчас в теме
В 8.3 вторая процедура не работает - надо вызывать ТаблицаФормы.ИзменитьСтроку() в процедуре или где-то ранее по коду

Процедура ЛксИнтерактивноЗаписатьВКолонкуТабличногоПоля(ТабличноеПоле, Колонка, Значение, ФормаИнициатор = Неопределено) Экспорт
	
	ТабличноеПоле.ТекущаяКолонка = Колонка;
	ТабличноеПоле.ИзменитьСтроку();
	ЛксИнтерактивноЗаписатьВЭлементУправления(Колонка.ЭлементУправления, Значение, ФормаИнициатор);

КонецПроцедуры
Показать
12. tormozit 5621 13.04.15 14:12 Сейчас в теме
(11) Видимо не читал описание метода?
13. mcarrowd 14.04.15 00:48 Сейчас в теме
(12) видимо только первую строку.
14. ardn 95 22.09.15 17:38 Сейчас в теме
Спасибо,
Внес этот трюк в модуль тестирования обычных форм
15. hopter 36 29.04.16 02:38 Сейчас в теме
а на управляемых формах возможно нечто подобное соорудить?
16. ardn 95 29.04.16 08:03 Сейчас в теме
(15) hopter,
На управляемых формах логичнее использовать автоматизированное тестирование
17. tormozit 5621 29.04.16 08:20 Сейчас в теме
На управляемых формах это тоже работает.
Кстати про тестирование форм (обычных и управляемых) рекомендую посмотреть инструмент "Тестирование метаданных" из подсистемы Инструменты разработчика, где этот прием используется.
18. hopter 36 02.05.16 06:45 Сейчас в теме
ясно, посмотрю про тестирование
19. uri1709 01.08.16 11:55 Сейчас в теме
Все таки не ясно, как должна выглядеть процедура 2 для УФ, там используется вместо ТабличногоПоля, ТаблицаФормы. Методы конечно похожие, но что-то до конца не получилось у меня разобраться. Проверял на УТ 11.2. Вторую процедуру сделал так:

&НаКлиенте
Процедура ЛксИнтерактивноЗаписатьВКолонкуТабличногоПоля(ТабличноеПоле, Колонка, Значение, ФормаИнициатор = Неопределено) Экспорт
	
	ТабличноеПоле.ТекущийЭлемент = Колонка;
	ЛксИнтерактивноЗаписатьВЭлементУправления(ТабличноеПоле.ТекущийЭлемент, Значение, ФормаИнициатор);

КонецПроцедуры // ЛксИнтерактивноЗаписатьВКолонкуТабличногоПоля()

Сделал обработку с полями Партнер, Номенклатура и командой выполнить:

&НаКлиенте
Процедура Заполнить(Команда)
    Форма = ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта");

	Форма.ЛксИнтерактивноЗаписатьВЭлементУправления(Форма.Элементы.Партнер, Партнер, ЭтаФорма);
	                
	                 
	Форма.Элементы.Товары.ДобавитьСтроку();                   

	Форма.ЛксИнтерактивноЗаписатьВКолонкуТабличногоПоля(Форма.Элементы.Товары, Форма.Элементы.Товары.ПодчиненныеЭлементы.ТоварыНоменклатура, Номенклатура, ЭтаФорма); //Форма.Элементы.ТоварыНоменклатура
	Форма.ЛксИнтерактивноЗаписатьВКолонкуТабличногоПоля(Форма.Элементы.Товары, Форма.Элементы.Товары.ПодчиненныеЭлементы.ТоварыЦена, 100, ЭтаФорма); //Форма.Элементы.ТоварыЦена
	Форма.ЛксИнтерактивноЗаписатьВКолонкуТабличногоПоля(Форма.Элементы.Товары, Форма.Элементы.Товары.ПодчиненныеЭлементы.ТоварыКоличествоУпаковок, 100, ЭтаФорма); 
	
КонецПроцедуры
 
Показать


В результате на форме заполнилось: Партнер,Контрагент
Номенклатура - пустое поле, Цена=100,Количество=100,Сумма=10 000.

Мне не понятен момент почему не заполнилась Номенклатура и не сработало событие "ПриИзменении", ведь для "Цены" и "Количества" это событие сработало.

Хотя воспроизвел, в чистой базе создал документ "РеализациятоваровУслуг" с Партнером и табличной частью Номенклатура,НоменклатураНаименование-строка, Цена, Количество, Сумма
сделал обработчики событий для Номенклатуры при изменении заполняется поле НоменклатураНаименование, для Цены и Количества обработчики при изменении расчета Суммы.

Запустил эту обработку НоменклатураНаименование заполнилось и сумма рассчиталась. Все обработчики событий сработали.
Странно, почему в УТ 11.2 не отработало
20. hopter 36 10.08.16 01:37 Сейчас в теме
(19) uri1709, аналогичная проблема
В ЗУП 3 при заполнении дополнительного отпуска в табличной части вид не проставляется, а даты нормально
пока не разобрался
21. hopter 36 10.08.16 03:54 Сейчас в теме
еще не могу понять можно ли так флажок установить
22. hopter 36 10.08.16 04:19 Сейчас в теме
флажок похоже нельзя, т.к. это не поле ввода
23. tormozit 5621 08.09.16 10:29 Сейчас в теме
(22) Да, нельзя. В теме же написано четко "Поле ввода"
25. SlavaKron 19.09.18 09:17 Сейчас в теме
(22) В УФ можно менять вид поля формы на клиенте. "Поле флажка" можно поменять на "Поле ввода".
24. Toolfan 21.10.16 22:52 Сейчас в теме
По поводу отработки обработчика у Номенклатуры, та же самая проблема, решить не удается
Так и не у кого не получилось решить?
26. tormozit 5621 06.04.19 09:26 Сейчас в теме
Обновил код. Теперь там есть поддержка обычных и управляемых форм (табличных полей и таблиц формы).
27. mszsuz 89 07.04.19 01:42 Сейчас в теме
Если бы такое оформление условий использовалось в типовых, можно было получить вывих мозга
28. tormozit 5621 07.04.19 10:15 Сейчас в теме
29. acsent 1141 08.04.19 11:52 Сейчас в теме
А не проще ли сделать расширение, где будет
Процедура расш_ПриИзменении() экспорт
    ПриИзменении()
КонецПроцедуры
30. tormozit 5621 08.04.19 12:55 Сейчас в теме
(29) Так обработчика может не быть. К тому же есть внутренние обработчики платформы при изменении значения в поле ввода. Они не вызываются при вызове прикладного обработчика.
31. acsent 1141 08.04.19 17:29 Сейчас в теме
(30) А какой тогда пересчет нужно вызвать, если обработчика то и нет?
32. tormozit 5621 08.04.19 17:59 Сейчас в теме
(31) Например очистка связанных полей ввода.
33. lev6975 17.10.19 21:57 Сейчас в теме
Неработает... вышибает 1С с дампом памяти
Можно подробнее описать что такое "Табличное поле" здесь конкретно и "Колонка"?
Для подстановок в процедуры
34. tormozit 5621 17.10.19 22:06 Сейчас в теме
(33) Если приложение аварийно завершается, то надо сделать пример для воспроизведения проблемы. Тогда возможно я чем то помогу. Но такую проблему читаю впервые. А по поводу табличного поля и колонки все описано в комментариях перед методом.
35. lev6975 17.10.19 22:44 Сейчас в теме
И вообще, тут, по - моему, опечатка - в функции идут 4 параметра - табличноеполе, колонка, значение, инициатор и два левых булёвых
А во внутренней функции их уже три... может из за этого - все сдвигается и поэтому глючит
36. ZanderZ 18.10.19 08:39 Сейчас в теме
(33)
Так же вылетает с дампом...на строке ТабличноеПоле.ИзменитьСтроку();
37. tormozit 5621 18.10.19 09:08 Сейчас в теме
(36) Часто в таких ситуациях причиной является бесконечная рекурсия.
38. ZanderZ 18.10.19 09:21 Сейчас в теме
(37) я пытаюсь из заполнения объекта вызвать не в цикле
ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ВладелецФормы.Элементы.Сотрудники,ВладелецФормы.Элементы.Сотрудники.ПодчиненныеЭлементы.СотрудникиКоличествоДней,10,,Ложь);



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

Вакансии

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Технический лидер, архитектор 1С, руководитель проектов
Санкт-Петербург
зарплата от 150 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист 1С
Екатеринбург
зарплата до 120 000 руб.
Полный день

Консультант-аналитик 1С
Рязань
зарплата до 80 000 руб.
Полный день