Печать на разные типы принтеров с одного компьютера.

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 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 разных принтера всё равно не получится. Если только не выделять часть текста, печатать его, затем менять принтер в "Режимах печати", выделять вторую часть текста и печатать её.
              >> Ответить