Как переместить элементы из одной группы справочника в другую в 1с

Обновлено: 18.05.2024

Особенности реализации перетаскивания в формах

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

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

  • табличное поле;
  • поле табличного документа;
  • поле календаря;
  • поле картинки.

При операциях перетаскивания используются следующие понятия:

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

Существует возможность разрешать или запрещать элементам управления предоставлять или принимать данные, т.е. быть источником или приемником данных. Для этого у элементов управления существуют следующие свойства: “Разрешить начало перетаскивания” – разрешает элементу управления предоставлять данные и “Разрешить перетаскивание” – разрешает элементу управления принимать данные. Эти свойства можно устанавливать из палитры свойств или из встроенного языка .

Последовательность событий при перетаскивании

При нажатии кнопки мыши на выделенной области элемента управления (это может быть строка, группа строк табличного поля, область поля табличного документа, дата календаря или картинка) у элемента управления – источника данных вызывается обработчик события НачалоПеретаскивания . В качестве параметров данного события передаются объект типа “ ПараметрыПеретаскивания ” и “ СтандартнаяОбработка ”. Параметр ПараметрыПеретаскивания имеет следующие свойства:

  • Значение - содержит перетаскиваемое значение, например, для табличного поля это может быть ссылка на объект, для табличного документа – область табличного документа, для календаря – дата. Можно присвоить этому свойству свое значение (например, какую-нибудь структуру), тогда это значение будет являться перетаскиваемым объектом.
  • Действие – указывает действие перетаскивания и является значением типа ДействиеПеретаскивания ( Копирование , Перемещение , Выбор или Отмена ).
  • ДопустимыеДействия – указывает допустимые действия перетаскивания и является значением типа ДопустимыеДействияПеретаскивания ( Копирование , Перемещение , КопированиеИПеремещение , H еОбрабатывать ). При помощи этого свойства можно указать какие операции возможны с данными источника данных (например, только копирование).

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

Далее, у элемента управления – приемника данных вызывается обработчик события ПроверкаПеретаскивания . Данный обработчик вызывается всякий раз, когда курсор попадает на новый объект в элементе управления – приемнике данных (например, в новую ячейку табличного поля или поля табличного документа, при попадании в новую дату в поле календаря). Набор параметров данного события зависит от элемента управления – приемника данных, но первые два параметра у всех одинаковы. Это объект типа ПараметрыПеретаскивания и СтандартнаяОбработка . Остальные параметры описывают объект под курсором. Для табличного поля это Строка и Колонка , для поля табличного документа – Область , для календаря – Дата , а для поля картинки дополнительных параметров нет. При обработке данного события можно управлять видом курсора, т.е. например указывать что перетаскивание в данный элемент управления запрещено или возможно только копирование. Для этого необходимо установить необходимое действие в свойстве Действие параметра ПараметрыПеретаскивания. Необходимо учитывать , что устанавливаемое действие перетаскивания должно быть разрешенным , т . е . не вступать в противоречие с значением свойства ДопустимыеДействия . Например, действие Копирование не вступает в противоречие со значением допустимых действий КопированиеИПеремещение , а значение Перемещение вступает в противоречие со значением допустимых действий Копирование . Параметр СтандартнаяОбработка используется для указания возможности стандартной обработки элементом управления данного события. Стандартная обработка перетаскивания зависит от типа элемента управления :

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

Для поля табличного документа – проверка возможности вставить передаваемое значение.

Для поля картинки и календаря стандартной обработки нет.

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

Затем в элементе управления – источнике данных вызывается обработчик события ОкончаниеПеретаскивания . При обработке этого события элемент управления – приемник данных может, например, удалить перемещенные данные или очистить какие – либо переменные.

В демонстрационную конфигурацию ИТС помещен пример , показывающий основные приемы при реализации перетаскивания в формах . Описание примера см. в разделе Пример реализации перетаскивания в формах.

А что же на "мисте" этот вариант не выложил?

"А зачем:<br>> Спис.ДобавитьЗначение(Спр.Код);<br>> Код = Спис.ПолучитьЗначение(С,Ст);<br>> Спр.НайтиПоКоду(Код);<br>Если можно:<br>Спис.ДобавитьЗначение(Спр.ТекущийЭлемент());<br>и далее: <br>Для С = 1 По Спис.РазмерСписка() Цикл<br>Элемент=Спис.ПолучитьЭлемент(С);<br>Элемент.Родитель=ВотЭтаГруппа;<br>Спр.Записать();<br>КонецЦикла;<br><br>Но проще вообще:<br>Спр.ВыбратьЭлементы(1); <br>Пока Спр.ПолучитьЭлемент(0) = 1 Цикл<br>Если Спр.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли;<br>Спр.Родитель=ВотЭтаГруппа;<br>Спр.Записать();<br>КонецЦикла;<br><br>Если я не прав спецы меня поправят. :)"

"> Но проще вообще:<br>> Спр.ВыбратьЭлементы(1); <br>> Пока Спр.ПолучитьЭлемент(0) = 1 Цикл<br>> Если Спр.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли;<br>> Спр.Родитель=ВотЭтаГруппа;<br>> Спр.Записать();<br>> КонецЦикла;<br>> <br>> Если я не прав спецы меня поправят. <br><br>выборка собьётся!"

"> (перемещаю только элементы справочника, не входящие ни в одну из групп):<br> <br><br>Процедура Сформировать()<br><br>Спр = СоздатьОбъект("Справочник.Контрагенты"); <br><br>Спр.НайтиПоНаименованию("Наша группа");<br><br>ВотЭтаГруппа = Спр.ТекущийЭлемент(); <br><br>Спис = СоздатьОбъект("СписокЗначений");<br><br><br>Спр.ВыбратьЭлементы(0); <br><br>Пока Спр.ПолучитьЭлемент(0) = 1 Цикл<br><br>Если (Спр.ЭтоГруппа() = 1) или (спр.Уровень()>0) Тогда Продолжить; КонецЕсли;<br><br>Спис.ДобавитьЗначение(Спр.ТекущийЭлемент());<br> <br>КонецЦикла;<br><br>Спр = СоздатьОбъект("Справочник.Контрагенты"); <br><br>Для С = 1 По Спис.РазмерСписка() Цикл<br><br>Код = Спис.ПолучитьЗначение(С);<br><br>Если Спр.НайтиЭлемент(Код)=1 тогда<br><br>Спр.Родитель=ВотЭтаГруппа; <br><br>Спр.Записать(); <br>КонецЕсли;<br>КонецЦикла;<br><br>КонецПроцедуры<br><br>соточку на тел )))))))"

Читайте также: