v7: 1С и Corel Draw #569791


#0 by VanoZZZ
Требуется выгрузить этикетку номенклатуры в корел. Есть шаблон этикетки в кореле. Обработкой подменяю надписи в шаблоне на нужные и сохраняю в отдельный файл. С этим проблем нет. Но на этикетке есть штрих-код. Вот как бы его сформировать и в виде картинки передать в корел?
#1 by Vladal
А в шаблоне корела картинка штрихкода в каком виде хранится? Бинарно или ссылка на внешний файл?
#2 by Базис
В кореле можно использовать VBA или что-то ещё скриптовое. Передавать корелу надо не картинку (он сам по себе неплохо картинки рисует), а строку.
#3 by Vladal
Тогда, по идее, передали строку со штрихкодом, а VBA или чем-там-еще этот код преобразовать в картинку. Вот еще одна тема:
#4 by Vladal
Здесь краткое описание
#5 by VanoZZZ
Там вроде как картинка. При двойном клике по нему пишет приложение сервер не найдено или что то типа того (я не рисовал этот шаблон, мне его переслали). В менеджере объектов стоит тип OLE
#6 by VanoZZZ
Владал спасибо за ссылки. Завтра посмотрю. В половине девятого вечера уже все равно ничего не пойму
#7 by VanoZZZ
так вба и использую. Вопрос в том как корел научить рисовать штрих-коды
#8 by 1Сергей
в кореле встроена приблуда для рисования штрих-кодов, есичо
#9 by VanoZZZ
если не сложно нет ли примера как через активХ его заставить рисовать?
#10 by 1Сергей
вот этого никогда не делал
#11 by VanoZZZ
Подниму темку, может все же кто-нибудь подскажет. Пока выяснил только то, что на самом деле корел нифига сам штрих-коды рисовать не умеет. Штрих-код формирует внешняя прога (BarCode.exe) и к сожалению через оле к ней не подключится. Я так понял только параметры можно передать, а дальше сендкейсами только и она вернет картинку штрих-кода. Может и не правильно понял что то.
#12 by kittystark
не смотрел (3,4), на VBA можно поступить так: пробежать в цикле по всем шейпам на кореловской странице, если shape.Type = cdrOLEObjectShape то текущий объект - штрих-код (если других OLE объектов не вставлял) и ему уже подпихнуть "нажатия" нужных клавиш, для EAN-13 подойдет For Each shape In ActiveLayer.Shapes        shape.OLE.Activate Next корректно будет работать в кореле начиная с 13-ой версии, в 12-ой были замечены глюки
#13 by VanoZZZ
мне кажется этот код не может работать в 1С. Только в самом кореле. Да и сендкейсы то куда посылать, если у меня корел то не открыт когда по оле подключаюсь
#14 by DGorgoN
Тупой вопрос - а что мешает экспортировать из корела в 1с, а уже в 1с всякую инфу добавлять. Имхо печатать этикетки постоянно через корел это изврат =)
#15 by VanoZZZ
Да я понимаю, что рисовать 1Ской в кореле мягко говоря не умно, но почему то только корел катит. Я не знаю почему. Это для поставщиков из Китая.
#16 by kittystark
лень корел ставить, проверять, ты случайно не макеты для пластиковых карточек с уникальными штрих-кодами шарашишь? если после вызова objCorelApp.BarcodeShape.OLE.Activate окошко для ввода данных штрих-кода не появится, можно попытаться главному окну процесса OLE-corela послать виндовое сообщение SW_SHOW, окошко самого корела станет видимым... и тогда... вообщем надо экспериментировать как вариант в макет отчета 1С вставить все нужные объекты, а CorelBarcode заменить на ActiveBarcode и с ним уже упражняться
#17 by kittystark
да, кстати, если уж так надо китайским поставщикам макеты корела, а что мешает написать VBA-скрипт для корела, который будет подрубаться по OLE к нужной базе 1С и из нее тянуть данные, подставляя в макет ?
#18 by VanoZZZ
Не. Этикетки на коробки с товаром. после вызова objCorelApp.BarcodeShape.OLE.Activate Doc.Pages.Shapes.OLE    {}: Ошибка при получении значения атрибута контекста (OLE)     А вот сделать штрих-код в 1Ске и подменить его в кореле надо попробовать Не подойдет к сожалению. Пользователь выбирает группы товаров на которые нужны этикетки
#19 by VanoZZZ
Вообще конечно можно попробовать скриптом, но боюсь как бы там та же фигня не была как в 1С. Такое впечатление, что чтобы поменять штрих-код в кореле, корела не достаточно. Надо видимо как то передавать его в прогу, в которой он был сформирован (ActiveBARCODE или Corel BARCODE).
#20 by kittystark
не боись и верь в себя, код подобный , правда чуть более навороченный (с проверками успешности подпихивания всех данных, в т.ч. с работой через буфер обмена), а здесь приведен только "цимус", работает уже не первый год по нескольким пластиково-карточным конторам, правда в качестве источника данных используется экселевский файл, открываемый по OLE, заменить эксель на OLE-1с совсем не проблема
#21 by VanoZZZ
Vladal kittystark Спасибо!!! Моя проблема в том, что я не только тупой, но и слепой((((( Вместо Doc.Pages.Shapes.OLE.Activate писал Doc.Pages.Shapes.Activate
#22 by VanoZZZ
У меня почему то останавливается выполнение кого на строчке       shape.OLE.Activate открывается окно для редактирования штрих-кода. Дальше код выполняется только после закрытия этого окна. Пробовал и скриптом и в 1С
#23 by VanoZZZ
))) выполнение кого => выполнение кода
#24 by Vladal
Зачем активате? надо присваивать значение. Посмотри ссылки - я там кажется, находил.
#25 by VanoZZZ
Я смотрел ссылки и не раз. Да я уже весь инет перерыл и так и не нашел ничего, чтобы работало
#26 by VanoZZZ
активлю по примеру kittystark
#27 by kittystark
странно, попробуй после активэйта вместо одинарного вызова цикл shape.OLE.Activate While shape.OLE.IsServerRunning    DoEvents Wend задержку Sleep с каким параметром вызываешь ?
#28 by KRV
Зачем эту бурду в Базу знаний?
#29 by VanoZZZ
Так у меня код тупо стопорится на shape.OLE.Activate пока открывшееся окно не закрою
#30 by VanoZZZ
это пока черновик. вот весь скрипт Set Doc=Corel.OpenDocument("C:Documents and SettingssmivanРабочий столH625A-02-1810-LIANXUN.cdr") For Each Shape IN Doc.Pages.Shapes    Shape.OLE.Activate Doc.Save
#31 by kittystark
смущает то, что DoEvents вызывается вне кореловского контекста, попробуй сначала это код (без первых трех строк) выполнить из-под VBA самого корела (открытие из корела вроде по комбинации Alt+F11) или же попробовал бы вызвать конструкции что-то типа Corel.DoEvents или Corel.Application.DoEvents - вдруг прокатит (лень ставить корел и самому проверять), хотя больше уверен, что не сработает ну и судя по коду у тебя в макете шейпы это только штрих-коды и никаких текстов/линий/фигурок, т.к. проверки If shape.Type = cdrOLEObjectShape Then ... я не вижу кстати, что с вариантом ?
#32 by VanoZZZ
В кореле у меня только один штрих-код, все остальное удалил пока. Так отлаживать удобнее. Не получилось. Я же говорю, что на строчке shape.OLE.Activate открывается окно редактирования штрих-кода и дальше код не выполняется, пока окно не закроешь. Соответственно окно уже закрыто, сендкейсы уже не кому посылать. Щас идейка появилась. Штрих-код сформировать в 1С, копирнуть в буфер (CopyToClipboard или CopyToClipboardBySize(,)). Предварительно сделать рамку в кореле нужного размера в нужном месте на листе. Потом уже программно выделить его и сендкейсом вставить из буфера, т.е. заменить рамку на штрих-код из буфера. Онанизм конечно, но меня уже любой вариант устроит, неделю сделать не могу.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С