Буквально на днях встала задача программного размещения картинок в уже сформированной таблице, при этом картинки должны были быть с прозрачным фоном. Как результат изысканий появился данный класс — возможно кому-нибуть пригодится.
Что может:
Размещать в произвольном месте в таблице картинки с прозрачным фоном, с возможностью произвольного смещения картинки по оси X/Y, c возможностью поворота картинки на произвольный градус. С версии 1.3 — поддержка вывода 81 типа штрих-кодов, в том числе двухмерные QR Code, Data Matrix и т.д. (корректно кодирует кириллицу).
Где использовать:
- при вставке подписей и печатей
- при вставке фирменных логотипов
- для реализации корпоративного оформления документов
- при вставке текста
- при вставке штрих-кодов (список доступных типов ШК см. ниже)
- и т.д.
Что используется:
1. ВК TableDoc.dll — автор Трапезников Дмитрий (trad) (http://www.1cpp.ru/forum/YaBB.pl?num=1177688915/0) — используется возможность добавления в таблицу произвольного количество OLE-объектов произвольных размеров (обязательно)
2. ActiveX элемент управления bmp_1c.ocx (ActiveBMP) — автор Морев Андрей (Z1) (http://1c.proclub.ru/modules/mydownloads/personal.php?lid=2725&cid=111) — используется непосредственно для отображения картинок в таблице (обязательно)
3. ActiveX GFLAx (http://www.xnview.com/en/download_gfl.html) — для возможности произвольного поворота вставляемого изображения и конвертации входящего изображения в BMP (опционально)
4. ActiveX элемент управления text_1c.ocx (ActiveText) — автор Морев Андрей (Z1) (http://1c.proclub.ru/modules/mydownloads/personal.php?cid=129&lid=2726) — используется непосредственно для отображения картинок в таблице (опционально)
5. Шрифт EanG000.ttf — для вывода штрих-кодов EAN-13.
6. ActiveX элемент управления OcvitaBarcode.ocx — Разработчик: Ocvita (http://ocvita.ru/content/view/89/1/) На основе библиотеки zint (www.sourceforge.net/projects/zint) — используется для отображения ШК всевозможных типов в таблице
При наличии GFLAx — входящий файл картинки может быть практически любого графического формата, иначе — только BMP.
Свойства:
ЕстьПроизвольноеСмещение — использовать произвольное смещение при размещении объекта в таблицу (0 — нет; 1 — да);
ПроизвольноеСмещениеНач_X, ПроизвольноеСмещениеКон_X, ПроизвольноеСмещениеНач_Y, ПроизвольноеСмещениеКон_Y — границы в пикселях для произвольного смещения;
ЕстьПроизвольныйПоворот — использовать поворот на произвольный градус при размещении объекта в таблицу (0 — нет; 1 — да);
ПроизвольныйПоворотНач, ПроизвольныйПоворотКон — границы для ограничения градуса поворота;
Методы:
Процедура ПодключитьТаблицу(Таб) — подключение таблицы к классу
- Таб — объект типа «Таблица»
Функция ДобавитьИзображение(Лево, Верх, Право, Низ, Путь, Тип) — добавление изображения в таблицу, возвращает ссылку на добавленный объект ActiveBMP
- Лево, Право, Верх, Низ — координаты добавиления изображения в таблицу (см. «тип»)
- Путь — путь к файлу изображения
- Тип — тип системы координат: 0 — пиксельная; 1 — табличная; 2 — левый верхний угол задается в табличной системе, в «право,низ» — задается смещение относительно левого верхнего угла
Функция ДобавитьТекст_Актив(Лево, Верх, Право, Низ, Текст, Тип) — добавление текста (с помощью ActiveText) в таблицу, возвращает ссылку на добавленный объект ActiveText
- Лево, Право, Верх, Низ — координаты добавиления изображения в таблицу (см. «тип»)
- Текст— текст для добавления в таблицу
- Тип — тип системы координат: 0 — пиксельная; 1 — табличная; 2 — левый верхний угол задается в табличной системе, в «право,низ» — задается смещение относительно левого верхнего угла
Функция ДобавитьШК_Актив(Лево, Верх, Право, Низ, ШК, Тип) — добавление штрих-кода (с помощью ActiveText) в таблицу, возвращает ссылку на добавленный объект ActiveText
- Лево, Право, Верх, Низ — координаты добавиления изображения в таблицу (см. «тип»)
- ШК— штрих-код для добавления в таблицу
- Тип — тип системы координат: 0 — пиксельная; 1 — табличная; 2 — левый верхний угол задается в табличной системе, в «право,низ» — задается смещение относительно левого верхнего угла
Функция ДобавитьТекст(Лево, Верх, Право, Низ, Текст, Тип) — добавление текста (стандартный объект Текст) в таблицу, возвращает ссылку область таблицы добавленного объекта
- Лево, Право, Верх, Низ — координаты добавиления изображения в таблицу (см. «тип»)
- Текст— текст для добавления в таблицу
- Тип — тип системы координат: 0 — пиксельная; 1 — табличная; 2 — левый верхний угол задается в табличной системе, в «право,низ» — задается смещение относительно левого верхнего угла
Функция ДобавитьШК(Лево, Верх, Право, Низ, ШК, Тип) — добавление штрих-кода (стандартный объект Текст) в таблицу, возвращает ссылку область таблицы добавленного объекта
- Лево, Право, Верх, Низ — координаты добавиления изображения в таблицу (см. «тип»)
- ШК — штрих-код для добавления в таблицу
- Тип — тип системы координат: 0 — пиксельная; 1 — табличная; 2 — левый верхний угол задается в табличной системе, в «право,низ» — задается смещение относительно левого верхнего угла
Функция ДобавитьШК_Оквита(Лево, Верх, Право, Низ, ШК, ТипШК, Тип) — добавление штрих-кода (с помощью OcvitaBarcode) в таблицу, возвращает ссылку на добавленный объект OcvitaBarcode
- Лево, Право, Верх, Низ — координаты добавиления изображения в таблицу (см. «тип»)
- ШК — штрих-код для добавления в таблицу
- ТипШК — тип штрих-код для добавления в таблицу, можно передавать цифровой код или строковое название (доступные типы ШК см. ниже)
- Тип — тип системы координат: 0 — пиксельная; 1 — табличная; 2 — левый верхний угол задается в табличной системе, в «право,низ» — задается смещение относительно левого верхнего угла
Пример добавления в таблицу подписи с печатью
….
Таблица = СоздатьОбъект(«Таблица»);
//заполнение таблицы
….
Таблица.Показать();
Печ = СоздатьОбъект(«ИзображенияДляТаблицы»);
Печ.ПодключитьТаблицу(Таблица);
Печ.ЕстьПроизвольноеСмещение = 1;
Печ.ЕстьПроизвольныйПоворот = 0;
Печ.ДобавитьИзображение(2,5,70,50,»C:Подпись.gif»,2);
Печ.ЕстьПроизвольныйПоворот = 1;
Печ.ПроизвольныйПоворотНач = -15;
Печ.ПроизвольныйПоворотКон = 15;
Печ.ДобавитьИзображение(300,150,430,280,»C:Печать.gif»,0);
Обновление от 09.06.2012 версия 1.1
1. При повороте картинки — размер картинки увеличивается пропорционально углу поворота — раньше это увеличение картинки компенсировалось увеличением
втавляемого ОЛЕ-объекта, теперь новое изображение после поворота обрезается до первоначальных размеров — имхо — так более правильно.
2. Особенностью ActiveBMP является то, что изображение из файла подгружается в ОЛЕ-объект в момент визуального просмотра таблицы/отправки на печать. Поэтому при массовой вставке объектов с произвольным поворотом в таблицу получалось что при просмотре всей таблицы в ОЛЕ-объекты подгружалось последнее «повернутое» изображение (корректировка картинки работала через один файл во временном каталоге). Сейчас для каждого такого изображения создается свой уникальный файл во временном каталоге. Данные файлы удаляются при следующем создании объекта «ИзображенияДляТаблицы» — это накладывает некоторое ограничение — если сформировать таблицу несколько раз подряд (без печати и визуального просмотра всех страниц), то изображения на невидимых страницах всех таблиц, кроме последней, будут отсутствовать.
Обновление от 18.06.2012 версия 1.2
1. Добавлена возможность размещения в таблице текста и штрих-кода двумя способами: с помощью ActiveX элемент управления bmp_1c.ocx (ActiveBMP) и с помощью стандартного объекта «Текст» (базовый функционал одинаков, но у ActiveX возможностей все таки больше — возможно кому то это будет критично). При этом работает возможность произвольного смещения и поворота добавляемого объекта.
2. Процедуры добавления объекта переделаны в функции, с возвратом ссылки на добавляемый объект, чтобы после добавления можно было «поиграть» со свойствами этих объектов.
Обновление от 20.06.2012 версия 1.3
1. Добавлена поддержка ActiveX элемента управления OcvitaBarcode.ocx — с его помощью стал доступным вывод в таблицу практически любого ШК, в т.ч. дмухмерных с поддержой кириллицы. Фон для таких объектов непрозрачный (кстати, цвет изображения и фона можно настраивать в свойствах объекта), отсутствует возможность произваольного поворота (в свойствах объекта она есть, но при этом 1Ска закрывается с ошибкой).
Доступные типы ШК:
Пользоваться не буду т.к. 7.7 почти не пользуюсь, но автор красавчик!, столько разработок совместил, это непросто
http://infostart.ru/public/19856/
Кстати тут есть Разукрашка
при помощи нее можно раскрасить код
Еще нужно как минимум добавить свойство масштабирования картинки.
(2) Картинка масштабируется под размеры добавляемого в таблицу объекта… или я не так понял предложение в (2)?
Хорошо!
А как этим пользоваться?
это надо вставить в модуль формы или как ???
(5) это класс 1С++. Более подробно можно узнать наhttp://www.1cpp.ru .
(5) если необходимо без 1С++ — пожалуйста… код класса открыт — все процедуры/функции можно переносить непосредственно в модуль вывода таблицы и там их использовать…
однако если используешь 7.7 — настоятельно рекомендую посмотреть в сторону 1С++ — временные затраты на это окупятся многократно…
Плюс однозначный.
А как подобное с приличного объема картинками будет работать по скорости? Конкретнее- если использовать класс для пакетной печати пакета документов вместе с сертификатами (а они по 2-4Мб)? Тормоза будут?
(8) добавление оле-объектов происходит довольно шустро. Как то пробовал — около 20 печатей добавляются в довольно объемную таблицу — около 3-4 секунд, с учетом что все это дело печатается несколько минут — время на добавление изображений не критично. Там есть ньюанс, если собираешься сразу же отправлять на печать, не выводя на экран…
(9) Именно так и нужно, пакетная печать напрямую. А что за нюанс?
(10) ньюанс в том что добавление изображений происходит после метода таблицы «Показать()», поэтому в любом случае таблица будет отображена для пользователя.
Самый простой вариант в этом случае — использовать:
Однако при этом варианте пользователь все равно увидит мелькание выводимой таблицы
Другой вариант — использовать элемент управления «ПолеТабличногоДокумента«, предоставляемый TableDoc.dll. Этот элемент управления можно поместить, например, в скрытый слой и выводить таблицу туда. Оттуда и печатать.
Показать
где ПолеТДОтчет — элемент «кнопка» на скрытом слое формы…
Однако при данном методе уже не обойтись без 1С++ (либо как вариант можно попробовать FormEx)
(11) zarius Спасибо, буду пробовать второй вариант. 1С++ и extForms уже давно задействованы, без них никуда 🙂
(3)
Есть несколько же методов — растягивание под размер картинки, пропорцианально, оригинальный размер , сохранение пропорций + вписывание в окошко и т.д..
Вот это нужно в свойство класса воткнуть, у активбмп это есть.
А так, не совсем удобно размещать по пикселям — подходит только для статических форм.
У меня по 3-4 печати с подписями за раз выводится — мне проще в макете разместить картинку в выводимой секции.
Класс не качал, есть ли возможность вставить картинку относительно ячеек мокселя ?
Скажем в R1C122 — в левый верхний угол этой ячейки ?
Т.е задавать координаты ячейки, например.
Дочитал до пакетной печати… Не показывать не катит :((
Ладно — по старинке как то проще.
(13)
не вопрос — можно все свойства активбмп перенести в свойства класса — сейчас просто реализован самый простой — но самое главное — работающий вариант. Добавил объект необходимого размера на форму — и картинка будет именно этого размера. Когда игрался с другими свойствами активбмп — было какое то шаманство — на экране одно — при печати другое (читалhttp://www.1cpp.ru/forum/YaBB.pl?num=1297093976/10#10 — но рекомендации Z1 как то не особо помогли в этом плане).
а если надо не статические 3-4, а 20-30 в одной таблице, при этом места и состав подписей/печатей может меняться? 🙂
Может.
Тип — тип системы координат: 0 — пиксельная; 1 — табличная; 2 — левый верхний угол задается в табличной системе, в «право,низ» — задается смещение относительно левого верхнего угла
(14)
Так можно и показывать и не показывать — как душе угодно…
А в 1с 8.2 такая прога будет работать?
(16) именно эта — нет, однако нет ничего невозможного — уверен, что можно подобный функционал реализовать и на 8.2:
1. GFLAx — точно заработает
2. bmp_1c.ocx — скорее всего тоже должен заработать — надо пробовать
Осталось найти возможность программно добавлять ОЛЕ-объекты в таблицу 8.2
(16) да, для 8.2 все можно сделать…
>>
У меня все печати не статические, форма динамическая, размеры её разные, просто на 1 странице как правило 6 печатей и 6 подписей вылезает.
Подписи и печати от разных фирм + забит массив печатей + вывод от одной фирмы идет рандомный — «иммитация» как от руки..
Твоим способом, пришлось бы каждый раз вычислять положение 12 картинок на каждой страничке.. а как у меня — тупо вывод штатненько в макете, только картинки разные подсовываются.
По поводу «обрезания» картинок в активбмп, дык Z1 показал же как надо делать:
ActiveX.DstWidth = -1;
ActiveX.DstHeight = -1;
Да и .. Таб.Показать() как то не охота делать.
Да, страничек вылезает иной раз и по 100 штук.. следовательно картинок там — 600
🙂
(19) Если у тебя сейчас все работает — возможно лучше ничего и не трогать 🙂
У тебя расположение изображений (печати/подписи) в таблице статическое — при визуальном сравнении большого объема страниц — сразу выявляется закономерность в расположении печатей и подписей (тем более если есть повторяющиеся страницы). При использовании подхода, реализованного в классе — каждую печать/подпись можно сделать уникальной — вот здесь уже полноценная ««иммитация» как от руки..»
Эту рекомендацию и использую + «ActiveX.Function = 1;«, однако когда начинаю играть в другими свойствами — начинается шаманство… в общем думаю что самый простой вариант для доступа к свойствам АктивБМП — это переделать проц. ДобавитьИзображение(…) в функцию с возвратом ссылки на объект АктивБМП…
Чем не нравится решение в (11)? Конечно не совсем удобно — но тем не менее это решение…
Знакомые объемы… 🙂
OcvitaBarcode.ocx, надеюсь, бесплатная ?
(21) решение в (11) не нравится скоростью, любой вывод формы на экран — всегда медленно, чем сразу на принтёр.
(22)бесплатная, на сайте разработчика в архиве даже исходники естьhttp://ocvita.ru/content/view/89/1/ , все это дело построено на основе опенсорсного проекта — библиотеки zint http://www.sourceforge.net/projects/zint …
кстати,
, вот только надо ли оно — возможно изображение на слое под ШК сделает в этом случае ШК нечитаемым…
(24) тоже верно, но мне другие варианты пока на ум не приходят…
2. ActiveX элемент управления bmp_1c.ocx (ActiveBMP) — автор Морев Андрей (Z1) (http://1c.proclub.ru/modules/mydownloads/personal.php?lid=2725&cid=111) — используется непосредственно для отображения картинок в таблице (обязательно)
Это разве обязательно? Через стандартную картинку запросто можно все вывести.
(27) што именно ты через стандартную картинку выведешь ?
Печать с прозрачным фоном смогёшь?
🙂
И не просто так, а что еще и «динамически» картинка из файла всосалась ?
(28) Ёпрст, нет, но мне и не нужно.
(29) Ёпрст, в свойствах картинки(текст) пишешь ПриВыводеКартинки(Таб.ТекущийОбъект,Файл) и добавляешь в код:
Где файл — путь к готовой картинке. И эта функция будет вызываться при Таб.ВывестиСекцию.
Имхо если не нужны всякие повороты-перевороты, то в разы проще выходит.
А понимает ли Ocvita кириллицу? Просто если верить «На основе библиотеки zint», а с зинтом я уже крупно обломался, то какие еще есть пути?
(30) :)))))))))
Еще раз : «с прозрачным фоном»
Если че, активикс в этой работе нужен только для этих целей.
А как вставить картинку с прозрачным фоном статическую куда угодно, я и сам кого хошь научу.
(31) кириллицу понимает — проверено на QR Code
(33) ну так то да 8)
Спасибо, полезно для начала.
Пришлось долго копать о том, как подключать классы 1с++ к 1с.
Просьба автору добавить файл с комментарием, как данный класс подключать.
Мне как новичку пришлось угробить весь день элементарно для того чтобы понять что с этим файлом делать (.ert)/
Сначала думал, что все процедуры надо прописать в глобальном модуле.
Потом попробовал в обработке прописывать, не катило.
Короче весь мозг сломал угробил 3 часа и ничего не понял, как это все работает.
Все нужные плагину, указанные у вас установил, все норм.
Просьба для новичков инструкцию о том, как енто дело подключать к 1с.
(36) думаю нет смысла в каждой публикации классов 1С++ (а таких не мало на ИС) проводить ликбез для новичков. Вам достаточно ознакомиться с документациейВК 1С++ чтобы понять как и что подключать…
То, что Вам пришлось «долго копать» — думаю это время окупится многократно, если вы все еще на 7.7 и только начали смотреть в сторону 1С++.
(36) для начала — очень простая и доступная статья1С++ — это просто
а в PDF, что бы сохранялась прозрачность, можно как то сделать?
(39) а в чем проблема? формируете обычную таблицу (mxl), а потом сохраняете ее в PDF, например, через ёксель.
(40) формирую, и сохраняю, и печать перестает быть прозрачной((((
возможно использую не те длл, пути к ним в статье битые, и наверно то что нашел не совсем удачно, вы не могли бы мне прислать работающие дллки
(42) Напрямую ёксель в этом классе не используется, но результат работы этого класса, полученный в виде таблицы можно легко этой ВК сохранить как PDF. Документация и сама компонента доступна на сайте автора:Yoksel
(42) действительно сейчас есть проблемы с некоторыми ссылками на компоненты — напишите каких компонент не хватает — вышлю на почту
Добрый день. немогу скачать компаненты TableDoc.dll и bmp_1c.ocx.
(45)
http://www.1cpp.ru/forum/YaBB.pl?num=1177688915/0
TableDoc.dll —
bmp_1c.ocx — пришлите почту — вышлю индивидуально
Помогите найти bmp_1c.ocx. Пожалуйста.
(48) bmp_1c.ocx — отправил по почте
(49)
Низкий поклон.
Но…
Печ = СоздатьОбъект(«ИзображенияДляТаблицы»);
{Документ.ЗаказНаряд.Форма.Модуль(528)}: Неудачная попытка создания объекта (ИзображенияДляТаблицы)
Кого забыл подгрузить?
TableDoc не загрузился — соотв. класс ИзображенияДляТаблицы так же не грузится
Файл TableDoc.dll есть?
(51)
Есть FileVersion : 0, 1, 1, 45
И в каталог базы пихал, и в Bin
ЗагрузитьВнешнююКомпоненту(«TableDoc.dll») дает 1
и в модуле формы пробовал и в Глоб.Модуле
Может длл битый. Но больше найти тоже нигде не могу.
(52) Такое ощущение, что класс не определен в defcls.prm
(53)
Если честно — не понимаю что такое defcls.prm.
А нет случайно маленького рабочего примера?
Ну и с самой длл-кой.
У меня задача следующая:
Есть Документ — Заказ-Наряд. Печатная форма разделена на две части вертикально. Справа 3 табличные части в разными количествами строк (Может быть 15,2,4, а может 3,14,3). А слева рисунок примерно на 25 строк. Хочется как-то оптимальненько реализовать.
(54) если внимательно почитать заголовок, то в нем можно увидеть «Класс 1С++»
1cpp.ru . Если совсем по простому — статья 1С++ — это просто .
Как подключать классы 1С++ — необходимо смотреть документацию на
В вашем случае надо создать файл в каталоге ИБ (если его еще нет) defcls.prm и добавить в него определение для класса ИзображенияДляТаблицы:
Соотв. в каталоге ИБ в каталог Классы положить обработку с классом из данной публикации.
А вообще данные вопросы уже поднимались в обсуждении — (37) (38).
а не поможет кто с компонентой bmp_1c.ocx — нигде живую ссылку найти не могу??
а то без нее походу не заводится
email: gamlet77@gmail.com
(56) отправил
(57) спасибо.
Однако не работает: bmp картинку выводит (при этом цвета корявит со страшной силою), все что не bmp не выводит вообще — выдает пустой объект. GFLAx вроде подключен (по крайней мере не ругается на него). В чем может быть проблема?
Показать
(58) если не выводит ничего кроме bmp — значит проблемы с GFLAx, ибо именно он перед выводом конвертирует изображение в bmp.
(57)
Добрый день.
И мне скиньте плиз bmp_1c.ocx на
dutoff@rambler.ru
(60) отправил
Добрый вечер.
Можно и мне bmp_1c.ocx на info@1carhipov.ru ?
(62) вышлю в понедельник
(63)
Добрый вечер.
Пожалуйста пришлите и мне bmp_1c.ocx на 721505@bk.ru
Заранее спасибо!
(64)
выслал
Добрый вечер.
Пожалуйста пришлите bmp_1c.ocx на penetralia@rambler.ru
Заранее спасибо!
(66)
выслал
Благодарю!
Добрый вечер.
Можно и мне bmp_1c.ocx на alexregis@bk.ru ?
Заранее спасибо!
(69) выслал
Пожалуйста пришлите bmp_1c.ocx на kras_71@mail.ru
(71) выслал
Доброго времени суток!
Если не трудно, вышлите bmp_1c.ocx на nk374@mail.ru
Заранее спасибо.
(73) выслал
Доброе время суток!
Пожалуйста, вышлите TableDoc.dll и bmp_1c.ocx на sergu1963@yandex.ru.
Заранее благодарю.
(78) выслал
Прошу скинуть bmp_1c.ocx и text_1c.ocx на aleksdbs@gmail.com
Прошу скинуть bmp_1c.ocx и text_1c.ocx на aleksdbs@gmail.com
Спасибо!
(81) выслал
Приветствую!
Я со стандартным в этой теме вопросом, тоже прошу скинуть bmp_1c.ocx и text_1c.ocx на sergenii@mail.ru
Заранее, спасибо!
(83) выслал
Если Вас не затруднит — скиньте bmp_1c.ocx и text_1c.ocx на nikservice[собака]rambler.ru. Спасибо!
P.S.: Если не сложно, с примером использования в 1с 77
(85) Выслал. Пример добавления в таблицу подписи с печатью есть в описании публикации.
Добрый день.
Я с тем же вопросом, прошу скинуть bmp_1c.ocx и text_1c.ocx на igorms1342@gmail.com
Заранее, спасибо!
(87) выслал
Прошу скинуть bmp_1c.ocx и text_1c.ocx
Заранее, спасибо!
(87) (89) отправил ссылку через ЛС
Прошу скинуть bmp_1c.ocx и text_1c.ocx на systemaooo@gmail.com
Спасибо!
проблема не вставить картинку. проблема чтобы прайс с каринками, даже достаточно маленькими не весил по 15-25 Мб в экселе.
(92) выслал
(93) ActiveBMP работает только с bmp — отсюда и размер. В моих задачах не было необходимости сохранять итоговые таблицы (только печать), поэтому проблемой размера не озадачивался. Возможно проблема решится архивированием итоговой таблицы?
(95) частично решается. но это костыль.