1с вставить картинку из буфера обмена

Обновлено: 08.07.2024

В статье рассмотрен вопрос о доработанной вставки картинки из буфера обмена через компоненту Документооборота. Рассмотрим вопросы касаемо 2-х типов приложений: Управляемое - Через Форматированный Документ, для Обычных Форм касаемо

  1. Вставка в Поле HTML осуществляем в 2 этапа:
    1. Картинку из Буфера обмена будем получать при помощи метода документооборота.
    2. Вставку в код HTML будем осуществлять непосредственно на Javascript, поскольку в отличие от Форматированного документа нужного функционала по определению курсора нету. Поэтому для этого используем вставку полностью на основе вызова Функции JS.

    При этом последний функционал необходимо полностью доработать до возможности использования в Общем модуле, из которого будем вызывать экспортную процедуру с Формы (Управляемой или Обычной). Хотя есть уже до этого публикация Вставка снимка экрана (screenshot) в форматированный документ, тем не менее не очень удобно переносить 3 процедуры в каждую форму.

    Предлагаю модернизированный вариант этого способа, и ещё применительно к обычным формам. Тестировалось на платформах 8.3.14 - 8.3.16.

    Вставка картинки в HTML поле положения курсора при помощи JavaScript.

    Рассмотрим следующие режимы:

    Для Обычного приложения код выглядит так:

    Однако, применяемая функция JavaScript может быть использована для вставки не только картинок после курсора - а в целом любого HTML в документе после курсора.

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

    Таким образом, код для 2-х режимов является достаточно похожим. Единственное исключение - Web Клиент, но там вставка осуществляется полностью за счет JavaScript (Это описано в статье - Вставка картинки из буфера обмена (на выбор: JavaScript / внешняя компонента / штатно)) или если платформа более старая - Java Апплет можно попробовать дополнить.

    Вставка картинки в Форматированный Документ компонентой ДО в Управляемых Формах.

    Форматированный Документ - это вариант HTML документа (потому что текст получается там HTML) со следующими особенностями, которые были выявлены в ходе работы над внутренней конфигурации:

    1. Не стабильно "форматирование документа", а поэтому стили не всегда работают.
    2. Нет возможности вызвать JavaScript.
    3. Нет доступа к Объекту Документ.
    4. Drag-Drop для картинок работает ужасно. Не возможно потом вытащить картинку.

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

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

    Итоговый код для упрощения процедуры вставки

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

    1. Код для Форматированного Документа в УФ.
    2. Код для поля HTML в ОбычныхФормах. Код для Тонкого Клиента УФ я не привожу, так как он не сильно отличается.

    Для Форматированного Документа:

    Для HTML поля обычные Формы:

    Как видно - код достаточно компактный, и легко переносить из одной формы в другую - не прибегая к излишествам. Излишества можно добавить по своему желанию.

    Возникла потребность создания документа в 1С для регистрации ошибок работы программ у пользователей.

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

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

    А ведь было бы прикольно, нажать ctrl+prtscr (alt+prtscr), и вставлять содержимое из буфера в нужную позицию документа, где находится курсор.

    После изучения определенного количества неплохих, но достаточно старых публикаций, сделал вывод что штатная вставка ctrl+v для картинов не работает,

    работают только с текстом,

    варианты с подключением к эксель, копипастом в него, и сохранением в файл - ресурсоемки, да и не везде эксель доступен.

    Остались варианты с внешними компонентами.

    компонент тоже немного, давным давно (в 2009), пользователь gudun_ku выложил компоненту clipboard.dll для этой цели.

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

    Но несмотря на все усилия, мне не удалось все это запустить уже на современной конфигурации, под win7. Все попытки подключения компоненты, приводят к исключению.

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

    Собственно этими знаниями и решил поделится, дабы облегчить жизнь тем, кто столкнется с подобной задачей.

    Сама компонента находится в общих макетах, макет называется - ОбщиеМакеты.КомпонентаПолученияКартинкиИзБуфера

    Далее нам понадобится модуль

    там всего несколько процедур и функций, по установке, и инициализации компоненты.

    Также нужно не забыть про глобальную переменную

    которая объявлена в модуле управляемого приложения

    Собственно, это и все что нам нужно для работы.

    Далее рисуем наш документ, размещаем на форме форматированный документ, и не забываем про реквизит типа "ХранилищеЗначений", для того чтобы нам картинки в базе хранить.

    Делаем команду, вставка из буфера, и прописываем код

    Так как метод вставки картинки доступен только на сервере, то там и выполняем

    Результат достигнут, все работает.

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

    Для первоначальной регистрации библиотеки clipboard.dll базу данных необходимо открыть под администраторской учётной записью пользователя операционной системы, после чего открыть обработку через меню Файл.

    На 64-х разрядных версиях Windows 7, возможно потребуется отключить или изменить параметры UAC (User Account Control, Контроль учетных записей пользователей).

    Перед началом работы обработка ищет файл библиотеки clipboard.dll в каталоге по умолчанию. В случае отсутствия происходит попытка извлечения файла из внутреннего макета обработки и записи в каталог исполняемых файлов 1С:Предприятия, каталог временных файлов, рабочий каталог пользователя, каталог, из которого запущена обработка. Если все попытки записи завершились неудачей, можно попробовать извлечь и записать библиотеку вручную (пункт "Установить clipboard.dll" меню "Действия") в какой-либо другой каталог.

    При необходимости можно задать размер отображаемого изображения (пункт "Размер картинки" меню "Действия"). По умолчанию установлен реальный размер.

    В обработке использованы возможности библиотеки стандартных подсистем (БСП) и включены параметры регистрации в справочнике "Дополнительные отчёты и обработки".

    Другие использованные материалы:

    -----------
    Тестировалось в ОС Vindows7.

    При скачивании обращайте внимание на варианты файлов

    КопированиеИзображенияИзБуфераОбмена82 - БСП212.epf - Для конфигураций, основанных на БСП 2.1.2 и позднее (Розница 2.0.6 - 2.0.11 , УНФ 1.4.6, УТ 11.1 - 11.2)

    КопированиеИзображенияИзБуфераОбмена82 - БСП1231.epf - Для конфигурации Розница 2.0.4, конфигураций, основанных на БСП 1.2.3.1

    КопированиеИзображенияИзБуфераОбмена82 - УТ1107.epf - Для версий УТ 11.0.6.7 - 11.7.2.

    КопированиеИзображенияИзБуфераОбмена82 - УТ11078.epf - Для версий УТ 11.0.7.8 - 11.0.9.15

    КопированиеИзображенияИзБуфераОбмена82.epf - Для версий УТ 11.0.6.1 и ранее, УНФ 1.2

    КопированиеИзображенияИзБуфераОбменаУНФ_Розница2_82.epf - Для конфигурации Розница 2.0.2.6, Розница 2.0.3, Управление небольшой фирмой 1.3, Управление небольшой фирмой 1.4.1

    Возникла потребность создания документа в 1С для регистрации ошибок работы программ у пользователей.

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

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

    А ведь было бы прикольно, нажать ctrl+prtscr (alt+prtscr), и вставлять содержимое из буфера в нужную позицию документа, где находится курсор.

    После изучения определенного количества неплохих, но достаточно старых публикаций, сделал вывод что штатная вставка ctrl+v для картинов не работает,

    работают только с текстом,

    варианты с подключением к эксель, копипастом в него, и сохранением в файл - ресурсоемки, да и не везде эксель доступен.

    Остались варианты с внешними компонентами.

    компонент тоже немного, давным давно (в 2009), пользователь gudun_ku выложил компоненту clipboard.dll для этой цели.

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

    Но несмотря на все усилия, мне не удалось все это запустить уже на современной конфигурации, под win7. Все попытки подключения компоненты, приводят к исключению.

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

    Собственно этими знаниями и решил поделится, дабы облегчить жизнь тем, кто столкнется с подобной задачей.

    Сама компонента находится в общих макетах, макет называется - ОбщиеМакеты.КомпонентаПолученияКартинкиИзБуфера

    Далее нам понадобится модуль

    там всего несколько процедур и функций, по установке, и инициализации компоненты.

    Также нужно не забыть про глобальную переменную

    которая объявлена в модуле управляемого приложения

    Собственно, это и все что нам нужно для работы.

    Далее рисуем наш документ, размещаем на форме форматированный документ, и не забываем про реквизит типа "ХранилищеЗначений", для того чтобы нам картинки в базе хранить.

    Делаем команду, вставка из буфера, и прописываем код

    Так как метод вставки картинки доступен только на сервере, то там и выполняем

    Результат достигнут, все работает.

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

    Читайте также: