Печать на принтер программно.

1. user817897 2 02.02.21 19:33 Сейчас в теме +0.55 $m
Добрый день. Необходимо распечатать табличный документ "на сервере", на сетевой принтер, но метод ТабличныйДокумент.Напечатать() доступен на клиенте, как выкрутиться?


Данные получаю через http из Моб.приложения.

Ниже скрин, естественно ничего не отправляет))

Как вывести на печать? Может есть пример у кого?
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. user817897 2 03.02.21 10:02 Сейчас в теме
(2)
			Пакет = Новый ПакетОтображаемыхДокументов;
			Пакет.КоличествоЭкземпляров = Количество;
			ЭлементПакета1 = Пакет.Состав.Добавить();
			ЭлементПакета1.Наименование = "ПАРАМЕТРЫ_ПЕЧАТИ_Штрих";
			ЭлементПакета1.Данные = ПоместитьВоВременноеХранилище(ТабДокумент);
			
			Пакет.ИмяПринтера = "Kyocera:ECOSYS M2540dn:KM7352F6";
			пакет.Заголовок = "ПАРАМЕТРЫ_ПЕЧАТИ_Штрих";
                        Пакет.Напечатать(); 
Показать


Не печатает((
4. andy_zhav 197 03.02.21 10:04 Сейчас в теме
(1) Сохраните его во временный файл в pdf и распечатайте с помощью adobe reader командой:

ЗапуститьПриложение(ПутьAdobeReader + " /N /T /s /h """ + ИмяВременногоФайла + """" + ?(ЗначениеЗаполнено(ИмяПринтера), " " + ИмяПринтера, ""),,);



WshShell = Новый COMОбъект("WScript.Shell");
    ПутьAdobeReader = WshShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\");
    Если Не ЗначениеЗаполнено(ПутьAdobeReader) Тогда
        Сообщить("Не найдена программа Adobe Reader! Печать pdf-файлов невозможна.", СтатусСообщения.Важное);
        Возврат;
    КонецЕсли;
   
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
    КопироватьФайл(Файл.ПолноеИмя, ИмяВременногоФайла);
    ЗапуститьПриложение(ПутьAdobeReader + " /N /T /s /h """ + ИмяВременногоФайла + """" + ?(ЗначениеЗаполнено(ИмяПринтера), " " + ИмяПринтера, ""),,);

Показать
5. user817897 2 03.02.21 10:08 Сейчас в теме
(4) Скорость обработки данных будет меньше походу. А данные на печать необходимо выводить циклом, и часто. Или всё же скорость будет нормальная?
7. user817897 2 03.02.21 11:05 Сейчас в теме
(4)воспользовался вашим вариантом,
код:
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
			ТабДокумент.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);			
			ИмяПринтера = "Kyocera:ECOSYS M2540dn:KM7352F6";
			WshShell = Новый COMОбъект("WScript.Shell");
			ПутьAdobeReader = WshShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\");
			Если ЗначениеЗаполнено(ПутьAdobeReader) Тогда
				ПутьAdobeReader = Сред(ПутьAdobeReader,2,СтрДлина(ПутьAdobeReader)-2);
				ЗапуститьПриложение(ПутьAdobeReader + " /N /T /s /h " + ВремФайл + ""+ ?(ЗначениеЗаполнено(ИмяПринтера), " " + ИмяПринтера, ""));			
			КонецЕсли;
Показать


Строка запуска формируется вот такая:

C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe /N /T /s /h C:\Users\USR1CV8.SERVER\AppData\Local\Temp\v8_579D_f.pdf Kyocera:ECOSYS M2540dn:KM7352F6

вот такой ответ получаю...
Прикрепленные файлы:
25. user817897 2 04.02.21 15:01 Сейчас в теме
(4)а адоб какой командой закрываете?
6. andy_zhav 197 03.02.21 10:10 Сейчас в теме
(5) Я использую для пакетной печати. Приемлемо по скорости. В любом случае стандартных вариантов печати с сервера по-моему нет. только с использованием сторонних приложений или COM объектов.

вот кстати тоже с адобом игрался. Не помню насколько рабочий вариант был:

	Acrobat = Новый COMОбъект("AcroPDF.PDF.1");
	Acrobat.Visible = false;
        Acrobat.LoadFile(НастройкаПечатнойФормы.ИмяФайлаПечатнойФормы);
	Acrobat.printAll();//или Acrobat.printWithDialog();	
8. andy_zhav 197 03.02.21 11:18 Сейчас в теме
(7) В отладчике результат команды ЗапуститьПриложение не увидите. Это же процедура
9. user817897 2 03.02.21 11:21 Сейчас в теме
(8)понимаю,запускаю в cmd ругается на путь Program - типа что пробел стоит...сейчас смотрю дальше
10. user817897 2 03.02.21 11:29 Сейчас в теме
(8)выскакивает вот такой выбор:

если выбрать первый или второй,то выскакивает как на 2 фото)
Прикрепленные файлы:
11. andy_zhav 197 03.02.21 11:41 Сейчас в теме
(10) надо один раз выбрать Always open with protected mode disabled
12. andy_zhav 197 03.02.21 11:42 Сейчас в теме
и переустановить адоб. что-то там не все хорошо. Почемуто он запускается только в защищенном режиме. Не нормальная работа
13. andy_zhav 197 03.02.21 11:45 Сейчас в теме
(9) Я понял почему у вас ошибки вываливаются. Вы скопировали экзешник на диск c просто. так не будет работать. Нужно полны путь к адобу в кавычки обрамить
14. user817897 2 03.02.21 12:00 Сейчас в теме
15. user817897 2 03.02.21 12:10 Сейчас в теме
(13) поменял пути, теперь так:
"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /N /T /s /h C:\Users\USR1CV8.SERVER\AppData\Local\Temp\v8_CA84_13.pdf \\192.168.9.52\

Открывается Адоб,показывает в последних только что созданный файл,а вот на печать не летит, не совсем понимаю прикола))
Прикрепленные файлы:
16. andy_zhav 197 03.02.21 15:36 Сейчас в теме
(15) не правильный путь к файлу pdf
что это: \\192.168.9.52\ ? мне кажется изза этого и не открывается
21. user817897 2 03.02.21 18:03 Сейчас в теме
(18)
(16)
я прописал таким путём:
ЗапуститьПриложение("cmd /c ' " + ПутьAdobeReader + " /t " + ВремФайл + ""+ ?(ЗначениеЗаполнено(ИмяПринтера), " " + ИмяПринтера, "") + " '");
Выглядит так: cmd /c ' "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /t C:\Users\USR1CV8.SERVER\AppData\Local\Temp\v8_43F1_f.pdf "Kyocera_print_server" '

И на принтер так ничего и не выходит, но если же запустить, эту же команду в PowerShell или в CMD то на принтер выходит документ.

Я так понимаю что не имя принтера не соответствует имени принтера на сервере?
17. user817897 2 03.02.21 15:54 Сейчас в теме
(13) смотрите,powerShel не печатает, а через CMD без проблем распечатало. что не так?
Прикрепленные файлы:
18. starik-2005 3046 03.02.21 16:40 Сейчас в теме
19. user817897 2 03.02.21 16:51 Сейчас в теме
20. user817897 2 03.02.21 16:54 Сейчас в теме
(18)Может вы знаете вариант как лучше запустить на печать табличный документ "на сервере"?
24. starik-2005 3046 04.02.21 10:40 Сейчас в теме
(20) у мен был еул из 5ти линуховвх серверов, я им на шару скидывал pdf, они по крону печатали каждые 5 минут эти пдфы. Но там была ночная печать пакетов доков в общей сложности овер 20к пакетов по 3-10 страничек.

& в повершелле - это вызов приложения (CALL), без него это просто PRINT с кучей параметров, ошибка изза того, что их вычисление невозможно.
22. andy_zhav 197 04.02.21 09:44 Сейчас в теме
(21) Возможно проблема с именем принтера. Попробуйте залогиниться на сервере под USR1CV8 и установить у него принтер по-умолчанию. Тогда имя принтера можно не указывать
23. andy_zhav 197 04.02.21 09:46 Сейчас в теме
(21) Стоп: а зачем cmd/c ? надо же без него
26. andy_zhav 197 04.02.21 15:26 Сейчас в теме
(25) //// Убиваем процесс
//WshShell.Run("taskkill /f /im " + ПутьAdobeReader, 0);
Убивал вот так, но обязательно нужно дождаться окончания печати, иначе можно прибить до того как печать закончится
27. user817897 2 04.02.21 16:33 Сейчас в теме
(26) у меня кстати код так и не стартует....

ВремФайл=ПолучитьИмяВременногоФайла("pdf");
			ТабДокумент.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);			
			ИмяПринтера = """Kyocera_print_server""";
			
			WshShell = Новый COMОбъект("WScript.Shell");
			ПутьAdobeReader = WshShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\");
			
			Если ЗначениеЗаполнено(ПутьAdobeReader) Тогда	                           				
				путь = ПутьAdobeReader+" " + "/n"+ " /p"+ " /t "+""""+ ВремФайл +""""+ ?(ЗначениеЗаполнено(ИмяПринтера), " " + ИмяПринтера, "");
				ЗапуститьПриложение(путь); 
			КонецЕсли;
						
	
			КонецЦикла;
	
	Ответ = Новый HTTPСервисОтвет(200);
	Возврат Ответ;
Показать
28. user817897 2 04.02.21 16:38 Сейчас в теме
(26)Если то что прописано в "Путь", вставить в CMD, то на принтер распечатается документ.
29. andy_zhav 197 04.02.21 16:42 Сейчас в теме
(28) Что-то с правами пользователя серверного может. Попробуйте залогиниться на сервере под пользователем серверным и выполнить эту команду в cmd. У меня работает все отлично. И вас должно, если через cmd у вас печать срабатывает.
30. user817897 2 04.02.21 16:45 Сейчас в теме
(29)залогинился под юзером USR1CV8, там так же видны все принтеры. и команда в CMD без проблем выполняется и на принтер выходит документ. А вот с 1С-ки никак...
31. andy_zhav 197 04.02.21 16:47 Сейчас в теме
(30) Попробуйте сделать принтер-по умолчанию и убрать эту часть ?(ЗначениеЗаполнено(ИмяПринтера), " " + ИмяПринтера, "")
32. user817897 2 04.02.21 16:51 Сейчас в теме
(31)попробовал. ситуация аналогичная. Через 1С - молчит, через CMD - печатает
33. user817897 2 04.02.21 17:15 Сейчас в теме
Есть может ещё варианты?
34. janibeg 2 07.05.24 08:53 Сейчас в теме
(33) в итоге как закончилась история?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот