Имя: Пароль:
1C
1С v8
Перетаскивание Drag&Drop отменить по условию (да/нет) в динамическом списке
0 Said_We
 
14.09.17
17:04
Есть динамический список номенклатуры с дополнительными данными из других источников. Пользователи в этом списке могут переносить элементы и группы номенклатуры из одного родителя в другого. Действие эти им разрешены. Есть одно НО.
Пользователи иногда случайно это делают и что бы исключить эту случайность достаточно задать им вопрос уверены они в своих действиях или нет.
Столько лет, а с перетаскиванием никогда не приходилось работать. Не было нужды.

Собственно вопрос. Как пользователю отменить свое действие, ответив на вопрос, что он не уверен в своих действиях.

Есть событийная процедура ОкончаниеПеретаскивания. К моменту вызова этой процедуры действие уже завершено и установка СтандартнаяОбработка = ЛОЖЬ не будет приводить к отмене действия.

Вижу только один вариант - запоминать перед началом перетаскивания откуда я перетаскиваю и в конце если пользователь отказался от своих действий, то делать обратный перенос.

Но как-то это не красиво и по дубовому.
Есть какие-то нормальный и простой способ?
1 Numerus Mikhail
 
14.09.17
17:08
Есть еще ПроверкаПеретаскивания, НачалоПеретаскивания и просто Перетаскивание.
Может одно из них подойдет?
2 Said_We
 
14.09.17
17:10
Они возникают либо вначале перетаскивания либо в процессе, а мне нужно только при завершении.
По факту переносить надо или это случайные действия и ручки шаловливые.
3 Said_We
 
14.09.17
17:49
Тишина какая-то.
По ходу не только я один не работал с этим...

Я тут ещё один способ придумал. Тоже не через одно место.
На форму вывести галочку при установки которой перетаскивать можно, при снятии нельзя. После перетаскивания галочку сбрасывать.

Режим такой. Включил перетаскивание - перетащил. Перетаскивание отключилось.
4 Fragster
 
гуру
14.09.17
17:54
заставьте юзеров играть в сапера старого, с 8*8 пикселей клеткой.

случайно, блин...

ну а вообще - событие Перетаскивание - то, что нужно.
5 AllJoke
 
14.09.17
17:59
ТаблицаФормы (FormTable)
ОкончаниеПеретаскивания (DragEnd)
Синтаксис:

ОкончаниеПеретаскивания(<ПараметрыПеретаскивания>, <СтандартнаяОбработка>)
Параметры:

<ПараметрыПеретаскивания>

Тип: ПараметрыПеретаскивания.
Содержит перетаскиваемое значение, тип действия и возможные действия при перетаскивании.
<СтандартнаяОбработка>

Тип: Булево.
В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет.
Значение по умолчанию: Истина.
Описание:

Возникает при окончании перетаскивания в поле источнике данных.
6 Said_We
 
14.09.17
18:15
(5) Это к чему?
СтандарнаяОбработка = Ложь не отменяет само перетаскивание.
Оно отменяет стандартную обработку события перетаскивания, но не само перетаскивание.
7 Said_We
 
15.09.17
09:18
(4) Да событие "Перетаскивание", то что нужно. Отличается от описанного поведения, которое я нашел. По факту срабатывает при отпускании кнопки мыши, а не при наведении на то куда хочешь перенести, но ещё не отпустил кнопку.

Ошибочное описание я нашел и поверил ему, что даже пробовать не стал.
Еще раз убеждаюсь, что верить описанию нельзя.

Спасибо.
Программист всегда исправляет последнюю ошибку.