![]() |
![]() |
![]() |
|
Отправка EPL-команд на принтер | ☑ | ||
---|---|---|---|---|
0
-Ze-
22.12.10
✎
12:16
|
Кто сталкивался, объясните, каким образом можно передавать код EPL на принтер?
Я думал, что должен быть COM-компонент, предоставляемый производителем, но для своего принтера найти таковой не смог. На этом форуме видел, люди писали о каком то методе "через COPY", это было бы даже лучше, меньше промежуточного кода. Растолкуйте пожалуйста, как это организовывается, и если может еще есть способы. Спасибо. |
|||
1
SIF
22.12.10
✎
12:33
|
хм. если правильно понял. сначала формируешь файл с командами, потом копируешь его в порт куда подключен принтер (lpt1, com1..n). "copy файл lpt1" например.
|
|||
2
famnam
22.12.10
✎
13:15
|
copy con lpt
... текст на принтер ... CTRL+Z |
|||
3
-Ze-
22.12.10
✎
13:21
|
Ага, в принципе понятно. Только вопрос: как с USB-подключением такое организовать? На USB мы же не можем тупо слать "поток байт"...
|
|||
4
famnam
22.12.10
✎
13:34
|
если этот принт расшарить то можно произвести переназначение
net use lpt2 \\comp\printer |
|||
5
-Ze-
22.12.10
✎
13:59
|
Совсем забыл, спасибо! :)
|
|||
6
-Ze-
24.12.10
✎
16:18
|
Еще вопрос.
В данный момент это надо делать из кода 1С:Предприятие 8, у которого есть два стандартных метода для вызова приложений: 1. КомандаСистемы(). 2. ЗапуститьПриложение(). Нужно сделать, печать выполнялась в фоне для пользователя(т.е. чтобы пользователю не выскакивало окно командного интерпретатора Windows). Через ЗапуститьПриложение() у меня ничего не получилось, так как в этом случае вызов идет минуя командный интерпретатор. Команда системы отлично выполняет команду "copy con LPT3", но как передать текст (сэмулировать ручной ввод текста для con) - непонятно. SIF писал: "сначала формируешь файл с командами, потом копируешь его в порт", но чтобы создать файл - опять же, надо использовать copy con! С нетерпением жду советов. |
|||
7
Torquader
24.12.10
✎
18:28
|
А слабо написать ActiveX объект, который будет копировать данные в порт принтера и возвращать результат более разумный, чем команда Copy ?
|
|||
8
-Ze-
24.12.10
✎
18:37
|
Да не слабо, но надо ли?
|
|||
9
-Ze-
24.12.10
✎
18:41
|
И не "ActiveX объект", а "Компонент COM", если быть точным.
|
|||
10
mr_fix
24.12.10
✎
19:01
|
> сначала формируешь файл с командами
copy con c:\epl.txt (не в 1С а в командной строке, получишь нужный тебе файл с необходимыми командами или хоть в блокноте сделай в необходимом количестве. >потом копируешь его в порт (в 1С уже _готовый_ файл) copy c:\epl.txt LPT3 Зачем эмулировать? :) |
|||
11
-Ze-
24.12.10
✎
19:18
|
Мне нужно в режиме выполнения генерировать EPL-код и печатать. У меня нет понятия "готовая этикетка", ее содержание и формат должны строиться "на лету".
|
|||
12
mr_fix
25.12.10
✎
10:49
|
echo команда
или сразу на принтер echo команда > LPT3 не подойдет? |
|||
13
-Ze-
25.12.10
✎
12:24
|
Да, с помощью echo работает. Единственное замечание - так как каждая команда языка EPL должна завершаться символом #CR, применяя echo каждую строчку кода EPL надо отправлять отдельной командой echo.
mr_fix, спасибо за идею, не пришлось писать компонент :) |
|||
14
mr_fix
26.12.10
✎
08:42
|
Какими символами? парой Chr(10)Chr(13) ?
К примеру набираем в коммандной строке echo ааа<Alt-10><Alt-13>ббб<Alt-10><Alt-13> получится ааа ббб (столбиком), то есть так как надо |
|||
15
-Ze-
26.12.10
✎
12:04
|
Да, если "набираем в коммандной строке", то все отлично, но если передавать весь этот текст одной командой echo, то выполняется только последняя.
|
|||
16
-Ze-
26.12.10
✎
12:05
|
Передавать команде echo не с клавиатуры, имеется в виду.
|
|||
17
mr_fix
26.12.10
✎
13:05
|
(16) а если вывод echo передать в файл и посмотреть что там получится? а потом этот файл командой copy на lpt?
|
|||
18
-Ze-
26.12.10
✎
13:11
|
Можно и так, но смысл создавать "одноразовый файл"?
|
|||
19
mr_fix
26.12.10
✎
13:37
|
(18) Посмотреть что тогда выполнится - весь или последняя команда :)
|
|||
20
Скептик
26.12.10
✎
16:21
|
...а ещё есть такая штука как квитирование и таймауты.
|
|||
21
-Ze-
26.12.10
✎
19:10
|
Естественно, без таймаутов вообще ничего не передашь.
|
|||
22
-Ze-
27.12.10
✎
11:34
|
Вот только еще один важный момент, о котором я уже писал. Надо чтобы пользователю не выскакивало окно командного интерпретатора Windows, которое появляется всегда при вызове консольных команд, не важно, создаем ли мы файл, а потом его печатаем, либо печатаем напрямую...
|
|||
23
mr_fix
27.12.10
✎
13:36
|
(22)
Можно попробовать извратиться: Написать cmd файл вида: @echo off echo %1% >LPT1 скомпилировать его в exe напр MyPrint.exe утилиткой - там есть возможность сделать скрытое приложение (процесс) которое не выдает окон. а потом через ЗапуститьПриложение() передавая нужную строку в виде параметра. Так можно избавиться от интерпретатора. Погугли Bat_To_Exe_Converter называется утилитка |
|||
24
Адинэснег
27.12.10
✎
13:47
|
дешевле в 1С и строить на лету...
|
|||
25
-Ze-
27.12.10
✎
13:51
|
mr_fix, сурово :)
Сейчас пробую сделать на VBScript, его функциями передачи данных в порт, минуя cmd. Постоянно эти переносы строк в EPL все усложняют. |
|||
26
SIF
27.12.10
✎
13:56
|
(22) в 8-ке есть команда Копироватьфайл? наподобие в 7ке
КопироватьФайл(<?>,,); Синтаксис: КопироватьФайл(<ИмяФайлаИсточника>,<ИмяФайлаПриемника>,<ФлагПерезаписи>) Назначение: Копирует файл. Параметры: <ИмяФайлаИсточника> - строка с именем файла источника; <ИмяФайлаПриемника> - строка с именем файла приемника; Думаю можно и без консольных команд в порт отправить. По крайней мере в 7ке можно. Примерно так: ФС.КопироватьФайл("c:\1.txt","LPT1",0); |
|||
27
mr_fix
27.12.10
✎
14:02
|
(24) Напишу dll. Дорого. :)
|
|||
28
-Ze-
27.12.10
✎
14:04
|
Команда есть такая.
1. Как ей задать копирование в порт? (на ИмяФайлаПриемника = "LPT3" ругается: "Неправильный путь к файлу"). 2. Как создать этот файл средствами 1С минуя командный интерпретатор Windows? |
|||
29
-Ze-
27.12.10
✎
14:06
|
mr_fix, dll-то можно написать, но это времени все же побольше займет, неужели 1С настолько плох???
|
|||
30
mr_fix
27.12.10
✎
14:11
|
(29) >>неужели 1С настолько плох???
Ну, тут не мне судить :) |
|||
31
SIF
27.12.10
✎
14:21
|
(28) к сожалению по 8ке не могу помочь. Но в 7ке это работает
|
|||
32
-Ze-
28.12.10
✎
12:18
|
Вот еще примитивный вариант (через файл). В 1С есть тип "ТекстовыйДокумент".
ТекстДок = Новый ТекстовыйДокумент; Для Каждого СтрокаEPL Из Этикетка Цикл ТекстДок.ДобавитьСтроку("..."); КонецЦикла; ТекстДок.Записать("PrinterCommands.txt"); КомандаСистемы("copy PrinterCommands.txt" + " " + ИмяПортаПринтера); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |