Имя: Пароль:
1C
1C 7.7
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(,)). Предварительно сделать рамку в кореле нужного размера в нужном месте на листе. Потом уже программно выделить его и сендкейсом вставить из буфера, т.е. заменить рамку на штрих-код из буфера. Онанизм конечно, но меня уже любой вариант устроит, неделю сделать не могу.