Имя: Пароль:
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) Да событие "Перетаскивание", то что нужно. Отличается от описанного поведения, которое я нашел. По факту срабатывает при отпускании кнопки мыши, а не при наведении на то куда хочешь перенести, но ещё не отпустил кнопку.

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

Спасибо.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший