Имя: Пароль:
IT
 
Отправка 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" + " " + ИмяПортаПринтера);
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн