Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Drag And Drop

Власова Ирина Посмотреть все статьи >> Специалист по внедрению 1С франчайзинговой сети "ИнфоСофт".
10.02.2022
6395
Время прочтения - 5 мин.
Заказать консультацию

1. Описание механизма

Drag-and-drop – это современный и интуитивно понятный механизм перемещения данных внутри пользовательского интерфейса. В переводе с английского его название буквально значит – «Тащи-и-бросай». Он позволяет повысить удобство работы пользователя и увеличить скорость обработки данных.

В платформе «1С:Предприятие» также реализован механизм поддержки операций перетаскивания, с помощью которого можно осуществлять перенос данных между разными элементами формы и не только. Например, можно переносить элементы списка из одной группы в другую, переносить данные из таблицы в поле табличного документа, перенести текст или список выделенных файлов из проводника Microsoft Windows в какой-либо элемент формы.

Операции перетаскивания поддерживают следующие элементы управления: таблица, поле табличного документа, поле календаря, поле картинки и поле планировщика.

Чтобы иметь возможность использования операций перетаскивания, нужно указывать соответствующие свойства для каждого элемента управления, который имеет такую возможность. К этим элементам применяются такие понятия, как источник данных (элемент, который предоставляет данные) и приемник данных (элемент, который принимает данные). Свойства операций перетаскивания:

1.png

  • РазрешитьНачалоПеретаскивания. Если у элемента формы установлен флаг этого свойства, то он сможет выступать в роли источника данных, а пользователи будут иметь возможность перетащить их из него.

  • РазрешитьПеретаскивание. Если флаг установлен, то элемент формы будет являться приемником данных, и пользователь сможет перетащить данные в этот элемент управления.

  • СпособПеретаскиванияФайлов. Данное свойство задает способ перетаскивания файлов на элемент управления. Могут быть заданы два способа – передавать «Как файл» и «Как ссылку на файл».

Управление процессом перетаскивания в обработчиках событий производится с помощью параметров «ПараметрыПеретаскивания». Состав параметров зависит от типа элемента управления и содержит следующие свойства:

  • Действие. Указывает тип действия перетаскивания. Принимаемые значения: Выбор (при перетаскивании будет открыто меню), Копирование (будет происходить копирование), Отмена (отмена действия), Перемещение (при перетаскивании произойдет перемещение).

  • ДопустимыеДействия. Определяет варианты обработки перетаскивания, принимает следующие значения: Копирование, КопированиеИПеремещение, НеОбрабатывать, Перемещение.

  • Значение. Содержит перетаскиваемое значение. Тип значения зависит от типа элемента управления, предоставившего значение.

В перетаскивании участвуют несколько событий и зависят от того, является элемент источником или приемником.

2.png

Общий порядок их срабатывания:

  • НачалоПеретаскивания. Возникает в тот момент, когда пользователь нажимает мышкой на выделенную область элемента управления, являющегося источником перетаскивания.

  • ПроверкаПеретаскивания. Событие срабатывает каждый раз, когда пользователь навел мышку на область элемента-приемника перетаскивания. При обработке данного события имеется возможность управлять видом указателя мыши с помощью свойства «Действие» (например, указывать, что перемещение в данный элемент управления запрещено или допустимо только копирование). Кроме того, в этом обработчике могут появляются другие параметры в зависимости от вида элемента управления.

  • Перетаскивание. Событие возникает, когда пользователь отпускает мышку на выбранном элементе управления, являющемся приемником. В его обработке в элемент-приемник можно вставить перемещаемые данные.

  • ОкончаниеПеретаскивания. Возникает в самом конце перетаскивания и определяет, какие действия необходимо выполнить в элементе-источнике данных после перемещения (например, удалить перемещенные данные).


2. Особенности и примеры использования

Рассмотрим особенности и примеры использования операции перетаскивания для разных элементов управления.

Для всех элементов управления предусмотрены стандартные обработки. Если при конфигурировании не производилось переопределение обработки событий перетаскивания, то выполняется простое перетаскивание. Оно возможно для передачи данных между таблицами, полями табличных документов, полем календаря (источник) и полем табличного документа (приемник), таблицей (источник) и полем табличного документа (приемник).

Чаще всего перетаскивание используется в табличных полях и полях табличного документа. Для табличного поля проверяется возможность вставки значения, т.е. проверяется тип значения, и если он совпадает с типом отображаемых данных, то производятся стандартные действия: для иерархических динамических списков – перемещение в группу, для табличных полей, отображающих наборы записей или табличные части – изменение порядка строк и копирование. Для поля табличного документа – проверка возможности вставить передаваемое значение. Для динамических списков при перетаскивании не может быть изменен порядок следования строк, но это допускается для статических таблиц (табличные части, таблицы значений, списки значений, дерево значений).

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

Кроме того, встречается перетаскивание внутри одной таблицы для упрощения произвольной сортировки пользователем (при необходимости поменять местами строки и произвести какие-либо действия при этом, например, сохранить последовательность нумерации). В отличие от перетаскивания между разными таблицами, в данном случае используются только два события – «НачалоПеретаскивания» и «ОкончаниеПеретаскивания».

Аналогично работает перетаскивание файлов из проводника Windows, встречающееся во всех типовых конфигурациях. Таблицы и поля картинки являются приемниками, поэтому при перетаскивании файлов в них отрабатывают события «ПроверкаПеретаскивания» и «Перетаскивание».

Подпишитесь на дайджест!
Подпишитесь на дайджест, и получайте ежемесячно подборку полезных статей.

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

3. Реализация примера перетаскивания

Реализуем событие перетаскивания на примере простой формы подбора, состоящей из двух таблиц. Пусть одна из них содержит список номенклатуры (динамический список), а вторая – корзина – список выбранной номенклатуры (таблица значений). При перетаскивании номенклатуры, если ее нет в корзине, должна добавиться новая строка с этой номенклатурой и количеством равным 1. Если номенклатура в корзине есть, то к ее количеству добавляется единица.

Приступим к реализации. Для примера в качестве дополнительной колонки была выбрана «ЕдиницаИзмерения».

3.png

Перенесем элементы на форму. Чтобы включить возможность перетаскивания, нужно проставить флаг у свойства «РазрешитьНачалоПеретаскивания» у таблицы-источника «Номенклатура» и «РазрешитьПеретаскивание» у таблицы-приемника «Корзина».

4.png

Создадим обработчик события «НачалоПеретаскивания» для таблицы «Номенклатура», выберем строки и попробуем их перетащить. С помощью отладчика посмотрим, что содержится в параметрах перетаскивания. Все выбранные для перетаскивания элементы находятся в массиве «Значение».

5.png

Как мы видим, в массив попал только ключевой элемент строки с типом «СправочникСсылка.Номенклатура», а единица измерения отсутствует. Для того, чтобы можно было перетащить остальные данные строки, необходимо в процедуре «НачалоПеретаскивания» получить недостающие данные и записать их в виде структуры в массив «Значение» в параметрах перетаскивания. Также в допустимые действия перетаскивания установим «Копирование».

6.png

Теперь необходимо прописать процедуру обработки для события «Перетаскивание». По условию сначала пытаемся найти строку с номенклатурой в таблице «Корзина» и, если находим, то к ее количеству прибавляем единицу, а если нет, добавляем новую строку с количеством равным 1.

7.png

Проверим обработку перетаскивания в режиме предприятия. Пусть у нас уже есть товар в таблице «Корзина».

8.png

Добавим еще несколько товаров и ту же самую кофеварку BRAUN.

9.jpg

10.png

Как мы видим, все выбранные товары добавились в корзину с количеством, равным 1, а у кофеварки BRAUN, которая была в таблице до перетаскивания, количество увеличилось на единицу. 


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Рассказать друзьям
Для разработчиков 1С
Вам может быть интересно: