Содержание:
Файлы материала

Возможности платформы по работе с буфером обмена
Начиная с версии платформы 8.3.24 в 1С появилась возможность работать с буфером обмена через свойство глобального контекста СредстваБуфераОбмена, с помощью методов которого можно как получать так и помещать данные в буфер 3-х стандартных типов: Текст, HTML, Картинка (описанных в системном перечислении СтандартныйФорматДанныхБуфераОбмена) и определенное количество MIME-типов (описываемых «Строкой»).
У этого свойства глобального контекста, есть 5-ть основных методов по работе с буфером, на которых не буду подробно останавливаться, они описаны в справке.

Так же, в платформе появился обработчик ПриВставкеИзБуфераОбмена у Формы (модуль формы) и у Приложения (модуль приложения). У обработчика есть одна особенность, перехват срабатывает только когда в буфере храниться «Картинка» или «Ссылки на файлы».
Более подробно из официальных источников можно почитать тут.
Описание
В данном примере используется обработчик формы ПриВставкеИзБуфераОбмена, не смотря на свои особенности по перехвату, в момент копирования строк из Excel (и его аналогов) в буфер попадают данные сразу всех основных типов: Текст, HTML и Картинка. А раз там есть «Картинка» то обработчик сработает.

Итак, после того как данные оказались в буфере, необходимо перехватить вставку (Ctrl + V) на стороне 1С. Добавляем обработчик и описываем код по заполнению ТЧ «Список наименований» из буфера обмена. Т.к. основные методы асинхронные дописываем у процедуры обработчика приставку Асинх.

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#Область ОбработчикиСобытийФормы &НаКлиенте Асинх Процедура ПриВставкеИзБуфераОбмена(Значение, СтандартнаяОбработка) // Получение данных из буфера обмена СписокНаименованийИзБуфера = Новый Массив; Если Ждать СредстваБуфераОбмена.ИспользованиеДоступно() Тогда Если Ждать СредстваБуфераОбмена.СодержитДанныеАсинх(СтандартныйФорматДанныхБуфераОбмена.Текст) Тогда ДанныеБуфераОбмена = Ждать СредстваБуфераОбмена.ПолучитьДанныеАсинх(СтандартныйФорматДанныхБуфераОбмена.Текст); СписокНаименованийИзБуфера = СтрРазделить(ДанныеБуфераОбмена, Символы.ВК+Символы.ПС, Ложь); ОбщегоНазначенияКлиентСервер.СвернутьМассив(СписокНаименованийИзБуфера); КонецЕсли; КонецЕсли; // Заполнение табличной части Для каждого ТекущееНаименование Из СписокНаименованийИзБуфера Цикл НоваяСтрока = Объект.СписокНаименований.Добавить(); НоваяСтрока.Наименование = ТекущееНаименование; КонецЦикла; КонецПроцедуры #КонецОбласти |
