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