Часто перед разработчиками ставят задачу: пользователь копирует информацию в буфер обмена (например, нажимая специальную клавишу на клавиатуре) и хочет, чтобы эти данные сразу сохранились в присоединенные файлы документа. Рассмотрим подробнее, как реализовать подобный функционал, проанализируем ограничения платформы и разберем по шагам доступные решения.
Проанализируем ситуацию с технической точки зрения. Исторически платформа 1С не имеет встроенной возможности напрямую перехватывать системные нажатия клавиш (например, PrintScreen) на уровне всей операционной системы. Это сделано в целях безопасности и для обеспечения кроссплатформенности. Поэтому автоматическое сохранение «по одному клику вне программы» реализовать затруднительно. Разберем по шагам корректный алгоритм работы пользователя:
ЗагрузитьИзБуфераОбмена) или использует системное сочетание клавиш для вставки.До версии 8.3.24 платформа не умела полноценно работать с двоичными данными из буфера обмена без применения "костылей". Выясним причину: встроенные методы позволяли работать только с текстом. Для решения задачи разработчики использовали внешние компоненты, такие как Addin.Clipboard, или COM-объекты.
Посмотрим на пример кода с использованием внешней компоненты, который позволяет извлечь содержимое из буфера обмена:
Объект = Новый("Addin.Clipboard");
Нечто = Объект.ПолучитьИзБуфераОбмена(); // Получаем буфер обмена
// Если формат (1) - jpg, (2) - bmp
Если ТипЗнч(Нечто) <> Тип("Картинка") Тогда
Сообщить("В буфере обмена нет нужных данных!", СтатусСообщения.Важное);
Возврат;
Иначе
Сообщить("Данные успешно получены!");
// Далее код сохранения "Нечто" в присоединенные файлы
КонецЕсли;
Важно: Если при попытке выполнения этого кода система пишет, что тип Addin.Clipboard не определен, значит внешняя компонента не добавлена в конфигурацию или не зарегистрирована в операционной системе. Ее необходимо предварительно установить.
Рассмотрим современный подход к решению проблемы. Если ваша база работает на платформе версии 8.3.24 и выше, искать сторонних специалистов и внешние библиотеки больше не требуется. Разработчики добавили в систему полноценную штатную поддержку работы с буфером обмена.
Проанализируем новые возможности. В платформе появился глобальный контекст СредстваБуфераОбмена. Теперь мы можем штатными средствами извлекать не только текст, но и любые двоичные данные, HTML-документы и прочее.
В клиентское приложение и формы были добавлены новые асинхронные события. Разберем процесс на практике: теперь программист может использовать обработчик ПриВставкеИзБуфераОбмена() или асинхронную функцию ожидания.
Кроме того, в свежих релизах типовых конфигураций (например, в современных версиях ERP, Комплексной автоматизации или УТ 11) функционал вставки данных из буфера в справочник "Присоединенные файлы" уже встроен "из коробки". Пользователю достаточно скопировать информацию, открыть список присоединенных файлов документа и нажать стандартную кнопку добавления из буфера — система автоматически конвертирует данные в файл и прикрепит его к объекту.