Имя: Пароль:
1C
1С v8
ЭлементыФормы.ТекущийЭлемент. Событие "ПриИзменении" элемента формы. Обычные ф.
0 Termopsis
 
28.03.16
12:04
Как возможно программно указывать элементу формы что он изменен и нужно отработать событие "ПриИзменении", при переходе к следующему элементу.
1 Termopsis
 
28.03.16
12:06
Событие "ПриИзменении" вызывается только когда какой либо текст был изменен в форме. Как программно указать что элемент ф изменен и нужно отработать "ПриИзменении"?
2 Господин ПЖ
 
28.03.16
12:07
писать код нормально и таких вопросов не возникнет... за бизнес-логику непосредственно в гуе принято бить по рукам
3 Остап Сулейманович
 
28.03.16
12:07
(1) В конце кода программного изменения элемента ф вставить вызов процедуры ПриИзменении().
4 Господин ПЖ
 
28.03.16
12:07
выполняй то что внутри ПриИзменении() написано
5 Остап Сулейманович
 
28.03.16
12:09
(2) Это еще почему?
Изменили количество интерактивно - сумму пересчитывать нужно.
Изменили программно цену - за пересчет суммы будем бить по рукам?
6 Termopsis
 
28.03.16
12:10
Например: Я отредактировал элемент и пользователю задается вопрос, "Что собственно делаем?". Если ответ "Нет", то я пишу ЭлФормы.ТекЭл = МойЭл. И курсор не переходит дальше.
Но если пользователь ничего не изменит и нажмет интер или мышкой кликнет на др.элемент, то он перейдет на др.элемент. А нужно чтоб отрабатывало опять "ПриИзменении" и задавался вопрос.....если опять нет, то опять по кругу. Т.е. не давать пользователю сойти с эл. пока он не выберет "Да" или же "Отмена".
7 Господин ПЖ
 
28.03.16
12:11
>Изменили программно цену - за пересчет суммы будем бить по рукам?

в таких случаях дергают функцию пересчитывающую строку... по своему смыслу она находится в "слое бизнес-логики" и с гуем не связана.
8 Остап Сулейманович
 
28.03.16
12:14
(6) "если пользователь ничего не изменит и нажмет интер или мышкой кликнет на др.элемент" В таком случае за какое такое ПриИзменении может быть базар? Ничего же не изменилось.
9 Остап Сулейманович
 
28.03.16
12:16
(7) Какая разница где она находится? Вызов функции может быть инициирован как интерактивными действиями, так и программно.
10 Termopsis
 
28.03.16
12:16
(8) Так вот я и хотел узнать можно ли программно указать системе что эл.изменен? Или кодом как то данные менять и система посчитает что эл изменен.
11 Остап Сулейманович
 
28.03.16
12:19
(10) Тебе нужно задать вопрос пользователю? Ну так и задай. ЗаДляНаФига изгаляться с непонятными программными вывертами?
12 DDwe
 
28.03.16
12:21
(9) Тебе умный вещь говорят, а ты дуркуешь.
13 Господин ПЖ
 
28.03.16
12:22
(9) какой же ты тупенький...
14 Termopsis
 
28.03.16
12:23
(11) Вопрос уже задается. Варианты ответа "да", "нет", "отмена". Если "нет", то я говорю системе что тек.эл = мой элемент(Вот который и редактировали). но если после ответа на вопрос "Нет" захочет сойти с элемента, то вызвать опять вопрос. Т.е. когда пользователь выбирает "Нет", системе оповещать что редактирование ещё не завершено и при следующем сходе с эл вызывать опять "ПриИзменении". Даже если ничего не изменилось в этом эл.
15 ejikbeznojek
 
28.03.16
12:26
(14) Допустим у тебя есть галочка ФГалка у неё есть событие процедура ФГалкаПриИзменении()

И есть поле ввода ПолеВвода1 и событие
Процедура ПолеВвода1ПриИзменении(элемент)

Тебе в процедуре ПолеВвода1ПриИзменении() нужно просто написать строчку ФГалкаПриИзменении()
16 ejikbeznojek
 
28.03.16
12:32
А ещё можешь делать недоступными остальные элементы.
И разблокировать их в подходящий момент.
17 Termopsis
 
28.03.16
12:33
(15) И она(ФГалкаПриИзменении) же отработает сразу когда я выберу ответ "Нет". А необходимо когда пользователь сходит с элемента или переходит к другому, не закончив действие здесь. А после первого события "ПриИзменении" система уже не реагирует на переход к другому эл.
18 bolder
 
28.03.16
12:35
(9) из бизнес логики дергать код обработки событий гуя есть не гуд.
19 Termopsis
 
28.03.16
12:36
(17) Пользователь может как попытаться сойти с элемента(Который даже не изменил), так и продолжить редактирование.
20 Serg_1960
 
28.03.16
12:39
PS: автор желает иметь событие "ПотеряФокуса", которого нет в 1С у элементов обычной формы. Желать недостижимое - похвально, реализовывать недостижимое... эээ... Мечтайте уж лучше в пределах разумного :)
21 Termopsis
 
28.03.16
12:42
(20) Ох, как желаю))))
22 TormozIT
 
гуру
28.03.16
12:44
23 Serg_1960
 
28.03.16
12:48
(21) Парадаксальное программирование :) Программно закрываешь доступ ко всем элементам формы, кроме текущего. Пока твои требования к значению элемента не будут исполнены - юзверу некуда будет "терять фокус" с элемента.

PS: Я не я и кобыла не моя. Ежели что - я тебе этого не советовал.
24 Termopsis
 
28.03.16
12:52
Спасибо всем! Закрывать доступ ко всем элементам....ну как то))))) Буду тогда менять логику решения.
25 Termopsis
 
28.03.16
14:33
Мдааа. У кого есть комплексная автоматизация да и др баз могут смело посмотреть как реализовано событие потеря фокуса)))))(20)

Документ счет на оплату покупателю. При создании контрагента и ввода по строке. Если не найдет, то задаст вопрос и где ответ "Нет" не даст уйти с поля ввода пока не удалишь текст либо не нажмешь отмена или создашь нового.
26 Termopsis
 
28.03.16
15:57
Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
    
    мТекстРедактированияКонтрагента = Текст;
    Значение = Текст;
    СтандартнаяОбработка = Ложь;    
    
КонецПроцедуры

Т.к. Значение заполнено будет вызвано "ПриИзменении"

Процедура ПриИзмененииКонтрагент

ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Контрагент;            
Контрагент = "";                                            
                    ЭлементыФормы.Контрагент.ВыделенныйТекст = мТекстРедактированияКонтрагента;

КонецПроцедуры