Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

29.03.24

Разработка - Универсальные функции

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Вставить картинку из буфера обмена (платформа 1С 8.3.24):
.epf 19,94Kb ver:1.0.1
6 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Для демонстрации механизма создал обработку. На форму добавил кнопку и событие "ПриВставкеИзБуфераОбмена"

 

 

 

При нажатии на кнопку выполняется асинхронная процедура "КартинкаИзБуфера", в которой с помощью свойства глобального контекста "СредстваБуфераОбмена" получим картинку, содержащуюся в буфере.

 

 

&НаКлиенте
Асинх Процедура КартинкаИзБуфера(Команда)    
	
	Картинка = Ждать ПриВставкеИзБуфераОбменаКартинки(); 
	ВставитьКартинкуИзБуфера(Картинка);  
	
КонецПроцедуры

&НаКлиенте
Асинх Функция ПриВставкеИзБуфераОбменаКартинки()
	
    Если СредстваБуфераОбмена.ИспользованиеДоступно() Тогда
        ФорматДанных = СтандартныйФорматДанныхБуфераОбмена.Картинка;
        Если Ждать СредстваБуфераОбмена.ПоддерживаетсяФорматДанных(ФорматДанных) Тогда
			Возврат Ждать СредстваБуфераОбмена.ПолучитьДанныеАсинх(ФорматДанных);
        КонецЕсли;
    КонецЕсли;
	
    Возврат Неопределено;
		
КонецФункции

&НаКлиенте
Процедура ВставитьКартинкуИзБуфера(Картинка)
	
	Если ТипЗнч(Картинка) = Тип("Картинка") Тогда
		ПутьККартинке = КаталогВременныхФайлов()+"screen.jpg";
		Картинка.Записать(ПутьККартинке); 
		
		ДвоичныеДанные = Новый ДвоичныеДанные(ПутьККартинке);    	
		Скриншот = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); 
	КонецЕсли;	
	
КонецПроцедуры

 

Обрабатываю событие ctrl + v

 

 

&НаКлиенте
Процедура ПриВставкеИзБуфераОбмена(Значение, СтандартнаяОбработка) 
	
	ВставитьКартинкуИзБуфера(Значение);   
	
КонецПроцедуры

&НаКлиенте
Процедура ВставитьКартинкуИзБуфера(Картинка)
	
	Если ТипЗнч(Картинка) = Тип("Картинка") Тогда
		ПутьККартинке = КаталогВременныхФайлов()+"screen.jpg";
		Картинка.Записать(ПутьККартинке); 
		
		ДвоичныеДанные = Новый ДвоичныеДанные(ПутьККартинке);    	
		Скриншот = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); 
	КонецЕсли;	
	
КонецПроцедуры

 

Тестировал: 

  • Платформа 1С:Предприятие 8.3 (8.3.24.1342)

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3445    Abysswalker    8    

45

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    6388    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    48815    dimanich70    83    

170

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    61049    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9108    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    23691    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cheshirshik 77 19.03.24 07:16 Сейчас в теме
У 1с есть форматированный документ, который позволяет вставлять картинку из буфера обмена вообще без кода. Но за статью спасибо. Добавлю в закладки. Может пригодится.
2. baracuda 2 19.03.24 10:05 Сейчас в теме
(1) ну так статья не про форматированный документ, а про поле формы.
adhocprog; +1 Ответить
7. Mopo3 336 26.03.24 15:23 Сейчас в теме
(1) не совсем так. Есть особенности. Например, если из WA скопировать картинку в буфер и попробовать штатно вставить её в ФД через Ctrl+V - то ничего не сработает. Кроме как через использование события ПриВставкеИзБуфераОбмена() этот сценарий не отработать.
8. cheshirshik 77 26.03.24 16:35 Сейчас в теме
(7)

У меня все работает в форматированном документе и через Контрол+В и через Шифт+Инсерт без всяких подписок на событие. И в тонком клиенте и в толстом клиенте и в веб клиенте.
Прикрепленные файлы:
4. Поручик 4600 21.03.24 18:12 Сейчас в теме
То, что я и другие разработчики делали лет 10 назад с использованием компоненты.
5. kamisov 225 24.03.24 09:57 Сейчас в теме
Картинку через новую функцию прогнали, но ДД все еще через файлы гоняем?
6. John_d 6072 25.03.24 12:16 Сейчас в теме
(5)
&НаКлиенте
Асинх Процедура ПриВставкеИзБуфераОбмена(Значение, СтандартнаяОбработка)
    ДанныеФайлов = Новый Соответствие;
    Если ТипЗнч(Значение) = Тип("Массив") Тогда
        Для каждого ЭлементБуфера Из Значение Цикл
            Если ТипЗнч(ЭлементБуфера) = Тип("СсылкаНаФайл") И НРег(ЭлементБуфера.Расширение) = ".docx" Тогда
                ДанныеФайла = Ждать ЭлементБуфера.ПолучитьКакДвоичныеДанныеАсинх();
                ДанныеФайлов.Вставить(ЭлементБуфера.Файл.Имя, ДанныеФайла);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    Если ДанныеФайлов.Количество() <> 0 Тогда
        ПриВставкеИзБуфераОбменаНаСервере(ДанныеФайлов);
    КонецЕсли;
КонецПроцедуры
Показать
9. user1378392 3 10.04.24 22:40 Сейчас в теме
Здравствуйте, подскажите, на УНФ 3.0 подойдет?
10. AneJIbcuH 39 16.04.24 20:21 Сейчас в теме
(9) Дело не в конфигурации, только в платформе (от 8.3.24)
11. user1378392 3 16.04.24 23:03 Сейчас в теме
(10) А 8.3.21 может не подойти?
12. Evgen13 09.10.25 18:16 Сейчас в теме
Не работает. 1в1 написал. В картинку возвращается неопределено
13. Evgen13 22.10.25 09:24 Сейчас в теме
При вставке по кнопке, необходимо вставлять именно картинку, а не файл картинки. То есть из папки нажав ктрлс и в 1с нажать кнопку, картинка не вставиться. Но, если вырезать "Ножницами" картинку, то картинка будет вставлена.

А вот по событию формы, все будет работать, как нужно.

Будьте внимательны, в вэбе при вставке картинки свои заморочки.

Спасибо автору!
Для отправки сообщения требуется регистрация/авторизация