Счет на оплату с печатью, подписью и рекламой

Когда-то давным давно, кажется в прошлую пятницу, в 1С "Управление торговли" понадобилось сделать некоторые доработки. А именно: добавить подписи руководителя и главного бухгалтера, менеджера, оттиск печати, ну и, чтобы место не пропадало, рекламную картинку.

Для выполнения задуманного взяли стандартную, из конфигурации, обработку печати, а заодно и макет. Расположили области ПодвалСчета картинки с соответствующими названиями: "ПодписьРуководителя", "ПодписьБухгалтера", "ПодписьМенеджера", "Печать", "Реклама". Оставалось их заполнить.

Для начала отсканировали, убрали фон при помощи Фотошопа, сохранили как png файлы с идентичными Областям названиями. Подумав, немного, решили файл подписи менеджера назвать по фамилии имени отчеству (Иванов Иван Иванович) самого менеджера. Только по фамилии было бы короче, однако на фирме могут работать как родственники с одинаковыми фамилиями, так и просто однофамильцы. В базу Управления торговлей их загрузили в файлы организации. После этого осталось запрограммировать вывод в соответствующие места макета. Так как процедура заполнения заготовки абсолютно одинакова, различаются лишь имена областей и имена файлов, решено было сделать это отдельной процедурой, которая вызывалась из процедуры ЗаполнитьРеквизитыПодвалаСчетаНаОплату пятью строчками, передающими в параметрах нужные данные:



	//Запускаем процедуру заполнения картинкой для каждого поля картинки в табличном документе (печать, 3 подписи, реклама)

	ВывестиПечатьОрганизацииВТабличныйДокумент(Область, ДанныеПечати.Организация, "Печать", "Печать");
	ВывестиПечатьОрганизацииВТабличныйДокумент(Область, ДанныеПечати.Организация, "ПодписьРуководитель", "ПодписьРуководитель");
	ВывестиПечатьОрганизацииВТабличныйДокумент(Область, ДанныеПечати.Организация, "ПодписьБухгалтер", "ПодписьБухгалтер");
	ВывестиПечатьОрганизацииВТабличныйДокумент(Область, ДанныеПечати.Организация, ДанныеПечати.Менеджер.Наименование, "ПодписьМенеджер");
	ВывестиПечатьОрганизацииВТабличныйДокумент(Область, ДанныеПечати.Организация, "Реклама", "Реклама");

Поначалу для поиска файлов использовалась стандартная функция НайтиПоНаименованию. Все работало хорошо, пока не решили изменить картинку рекламы. Оказалось, что данная функция абсолютно игнорирует пометку удаления, всвязи с чем начала выпадать ошибка "Файл был удален", а до вновь загруженного с тем же наименованием поиск не добирался. Ожидать от пользователя, что он будет каждый раз, заменив картинку, удалять "помеченные объекты" не приходилось. Поэтому нашли решение через Выборку с Отбором, которое приводится: Области, для которых не было найдено файлов с нужными названиями, удаляются.


Процедура ВывестиПечатьОрганизацииВТабличныйДокумент(ОбластьМакета, ОрганизацияВладелец, НазваниеФайла, ОбластьДляКартинки)
	
	//Определяем область макета куда вставлять картинку (печать, подпись, рекламу)
	
	Если ОбластьДляКартинки = "Печать" Тогда
		ОбластьМакетаКартинка = ОбластьМакета.Рисунки.Печать;
	ИначеЕсли ОбластьДляКартинки = "ПодписьРуководитель" Тогда
		ОбластьМакетаКартинка = ОбластьМакета.Рисунки.ПодписьРуководитель;
	ИначеЕсли ОбластьДляКартинки = "ПодписьБухгалтер" Тогда
		ОбластьМакетаКартинка = ОбластьМакета.Рисунки.ПодписьБухгалтер;
	ИначеЕсли ОбластьДляКартинки = "Реклама" Тогда
		ОбластьМакетаКартинка = ОбластьМакета.Рисунки.Реклама;
	Иначе
		ОбластьМакетаКартинка = ОбластьМакета.Рисунки.ПодписьМенеджер;
	КонецЕсли;
	
	//Находим необходимый файл для вставки в макет
	
	Файлы = Справочники.ОрганизацииПрисоединенныеФайлы;
	Отбор = Новый Структура("Наименование");
	Отбор.Наименование = НазваниеФайла;
	Выборка = Файлы.Выбрать(,,Отбор,);
	Пока Выборка.Следующий() Цикл
		Если Выборка.ПометкаУдаления = Ложь И Выборка.ВладелецФайла = ОрганизацияВладелец  Тогда
			ФайлКартинки = Выборка.Ссылка;
			Прервать;
		КонецЕсли;			
	КонецЦикла;
	
	//Если файл не нашли, удаляем область,
	//если нашли - вставляем двоичные данные файла в печатную форму
	
	Если ФайлКартинки = Неопределено  Тогда
		ОбластьМакета.Рисунки.Удалить(ОбластьМакетаКартинка);		
	Иначе
		ДвоичныеДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлКартинки);		
		Если ТипЗнч(ДвоичныеДанныеФайла) = Тип("Картинка") Тогда
			Картинка = ДвоичныеДанныеФайла;
		ИначеЕсли ТипЗнч(ДвоичныеДанныеФайла) = Тип("ДвоичныеДанные") Тогда
			Картинка = Новый Картинка(ДвоичныеДанныеФайла);
		Иначе
			Картинка = Новый Картинка;
		КонецЕсли; 
		ОбластьМакетаКартинка.Картинка = Картинка;
	КонецЕсли;
		
КонецПроцедуры

Файл для скачивания содержит готовую к установке внешнюю печатную форму, которая здесь описана. Процедура и макет полностью взяты из стандартной конфигурации, в которых сделаны вышеперечисленные изменения.

Если не знаете как установить внешнюю печатную форму, может спросить в комментариях, или написать на email.

Могут заинтересовать

Добавить комментарий

Отправить