|
v7: 1С и Corel Draw | ☑ | ||
---|---|---|---|---|
0
VanoZZZ
15.09.11
✎
15:50
|
Требуется выгрузить этикетку номенклатуры в корел. Есть шаблон этикетки в кореле. Обработкой подменяю надписи в шаблоне на нужные и сохраняю в отдельный файл. С этим проблем нет. Но на этикетке есть штрих-код. Вот как бы его сформировать и в виде картинки передать в корел?
|
|||
1
Vladal
15.09.11
✎
16:16
|
А в шаблоне корела картинка штрихкода в каком виде хранится? Бинарно или ссылка на внешний файл?
|
|||
2
Базис
naïve
15.09.11
✎
16:19
|
В кореле можно использовать VBA или что-то ещё скриптовое.
Передавать корелу надо не картинку (он сам по себе неплохо картинки рисует), а строку. |
|||
3
Vladal
15.09.11
✎
16:27
|
Тогда, по идее, передали строку со штрихкодом, а VBA или чем-там-еще этот код преобразовать в картинку.
http://www.corel-lessons.com/?tag=%d1%88%d1%82%d1%80%d0%b8%d1%85-%d0%ba%d0%be%d0%b4-%d0%b2-corel-draw-x3 Вот еще одна тема: http://forum.rudtp.ru/showthread.php?t=30933 |
|||
4
Vladal
15.09.11
✎
16:28
|
Здесь краткое описание http://code.google.com/p/postscriptbarcode/
|
|||
5
VanoZZZ
15.09.11
✎
18:23
|
(1) Там вроде как картинка. При двойном клике по нему пишет приложение сервер не найдено или что то типа того (я не рисовал этот шаблон, мне его переслали). В менеджере объектов стоит тип OLE
|
|||
6
VanoZZZ
15.09.11
✎
18:25
|
Владал спасибо за ссылки. Завтра посмотрю. В половине девятого вечера уже все равно ничего не пойму
|
|||
7
VanoZZZ
15.09.11
✎
18:32
|
(2) так вба и использую. Вопрос в том как корел научить рисовать штрих-коды
|
|||
8
1Сергей
15.09.11
✎
19:11
|
(7) в кореле встроена приблуда для рисования штрих-кодов, есичо
|
|||
9
VanoZZZ
15.09.11
✎
19:48
|
(8) если не сложно нет ли примера как через активХ его заставить рисовать?
|
|||
10
1Сергей
15.09.11
✎
19:57
|
(9) вот этого никогда не делал
|
|||
11
VanoZZZ
19.09.11
✎
11:34
|
Подниму темку, может все же кто-нибудь подскажет. Пока выяснил только то, что на самом деле корел нифига сам штрих-коды рисовать не умеет. Штрих-код формирует внешняя прога (BarCode.exe) и к сожалению через оле к ней не подключится. Я так понял только параметры можно передать, а дальше сендкейсами только и она вернет картинку штрих-кода. Может и не правильно понял что то.
|
|||
12
kittystark
19.09.11
✎
19:02
|
не смотрел (3,4), на VBA можно поступить так:
пробежать в цикле по всем шейпам на кореловской странице, если shape.Type = cdrOLEObjectShape то текущий объект - штрих-код (если других OLE объектов не вставлял) и ему уже подпихнуть "нажатия" нужных клавиш, для EAN-13 подойдет For Each shape In ActiveLayer.Shapes If (shape.Type = cdrOLEObjectShape) Then shape.OLE.Activate DoEvents Sleep my_delay_ms SendKeys "" & my_barcode, True SendKeys "{ENTER}{ENTER}{ENTER}", True While sh.OLE.IsServerRunning DoEvents Wend End If Next корректно будет работать в кореле начиная с 13-ой версии, в 12-ой были замечены глюки |
|||
13
VanoZZZ
20.09.11
✎
08:27
|
(12) мне кажется этот код не может работать в 1С. Только в самом кореле. Да и сендкейсы то куда посылать, если у меня корел то не открыт когда по оле подключаюсь
|
|||
14
DGorgoN
20.09.11
✎
08:40
|
Тупой вопрос - а что мешает экспортировать из корела в 1с, а уже в 1с всякую инфу добавлять.
Имхо печатать этикетки постоянно через корел это изврат =) |
|||
15
VanoZZZ
20.09.11
✎
08:52
|
(14) Да я понимаю, что рисовать 1Ской в кореле мягко говоря не умно, но почему то только корел катит. Я не знаю почему. Это для поставщиков из Китая.
|
|||
16
kittystark
20.09.11
✎
08:55
|
(13) лень корел ставить, проверять, ты случайно не макеты для пластиковых карточек с уникальными штрих-кодами шарашишь?
если после вызова objCorelApp.BarcodeShape.OLE.Activate окошко для ввода данных штрих-кода не появится, можно попытаться главному окну процесса OLE-corela послать виндовое сообщение SW_SHOW, окошко самого корела станет видимым... и тогда... вообщем надо экспериментировать как вариант в макет отчета 1С вставить все нужные объекты, а CorelBarcode заменить на ActiveBarcode и с ним уже упражняться |
|||
17
kittystark
20.09.11
✎
09:06
|
да, кстати, если уж так надо китайским поставщикам макеты корела, а что мешает написать VBA-скрипт для корела, который будет подрубаться по OLE к нужной базе 1С и из нее тянуть данные, подставляя в макет ?
|
|||
18
VanoZZZ
20.09.11
✎
09:08
|
(16) Не. Этикетки на коробки с товаром.
после вызова objCorelApp.BarcodeShape.OLE.Activate Doc.Pages(1).Shapes(1).OLE {(1)}: Ошибка при получении значения атрибута контекста (OLE) А вот сделать штрих-код в 1Ске и подменить его в кореле надо попробовать (17) Не подойдет к сожалению. Пользователь выбирает группы товаров на которые нужны этикетки |
|||
19
VanoZZZ
20.09.11
✎
09:14
|
(17) Вообще конечно можно попробовать скриптом, но боюсь как бы там та же фигня не была как в 1С. Такое впечатление, что чтобы поменять штрих-код в кореле, корела не достаточно. Надо видимо как то передавать его в прогу, в которой он был сформирован (ActiveBARCODE или Corel BARCODE).
|
|||
20
kittystark
20.09.11
✎
09:39
|
(19) не боись и верь в себя, код подобный (12), правда чуть более навороченный (с проверками успешности подпихивания всех данных, в т.ч. с работой через буфер обмена), а здесь приведен только "цимус", работает уже не первый год по нескольким пластиково-карточным конторам, правда в качестве источника данных используется экселевский файл, открываемый по OLE, заменить эксель на OLE-1с совсем не проблема
|
|||
21
VanoZZZ
20.09.11
✎
13:29
|
Vladal
kittystark Спасибо!!! Моя проблема в том, что я не только тупой, но и слепой((((( Вместо Doc.Pages(1).Shapes(1).OLE.Activate() писал Doc.Pages(1).Shapes(1).Activate() |
|||
22
VanoZZZ
22.09.11
✎
13:33
|
У меня почему то останавливается выполнение кого на строчке
shape.OLE.Activate открывается окно для редактирования штрих-кода. Дальше код выполняется только после закрытия этого окна. Пробовал и скриптом и в 1С |
|||
23
VanoZZZ
22.09.11
✎
15:32
|
)))
выполнение кого => выполнение кода |
|||
24
Vladal
22.09.11
✎
15:34
|
Зачем активате? надо присваивать значение. Посмотри ссылки - я там кажется, находил.
|
|||
25
VanoZZZ
22.09.11
✎
15:45
|
(24) Я смотрел ссылки и не раз. Да я уже весь инет перерыл и так и не нашел ничего, чтобы работало
|
|||
26
VanoZZZ
22.09.11
✎
15:46
|
(24) активлю по примеру kittystark
|
|||
27
kittystark
22.09.11
✎
19:01
|
странно, попробуй после активэйта вместо одинарного вызова цикл
shape.OLE.Activate While shape.OLE.IsServerRunning DoEvents Wend задержку Sleep с каким параметром вызываешь ? |
|||
28
KRV
22.09.11
✎
19:27
|
Зачем эту бурду в Базу знаний?
|
|||
29
VanoZZZ
23.09.11
✎
07:36
|
(27) Так у меня код тупо стопорится на
shape.OLE.Activate пока открывшееся окно не закрою |
|||
30
VanoZZZ
23.09.11
✎
07:38
|
это пока черновик. вот весь скрипт
Set WshShell = WScript.CreateObject("WScript.Shell") Set Corel = CreateObject("CorelDRAW.Application") Set Doc=Corel.OpenDocument("C:\Documents and Settings\smivan\Рабочий стол\H625A-02-1810-LIANXUN.cdr") For Each Shape IN Doc.Pages(1).Shapes Shape.OLE.Activate DoEvents Sleep 15000 WshShell.SendKeys "{TAB}{9999999}{ENTER}",True Next Doc.Save() |
|||
31
kittystark
23.09.11
✎
09:45
|
(30) смущает то, что DoEvents вызывается вне кореловского контекста, попробуй сначала это код (без первых трех строк) выполнить из-под VBA самого корела (открытие из корела вроде по комбинации Alt+F11)
или же попробовал бы вызвать конструкции что-то типа Corel.DoEvents или Corel.Application.DoEvents - вдруг прокатит (лень ставить корел и самому проверять), хотя больше уверен, что не сработает ну и судя по коду у тебя в макете шейпы это только штрих-коды и никаких текстов/линий/фигурок, т.к. проверки If shape.Type = cdrOLEObjectShape Then ... я не вижу кстати, что с вариантом (27)? |
|||
32
VanoZZZ
23.09.11
✎
10:05
|
(31) В кореле у меня только один штрих-код, все остальное удалил пока. Так отлаживать удобнее.
(27) Не получилось. Я же говорю, что на строчке shape.OLE.Activate открывается окно редактирования штрих-кода и дальше код не выполняется, пока окно не закроешь. Соответственно окно уже закрыто, сендкейсы уже не кому посылать. Щас идейка появилась. Штрих-код сформировать в 1С, копирнуть в буфер (CopyToClipboard() или CopyToClipboardBySize(,)). Предварительно сделать рамку в кореле нужного размера в нужном месте на листе. Потом уже программно выделить его и сендкейсом вставить из буфера, т.е. заменить рамку на штрих-код из буфера. Онанизм конечно, но меня уже любой вариант устроит, неделю сделать не могу. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |