Печать на разные типы принтеров с одного компьютера.
5 (1)
Печать на разные типы принтеров с одного компьютера. ( Враг 22.10.2013 16:20 )
5(1)Задача - при работе одного макроса изменять направление печати, т.е. что-то выходит на принтер по умолчанию(используя опцию DEF в настройках пользователя), а что-то на цветной. Конечно желательно чтоб на цветной выходило и без участия сотрудника, т.е. как прилагательное к основному документу.
Может кто-то использовал, что заложено в RS-Balance/RS-Bank, печатать через $PRN1, $PRN2, ......$PRN10. Которые я могу описать в balance.ini или term.ini. Но как вставить этот параметр в макрос и применить - ни где нет примера. Или как это можно выбирать по другому, типа из списка при печати. Тайна покрыта мраком. Описалово, что да можно сделать есть, а как применить - НЕТ.
Если кто подскажет с меня причитается......... Или укажите доку, где это описано применение.
>> ОтветитьПро печать ( Гуцу 22.10.2013 16:27 )
5(1)Привет, а вы делаете печать сразу на принтер, без вывода на экран? Что-то вроде exit(2), если я не ошибаюсь?
>> ОтветитьДа хоть как. Укажите что сделать. Алчу решения. ( Враг 22.10.2013 17:16 )
5(1)тут или где то была программка sprint ( p2p 22.10.2013 18:05 )
5(1)ну и перед печатью например спрашивать - печатать через sprint?
что то типа такого:
if(evd_ЮзерВходитВГруппу({oper}, "sprint")) if(gettrue(true,"печать будет через sprint?")) fn=getIniString( "TEXTDIR" )+"\\sprint\\"+{oper}+"\\mo"+evd_datestr(dt)+"-"+evd_timestr(time())+".txt"; delfile(fn); setoutput(fn, true); end; else //println("\x1B(3R\x1B(s0p16.67h7.0v0s0b3T\x1B&l0O\x1B&l5c"); end;
ну и настроить на компе пользователя печать через sprint
>> Ответитьеще вариант ( p2p 22.10.2013 18:09 )
5(1)подцепить принтер через net use LPT2: \\<имясервера>\<имяпринтера>
а потом напрямую туда файлик отправлять:
dcCopyFile(fn,"LPT2",false);
>> ОтветитьСорри, проглядел ) ( Гуцу 22.10.2013 18:12 )
5(1)С выводом на экран то просто - Alt-P, в устройстве вывода PRN1, установить, F7 - и всё уходит на этот PRN1. Но вам то нужно часть на один принтер, часть на другой, а возможность прямо из RSL запускать печать в процессо формирования отчёта мне пока не известна. Возможно, действительно, поможет внешняя программа.
>> ОтветитьЕсть проблемы, точнее трудности ( Враг 22.10.2013 19:13 )
5(1)Команды типа
1. Copy /b %1 LPT2:
2. Print /D:\\Srv1\HP_3015DN %1
Не работают.
Долго искал что-то под себя чтоб заработало и нашел
1. http://members.softlab.ru/kubrin/Files/printers.htm
2. Почти аналогичные слова в описание по серверу приложений
PRINTER – имя принтера, доступного непосредственно с клиентской рабочей
станции.
Данный параметр является устаревшим. В настоящее время
рекомендуется направлять данные на печать с использованием
псевдонимов принтеров (см. параметр PRNxxxxxx).
PRNxxxxxx – набор имен принтеров, на которые терминал сможет осуществлять
печать при выполнении бизнес-процедур.
Вроде слова правильные и вроде должно быть просто, а нет.
P.S. Поробовал Alt-P - просто печатает, без выбора. Хотя если такое должно быть - скажите что подправить, чтоб был вызов списка принтеров.
>> ОтветитьПопробуй через Word (+) ( григ 23.10.2013 09:21 )
5(1)У объекта Word.Application есть свойство ActivePrinter. А у документа (f.e. Word.Application.ActiveDocument) есть метод PrintOut
Из доки:
ActivePrinter Property
See Also Applies To Example Specifics
Returns or sets the name of the active printer. Read/write String.
Example
This example displays the name of the active printer.
MsgBox "The name of the active printer is " & ActivePrinter
This example makes a network HP LaserJet IIISi printer the active printer.
Application.ActivePrinter = "HP LaserJet IIISi on \\printers\laser"
This example makes a local HP LaserJet 4 printer on LPT1 the active printer.
Application.ActivePrinter = "HP LaserJet 4 local on LPT1:"
>> ОтветитьApplication.ActivePrinter меняет принтер по умолчанию в системе ( yukson 29.10.2013 15:02 )
5(1)А как написать в RSL такую штуку:
With Dialogs(wdDialogFilePrintSetup) .Printer = "\\cmp-118v4\HP LaserJet 400 M401 PCL 6" .DoNotSetAsSysDefault = True .Execute End With Application.PrintOut
пробовал так, ошибок не выдает но принтер не меняет и печатает на тот что по умолчанию:
import rcw; var word; If (IsStandAlone()) word = ActiveX( "Word.Application", Null, true ); Else var axServer = CreateObject( "rsax", "TRsAxServer", "RetailAxServer", isStandalone() ); if( axServer ) word = axServer.CreateComObject( "Word.Application" ); end; End; var wdDialogFilePrintSetup=97; word.application.dialogs(wdDialogFilePrintSetup).Printer="HP LaserJet 400 M401 PCL 6"; word.application.dialogs(wdDialogFilePrintSetup).DoNotSetAsSysDefault=true; word.application.dialogs(wdDialogFilePrintSetup).Execute(); word.application.printout(false);
>> ОтветитьИнтересный и логичный вариант ( Гуцу 29.10.2013 16:16 )
5(1)По идее, этот диалог задаёт настройки печати в текущей сессии Word. Можно ещё попробовать wdDialogFilePrint (88), у него есть свойства Printer и OutputPrinter - задать их.
>> Ответитьпопробовал тоже самое, тут какаято магия в With ( yukson 29.10.2013 19:52 )
5(1)Для пример пара макросов vba из ворда:
этот макрос принтер не меняет(после отработки по ctrl-p остается дефолтный)
Sub Макрос7() Dialogs(wdDialogFilePrintSetup).Printer = "HP LaserJet 400 M401 PCL 6" Dialogs(wdDialogFilePrintSetup).DoNotSetAsSysDefault = True Dialogs(wdDialogFilePrintSetup).Execute End Sub
этот макрос принтер меняет нормально
Sub Макрос8() With Dialogs(wdDialogFilePrintSetup) .Printer = "HP LaserJet 400 M401 PCL 6" .DoNotSetAsSysDefault = True .Execute End With End Sub
>> ОтветитьMajic ( Гуцу 29.10.2013 20:30 )
5(1)Попробовал - действительно, без блока With принтер не изменяется. Пока идей нет.
>> ОтветитьПобедил, оказывается в rsl тоже есть with, так что все просто: ( yukson 30.10.2013 10:16 )
5(1)import rcw; var word; var wdDialogFilePrintSetup=97; var dlg1; If (IsStandAlone()) word = ActiveX( "Word.Application", Null, true ); Else var axServer = CreateObject( "rsax", "TRsAxServer", "RetailAxServer", isStandalone() ); if( axServer ) word = axServer.CreateComObject( "Word.Application" ); end; End; word.visible=true; word.Documents.Add(); word.visible=true; word.Selection.TypeText("234"); dlg1=word.application.dialogs(wdDialogFilePrintSetup); // установка принтера без смены дефолтного with( dlg1 ) Printer="\\\\cmp-118v4\\HP LaserJet 400 M401 PCL 6"; DoNotSetAsSysDefault=true; Execute; end; // отправка на печать word.application.printout(false);
>> ОтветитьНу круто! (-) ( Гуцу 30.10.2013 11:01 )
5(1)Not specified
>> Ответить
Вообще сие тайна великая :) ( Волшебник 30.10.2013 16:32 )
5(1)Сам натыкался на подобные грабли несколько раз. Решил отнести к загадочному :)
Есть только предположение, что поскольку dialogs - это коллекция всех диалоговых окон, а не одиночный объект, то обращаясь к нему напрямую мы каждый раз обращаемся к новому экземпляру коллекции. Несколько натянуто, но проведенные эксперименты подтверждают предположение.
Вот так на vba у вас получится установить принтер
Sub Макрос3() Set dlg = Dialogs(wdDialogFilePrintSetup) dlg.Printer = "Microsoft XPS Document Writer" dlg.DoNotSetAsSysDefault = True dlg.Execute End Sub
а поскольку на рсл вы все равно создаете объект dlg1, то и with на рсл вам ни к чему.
должно нормально отработать и вот так :)
dlg1.Printer="\\\\cmp-118v4\\HP LaserJet 400 M401 PCL 6"; dlg1.DoNotSetAsSysDefault=true; dlg1.Execute;
>> Ответить
что-то похожее ( Sergey V. Mamaev 23.10.2013 10:19 )
5(1)есть что-то похожее на нужное вам: самописный экзешник, который печатает и на лазерные, и на матричные принтеры (матричные слабо поддерживаются, лазерные -- только 600dpi, другие разрешения не масштабируются). прописывается просто как "Внешний редактор" в "Параметрах станции". с определённым параметром может ничего не спрашивая отправлять с последними установленными параметрами на последний использованный принтер.
для лазерных принтеров используется шрифт Lucida Console (моноширинный), размер и сжатие настраиваются, но не совсем "гибко"
пишите на почту, если надо
>> Ответить
Подскажите как сделать выбор приетера через Alt-P ( Враг 23.10.2013 15:55 )
5(1)Уважаемый Гуцу, подскажите как сделать выбор принтера через Alt-P. Что необходимо настроить чтоб работала эта группа "горячих" клавиш.
>> ОтветитьЭто в редакторе RS-Bank ( Гуцу 24.10.2013 11:25 )
5(1)Прошу прощения, что не ответил вчера - был в банке.
Какая у вас версия системы? Alt-P как-то дополнительно настраивать не нужно, это стандартное сочетание клавиш встроенного редактора RS-Bank. Только в более ранних версиях это может быть не Alt-P, а что-то другое (не помню уже). Но в любом случае можно зайти в меню (F10), затем Печать \ Режимы печати. Там в поле "Устройство вывода" можно указывать, куда будет печататься отчёт - предопределённые в term.ini или где-то ещё принтеры.
Но только сделать вывод сразу на 2 разных принтера всё равно не получится. Если только не выделять часть текста, печатать его, затем менять принтер в "Режимах печати", выделять вторую часть текста и печатать её.
>> Ответить