Добавляем подписи-печати в УПД заказ-наряда. Альфа-Авто 6

Почему-то такая солидная компания как Рарус не доделывает свои печатные формы? Не знаю, не знаю. Видимо, думает, что и так сойдет. В общем, клиент заказал, чтобы в УПД подставлялись все необходимые ФИО и их факсимиле. По сути, везде требуется подпись руководителя.

Ну что же, сделал эту задачу, заодно проникся высотой полета мысли авторов БСП по добавлению подписей и печатей в документ.

Сэкономлю вам время, если не захотите ковыряться в этом малоосмысленном нагромождении типового кода.

Обработка печати УПД называется ПечатьУПД. В ней есть макет ПФ_MXL_УПД, который и содержит макет документа УПД. Нас в нем интересует только подвал, стрелочками указал места, куда вставляются подписи и печати:

Изначально клиент просил подвинуть печать вверх. Я не особо ковырялся в типовом коде, поэтому сделал это довольно простой заглушкой в менеджере обработки ПечатьУПД:


&Вместо("ПечатьУПДОбщая")
Функция пу_ПечатьУПДОбщая(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
	// Вставить содержимое метода.
	ТабличныйДокумент = ПродолжитьВызов(МассивОбъектов, ОбъектыПечати, ПараметрыПечати);
	Инд = 1;
	Пока Истина Цикл                                                     
		Попытка
			Рисунок = ТабличныйДокумент.Рисунки["ПечатьОрганизации_Документ_" + XMLСтрока(Инд)];
		Исключение
			Прервать;
		КонецПопытки;
		Рисунок.Верх = Рисунок.Верх - 60; //Смещаем вверх, обычно тут высота 163...
		Инд = Инд + 1;
	КонецЦикла;
	Возврат ТабличныйДокумент;
КонецФункции

Как видите, я просто перебираю все рисунки вида ПечатьОрганизации_Документ_1 и сдвигаю их на 60 пикселей вверх.

Дальше, в документе не заполняется менеджер (пустой), поэтому не печатается ответственный за оформление факта хозяйственной жизни. Можно было бы заполнять менеджера текущим пользователем, но я решил сделать заглушку и брать его из руководителя, расширением модуля УправлениеПечатьюПлатформа:

&Вместо("ДанныеОтветственногоЛицаПодписанты")
Функция пу_ДанныеОтветственногоЛицаПодписанты(Документ, ВидОтветственногоЛица, Знач Организация, ВыводитьПолноеФИО, ОбрамлятьФИО)
	СтруктураВозврата = ПродолжитьВызов(Документ, ВидОтветственногоЛица, Организация, ВыводитьПолноеФИО, ОбрамлятьФИО);
	//Менеджера и кладовщика берем из руководителя, если они не заполнены.
	Если  СтруктураВозврата.Представление = "" И (
		ВидОтветственногоЛица = "Отпустил" 
		ИЛИ ВидОтветственногоЛица = "Менеджер"
		) Тогда
		СтруктураВозврата = ДанныеОтветственногоЛицаПодписанты(Документ, "Руководитель", Организация, ВыводитьПолноеФИО, ОбрамлятьФИО);
	КонецЕсли;
	Возврат СтруктураВозврата;
КонецФункции

ФИО кладовщика и менеджера стали появляться. Но почему-то для полей Кладовщик и Менеджер не выводились подписи.

Это решилось расширением модуля УправлениеПечатьюПереопределяемыйАльфаАвто:

&ИзменениеИКонтроль("ПриПолученииПодписейИПечатей")
Процедура пу_ПриПолученииПодписейИПечатей1(Документы, ПодписиИПечати)

	КомплектыПодписейИПечатей = Новый Соответствие;

	Для Каждого Документ Из Документы Цикл
		Организация 				= Документ.Организация;
		КомплектПодписейИПечатей 	= КомплектыПодписейИПечатей[Организация];

		Если КомплектПодписейИПечатей = Неопределено Тогда
			ОтветственныеЛица = "Руководитель,ГлавныйБухгалтер"; 

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

			КомплектПодписейИПечатей = Справочники.Организации.ПодписиИПечатиОрганизации(Документ, ОтветственныеЛица);
			КомплектыПодписейИПечатей.Вставить(Организация, КомплектПодписейИПечатей);
		КонецЕсли;

		ПодписиИПечати.Вставить(Документ, КомплектПодписейИПечатей);
	КонецЦикла;

КонецПроцедуры

Почему-то про документ заказ-наряд писатели типовых забыли.

Но и это еще не всё. Подпись менеджера появилась, а кладовщика нет. Потому что в заказ-наряде нет реквизита Кладовщик. Пришлось еще немного расширить модуль УправлениеПечатьюПлатформа:

&Вместо("ПолучитьТипОтветственногоЛица")
Функция пу_ПолучитьТипОтветственногоЛица(ВидОтветственногоЛица)
	//Осипов 2023-06-07
	Результат = ПродолжитьВызов(ВидОтветственногоЛица);
	Если Результат = Неопределено Тогда
		Если ВидОтветственногоЛица = "Кладовщик" Тогда
			Возврат Перечисления.ВидыОбъектовСведений.Руководитель; //В качестве кладовщика возвращаем руководителя
		КонецЕсли;
	КонецЕсли;
	Возврат Результат;
КонецФункции

Только после этого всё заработало, как нужно.

Кстати, где добавляется подпись и печать я выяснил только замером производительности (трассировкой) кода. В модуле ПечатьДокументов.ДобавитьПодписьИПечать.

Как видите, к сожалению вынужден констатировать, что типовой код пока что — это гора сложно понимаемого и контролируемого кода, в котором сами же авторы БСП путаются.

Среда: Альфа-Авто: Автосалон+Автосервис+Автозапчасти КОРП. Редакция 6 (6.1.03.17) Объем: 1.5 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

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

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