gifts2017

Возможности перетаскивания, примеры использования, помощь в понимании и отладке механизма работы (8.3, управляемые формы)

Опубликовал Александр Полетаев (Alias) в раздел Программирование - Практика программирования

Механизм перетаскивания используется редко, а ведь его использование может помочь в реализации интуитивно понятных функций, которые могут весьма ускорить работу пользователя, и получить в итоге более дружественный интерфейс.
Данная обработка не содержит копированного из Синтакс-Помощника текста (его вы сможете прочитать и сами). Она показывает примеры использования перетаскивания; позволяет прямо в режиме Предприятия протестировать, проверить и отладить основные приёмы работы; понять принцип вызова событий и увидеть состав их параметров.

Перетаскивание в 1С представлено 4-мя событиями, которые доступны для следующих объектов:

  • поле формы/Расширение календаря
  • поле формы/Расширение картинки
  • поле формы/Расширение планировщика
  • поле формы/Расширение табличного документа
  • таблица формы/ТаблицаФормы
  • декорация формы/Расширение картинки


События НачалоПеретаскивания (стартовое) и ОкончаниеПеретаскивания (финишное) возникают в Источнике,  доступны при установке признака "Разрешить начало перетаскивания".

События ПроверкаПеретаскивания (первое промежуточное)и Перетаскивание (второе промежуточное) возникают в Приёмнике, доступны при установке признака "Разрешить перетаскивание".

В каждом событии доступны ПараметрыПеретаскивания, состоящие из Действие, ДопустимыеДействия, Значение.
Действие (тип ДействиеПеретаскивания) оказывает влияние на вид курсора (три варианта -- обычный, с плюсиком и отмена) и принимает четыре возможных значения:

  • Выбор (при перетаскивании правой кнопкой -- будет открыто всплывающее меню; срабатывает не во всех случаях), 
  • Копирование (при перетаскивании левой кнопкой с нажатым Ctrl), 
  • Отмена, 
  • Перемещение (при перетаскивании левой кнопкой).

ДопустимыеДействия (тип ДопустимыеДействияПеретаскивания) задаёт доступные действия в приёмнике и принимает значения:

  • Копирование, 
  • КопированиеИПеремещение, 
  • НеОбрабатывать, 
  • Перемещение. 


Событие Перетаскивание может не возникать в приёмнике -- если ДопустимыеДействия в НачалеПеретаскивания установлены в "НеОбрабатывать" или в событии ПроверкаПеретаскивания Действие установлено в "Отмену". Также Перетаскивание не возникает при несовместимости типов приёмника и источника (когда иконка курсора уже имеет вид "Отмена", независимо от параметров).

По умолчанию типы считаются совместимыми, если в качестве приёмника выступает ТаблицаФормы или ПолеТабличногоДокумента.

 

В источнике:
Изменение Действия не вызовет ошибки, но ни на что не влияет и смысла не имеет.

Изменение ДопустимыхДействий имеет смысл только в событии НачалоПеретаскивания, значение будет доступно во всех событиях, но нигде больше не может быть изменено. Задаёт первоначальный вид курсора (Перемещение, Копирование или Отмена) и набор доступных действий в приёмнике.
В случае установки значения "НеОбрабатывать" гарантированно не будет вызвано событие Перетаскивание, а в событие ОкончаниеПеретаскивания автоматически уйдёт Действие="Отмена".
В случае установки значения "Копировать" в событие ОкончаниеПеретаскивания автоматически уйдёт Действие="Копирование", даже если Ctrl не нажата.

В приёмнике:
Изменение Действия в ПроверкеПеретаскивания может влиять на вид курсора в случае понижения (Перемещение -> Копирование -> Отмена). В случае установки "Отмена" не будет вызвано событие Перетаскивание, в событие ОкончаниеПеретаскивания автоматически уйдёт Действие="Отмена".
Изменение Действия в Перетаскивании (только в случае понижения) уйдёт в событие ОкончаниеПеретаскивания.

Изменение ДопустимыхДействий не вызовет ошибки, но ни на что не влияет и смысла не имеет.

NB! По собственному опыту -- при работе с перетаскиванием возможны падения 1С:Предприятия, видимо, сказывается факт редкого использования (и как следствие -- недостаточного тестирования тестирования) этого механизма в типовых конфигурациях. Неоднократно воспроизводились, в частности, на платформе 8.3.6 при действиях на вкладке "Поддерживаемые по умолчанию элементы".

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

Ссылки по теме:
http://kb.mista.ru/article.php?id=326 (TormozIT, "v8:Глобальное перетаскивание") -- немного устарело в плане поддерживаемых элементов форм.
http://its.1c.ru/db/v83doc/bookmark/dev/TI000000433 (ИТС, "7.6.13. Механизм перетаскивания")

Скачать файлы

Наименование Файл Версия Размер
ВозможностиПеретаскивания 23
.epf 20,26Kb
17.11.15
23
.epf 1.0.0 20,26Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Яков Коган (Yashazz) 19.11.15 11:58
при работе с перетаскиванием возможны падения 1С:Предприятия, видимо, сказывается факт редкого использования (и как следствие -- недостаточного тестирования тестирования) этого механизма в типовых конфигурациях.

Да уж. "тестирования тестирования" этому механизму явно не хватает, ибо косячит он давно и разнообразно. Про любой фрагмент вышенаписанного можно сказать "срабатывает не во всех случаях", а квинтэссенцией любых знаний на эту тему является "пробуйте сами, авось сработает".
Светлый ум; +1 Ответить
2. Яков Коган (Yashazz) 01.12.15 12:42
Добавка в тему, наблюдал только что на релизе 8.3.6.2390: если в табличном поле нет ни одной строки, перетаскивание не срабатывает, иконка в виде значка запрета, хотя всё включено и в событиях отказов нет. А вот как только появляется хотя бы одна строка, сразу начинает нормально работать.
3. Александр Полетаев (Alias) 01.12.15 13:24
(2) Yashazz, это актуально только для дерева значений. На обычном табличном поле всё нормально.
На примере этой обработки -- на первой вкладке иконка для пустой таблицы-приёмника будет разрешающая. На второй вкладке (где как раз дерево) -- иконка для пустого дерева будет запрещающая. Почему такое ограничение -- не знаю.
4. Яков Коган (Yashazz) 01.12.15 13:33
(3) Alias, именно. Причём получатель-дерево может находиться даже в режиме отображения "список", а всё равно пофигу.
5. Сергей Михаев (Eskimos) 13.04.16 17:17
Что за хитрая конструкция?\

Выполнение = Ложь;
6. Александр Полетаев (Alias) 18.04.16 15:47
(5) Eskimos, Выполнение -- это стандартный третий параметр события НачалоПеретаскивания, С-П говорит о нём, что он "управляет выполнением перетаскивания. Если в теле процедуры-обработчика установить данному параметру значение Ложь, перетаскивание не начнется. Значение по умолчанию: Истина."
В данном примере Выполнение=Ложь; используется для отмены самой возможности начала перетаскивания в некоторых примерах (вообще нельзя ничего перетащить, можно только нажав Ctrl , можно только правой кнопкой мыши).
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа