Картинки во внешней печатной форме (Шапка и табличная часть)










Способы вывести на печать картинку в шапке и в табличной части внешней печатной формы.
Управление торговлей, редакция 11 (11.4.7.150).

Доброго времени суток.

Недавно столкнулся с задачей вывода картинок на печать из табличной части документа (Заказ клиента, картинки из описания номенклатуры)

Google выдал довольно много вариантов исполнения, но ни один из них у меня не сработал.
Поэтому решил написать эту статью, думаю начинающим специалистам будет полезно.

Итак есть два способа задать место для картинки в макете:
1) Вставить картинку в макет, как отдельный объект, обращение будет происходить по Имени



2) Привязать её к конкретной ячейке, обращение будет происходить по Параметру Картинки

В первом случае картинка не может быть больше выделенной области и при этом может быть перемещена пользователем при просмотре печатной формы.

-Пример перемещения картинки при просмотре:

-Вот так будет выглядеть изменение размера в свойствах картинки с Пропорционально   на  Реальный размер

Во втором случае картинка будет жестко привязана к ячейке и может растягиваться пропорционально ширине колонки.  (*будет растягиваться по ширине картинки пропорционально ширине ячейки. )
Ниже пример с картинками разных размеров и пропорций.

Далее перейдем непосредственно к коду обработки

Функция, формирующая печатную форму:

Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, ОбъектыПечати)

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
//ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
МакетОбработки    = ПолучитьМакет("МакетМакетыч");

//Шапка
ЗаполнениеШапки(СсылкаНаОбъект, МакетОбработки, ТабличныйДокумент);

//ТЧ
ЗаполнениеТЧ(СсылкаНаОбъект, МакетОбработки, ТабличныйДокумент);

Возврат ТабличныйДокумент;
КонецФункции

Здесь нас интересует только вторая и третья (закомментированная) строки.

Строка  

ТабличныйДокумент.АвтоМасштаб = Истина;

необходима для того, чтобы картинки не выходили за границы листа при печати

Строка

ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

позволят распечатать макет в альбомной ориентации по умолчанию.
 

Вывод картинки на форму рассмотрим на примере табличной части так как в обоих случаях код практически идентичен.
 

Функция ЗаполнениеТЧ(СсылкаНаОбъект, МакетОбработки, ТабличныйДокумент)

Для Каждого ТекущаяСтрока из СсылкаНаОбъект.Товары Цикл

ОбластьТовары                        = МакетОбработки.ПолучитьОбласть("Товары");

ОбластьТовары.Параметры.Номенклатура = ТекущаяСтрока.Номенклатура;

ФайлКартинки                 = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСтрока.Номенклатура, "ФайлКартинки");

Если ЗначениеЗаполнено(ФайлКартинки.Наименование) Тогда

ДвоичныеДанныеФайла                   = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлКартинки);
Если ТипЗнч(ДвоичныеДанныеФайла)      = Тип("Картинка") Тогда
Картинка                          = ДвоичныеДанныеФайла;
ИначеЕсли ТипЗнч(ДвоичныеДанныеФайла) = Тип("ДвоичныеДанные") Тогда
Картинка                          = Новый Картинка(ДвоичныеДанныеФайла);
Иначе
Картинка                          = Новый Картинка;
КонецЕсли;
ОбластьТовары.Параметры.Фото1         = Картинка;

КонецЕсли;

Если НЕ ТабличныйДокумент.ПроверитьВывод(ОбластьТовары) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьТовары);

КонецЦикла;

КонецФункции 

В 4ой строке находим файл картинки в базе

ФайлКартинки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСтрока.Номенклатура, "ФайлКартинки");

ТекущаяСтрока.Номенклатура — Ссылка на необходимый элемент справочника

“ФайлКартинки” – Наименование реквизита содержащего картинку

В 5ой строке проверяем наличие картинки в вышеуказанном реквизите. Без этого при попытке печати форма выдаст ошибку, если хоть одна из картинок не заполнена.

Если ЗначениеЗаполнено(ФайлКартинки.Наименование) Тогда

ФайлКартинки.Наименование – проверяемый реквизит, если файла картинки нет, то его наименование будет не заполнено.
 

С 6-ой по 13-ую строки (как и 4-ая) фрагмент типового кода УТ 11.4 отвечающего за печать картинок

ДвоичныеДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлКартинки);

Если ТипЗнч(ДвоичныеДанныеФайла)      = Тип("Картинка") Тогда
Картинка                          = ДвоичныеДанныеФайла;
ИначеЕсли ТипЗнч(ДвоичныеДанныеФайла) = Тип("ДвоичныеДанные") Тогда
Картинка                          = Новый Картинка(ДвоичныеДанныеФайла);
Иначе
Картинка                          = Новый Картинка;
КонецЕсли;

И наконец непосредственно помещение картинки на макет:
Для первого способа:

ОбластьШапки.Рисунки.Логотип.Картинка = Картинка;

Для второго способа:   

ОбластьТовары.Параметры.Фото1 = Картинка;

Всё готово, вы великолепны !
Образец обработки будет в прикрепленных файлах.

1 Comment

  1. Eva_electra

    А если у номенклатуры несколько картинок в файлах — можно вывести конкретную?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *