Форма выбора и события

1. EvgeniyNP 15.10.21 14:53 Сейчас в теме
Здравствуйте!
БГУ2. Есть справочник договора. У формы выбора есть события Выбор и ВыборЗначения.
Пишу обработку, в которой открываю форму выбора Договоров и щелкая на нужные, добавляю в ТЧ выбранное. Но если дважды щелкаю мышкой, то добавляется 2 строки. Из-за того что срабатывают 2 события на форме выбора, Выбор и ВыборЗначения. Если нажимаю кнопку "Выбрать", то добавляется одна строка. Можно ли программно отключить событие или сделать что-нибудь, чтобы и при 2ном нажатии мыши добавлялась одна строка.

это код из формы выбора:
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	ОповеститьОВыборе(Элементы.Список.ТекущиеДанные.Ссылка);
КонецПроцедуры

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


А это вызов формы из моей обработки.
&НаКлиенте
Процедура ПодобратьДоговора(Команда)
	КонтрагентыТекущиеДанные = Элементы.Контрагенты.ТекущиеДанные;
	
	Если НЕ КонтрагентыТекущиеДанные = Неопределено Тогда
		Структура = Новый Структура;
		Структура.Вставить("Контрагент", КонтрагентыТекущиеДанные.Контрагент);
		Структура.Вставить("Организация", Объект.Организация);
		
		
		ПараметрыФормы = Новый Структура;
		//ПараметрыФормы.Вставить("ФиксированныеНастройки", фиксНастройки);
		ПараметрыФормы.Вставить("ЗакрыватьПриВыборе ", Ложь);
		ПараметрыФормы.Вставить("Отбор", Структура);
		//ПараметрыФормы.Вставить("РежимПросмотра", ОтображениеТаблицы.Список);
		ПараметрыФормы.Вставить("РежимВыбора", Истина);
		ПараметрыФормы.Вставить("ВыбиратьДополнительные", Истина);
		ПараметрыФормы.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
		ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
		ПараметрыФормы.Вставить("СтандартнаяОбработка ", Ложь);
		
		
		Форма = ОткрытьФорму("Справочник.Договоры.Форма.ФормаВыбора", ПараметрыФормы, Элементы.Договоры);
	КонецЕсли;
КонецПроцедуры
Показать


и обработка выбора в обработке

&НаКлиенте
Процедура ДоговорыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	НоваяСтрока = Объект.Договоры.добавить();
	НоваяСтрока.Контрагент = Элементы.Контрагенты.ТекущиеДанные.Контрагент;
	НоваяСтрока.Договор    = ВыбранноеЗначение;
КонецПроцедуры
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Release 15.10.21 15:00 Сейчас в теме
(1)
Из-за того что срабатывают 2 события на форме выбора, Выбор и ВыборЗначения.

Ну так и обрабатывайте только одно событие - ВыборЗначения. Зачем вам ещё, то, второе, которое срабатывает вместе с первым?
4. Sashares 34 15.10.21 15:09 Сейчас в теме
(1)
Но если дважды щелкаю мышкой, то добавляется 2 строки.

Вы щелкаете мышью 2 раза - срабатывает одно событие 2 раза, а не 2 разных события.
5. EvgeniyNP 15.10.21 15:13 Сейчас в теме
(4) именно 2, я по отладчику шел и смотрел
6. Sashares 34 15.10.21 15:19 Сейчас в теме
(5)В событии ДоговорыОбработкаВыбора проверяйте, что такого договора еще таблице нет, и только потом добавляйте.
Это все равно придется делать, чтобы не было дублей, когда пользователь выбирает дважды один и тот же договор.

Но то что срабатывает выбор дважды, это занятный баг. Могу предложить написать на ЛК.
7. EvgeniyNP 15.10.21 15:27 Сейчас в теме
(6)Добавил проверку, в итоге добавляется одна строка. Но все таки интересно, почему срабатывают два события.
8. Release 15.10.21 15:33 Сейчас в теме
(7) Может, конечно, я чего не понимаю, но ответ дан конкретно в СП:
ВыборЗначения (ValueChoice)
Синтаксис:
ВыборЗначения(<Значение>, <СтандартнаяОбработка>)

Описание:
Вызывается при выборе значения из таблицы в режиме выбора.


Выбор (Selection)
Синтаксис:
Выбор(<ВыбраннаяСтрока>, <Поле>, <СтандартнаяОбработка>)

Описание:
Возникает при двойном щелчке мыши (нажатии клавиши Enter) в ячейке таблицы.
9. Release 15.10.21 15:37 Сейчас в теме
(7) Т.е. 1-е зависит от режима формы, 2-е от него не зависит, а только от способа выбора (клавиатурой или мышью, но не кнопкой).
10. EvgeniyNP 15.10.21 15:56 Сейчас в теме
(9) ставил я режим выбора в ПараметрыФормы и истина и ложь, и убирал полностью. все одно
12. spacecraft 15.10.21 16:40 Сейчас в теме
(1)
ПараметрыФормы = Новый Структура;
//ПараметрыФормы.Вставить("ФиксированныеНастройки", фиксНастройки);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе ", Ложь);
ПараметрыФормы.Вставить("Отбор", Структура);
//ПараметрыФормы.Вставить("РежимПросмотра", ОтображениеТаблицы.Список);
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("ВыбиратьДополнительные", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
ПараметрыФормы.Вставить("СтандартнаяОбработка ", Ложь);


Форма = ОткрытьФорму("Справочник.Договоры.Форма.ФормаВыбора", ПараметрыФормы, Элементы.Договоры);
Показать


Уберите выделенную строку. Для формы выбора не нужное ее использовать. Она по умолчанию будет закрываться при выборе.
Но из-за нее и получаете такой вот эффект.
Вызов обоих обработчиков.

Если же нужно не закрывать при выборе, то может подойдет открытие формы списка?
Или создать дополнительную форму выбора со своими настройками.
3. Airlord 15.10.21 15:01 Сейчас в теме
Добрый день! я бы проверял, что подбирается дважды или один раз, сравнивая с текущей таблицей значений, чтобы избежать двойного выбора. или посмотреть - может в настройках мыши в системе чего лишнего есть... Пока других вариантов не вижу
11. Release 15.10.21 16:00 Сейчас в теме
(10) Может потому, что она для справочника определена, как форма выбора, а не произвольная или форма списка?
13. provadyuga 99 15.10.21 18:17 Сейчас в теме
Сюда
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    ОповеститьОВыборе(Элементы.Список.ТекущиеДанные.Ссылка);
КонецПроцедуры
добавить
СтандартнаяОбработка = Ложь;
14. provadyuga 99 15.10.21 19:35 Сейчас в теме
(13) Понял свою ошибку. Справочник Договора в конфигурации на поддержке.
15. provadyuga 99 16.10.21 06:07 Сейчас в теме
Попробуйте создать в вашей обработке произвольную форму выбора из справочника. Добавить реквизит СправочникСписок типа ДинамическийСписок, таблицу на форму. Флажок таблицы справочника на этой форме "Режим выбора" нужно установить. В модуле этой формы прописать событие
&НаКлиенте
Процедура ДоговораВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
	ОповеститьОВыборе(Элементы.Договора.ТекущиеДанные.Ссылка);
КонецПроцедуры
А в вашем коде для выбора вызывать эту произвольную форму
		//Форма = ОткрытьФорму("Справочник.Договора.Форма.ФормаВыбора", ПараметрыФормы, Элементы.Договора);
        Форма = ОткрытьФорму("Обработка.ВашаОбработка.Форма.ПроизвольнаяФормаВыбора", ПараметрыФормы, Элементы.Договора);
Оставьте свое сообщение

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