Картинку из буфера обмена 1с документооборот

Обновлено: 05.07.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Коллеги, предлагаю еще один вариант получения картинки из буфера обмена.

Несмотря на то, что на Инфостарте есть ряд разработок по этой теме,

возможно, кому-то пригодится данная обработка.

Поддерживается работа на платформе 8.3, в режимах толстого клиента обычного приложения, толстого/тонкого клиентов управляемого приложения. Клиенты x32/x64.

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

Вариант, с использованием потока, мне показался лучше. Но встал вопрос, о том, каким образом живые данные из потока переместить в 1С-й объект картинка? В одной из приведенных выше разработок это делалось с использованием 1С-й функции глобального контекста «Base64Значение(<Строка>)». Оставалось только загнать данные в Base64-строку. Откровенно говоря, писать свою собственную функцию для кодирования данных, совсем не хотелось. Более того, было понимание, что в самом движке 1С, эти функции уже реализованы. И это действительно так. В core83.dll есть несколько вариантов экспортной функции encode_base64 (аналог Base64Строка(<Значение>)). Таким образом, вызывая соответствующую функцию и передавая ей данные потока, мы получаем на выходе строку в кодировке Base64.

Дополнение: версия 2.
Во всей этой истории с использованием Base64-строки огорчало то, что для получения объекта "ДвоичныеДанные" выполнялась абсолютно не нужная работа по кодированию/раскодированию данных. В версии 2 данные потока прописываются напрямую в предварительно созданный объект "ДвоичныеДанные". Благодаря этому, мы получаем полноценный объект BinaryData с актуальными данными, без каких-либо дополнительных манипуляций.
Тут же: вместо PNG формата используется JPEG.

Дополнение: версия 3.
Добавлена поддержка Web-клиента x32/x64 (IE). Как показала практика, вариант с передачей данных через строку Base64, является наиболее универсальным. Код функции для кодирования данных в Base64, оказался не таким большим, как это виделось изначально. Буквально несколько десятков байт. Таким образом, это позволило отказаться от использования экспортной функции encode_base64 (версия 1), упростить код и в тоже самое время добавить поддержку web-клиента.

Тестирование проводилось выборочно на релизах начиная с 8.3.4.437 по 8.3.11.2924 (последний на момент публикации).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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