Используя в пользовательском режиме перетаскивание в 1С, можно облегчить и ускорить работу пользователей. В этой статье рассмотрим реализацию механизма перетаскивания в управляемых формах 1С. В основном, этот механизм применяется для перетаскивания значений с одной таблицы на форме в другую. Классический пример – это форма подбора, когда номенклатуру с формы подбора нужно перетащить мышкой в табличную часть какого-то документа. Это не будет нудная статья с теорией, а в этой статье будут показаны некоторые практические способы перетаскивания как внутри формы, так и между формами.
Перетаскивание внутри одной формы
Но, всё по порядку. Сначала узнаем, как сделать, чтобы можно было внутри одной формы перетащить данные с одной таблицы в другую. Для этого в учебной конфигурации создадим форму у обработки, в которой будет создано два реквизита с типами Таблица значений, и эти реквизиты будут размещены на форме в виде таблиц.
У обеих таблиц на форме необходимо установить флаги РазрешитьНачалоПеретаскивания и РазрешитьПеретаскивание.
На форме будет две таблицы – таблица источник, откуда мы будет перетаскивать данные, и таблица приёмник, куда мы будем перетаскивать данные. Таблица источник будет вверху, таблица приёмник будет внизу. У таблиц формы есть события, которые реагируют на перетаскивание. У таблицы источника это события НачалоПеретаскивания и ОкончаниеПеретаскивания.
У таблицы приемника – ПроверкаПеретаскивания и Перетаскивание.
События таблицы источника в контексте нашего примера нам не интересны. Кратко расскажем, что событие НачалоПеретаскивания возникает, когда курсор мыши выходит за пределы таблицы. А событие ОкончаниеПеретаскивания возникает, когда перемещение уже произошло.
У таблицы приёмника создадим два события ПроверкаПеретаскивания и Перетаскивание.
Событие ПроверкаПеретаскивания возникает всегда, когда курсор попадает на приемник данных. В нашем случае, оно возникнет, когда курсор попадёт на таблицу формы.
У разных элементов формы могут быть разные параметры этого события, но два параметра будут всегда — ПараметрыПеретаскивания, СтандартнаяОбработка.
Посмотрим, что из себя представляет параметр ПараметрыПеретаскивания, для этого поставим точку останова в конце процедуры, попробуем перетащить что-то из верхней таблицы в нижнюю и посмотрим в отладке на значение этого параметра.
У параметров перетаскивания интересует только одно свойство Значение, у этого свойства тип Массив, и если мы посмотрим, на содержимое этого массива, то увидим нашу строку, которую мы пытаемся перетащить.
Почему у нас там массив?
Потому что, у таблицы источника у свойства Режим выделения стоит значение Множественный.
Это значит, что мы можем выделить и перетащить несколько строк. Если мы установим значение Одиночный.
То мы сможем выделить и перетащить только одну строку, а также содержимое свойства Значение параметра ПараметрыПеретаскивания станет другим.
Второй параметр обработчика ПроверкаПеретаскивания, который нам интересен это СтандартнаяОбработка. Этот параметр необходим для указания возможности, как это не странно звучит, стандартной обработки перетаскивания. Она зависит от типа элемента управления, и мы не будем глубоко вдаваться в подробности этой зависимости. Отметим только, что если в результате перетаскивания в источнике не появилось что-то, то значит, что стандартная обработка не отрабатывается как нам надо. А это значит, что этому параметру нужно присвоить значение Ложь.
&НаКлиенте Процедура ТаблицаПриемникПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) СтандартнаяОбработка = Ложь; КонецПроцедуры
Это всё, что мы сделаем в обработчике ПроверкаПеретаскивания.
Перейдем ко второму обработчику Перетаскивание, в этом обработчике то же два постоянных параметра – ПараметрыПеретаскивания и СтандартнаяОбработка.
Структура параметра ПараметрыПеретаскивания такая же, как и в предыдущем обработчике, и мы можем при помощи этого параметра добавить новые строки в таблице приёмнике.
На всякий случай проверим, какой тип у свойства Значение параметра ПараметрыПеретаскивания, и если типа какой нужен, то добавим новую строку.
&НаКлиенте Процедура ТаблицаПриемникПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("ДанныеФормыЭлементКоллекции") Тогда НоваяСтрока = ТаблицаПриемник.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока,ПараметрыПеретаскивания.Значение); КонецЕсли; КонецПроцедуры
Теперь, мы сможем спокойно перетащить строку с таблицы приёмника в таблицу источника.
Рекомендую, самостоятельно сделать перетаскивание в том случаи, когда у таблицы источника у параметра РежимВыделения установлено значение Множественный!
Перетаскивание с формы на форму
Для того, чтобы разобрать, как работает перетаскивание с формы на форму, рассмотрим «классический» пример: в документе Реализации нужно осуществлять подбор товара, перетаскивая этот товар из формы подбора в табличную часть документа. В учебной конфигурации есть справочник Номенклатура с формой подбора и документ Реализация с табличной частью. На форме документа сделана команда формы Подбор, при выполнении которой должна открываться форма подбора справочника Номенклатура, от куда можно мышкой перетаскивать товары в табличную часть.
У формы подбора справочника Номенклатура у свойства РежимОткрытияОкна установим значение Блокировать окно владельца.
При выполнении команды Подбор, у нас должна открываться форма подбора справочника Номенклатура, для этого сделаем клиентский обработчик команды Подбор, в котором откроем форму справочника.
&НаКлиенте Процедура Подбор(Команда) ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПодбора",,ВладелецФормы); КонецПроцедуры
Обратите внимание на третий параметр! Мы обязательно должны указать владельца формы.
Остальные действия будут похожи: у формы подбора у табличной части установим флаги у свойств РазрешитьНачалоПеретаскивания и РазрешитьПеретаскивание.
Тоже самое сделаем у таблицы на форме документа.
И на форме документа создадим обработчики событий ПроверкаПеретаскивания и Перетаскивание в клиентском контексте.
В обработчике событий ПроверкаПеретаскивания, как и в прошлом примере присвоим параметру СтандартнаяОбработка значение Ложь.
&НаКлиенте Процедура ТоварыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) СтандартнаяОбработка = Ложь; КонецПроцедуры
А с обработчиком Перетаскивание будет немного иначе. Поставим точку останова в конце процедуры, чтобы посмотреть, что в параметре ПараметрыПеретаскивания.
В свойстве Значение параметра ПараметрыПеретаскивания у нас массив, но в массиве уже ссылка на перетаскиваемую номенклатуру.
Если мы у таблицы формы подбора в свойство РежимВыделения установим значение Одиночный.
То в свойстве Значение параметра ПараметрыПеретаскивания уже будет ссылка на номенклатуру.
&НаКлиенте Процедура ТоварыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("СправочникСсылка.Номенклатура") Тогда НоваяСтрока = Объект.Товары.Добавить(); НоваяСтрока.Номенклатура = ПараметрыПеретаскивания.Значение; КонецЕсли; КонецПроцедуры
Всё! Теперь мы сможем данные с формы подбора перетащить в таблицу документа.
Попробуйте перетаскивать несколько номенклатур, когда возможен множественный выбор в таблице формы подбора. Пишите в чат (QR-код ниже), что у вас получилось или не получилось.
Теперь вы можете реализовывать разные перетаскивания как внутри формы, так и с формы на форму.
Продуктивного обучения!
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 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С (и не только) можно в моём тг-чате