При работе в терминале не печатает на принтер Windows SERVER Решение проблем с печатью 1C терминально:
Собственно решение данной проблемы простое, не выбран принтер по умолчанию , или выбран принтер по умолчанию который отключен, нужно зайти в СИСТЕМУ и там выбрать принтер и тогда все ОК.
Еще возможная проблема - слишком длинное имя принтера - сделайте до 8 символов.
Категория:
Прочие вопросы Как напечатать документ на определенном принтере из сеанса RDP (Терминал) В 1С есть возможность обратиться к принтеру по имени перед печатью, однако при работе через терминал к названию принтера добавляется (перенаправлено N), где N постоянно меняется. Решение следующее:
Код 1C v 8.2 УП
&НаКлиенте
Функция ИмяПринтераRDP(ИмяПринтера)
Shell = Новый COMОбъект( "Wscript.Shell" ) ;
Task = Shell. Exec( "query session" ) ;
РезультатЗапроса = Task. StdOut. ReadAll( ) ;
РезультатЗапроса = Декодер( РезультатЗапроса, "windows-1251" , "cp866" ) ;
Task. Terminate( ) ;
Shell = Неопределено ;
Network = Новый COMОбъект( "WScript.Network" ) ;
ПользовательОС = Network. UserName( ) ;
Network = Неопределено ;
НомерСеанса = RegExpGetFirstMatch( "rdp-tcp\S+\s+" + ПользовательОС + "\s+(\d+)" , РезультатЗапроса) ;
Возврат ИмяПринтера + " (перенаправлено " + НомерСеанса + ")" ;
КонецФункции
Функция Декодер(Стр, Вход, Выход)
Stream = Новый COMОбъект( "Adodb.Stream" ) ;
Stream. Type = 2 ;
Stream. Mode = 3 ;
Stream. Charset = Вход;
Stream. Open( ) ;
Stream. WriteText( Стр) ;
Stream. Position = 0 ;
Stream. Charset = Выход;
Результат = Stream. ReadText( - 1 ) ;
Stream. Close( ) ;
Возврат Результат;
КонецФункции
Функция RegExpGetFirstMatch(Маска, Строка, МногострочныйРежим = Истина, ГлобальныйПоиск = Истина, БезУчетаРегистра = Истина)
RegExp = Новый COMОбъект( "VBScript.RegExp" ) ;
RegExp. Multiline = МногострочныйРежим;
RegExp. Global = ГлобальныйПоиск;
RegExp. IgnoreCase = БезУчетаРегистра;
RegExp. Pattern = Маска;
Matches = RegExp. Execute( Строка) ;
Если Matches. Count = 1 тогда
Возврат Matches. Item( 0 ) . SubMatches. Item( 0 ) ;
Иначе
Возврат Неопределено ;
КонецЕсли ;
КонецФункции
Категория:
Полезные, Универсальные Функции Экспорт печатных форм и любых данных из 1С в BMP, JPEG, PCX, PDF, PNG и TIFF. Оптимальным решением является установка
Bullzip PDF Printer . После установки в системе появляется виртуальный принтер, с помощью которого можно "печатать" в файл pdf из любого приложения. Программа бесплатная, работает в терминале и имеет поддержку русского языка.
После установки, можно печатать напрямую используя код:
Код 1C v 8.х
Процедура СоздатьФайлПДФ(Таб, ИмяФайла)
Попытка
ПДФПринтер = Новый ComObject( «Bullzip. PDFPrinterSettings») ;
ПДФПринтер. SetValue( «output», ИмяФайла) ;
ПДФПринтер. SetValue( «ShowSaveAS», «never») ;
ПДФПринтер. SetValue( «ShowProgress», «no») ;
ПДФПринтер. SetValue( «ShowProgressFinished», «no») ;
ПДФПринтер. SetValue( «ShowSettings», «never») ;
ПДФПринтер. SetValue( «ShowPDF», «no») ;
ПДФПринтер. SetValue( «ConfirmOverwrite», »no») ;
ПДФПринтер. WriteSettings( ) ;
Таб. Автомасштаб = Истина ;
Таб. ИмяПринтера = «Bullzip PDF Printer»; Таб. Напечатать( Истина ) ;
PDFФайл = Новый Файл( ИмяФайла) ;
Пока НЕ PDFФайл. Существует( ) Цикл
ОбработкаПрерыванияПользователя( ) ;
КонецЦикла ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
Сообщить( «Скорее всего необходимо установить или переустановить «»Bullzip PDF Printer») ;
КонецПопытки ;
Таб. ИмяПринтера = ПолучитьПринтерПоУмолчанию( ) ;
КонецПроцедуры
Здесь функция
ПолучитьПринтерПоУмолчанию() нужна для того чтобы вернуть печатной форме принтер по умолчанию, т.к. если напечатать без предварительного просмотра то печать пойдет на виртуальный PDF принтер BullzipPDFPrinter.
Код 1C v 8.х
Функция ПолучитьПринтерПоУмолчанию()
Скрипт = Новый ComObject( «MSScriptControl. ScriptControl») ;
Скрипт. Language = «vbscript»;
Скрипт. AddCode( »
|Function GetDefaultPrinter()
|GetDefaultPrinter=vbNullString
|Set objWMIService=GetObject(«»winmgmts:»" _
|& «»{impersonationLevel=impersonate}!\\.\root\cimv2″»)
|Set colInstalledPrinters=objWMIService.ExecQuery _
|(«»S_elect * from Win32_Printer»")
|For Each objPrinter in colInstalledPrinters
|If objPrinter.Attributes and 4 Then
|GetDefaultPrinter=objPrinter.Name
|Exit For
|End If
|Next
|End Function»);
Возврат СокрЛП( Скрипт. run( «GetDefaultPrinter») ) ;
КонецФункции
Печать в PDF используя bioPDF Категория:
Администрирование