Данный метод позволяет всегда получать на выходе нужный порядок документов.
В чем проблема?
Основная проблема хаотичного порядка печати — это произвольная отправка документов из очереди на печать. При печати одного документа его страницы всегда будут напечатаны в заданном порядке. Идея состоит в том, чтобы сформировать из печатных документов один документ и уже его отправить на печать.
Данная проблема уже обсуждалась, например, вот здесь. Но когда я столкнулся с этой проблемой, предложенные варианты либо не работали, либо не удовлетворяли.
Решение
Начиная с версии 8.3.3 платформы 1С реализован объект ПакетОтображаемыхДокументов, через который и реализована печать во всех современных типовых конфигурациях.
У этого объекта есть замечательная функция ЗаписатьФайлДляПечати(), которая позволяет весь пакет, с учетом порядка и копий отдельных документов, сохранить в PDF-файл. Остается лишь распечатать этот документ.
К сожалению, встроенные средства платформы позволяют только сохранять в PDF, но не читать их, а уж, тем более, печатать.
На помощь могут прийти различные консольные программы, которые позволят отправить файл на печать.
Но для себя я не нашел достойной программы, которая могла бы удовлетворить всем моим потребностям: то проблемы со скоростью, то качеством печати, то авторазворотом страниц, в итоге пришлось написать небольшую компоненту, которая бы удовлетворяла всем моим потребностям Внешняя компонента печати PDF, возможно, и вам она поможет.
Вместо метода Напечатать вызываем ЗаписатьФайлДляПечати, сохраняем PDF во временный файл и отправляем на печать уже PDF:
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
ПакетОтображаемыхДокументов.ЗаписатьФайлДляПечати(ИмяВременногоФайла);
КомпонентаПечатиPDF.Печать(ИмяВременногоФайла, "Пакет документов");
Подскажите, пожалуйста, те, кто пользовался этим «Пакетом»…
Вот есть конфа (на БСП, но это не важно), веб-клиент.
Есть печатная форма у документа, а есть где-то снаружи сделанный pdf-файл, прикрепленный к этому документу.
Можно ли сделать команду «Печатать все» таким образом, чтобы в результирующий pdf для печати вывелся и табличный документ, и все страницы прикрепленного pdf’а?
(1) из ИТС я знаю, что Режим пакетной печати предназначен для печати нескольких табличных документов
Может можно как-то извернуться и встроенными средствами запихнуть pdf в табличный документ, а затем уже добавить его в пакет?
(2) К сожалению, встроенных средств для работы с PDF в 1С нет, есть возможность сохранения в PDF и все.
В вашем случае есть несколько вариантов решения:
1. Внешняя компонента печати PDF для браузера, я сейчас как раз занимаюсь ее разработкой;
2. Конвертация PDF в картинки и размещение их в табличном документе для последующей печати;
3. Вывод PDF в табличный документ — идея в том, чтобы все объекты PDF транслировать в объекты табличного документа (линии, надписи, картинки) — была мысль реализовать такое, но пока даже не знаю насколько это реально, буду пробовать.
У первых двух методов решения есть недостатки, а вот 3-й вариант, кажется, наиболее универсальным и правильным.
(2) Я добавил версию внешней компоненты печати PDF для Веб-клиента (поддерживаются браузеры Firefox и Chrome), думаю, Вам должен подойти этот вариант. Вам нужно будет передавать файл с сервера на клиент, сохранять его во временный файл и вызывать печать через компоненту.
Скоро добавлю возможность печати PDF из двоичных данных, чтобы не нужно было сохранять PDF перед печатью.
(3) А как на счет использования командной строки?
«Foxit Reader.exe» PdfFile /t PrinterName
(5) в публикации я упоминал про это, но меня этот вариант не удовлетворил, у компоненты есть преимущества, например:
1. Скорость выполнения;
2. Нет необходимости в дополнительном ПО;
3. Компонента умеет выводить PDF из памяти, без сохранения файла на диск.
Извините, но ведь прошло уже… «тысячелетие» в 1с.
https://its.1c.ru/db/metod8dev#content:5792:hdoc
Достаточно просто воспользоваться
Статья от 08.08.2014
(7) а Вы читали статью? большой разницы нет как компонуются документы перед печатью и какими методами / объектами, в конечном итоге они отправляются на печать отдельными пакетами и дальше уже платформа 1с не контролирует процесс, проблема существует и я с ней столкнулся, при этом перед печатью документы компоновались как раз-таки через ПакетОтображаемыхДокументов, но в итоге печатались совсем не в том порядке, в каком они были в пакете.
(8) Режим совместимости?
https://its.1c.ru/db/v838doc#bookmark:dev:TI000001244
● Поведение метода ПакетОтображаемыхДокументов.Напечатать():
● Используется режим совместимости с версией 8.3.7 – каждый документ печатается в отдельном задании.
● Не используется режим совместимости:
● Для ОС Windows:
● создается одно задание на принтер;
● весь пакет выводится в один файл, имя которого запрашивается перед выводом.
● Для ОС Linux:
● если параметры печати всех документов в пакете совпадают – поведение совпадает с поведением в ОС Windows;
● если параметры различаются – каждый документ печатается в отдельном задании принтера.
(9) Режим совместимости отключен
Как решается вопрос двусторонней печати пакета документов? Т.е. если выкинуть пакет в pdf, а потом запустить двустороннюю печать, то следующий документ может распечататься на обратной стороне предыдущего?! Также как решен вопрос с разным количеством экземпляров разных документов пакета, т.е. одних нужно 3 копии других 2 и т.п.?
(11) С двусторонней печатью попробую, отпишусь. Что касается разного количества экземпляров для разных документов, то при выводе в PDF платформа уже делает несколько копий документов, следующих друг за другом в самом PDF, компонента лишь выводит готовый PDF.
(12) Насчет вывода в pdf нескольких копий все верно, я видел, но вот заметил одну интересную вещь. Если в ПФ использовать штрихкоды, то при выводе в pdf первая копия выводится отлично, а вот вторая и последующие копии (если их больше 2-х) выводятся с не верным штрихкодом (он размазан). С таким не сталкивались?
(13) нужно смотреть реализацию печати при выводе штрих-кода, возможно, печать происходит не средствами платформы
(11) двустороннюю печать реализую в ближайшее время, напишу, пока ее поддержки нет
(15)Как успехи с реализаций печати в двустороннем варианте?
Еще заметил, что при печати большого количества документов иногда они выходят не по порядку.
Что с реализацией двусторонней печати?
Я сделал с момощью расширения модуля УправлениеПечатьюКлиент
Процедура РаспечататьТабличныеДокументы(ТабличныеДокументы, …..)
ТабличныеДокументы это список значений, подменил в нем представления (добавил в начале нужные мне цифры)
и отсортировал по представлению, а вместо
сделал
(18) спасибо за пример, в Вашем примере табличные документы отправляются на печать как отдельные задания, соответственно проблема с очередью печати сохраняется, т.к. «В силу различных особенностей ПО, ОС, драйверов и т.д. порядок печати документов не всегда совпадает с порядком их отправки на печать».
(17) День добрый!
Извиняюсь за долгую реализацию, двусторонняя печать реализована.
Если ещё актуально, просьба обновить компоненту и протестировать.
Спасибо!