Добавляем подписи-печати в УПД заказ-наряда. Альфа-Авто 6
Почему-то такая солидная компания как Рарус не доделывает свои печатные формы? Не знаю, не знаю. Видимо, думает, что и так сойдет. В общем, клиент заказал, чтобы в УПД подставлялись все необходимые ФИО и их факсимиле. По сути, везде требуется подпись руководителя.
Ну что же, сделал эту задачу, заодно проникся высотой полета мысли авторов БСП по добавлению подписей и печатей в документ.
Сэкономлю вам время, если не захотите ковыряться в этом малоосмысленном нагромождении типового кода.
Обработка печати УПД называется ПечатьУПД. В ней есть макет ПФ_MXL_УПД, который и содержит макет документа УПД. Нас в нем интересует только подвал, стрелочками указал места, куда вставляются подписи и печати:
Изначально клиент просил подвинуть печать вверх. Я не особо ковырялся в типовом коде, поэтому сделал это довольно простой заглушкой в менеджере обработки ПечатьУПД:
&Вместо("ПечатьУПДОбщая") Функция пу_ПечатьУПДОбщая(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) // Вставить содержимое метода. ТабличныйДокумент = ПродолжитьВызов(МассивОбъектов, ОбъектыПечати, ПараметрыПечати); Инд = 1; Пока Истина Цикл Попытка Рисунок = ТабличныйДокумент.Рисунки["ПечатьОрганизации_Документ_" + XMLСтрока(Инд)]; Исключение Прервать; КонецПопытки; Рисунок.Верх = Рисунок.Верх - 60; //Смещаем вверх, обычно тут высота 163... Инд = Инд + 1; КонецЦикла; Возврат ТабличныйДокумент; КонецФункции
Как видите, я просто перебираю все рисунки вида ПечатьОрганизации_Документ_1 и сдвигаю их на 60 пикселей вверх.
Дальше, в документе не заполняется менеджер (пустой), поэтому не печатается ответственный за оформление факта хозяйственной жизни. Можно было бы заполнять менеджера текущим пользователем, но я решил сделать заглушку и брать его из руководителя, расширением модуля УправлениеПечатьюПлатформа:
&Вместо("ДанныеОтветственногоЛицаПодписанты") Функция пу_ДанныеОтветственногоЛицаПодписанты(Документ, ВидОтветственногоЛица, Знач Организация, ВыводитьПолноеФИО, ОбрамлятьФИО) СтруктураВозврата = ПродолжитьВызов(Документ, ВидОтветственногоЛица, Организация, ВыводитьПолноеФИО, ОбрамлятьФИО); //Менеджера и кладовщика берем из руководителя, если они не заполнены. Если СтруктураВозврата.Представление = "" И ( ВидОтветственногоЛица = "Отпустил" ИЛИ ВидОтветственногоЛица = "Менеджер" ) Тогда СтруктураВозврата = ДанныеОтветственногоЛицаПодписанты(Документ, "Руководитель", Организация, ВыводитьПолноеФИО, ОбрамлятьФИО); КонецЕсли; Возврат СтруктураВозврата; КонецФункции
ФИО кладовщика и менеджера стали появляться. Но почему-то для полей Кладовщик и Менеджер не выводились подписи.
Это решилось расширением модуля УправлениеПечатьюПереопределяемыйАльфаАвто:
&ИзменениеИКонтроль("ПриПолученииПодписейИПечатей") Процедура пу_ПриПолученииПодписейИПечатей1(Документы, ПодписиИПечати) КомплектыПодписейИПечатей = Новый Соответствие; Для Каждого Документ Из Документы Цикл Организация = Документ.Организация; КомплектПодписейИПечатей = КомплектыПодписейИПечатей[Организация]; Если КомплектПодписейИПечатей = Неопределено Тогда ОтветственныеЛица = "Руководитель,ГлавныйБухгалтер"; Если ТипЗнч(Документ) = Тип("ДокументСсылка.АктСверкиВзаиморасчетов") Тогда ОтветственныеЛица = "Представитель"; ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.ЗаказНаАвтомобиль") Или ТипЗнч(Документ) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда ОтветственныеЛица = "ИсполнительОрганизация"; ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда ОтветственныеЛица = "СФ,ГлавныйБухгалтер,Менеджер,Кладовщик"; ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.РеализацияТоваров") Тогда ОтветственныеЛица = ОтветственныеЛица + ",Отпустил"; #Вставка //Осипов - чтобы печатались реквизиты в заказ-наряде. ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.ЗаказНаряд") Тогда ОтветственныеЛица = ОтветственныеЛица + ",Кладовщик,Менеджер"; #КонецВставки КонецЕсли; КомплектПодписейИПечатей = Справочники.Организации.ПодписиИПечатиОрганизации(Документ, ОтветственныеЛица); КомплектыПодписейИПечатей.Вставить(Организация, КомплектПодписейИПечатей); КонецЕсли; ПодписиИПечати.Вставить(Документ, КомплектПодписейИПечатей); КонецЦикла; КонецПроцедуры
Почему-то про документ заказ-наряд писатели типовых забыли.
Но и это еще не всё. Подпись менеджера появилась, а кладовщика нет. Потому что в заказ-наряде нет реквизита Кладовщик. Пришлось еще немного расширить модуль УправлениеПечатьюПлатформа:
&Вместо("ПолучитьТипОтветственногоЛица") Функция пу_ПолучитьТипОтветственногоЛица(ВидОтветственногоЛица) //Осипов 2023-06-07 Результат = ПродолжитьВызов(ВидОтветственногоЛица); Если Результат = Неопределено Тогда Если ВидОтветственногоЛица = "Кладовщик" Тогда Возврат Перечисления.ВидыОбъектовСведений.Руководитель; //В качестве кладовщика возвращаем руководителя КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции
Только после этого всё заработало, как нужно.
Кстати, где добавляется подпись и печать я выяснил только замером производительности (трассировкой) кода. В модуле ПечатьДокументов.ДобавитьПодписьИПечать.
Как видите, к сожалению вынужден констатировать, что типовой код пока что — это гора сложно понимаемого и контролируемого кода, в котором сами же авторы БСП путаются.
Среда: Альфа-Авто: Автосалон+Автосервис+Автозапчасти КОРП. Редакция 6 (6.1.03.17) Объем: 1.5 час.
Свежие комментарии