gifts2017

Программное добавление ActiveX (изображений/текста/ШК и т.д.) в табличный документ

Опубликовал Alexey (zarius) в раздел Программирование - Работа с интерфейсом

Необходимо добавить в сформированную таблицу изображения/текста/ШК (81 тип ШК) с прозрачным фоном? Вставить фирменный логотип? Быстро организовать оформление документов в корпоративном стиле? Данная разработка поможет в этом!

Развитие разработки http://infostart.ru/public/138263/ для 1С 8.х

Что может:

Программно добавлять элементы ActiveX в табличный документ. Другими словами: размещать в произвольном месте в табличном документе картинки с прозрачным фоном, с возможностью произвольного смещения картинки по оси X/Y, c возможностью поворота картинки на произвольный градус. Поддержка вывода 81 типа штрих-кодов, в том числе двухмерные QR Code, Data Matrix и т.д. (корректно кодирует кириллицу).  

Кроме того, при отсутствии зарегистрированного ActiveX в системе - обработка сама скопирует и зарегистрирует необходимый ActiveX (в ДЕМО присутствуют ActiveBMP и ActiveText).

Список поддерживаемых ActiveX ограничен (подробнее см. ниже). Для добавления в поддержку нового элемента ActiveX необходимо написать запрос автору.

Где использовать:

  • при вставке подписей и печатей
  • при вставке фирменных логотипов
  • для реализации корпоративного оформления документов
  • при вставке текста
  • при вставке штрих-кодов (список доступных типов ШК см. ниже)
  • и т.д.

Список поддерживаемых ActiveX:
1. ActiveX элемент управления  bmp_1c.ocx (ActiveBMP) - автор Морев Андрей (Z1) (http://1c.proclub.ru/modules/mydownloads/personal.php?lid=2725&cid=111) - используется непосредственно для отображения картинок в таблице (обязательно)
2. ActiveX GFLAx (http://www.xnview.com/en/download_gfl.html) - для возможности произвольного поворота вставляемого изображения и конвертации входящего изображения в BMP (опционально)
3. ActiveX элемент управления  text_1c.ocx (ActiveText) - автор Морев Андрей (Z1) (http://1c.proclub.ru/modules/mydownloads/personal.php?cid=129&lid=2726) - используется непосредственно для отображения картинок в таблице (опционально)

4. ActiveX элемент управления  OcvitaBarcode.ocx - Разработчик: Ocvita (http://ocvita.ru/content/view/89/1/) На основе библиотеки zint (www.sourceforge.net/projects/zint) - используется для отображения ШК всевозможных типов в таблице

5. ActiveX элемент управления V8.Barcod - стандартный элемент управления "1С.V8.Печать штрих-кодов" для 1С 8.х

При наличии GFLAx - входящий файл картинки может быть практически любого графического формата, иначе - только BMP.

Для добавления в поддержку нового элемента ActiveX необходимо написать запрос автору.


Свойства:
ЕстьПроизвольноеСмещение - использовать произвольное смещение при размещении объекта в табличном документе (булево);
ПроизвольноеСмещениеНач_X, ПроизвольноеСмещениеКон_X, ПроизвольноеСмещениеНач_Y, ПроизвольноеСмещениеКон_Y - границы в пикселях для произвольного смещения (по умолчанию по 5 мм в каждую сторону);
ЕстьПроизвольныйПоворот - использовать поворот на произвольный градус при размещении объекта в табличном документе  (булево);
ПроизвольныйПоворотНач, ПроизвольныйПоворотКон - границы для ограничения градуса поворота (по умолчанию от -15 до 15 градусов);

Методы:
Функция ДобавитьИзображение(Таб, Лево, Верх, Право, Низ, Тип, Путь, Макет) - добавление стандартного изображения

Функция ДобавитьТекст(Таб, Лево, Верх, Право, Низ, ТипТекст) - добавление стандартного текста

Функция ДобавитьСтандартныйОбъект(Таб, Лево, Верх, Право, Низ, Тип, ТипОбъекта) - добавление стандартного объекта

Функция ДобавитьИзображение_Актив(Таб, Лево, Верх, Право, Низ, Тип, Путь, Макет) - добавление ActiveBMP

Функция ДобавитьТекст_Актив(Таб, Лево, Верх, Право, Низ, ТипТекст) Текст- добавление ActiveText

Функция ДобавитьШК_1С8(Таб, Лево, Верх, Право, Низ, Тип, ШК) - добавление стандартного "1С.V8.Печать штрих-кодов"

Функция ДобавитьШК_Оквита(Таб, Лево, Верх, Право, Низ, Тип, ШК, ТипШК) - добавление штрих-кода (с помощью OcvitaBarcode)

Функция ДобавитьActiveX(Таб, Лево, Верх, Право, Низ, Тип, Имя) - добавление произольного ActiveX (в обработке должна быть поддержка данного ActiveX)

Все функции возвращают ссылку на Рисунок табличного документа (тип "РисунокТабличногоДокумента"). Доступ к свойствам ActiveX осуществляется через СсылкаНаРисунок.Объект

Опсание параметров:

Таб - ссылка на табличный документ, куда добавляется объект

Лево, Верх, Право, Низ - координаты добавления объекта в таблицу (см. "тип")

Тип - тип системы координат:
        0 - пиксельная;
        1 - табличная;
        2 - левый верхний угол задается в табличной системе, в (право,низ) - задается смещение относительно левого верхнего угла
        3 - то же самое что и п.2, только смещение укзывается в реальных мм (при автомасштабе - вычисляется реальная ширина листа при печати и размер)

Путь - путь к файлу изображения, либо расширение файла при непустом Макете

Макет - Макет с двоичными данными (с картинкой)

Текст - текст для вывода

ШК - штрих-код для добавления в таблицу

ТипШК - тип штрих-код для добавления в таблицу, можно передавать цифровой код или строковое название (доступные типы ШК см. ниже)

Имя - имя ActiveX (должен быть среди списка поддерживаемых обработкой ActiveX)


Пример добавления в таблицу подписи с печатью
В 

    ...
    ТабДок = Новый ТабличныйДокумент;
   
Макет = ЭтотОбъект.ПолучитьМакет("Макет");
   
//вывод самого отчета
   
...

   
ТабДок.АвтоМасштаб = Истина;

    //подсоединим внешнюю обработку "ИзображениеДляТаблицы"
    //считаем что необходимая нам обработка лежит там же где и текущая обработка с примером
   
Обр = ВнешниеОбработки.Создать(СтрЗаменить(ЭтотОбъект.ИспользуемоеИмяФайла,"ПримерИспользования","ИзображениеДляТабличногоДокументаДЕМО"));

    //добавим двумерный ШК для упрощения документооборота с клиентами
   
Рис = Обр.ДобавитьШК_Оквита(ТабДок, 27, 2, 40, 40, 2, ТекстДляШК , "QR Code");

   
//для печати необходим поворот изображения и смещение + реальные размеры
    //установим признак произвольного вращения (по умолчанию от -15 до 15 градусов)
   
Обр.ЕстьПроизвольныйПоворот = Истина;
   
//установим признак произвольного смещения (по умолчанию от -5 до 5 мм)
   
Обр.ЕстьПроизвольноеСмещение = Истина;
   
Рис = Обр.ДобавитьИзображение_Актив(ТабДок, 13, 33, 40, 40, 3, "jpg",ЭтотОбъект.ПолучитьМакет("ТипаПечать"));

   
//для подписей необходим минимум смещений по оси Y и без поворота + реальные размеры
   
Обр.ЕстьПроизвольныйПоворот = Ложь;
   
Обр.ПроизвольноеСмещениеНач_Y = -2;
   
Обр.ПроизвольноеСмещениеКон_Y = 1;

   
Рис = Обр.ДобавитьИзображение_Актив(ТабДок, 20, 28, 55, 40, 3, "gif",ЭтотОбъект.ПолучитьМакет("Подпись_дир"));
   
Рис = Обр.ДобавитьИзображение_Актив(ТабДок, 21, 35, 33, 13, 3, "gif",ЭтотОбъект.ПолучитьМакет("Подпись_ГБ"));
   
Рис = Обр.ДобавитьИзображение_Актив(ТабДок, 19, 38, 43, 20, 3, "gif",ЭтотОбъект.ПолучитьМакет("Подпись_менеджер"));

    //вывод на экран
   
ТабДок.Показать("Пример использования обработки ""ИзображениеДляТабличногоДокумента.epf""");

    ...

Почему платная:

Закономерный вопрос - почему данная разработка платная, если практически аналогичная по функционалу разработка на 7.7 - бесплатна? Ответ: в данной разработке использована другая методика подключения элементов ActiveX. Если в 7.7 можно было воспользоваться TableDoc.dll для добавления объекта в таблицу, то в 8.2 добавление объекта в табличный документ осуществляется стандартными средствами! Проблема в том что при программном добавлении объекта в табличный документ нет программных возможностей для привязки к этому объекту конкретного элемента ActiveX. Автор потратил немало времени, прежде чем нашел решение этого вопроса. Поэтому подчеркиваю: данная разработка платная за счет решения вышеописанной проблемы, а не за счет предоставление доступа к бесплатным ActiveX. Набор поддерживаемых ActiveX может быть любым, соответсвенно и решаемые данной обработкой задачи могут варьироваться.

Отличие от "предка" на 7.7:

1. Самый главный плюс решения на 8.х: перед добавлением объекта в табличный документ не надо выводить его на экран. Это основное неудобство решения на 7.7 при выводе сразу на принтер.

2. Реализована возможность авторегистрации недостающего в системе ActiveX. Для этого необходимо просто добавить файл с данным элементом в список Макетов обработки (как ДвоичныеДанные). При выполнении добавления элемента в табличный документ, обработка проанализирует отсутствие регистрации данного элемента в системе и при наличии этого элемента в списке Макетов обработки - скопирует файл с элементом ActiveX в каталог программы и зарегистрирует его. После чего добавит уже зарегистрированный элемент в табличный документ.

3. Возможность указания реальных размеров добавляемого объекта в мм, независимо от ширины табличного документа.

4. Сама структура обработки сделана максимально удобно для добавления в поддержку нового ActiveX (программный код обработки при этом не модифицируется).

Ограничение ДЕМО версии:

ДЕМО версия ограничена количеством рисунков в табличном документе равным одному.  Если рисунков более одного - обработка сообщит об этом и не станет добавлять элемент.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Архив обработки ДЕМО с примером
.zip 118,65Kb
22.11.16
111
.zip 118,65Kb 111 Бесплатно
Обработка "Программное добавление ActiveX (изображений/текста/ШК и т.д.) в табличный документ" (закрытый код)
22.11.2016
1000 руб.

Моментальная
доставка

Обработка "Программное добавление ActiveX (изображений/текста/ШК и т.д.) в табличный документ" (открытый код с подробными комментариями)
22.11.2016
5000 руб.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Михаил Журавлев (Gmix) 05.07.12 10:22
Проблема в том что при программном добавлении объекта в табличный документ нет программных возможностей для привязки к этому объекту конкретного элемента ActiveX. Автор потратил немало времени, прежде чем нашел решение этого вопроса. Поэтому подчеркиваю: данная разработка платная за счет решения вышеописанной проблемы, а не за счет предоставление доступа к бесплатным ActiveX.

Мое мнение слишком много автор удели времени защите этой идеи.
Идея то в принципе понятно.
Сохранение ТабличногоДокумента в файл замена в нем строк отвечающих за ActiveX и получение табличного документа из полученного файла.
Мне кажется, было бы полезнее выложить в открытом доступе пример использования. Но автору виднее. :)))
2. Hany (Hany) 05.07.12 10:30
(1) Gmix,
А в 1С 8.3 уже встроили в платформу и повороты картинок и выделение значимой части для выравнивания подписи. Прозрачность тоже добавили ("В редакторе картинок кнопки Установитьпрозрачныйфон и Убратьпрозрачность доступны только для форматов BMP, JPEG и TIFF." (с))
3. Alexey (zarius) 05.07.12 11:33
(1) вообще вопросами защиты обработок на 8.x раньше особо не занимался, поэтому реально на рассмотрение проблемы защиты ушло больше времени чем на саму разработку... идеи по защите появились, но реализация их требует времени, поэтому в данном случае просто воспользовался готовым инструментом по обфускации кода http://infostart.ru/public/15907/
То, что для более менее знающих людей не составит труда обойти данную защиту - тоже знал. Ради бога - реализуйте данную идею в собственных разработках - все равно использовать обфусцированный код не будете - будете писать свой... Но то, что человек получил исходный код через декомпилятор (могу ошибаться, но суть от этого не меняется) - узнал как работает разработка - и спешит поделиться этим со всем миром - многое об этом человеке говорит и не в лучшую сторону.
Вообще я за открытый код в разработках. Данную разработку сделал платной потому что:
1. Интересно как это все работает - реально ли продавать через ИС и есть ли смысл специально что то разрабатывать для этих целей.
2. Разработка интересна по функционалу и, на мой взгляд, ее стоит купить тем кому требуется данный функционал.
3. В обработку вложено некоторое количество времени, большая часть из которого - не реализация самой идеи, а уделение большого внимания функциональности и удобству использования конечными пользователями.
4. Alexey (zarius) 05.07.12 11:39
(2) сам 8.3 еще не видел, если все описанное реализовано - это радостная для меня новость. Помню как был очень удивлен, что можно программно добавлять картинки/текст/объекты, но при этом нельзя установить у объекта конкретный элемент ActiveX.
5. Михаил Журавлев (Gmix) 05.07.12 12:21
(3) zarius, Нет все не так я просто занимался примерно похожей проблемой ранее.
Делал программное добавление элементов графической схемы.
6. Alexey (zarius) 05.07.12 12:32
(5) ну... тогда беру свои слова и мысли относительно тебя обратно :)
как сам решил проблему?
7. Михаил Журавлев (Gmix) 05.07.12 12:50
(6) zarius, Ну как написал так и решил путем сохранения в файл модифицирования его и прочтения потом.
Подумал что, тут также должно пройти.
8. Валерий Гайдабура (director04) 05.07.12 12:59
Зачетно, маладец. А теперь долой директоров и начальников. Юзеры будут сами подписывать все документы ))))!
9. Alexey (zarius) 05.07.12 13:03
(8) печати и подписи - это лишь пример реализации... :)
10. Alexey (zarius) 05.07.12 14:48
(2) откуда информация про повороты картинок? смотрел сейчас 8.3 - ничего нового в этом отношении не нашел. Прозрачный фон при визуальном добавлении картинку в табличный документ можно было и в 8.2 делать, а программно как? Вообще похоже что текущая обработка будет актуальна и для 8.3 (переделать под УФ надо будет)...
11. Alexey (zarius) 05.07.12 18:19
(2) посмотрел описание изменений 8.3 - действительно - появился объект ОбработкаКартинок у которого есть метод Повернуть(<Картинка>, <Угол>)! вроде бы все здорово, если бы не описание второго параметра: "Угол (в градусах), на который нужно повернуть картинку. Угол должен быть кратен 90.". Лучше чем ничего, но...
12. Sergey (serejkin) 19.10.12 10:46
А у меня не регистрируется компонента Ocvita Barcode.
Под вынь7 х64
Вываливается с ошибкой.
13. Alexey (zarius) 19.10.12 11:04
(12) "Под вынь7 х64" сам не пробовал - попробуй обратиться к разработчику (http://ocvita.ru/content/view/89/1/) или как вариант - компилировать исходники "Под вынь7 х64"...
14. aleksei (alekseies) 19.10.12 14:35
у меня тоже не регистрируется компонента Ocvita Barcode под Windows 7.
15. Андрей Мухин (Muhin555) 06.03.13 12:47
Возможно интересная идея для использования с цифровой подписью при помощи планшетов http://wacom.ru/stu.html. Но покупать разработку и за свои же деньги помогать разработчику прикручивать такие приблуды - это не логично. Жаль что это не открытый проект, а то можно было бы поучаствовать.
16. Андрей Мухин (Muhin555) 06.03.13 15:44
А еще не забудь указать, что требуется Установка библиотеки CAPICOM !!!!
17. Андрей Мухин (Muhin555) 12.03.13 01:40
Рекомендации:
1. Засунуть GFLAx.dll в макет GFLAx_GFLAx и инсталлировать его при старте:
Попытка
Картинка = Новый COMОбъект("GFLAx.GFLAx");
ЕстьТаблДок = 1;
Исключение
Инсталлировать("GFLAx.GFLAx");
//Сообщить("Для использования возможности произвольного поворота изображения необходима установка GflAx ASP component!");
КонецПопытки;

2. В нижеуказанные функции добавить параметр РазмерШрифта и НазваниеШрифта:
Функция ДобавитьТекст(Таб, Лево, Верх, Право, Низ, Тип, Текст, НазваниеШрифта, РазмерШрифта)
Функция ДобавитьИзображение_Актив(Таб, Лево, Верх, Право, Низ, Тип, Путь, Макет, НазваниеШрифта, РазмерШрифта)
Функция ДобавитьТекст_Актив(Таб, Лево, Верх, Право, Низ, Тип, Текст, НазваниеШрифта, РазмерШрифта)

Примечание и особенности:
1. При одновременном использовании
Рис1 = Обр.ДобавитьТекст_Актив(ТабДок, 13, 33, 40, 40, 3, "BMP");
Рис2 = Обр.ДобавитьИзображение_Актив(ТабДок, 13, 33, 40, 40, 3, "BMP",ЭтотОбъект.ПолучитьМакет("ТипаПечать"));
конструкция :
Попытка
Таб.Рисунки[Индекс].Объект.TextStr = СокрЛП(Текст);
Шрифт = Таб.Рисунки[Индекс].Объект.Font;
Шрифт.Name = СокрЛП("Times New Roman");
Шрифт.Size = РазмШрифта; // 14 Arial
Если ЕстьПроизвольныйПоворот Тогда
не срабатывает, т.к. объект получает параметры шрифта от второго объекта, т.е. стандартные "Arial, 8"
18. Alexey (zarius) 12.03.13 11:05
(15) Причины платности разработки я описывал в (3). Чтобы развивать проект не за свои деньги - можно приобрести версию с открытым кодом.
(16) CAPICOM на некоторым компьютерах установлен по умолчанию, хотя согласен - указать стоит... там и сделаю.
19. Alexey (zarius) 17.04.13 12:09
(12) (14) Обновление OcvitaBarcode до 1.1 (от 10.03.2013) судя по описанию вроде бы решает проблемы с Win7x64
Регистрация Dll, ActiveX под Windows 7 (в т.ч. 64 битной)
20. Андрей М (_Z1) 02.03.14 10:31
(1) скажите а какая информация пишется qr штрихрод в счете из картинки subj
21. Alexey (zarius) 02.03.14 14:19
(20) Конкретно в картинке из subj закодировано "Пример для обработки ИзображениеДляТабличногоДокумента http://infostart.ru/public/142202/". А вообще, как понимаете, там можно кодировать любую информацию - применительно же к счету можно закодировать номер, дату, сумму, ИНН клиента и т.д.
22. Андрей М (_Z1) 03.03.14 08:39
(21)я думал что есть какой-то наработанный положительный опыт
и хотел им воспользоваться
23. Андрей М (_Z1) 03.03.14 08:45
(21) Скажите а какий есть способы добавить программнов табличный
документ 1с 7.7 ( именно 7.7.) qr сод( т.е. по тексту программно сгенерить qr код и поместить его в объект Таблица).
Насколько я понимаю сейчас это можно сделать только с помощью zint.exe

Также интересует есть ли какие рекомендации, ограничения на размер области qr кода в миллеметрах.
24. Alexey (zarius) 03.03.14 10:15
(22) конкретно у себя двухмерные коды пока не применяю... хотя и не виду здесь сложности - кодируйте ту информацию, которую необходимо в дальнейшем быстро получить через сканирование либо в вашей УС, либо в УС ваших клиентов
25. Alexey (zarius) 03.03.14 10:21
(23) конкретно для 7.7 - в описании вроде бы написано, что данная разработка - развитие разработки на 7.7 Класс 1С++ для программного добавления изображений/текста/ШК в таблицу. Там все это реализовано. и довольно таки удобно. Для QR-кодов используется "наследник zint" - OcvitaBarcode.ocx. Где этот ActiveX использовать (в 7.7 или в 8.х) - не принципиально. Читайте внимательно описание - там все это есть.
26. Андрей М (_Z1) 03.03.14 12:12
(26) понял надо будет постотреть класс
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа