Перетаскивание в 1С

Используя в пользовательском режиме перетаскивание в 1С, можно облегчить и ускорить работу пользователей. В этой статье рассмотрим реализацию механизма перетаскивания в управляемых формах 1С. В основном, этот механизм применяется для перетаскивания значений с одной таблицы на форме в другую. Классический пример – это форма подбора, когда номенклатуру с формы подбора нужно перетащить мышкой в табличную часть какого-то документа.  Это не будет нудная статья с теорией, а в этой статье будут показаны некоторые практические способы перетаскивания как внутри формы, так и между формами.

Перетаскивание внутри одной формы

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

Таблица значений на форме 1С

У обеих таблиц на форме необходимо установить флаги РазрешитьНачалоПеретаскивания и РазрешитьПеретаскивание.

Свойства таблицы на форме 1С

На форме будет две таблицы – таблица источник, откуда мы будет перетаскивать данные, и таблица приёмник, куда мы будем перетаскивать данные. Таблица источник будет вверху, таблица приёмник будет внизу. У таблиц формы есть события, которые реагируют на перетаскивание. У таблицы источника это события НачалоПеретаскивания и ОкончаниеПеретаскивания.

События таблицы на форме 1С

У таблицы приемника – ПроверкаПеретаскивания и Перетаскивание.

События таблицы на форме 1С

События таблицы источника в контексте нашего примера нам не интересны. Кратко расскажем, что событие НачалоПеретаскивания возникает, когда курсор мыши выходит за пределы таблицы. А событие ОкончаниеПеретаскивания возникает, когда перемещение уже произошло.

У таблицы приёмника создадим два события ПроверкаПеретаскивания и Перетаскивание.

События таблицы на форме 1С

Событие ПроверкаПеретаскивания возникает всегда, когда курсор попадает на приемник данных. В нашем случае, оно возникнет, когда курсор попадёт на таблицу формы.

У разных элементов формы могут быть разные параметры этого события, но два параметра будут всегда — ПараметрыПеретаскивания, СтандартнаяОбработка.

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

ПараметрыПеретаскивания

У параметров перетаскивания интересует только одно свойство Значение, у этого свойства тип Массив, и если мы посмотрим, на содержимое этого массива, то увидим нашу строку, которую мы пытаемся перетащить.

Массив в ПараметрыПеретаскивания

Почему у нас там массив?

Потому что, у таблицы источника у свойства Режим выделения стоит значение Множественный.

Свойства в таблице на форме 1С

Это значит, что мы можем выделить и перетащить несколько строк.  Если мы установим значение Одиночный.

Свойства в таблице на форме 1С

То мы сможем выделить и перетащить только одну строку, а также содержимое свойства Значение параметра ПараметрыПеретаскивания станет другим.

Значение в ПараметрыПеретаскивания

Второй параметр обработчика ПроверкаПеретаскивания, который нам интересен это СтандартнаяОбработка.  Этот параметр необходим для указания возможности, как это не странно звучит, стандартной обработки перетаскивания. Она зависит от типа элемента управления, и мы не будем глубоко вдаваться в подробности этой зависимости. Отметим только, что если в результате перетаскивания в источнике не появилось что-то, то значит, что стандартная обработка не отрабатывается как нам надо. А это значит, что этому параметру нужно присвоить значение Ложь.

&НаКлиенте
Процедура ТаблицаПриемникПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	СтандартнаяОбработка = Ложь;	
КонецПроцедуры

Это всё, что мы сделаем в обработчике ПроверкаПеретаскивания.

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

Структура параметра ПараметрыПеретаскивания такая же, как и в предыдущем обработчике, и мы можем при помощи этого параметра добавить новые строки в таблице приёмнике.

На всякий случай проверим, какой тип у свойства Значение параметра ПараметрыПеретаскивания, и если типа какой нужен, то добавим новую строку.

&НаКлиенте
Процедура ТаблицаПриемникПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)	
	Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("ДанныеФормыЭлементКоллекции") Тогда 
		НоваяСтрока = ТаблицаПриемник.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока,ПараметрыПеретаскивания.Значение);
	КонецЕсли;	
КонецПроцедуры

Теперь, мы сможем спокойно перетащить строку с таблицы приёмника в таблицу источника.

Перетаскивание 1С

Рекомендую, самостоятельно сделать перетаскивание в том случаи, когда у таблицы источника у параметра РежимВыделения  установлено значение Множественный!

Перетаскивание с формы на форму

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

Документ и справочник 1С

У формы подбора справочника Номенклатура у свойства РежимОткрытияОкна установим значение Блокировать окно владельца.

Форма справочника 1С

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

&НаКлиенте
Процедура Подбор(Команда)
	ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПодбора",,ВладелецФормы);
КонецПроцедуры

Обратите внимание на третий параметр! Мы обязательно должны указать владельца формы.

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

Свойства формы 1С

Тоже самое сделаем у таблицы на форме документа.

Свойства формы 1С

И на форме документа создадим обработчики событий  ПроверкаПеретаскивания  и Перетаскивание в клиентском контексте.

События формы 1С

В обработчике событий ПроверкаПеретаскивания, как и в прошлом примере присвоим параметру СтандартнаяОбработка значение Ложь.

&НаКлиенте
Процедура ТоварыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры 

А с обработчиком Перетаскивание будет немного иначе. Поставим точку останова в конце процедуры, чтобы посмотреть, что в параметре ПараметрыПеретаскивания.

В свойстве Значение параметра ПараметрыПеретаскивания у нас массив, но в массиве уже ссылка на перетаскиваемую номенклатуру.

Перетаскивание в 1С

Если мы у таблицы формы подбора в свойство РежимВыделения установим значение Одиночный.

Режим выделения таблицы формы 1С

То в свойстве Значение параметра ПараметрыПеретаскивания уже будет ссылка на номенклатуру.

 Перетаскивание в 1С

&НаКлиенте
Процедура ТоварыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("СправочникСсылка.Номенклатура") Тогда 
		НоваяСтрока = Объект.Товары.Добавить();
		НоваяСтрока.Номенклатура = ПараметрыПеретаскивания.Значение; 
	КонецЕсли;	
КонецПроцедуры

Всё! Теперь мы сможем данные с формы подбора перетащить в таблицу документа.

Перетаскивание в 1С

Попробуйте перетаскивать несколько номенклатур, когда возможен множественный выбор в таблице формы подбора. Пишите в чат (QR-код ниже), что у вас получилось или не получилось.

Теперь вы можете реализовывать разные перетаскивания как внутри формы, так и с формы на форму.

Продуктивного обучения!

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов





Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника





О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»




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

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Также, у меня имеются два комплекта книг, в которых присутствуют обе эти книги:

Комплект книг по разработке в 1С КОМБО-1

Комплект книг по разработке в 1С КОМБО-2
Только для читателей моего блога, промо-код на скидку в 300 рублей на оба комплекта: blog

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518

Подписывайтесь на телеграмм-канал: https://t.me/Programming1CNizamutdinov

Обсудить вопросы программирования в 1С (и не только) можно в моём тг-чате

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *