drag and drop 1с управляемые формы

Управляемая форма 1С 8.2(8.3) – работа с деревом значений и таблицей значений. Часть II (Реализация DRAG and DROP)

Эта статья является продолжением статьи «Управляемая форма 1С 8.2(8.3) – Работа с деревом значений и таблицей значений. Часть I (Основы)», она будет посвящена реализации механизма Drag and Drop (или, проще говоря, “Перетаскивания”) для ДереваЗначений, расположенного на управляемой форме управляемого приложения 1С 8.2

Основная сложность реализации механизма перетаскивания заключается в том, что у строки ДереваЗначений платформа не позволяет просто изменить родителя, т.е. переподчинить строку. Единственный способ это сделать – создать новую строку вместе со всеми подчиненными строками, т.е. полностью скопировать всю ветку дерева вместе со всей иерархией и подчинить ее требуемой строке-родителю, после чего удалить исходную ветку. Данная задача распадается на две подзадачи:
1). Перед перетаскиванием необходимо проверить корректность данной операции, узел дерева нельзя переносить в узлы, подчиненные ему самому, т.е. родительский узел нельзя переносить в дочерние, т.к. это приведет к “бесконечной рекурсии” и “падению” платформы. Это реализуется с помощью обработчика события ЭлементДеревоПроверкаПеретаскивания(…)
2). Если перетаскивание возможно, то при помощи обработчика ЭлементДеревоПеретаскивание(…) запускается рекурсивная функция, которая создает новую ветку дерева, подчиненную требуемому родителю, а исходную удаляет.

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

Источник

1. Интерфейс Drag-n-Drop

Во многих современных системах применяется технология перетаскивания элементов интерфейса Drag-n-Drop. Она позволяет увеличить скорость и удобство работы пользователя.

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

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

Тот элемент, из которого будут перетаскиваться данные пользователем, является источником перетаскивания. А тот элемент, в который будут помещены данные – приемником перетаскивания.

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

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

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

1

Рисунок 1 – Свойства «РазрешитьНачалоПеретаскивания» и «РазрешитьПеретаскивание»

2. События, возникающие у элементов форм управляемых форм 1С при перетаскивании данных:

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

Параметры, передаваемые в обработчик:

· Выполнение – тип «Булево», устанавливая значение этого параметра в Ложь или Истина можно определять будет ли выполняться стандартная обработка. Т.е если значение этого параметра в теле обработчика изменить на«Ложь», то событие перетаскивание не начнется.

В обработчике этого события можно запретить перетаскивание в 1С текущий элемент управления, или разрешить только копирование, при этом внешний вид курсора будет меняться(зависит от того, какое значение принимает свойство Действие).

После, когда пользователь опускает клавишу мыши на выбранном им элементе управления возникает событие «Перетаскивание».

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

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

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

Рассмотрим пример реализации перетаскивания данных, источники данных и приемники данных.

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

На форму обработки добавим две таблицы СписокТоваров и СписокПокупок с колонками

1С Номенклатура и Количество:

2

Рисунок 2 – Таблица-источник и Таблица-приемник на форме обработки

Для таблицы СписокТоваров установим, которая будет являться источником данных установим в истину свойство РазрешитьНачалоПеретаскивания

3

Рисунок 3 – Свойство «Разрешить начало перетаскивания» элемента-источника данных

Для таблицы СписокПокупок установим, которая будет являться приемником данных установим в истину свойство РазрешитьПеретаскивание

4

Рисунок 4 – Свойство «Разрешить перетаскивание» элемента-приемника данных

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

5

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

В обработчике события «ОкончаниеПеретаскивания» у таблицы «СписокПокупок», являющейся приемником, так же в цикле для всех перетаскиваемых строк уменьшаем количество на единицу:

6

Теперь попробуем проверить обработку в пользовательском режиме 1С.

В таблице-источнике добавлены три строки с товарами и количеством 10:

7

Рисунок 5 – Таблицы до перетаскивания

Выделим две строки и попробуем перетащить их в таблицу-приемник:

8

Рисунок 6 – Таблицы после перетаскивания

После перетаскивания в таблице приемнике появилось две строки с товарами и количеством, равным 1. А в таблице источнике количество для этих товаров уменьшилось на единицу. Этот результат и требовалось получить по условиям задачи.

Специалист компании ООО «Кодерлайн»
Анна Белокопытова

Источник

Механизм перетаскивания — Drag&Drop — в системе 1С:Предприятие 8.х

Доброго времени суток, уважаемые читатели блога SoftMaker.kz! В прошлый раз мы рассказали вам о семи секретах популярности фирмы 1С. А в этой статье будет рассматриваться механизм перетаскивания (Drag&Drop) на примере табличного поля документа (куда осуществляется перетаскивание) и табличного поля обработки (откуда осуществляется перетаскивание). Для начала создадим документ и обработку с табличными полями. Давайте приступим!

Предоставление данных для перетаскивания из обработки

Создадим обработку «Обработка1» форму для неё во вкладке Формы. Откроем форму и добавим новый элемент управления формы «ТабличноеПоле1». Для поддержки механизма перетаскивания существует два свойства элемента управления «ТабличноеПоле1»:

Эти свойства устанавливаются в палитре свойств:

Drag1 ru

Элементу управления «ТабличноеПоле1» нужно разрешить предоставлять данные для перетаскивания, поэтому мы установим галочку для свойства «РазрешитьНачалоПеретаскивания» («EnableStartDrag»):

Drag2 ru

Cвойство элемента управления «ТабличноеПоле1» «РазрешитьНачалоПеретаскивания» («EnableStartDrag») мы оставим без изменения, так как в табличное поле обработки мы добавлять ничего не будем. Теперь обратим внимание на последовательность событий при перетаскивании. Когда в режиме «1С:Предприятие», мы выделяем кнопкой мыши нужную нам строку в элементе управления «ТабличноеПоле1» и начинаем перетаскивание, вызывается обработчик события «НачалоПеретаскивания» («DragStart»), для нашего элемента управления «ТабличноеПоле1» обработчик события «ТабличноеПоле1НачалоПеретаскивания».

Параметры для обработчика события «ТабличноеПоле1НачалоПеретаскивания»:

Элемент — имеет значение ТабличноеПоле и тип — ТабличноеПоле.

ПараметрыПеретаскивания — имеет следующие три свойства:

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

Cоздадим документ «Документ1» и табличную часть для него во вкладке «Данные» и форму во вкладке «Формы». Когда мы перетаскиваем строку из элемента управления «ТабличноеПоле1» в табличную часть документа, тогда вызывается обработчик события «ПроверкаПеретаскивания», для нашего элемента управления «ТабличноеПоле1» обработчик события «ТабличноеПоле1ПроверкаПеретаскивания».

Параметры для обработчика события «ТабличноеПоле1ПроверкаПеретаскивания»:

Элемент — имеет значение ТабличноеПоле и тип — ТабличноеПоле.ПараметрыПеретаскивания — имеет следующие три свойства:

СтандартнаяОбработка — параметр, указывающий нужно ли производить вставку передаваемого значения в поле табличного документа.

Строка — текущая строка табличного поля

Колонка — текущая колонка табличного поля

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

Как видим набор параметров у обработчика события «Перетаскивание» такой же как и у обработчика события «ПроверкаПеретаскивания». И последние в элементе управления «ТабличноеПоле1» обработки «Обработка1» вызывается обработчик события «ОкончаниеПеретаскивания». В этом обработчике события вы можете сами указать какие действия вам необходимо произвести. Это уже по вашему усмотрению.

Источник

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

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

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

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

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

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

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

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

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

Источник

Пример программного перемещения элементов на управляемой форме

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

Шаг 0 Подготовительный

На форме размещаем Группы и декорации.

В свойствах каждой декорации устанавливаем [V] РазрешитьНачалоПеретаскивания и [V] РазрешитьПеретаскивание

Прописываем события ДекорацияНачалоПеретаскивания, ДекорацияПроверкаПеретаскивания, ДекорацияОкончаниеПеретаскивания одинаковые для всех декораций формы

Сохраняемся, запускаем обработку.

Шаг 1

В тот момент, когда мы кликаем на элементе декорации на форме, запоминается имя декорации

Шаг 2

Начинаем перемещать элемент по форме, если в этот момент курсор мыши попадает на другую декорацию, то запоминаем имя декорации, на которую попал курсор

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

Шаг 3

В тот момент, когда отпускаем мышь запускается процедура на сервере, которая и перемещает элемент из одной группы в другую

Элемент, который перетаскивали, смещает декорацию, на которой окончили перетаскивание.

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

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • drag along right в российском праве
  • dr web у вас нет прав для включения и выключения компонента