В УНФ 1.4 есть встроенный механизм работы с файлами — Справочник «Файлы», который нам подходит для реализации поставленной задачи. У справочника «Файлы» есть реквизит «ВладелецФайла», в Типе этого реквизита указаны те документы, для которых надо сохранять файлы. Добавим в свойстве Тип документ «РасходИзКассы».
Теперь нужно добавить документ «РасходИзКассы» в общую команду «ПрисоединенныеФайлы».
Переходим к объекту «Общие команды ->ПрисоединенныеФайлы», открываем свойство «Тип параметра команды» и также ставим галочку напротив нашего документа.
Создаем внешнюю печатную форму. Копируем механизм формирования печатной формы из типовой конфигурации УНФ в нашу печатную форму:Процедура Печать, Функция СформироватьПечатнуюФорму. В функцию СформироватьПечатнуюФорму добавляем код для вывода на печать наших отсканированных файлов:
Запрос.УстановитьПараметр("ВладелецФайла", ТекущийДокумент); Расширения = Новый Массив; Расширения.Добавить("JPG"); Расширения.Добавить("BMP"); Расширения.Добавить("PNG"); Расширения.Добавить("GIF"); Расширения.Добавить("jpg"); Расширения.Добавить("bmp"); Расширения.Добавить("png"); Расширения.Добавить("gif"); Запрос.УстановитьПараметр("Расширения", Расширения); Запрос.Текст = "ВЫБРАТЬ
| Файлы.Наименование КАК Имя,
| Файлы.ТекущаяВерсияРасширение КАК Расширение,
| Файлы.ТекущаяВерсия, | Файлы.Ссылка,
| ХранимыеФайлыВерсий.ХранимыйФайл КАК СканИзображение
|ИЗ
| Справочник.Файлы КАК Файлы
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранимыеФайлыВерсий КАК ХранимыеФайлыВерсий
| ПО Файлы.ТекущаяВерсия = ХранимыеФайлыВерсий.ВерсияФайла
|ГДЕ
| Файлы.ВладелецФайла = &ВладелецФайла
| И Файлы.ТекущаяВерсияРасширение В(&Расширения)
| И НЕ Файлы.ПометкаУдаления"; Выборка = Запрос.Выполнить().Выбрать(); ОбластьСкана = Макет.ПолучитьОбласть("СканЛист"); Пока Выборка.Следующий() Цикл // + Это код по выводу изображения из БД
Карт = Выборка.СканИзображение.Получить(); Если Карт <> Неопределено Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1; // Преобразовываем файл в изображение
ОбластьСкана.Рисунки.D1.Картинка = Новый Картинка(Карт, Истина); ТабличныйДокумент.Вывести(ОбластьСкана); // + Этот текст необходим для вывода на печать
Элемент = ОбъектыПечати.НайтиПоЗначению(ТекущийДокумент); Если Элемент = Неопределено Тогда
ИмяОбласти = "Документ_" + Формат(ОбъектыПечати.Количество() + 1, "ЧН=; ЧГ=") + Выборка.Имя; Иначе
ИмяОбласти = Элемент.Представление + Выборка.Имя; КонецЕсли; ОбъектыПечати.Добавить(ТекущийДокумент, ИмяОбласти); НомерСтрокиОкончание = ТабличныйДокумент.ВысотаТаблицы; ТабличныйДокумент.Область(НомерСтрокиНачало, , НомерСтрокиОкончание, ).Имя = ИмяОбласти; // - Этот текст необходим для вывода на печать
КонецЕсли; // - Это код по выводу изображения из БД
КонецЦикла;
В УНФ 1.4.2.22 и выше появились проблемы с внешними печатными формами из за кода в общем модуле «ОбщегоНазначения» в функции «ПроверитьПроведенностьДокументов». Там есть такой запрос:
ШаблонЗапроса = "ВЫБРАТЬ
| Документ.Ссылка КАК Ссылка
|ИЗ | &ИмяДокумента КАК Документ
|ГДЕ
| Документ.Ссылка В(&МассивДокументов)
| И (НЕ Документ.Проведен)";
Этот запрос работает с ошибкой с документами в которых есть реквизит с именем «Документ». Можно выйти из этой ситуации переименовав в запросе «Документ» например на «Док123». Вот так получится:
ШаблонЗапроса = "ВЫБРАТЬ
| Док123.Ссылка КАК Ссылка
|ИЗ | &ИмяДокумента КАК Док123
|ГДЕ
| Док123.Ссылка В(&МассивДокументов)
| И (НЕ Док123.Проведен)";
Только так наша печатная форма заработает с нашим документом. Надеюсь в будущем разработчики 1С исправят этот Баг.
В прикрепленном файле лежит полностью рабочая внешняя печатная форма. Чтобы файлы сохранялись сразу при сканировании, необходимо в «Настройках» -> «Персональные настройки» настроить ваш сканер.
Добавить внешнюю печатную форму можно в режиме пользователя в меню «Администрирование -> Дополнительные отчеты и обработки».