gifts2017

Drag & Drop строк документа

Опубликовал 1c8@8c1.ru (8c1.ru) в раздел Обработки - Обработка документов

Простой способ включить возможность переноса мышкой строк из одного документа в другой

Для включения простого переноса строк из документа в документ нужно внести изменения в модуль формы документов для которых планируется включить такую возможность.

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

	 Процедура ОбщееПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
   
    СтандартнаяОбработка = Ложь;
    ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование;
    Если Тип(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда
        //
        Для каждого ПеретаскиваемаяСтрока из ПараметрыПеретаскивания.Значение Цикл
            ДобавляемаяСтрока = ЭтотОбъект[Элемент.Имя].Добавить();
            ЗаполнитьЗначенияСвойств(ДобавляемаяСтрока, ПеретаскиваемаяСтрока);
        КонецЦикла;
    Иначе
        ДобавляемаяСтрока = ЭтотОбъект[Элемент.Имя].Добавить();
        ЗаполнитьЗначенияСвойств(ДобавляемаяСтрока, ПараметрыПеретаскивания.Значение);
    КонецЕсли;
   
КонецПроцедуры

Процедура ОбщаяПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
   
    СтандартнаяОбработка = Ложь;
    ПараметрыПеретаскивания.Действие        = ДействиеПеретаскивания.Копирование;
    ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.Копирование;
   
КонецПроцедуры

В процедуру ПриОткрытии модуля формы документа добавить вызов процедуры

 
ПодключитьВозможностьПеретаскивания(ЭтаФорма);

из общего модуля

 
Процедура ПодключитьВозможностьПеретаскивания(НужнаяФорма) Экспорт   
   
    // переопределим процедуры и установим разрешения
    Для каждого ЭлементФормы из НужнаяФорма.ЭлементыФормы Цикл
        Если ТипЗнч(ЭлементФормы) = Тип("ТабличноеПоле") Тогда
            ЭлементФормы.РазрешитьНачалоПеретаскивания     = Истина;   
            ЭлементФормы.РазрешитьПеретаскивание         = Истина;
            ЭлементФормы.РежимВыделения                    = РежимВыделенияТабличногоПоля.Множественный;
            ЭлементФормы.УстановитьДействие("Перетаскивание", Новый Действие("ОбщееПеретаскивание"));
            ЭлементФормы.УстановитьДействие("ПроверкаПеретаскивания", Новый Действие("ОбщаяПроверкаПеретаскивания"));
        КонецЕсли;
    КонецЦикла;
   
КонецПроцедуры

Все.

Минусы метода:

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

Плюсы:

  • простота реализации
  • универсальность
  • удобства от использования

См. также

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

Комментарии

1. Сергей Сытько (8SiriuS8) 09.12.09 12:17
Через подписку можно тоже организовать... тогда доки править не нужно
2. Bizon2005 (8c1.ru) 09.12.09 12:28
:!: о, это мысль
спасибо, попробую сделать так
3. Bizon2005 (8c1.ru) 09.12.09 12:33
Подписка на события не подойдет :(
1) Обработчик события перетаскивания должен быть размещен в модуле формы
2) подписка на события организована всего лишь нескольких событий над документом объектом.
4. Артур Аюханов (artbear) 09.12.09 17:20
(1) Неверно.
1С никак не хочет дать нам нормальную подписку на события форм :(
5. Татьяна Цымбал (citana) 16.03.12 03:06
если перетаскивать в одном документе- копирует строки)))
6. fzt fzt (fzt) 31.01.14 15:56
(5) ну как-бы да) это указано вот в этих строчках
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование;
ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.Копирование;

Если хочется перемещения внутри документа, при проверке перетаскивания поменяй на нужное действие.
7. Евгений Изотов (Letos) 19.06.15 12:58
Пытаюсь организовать перетаскивание из одного дерева в другое расположенных на одной форме в УФ. Пока не выходит. Как быть?
8. Евгений Изотов (Letos) 30.06.15 10:41
У меня в УФ заработал вот так:
там откуда перетаскиваю

Процедура ИсточникПриАктивизацииСтроки(Элемент) //СОБЫТИЕ дерева Источника
//Источник - имя ДереваЗначений
	НаименованиеЭлемента = Элемент.ТекущиеДанные.Наименование; // НАИМЕНОВАНИЕ - колонка в перетаскиваемой строке
	ЗаполмнитьСвойства(НаименованиеЭлемента);
КонецПроцедуры
...Показать Скрыть

В дереве приемнике

&НаКлиенте
Процедура ОбъектПриемникПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)//Событие Дерева приёмника
//ПРИЕМНИК - наименование ДереваЗначений
	Элементы.Приемник.ДобавитьСтроку();	
	Элементы.Приемник.ТекущиеДанные.Наименование = ПараметрыПеретаскивания.Значение[0].Наименование; //НАИМЕНОВАНИЕ- колонка в дереве "приемнике"
КонецПроцедуры
...Показать Скрыть
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа