Доброго времени суток.
Недавно столкнулся с задачей вывода картинок на печать из табличной части документа (Заказ клиента, картинки из описания номенклатуры)
Google выдал довольно много вариантов исполнения, но ни один из них у меня не сработал.
Поэтому решил написать эту статью, думаю начинающим специалистам будет полезно.
Итак есть два способа задать место для картинки в макете:
1) Вставить картинку в макет, как отдельный объект, обращение будет происходить по Имени
2) Привязать её к конкретной ячейке, обращение будет происходить по Параметру Картинки
В первом случае картинка не может быть больше выделенной области и при этом может быть перемещена пользователем при просмотре печатной формы.
-Пример перемещения картинки при просмотре:
-Вот так будет выглядеть изменение размера в свойствах картинки с Пропорционально на Реальный размер
Во втором случае картинка будет жестко привязана к ячейке и может растягиваться пропорционально ширине колонки. (*будет растягиваться по ширине картинки пропорционально ширине ячейки. )
Ниже пример с картинками разных размеров и пропорций.
Далее перейдем непосредственно к коду обработки
Функция, формирующая печатную форму:
Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
//ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
МакетОбработки = ПолучитьМакет("МакетМакетыч");
//Шапка
ЗаполнениеШапки(СсылкаНаОбъект, МакетОбработки, ТабличныйДокумент);
//ТЧ
ЗаполнениеТЧ(СсылкаНаОбъект, МакетОбработки, ТабличныйДокумент);
Возврат ТабличныйДокумент;
КонецФункции
Здесь нас интересует только вторая и третья (закомментированная) строки.
Строка
ТабличныйДокумент.АвтоМасштаб = Истина;
необходима для того, чтобы картинки не выходили за границы листа при печати
Строка
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
позволят распечатать макет в альбомной ориентации по умолчанию.
Вывод картинки на форму рассмотрим на примере табличной части так как в обоих случаях код практически идентичен.
Функция ЗаполнениеТЧ(СсылкаНаОбъект, МакетОбработки, ТабличныйДокумент)
Для Каждого ТекущаяСтрока из СсылкаНаОбъект.Товары Цикл
ОбластьТовары = МакетОбработки.ПолучитьОбласть("Товары");
ОбластьТовары.Параметры.Номенклатура = ТекущаяСтрока.Номенклатура;
ФайлКартинки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСтрока.Номенклатура, "ФайлКартинки");
Если ЗначениеЗаполнено(ФайлКартинки.Наименование) Тогда
ДвоичныеДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлКартинки);
Если ТипЗнч(ДвоичныеДанныеФайла) = Тип("Картинка") Тогда
Картинка = ДвоичныеДанныеФайла;
ИначеЕсли ТипЗнч(ДвоичныеДанныеФайла) = Тип("ДвоичныеДанные") Тогда
Картинка = Новый Картинка(ДвоичныеДанныеФайла);
Иначе
Картинка = Новый Картинка;
КонецЕсли;
ОбластьТовары.Параметры.Фото1 = Картинка;
КонецЕсли;
Если НЕ ТабличныйДокумент.ПроверитьВывод(ОбластьТовары) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьТовары);
КонецЦикла;
КонецФункции
В 4ой строке находим файл картинки в базе
ФайлКартинки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСтрока.Номенклатура, "ФайлКартинки");
ТекущаяСтрока.Номенклатура - Ссылка на необходимый элемент справочника
“ФайлКартинки” – Наименование реквизита содержащего картинку
В 5ой строке проверяем наличие картинки в вышеуказанном реквизите. Без этого при попытке печати форма выдаст ошибку, если хоть одна из картинок не заполнена.
Если ЗначениеЗаполнено(ФайлКартинки.Наименование) Тогда
ФайлКартинки.Наименование – проверяемый реквизит, если файла картинки нет, то его наименование будет не заполнено.
С 6-ой по 13-ую строки (как и 4-ая) фрагмент типового кода УТ 11.4 отвечающего за печать картинок
ДвоичныеДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлКартинки);
Если ТипЗнч(ДвоичныеДанныеФайла) = Тип("Картинка") Тогда
Картинка = ДвоичныеДанныеФайла;
ИначеЕсли ТипЗнч(ДвоичныеДанныеФайла) = Тип("ДвоичныеДанные") Тогда
Картинка = Новый Картинка(ДвоичныеДанныеФайла);
Иначе
Картинка = Новый Картинка;
КонецЕсли;
И наконец непосредственно помещение картинки на макет:
Для первого способа:
ОбластьШапки.Рисунки.Логотип.Картинка = Картинка;
Для второго способа:
ОбластьТовары.Параметры.Фото1 = Картинка;
Всё готово, вы великолепны !
Образец обработки будет в прикрепленных файлах.