Отправка EPL-команд на принтер #524210


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

В этой группе 1С