Расскажу подробнее, какие задачи были и как решались.
- Предварительный просмотр. Проблема: при добавлении присоединенных файлов для картинок он работает, а для PDF-файлов нет. С новым объектом ДокументPDF это легко исправить. Решение: в форме обработки "Работа с файлами" добавим реквизит pdf_Документ, разместим его на форме в виде элемента "Поле PDF документа", перехватим событие ОбновитьПредпросмотр() и прочитаем двичные данные файла, отобразив на форме.
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанныхФайла);
Поток = ДвоичныеДанныеФайла.ОткрытьПотокДляЧтения();
ЭтотОбъект.pdf_Документ.Прочитать(Поток);
- Групповая печать и отправка. Задача: требуется из произвольного документа иметь возможность сразу по всем позициям номенклатуры распечатать/отправить присоединенные файлы. Здесь документ не обязательно должен иметь формат PDF. Это может быть docx, xlsx, pdf, любая картинка... Решение: добавим общую команду, открывающую форму, которая считывает нужную информацию. В форме разместим команду печати "Сразу на принтер" и команду "Отправить", которая будут работать по аналогии с командами в форме типовой обработки "Работа с файлами".
- В процессе тестирования предыдущей задачи также столкнулись ещё с рядом проблем: 1. PDF-файлы не удавалось напечатать из 1с. На помощь опять пришёл ДокументPDF и его методы Прочитать(), Напечатать(). Решение: перехват обработчика РаботаСФайламиКлиент.НапечататьФайлыВыполнение().
&Вместо("НапечататьФайлыВыполнение")
Процедура pdf_НапечататьФайлыВыполнение(ОбработчикРезультата, ПараметрыВыполнения)
Если ПараметрыВыполнения.НомерФайла >= ПараметрыВыполнения.ДанныеФайлов.Количество() Тогда
Возврат;
КонецЕсли;
ПараметрыВыполнения.ДанныеФайла =
РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляПечати(ПараметрыВыполнения.ДанныеФайлов[ПараметрыВыполнения.НомерФайла],
ПараметрыВыполнения.УникальныйИдентификатор);
Если НРег(ПараметрыВыполнения.ДанныеФайла.Расширение) = "pdf" Тогда
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(ПараметрыВыполнения.ДанныеФайла.СсылкаНаДвоичныеДанныеФайла);
Поток = ДвоичныеДанныеФайла.ОткрытьПотокДляЧтения();
пДокументPDF = Новый ДокументPDF;
пДокументPDF.Прочитать(Поток);
пДокументPDF.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
// переходим к печати следующего файла.
ПараметрыВыполнения.НомерФайла = ПараметрыВыполнения.НомерФайла + 1;
Обработчик = Новый ОписаниеОповещения("НапечататьФайлыВыполнение", ЭтотОбъект, ПараметрыВыполнения);
ВыполнитьОбработкуОповещения(Обработчик);
Иначе
ПродолжитьВызов(ОбработчикРезультата, ПараметрыВыполнения);
КонецЕсли;
КонецПроцедуры
- 2 проблема: печать картинок "сразу на принтер" работала не со всех рабочих мест. Кроме того, если и работала, выдавала лишние диалоговые окна настроек печати. Решение: при добавлении картинок сохранять их в pdf-формате. Сначала было решено опробовать метод создания Документа PDF и добавление в него картинки через ОписаниеОтображаемогоОбъектаPDF. На деле оказалось, что такой PDF весит в несколько раз больше исходной картинки (как пример, я оставил этот код в расширении, если кому интересно). Ну а после использовал классический вариант с картинкой в Табличном документе, который сохраняется в формате PDF. Результат порадовал - размер файла оставался примерно тем же, что у исходной картинки.
Итого, какие задачи по работе с Присоединенными файлами может помочь Вам решить расширение из данной публикации:
- Предварительный просмотр прикрепленных PDF прямо в 1С;
- Групповая печать и отправка присоединенных файлов (в т.ч. PDF) по всей номенклатуре из документа "Счет покупателю", "Счет от поставщика" (перечень типов документов, из которых будет доступна комнда печати/отправки, легко расширяется. Достаточно добавить нужный документ в Определяемый тип pdf_ДокументыСФайламиТоваров и экспортную функцию pdf_ТекстЗапросаВТНоменклатура() в модуль менеджера этого документа по аналогии с существующими);
- Добавление картинок с сохранением их в pdf-формате.
Протестировано на БП 3.0.133.17, платформа 8.3.22.1709 (должно работать на платформе не ниже 8.3.21.*).