В конфигурациях серии ЕРП (ЕРП УХ, КА и УТ 11) на первый взгляд нет механизма вывода в печатную форму печати и подписи, как это сделано в конфигурации 1С:Бухгалтерия 3.0:
При более детальном ознакомлении с кодом видно, что сам механизм практически реализован, но на дату этой публикации так и не включен (не доработан) в этих конфигурациях.
Механизм подключения "факсимиле" в моём случае не подошёл (да и по субъективной статистике он редко подходит под большинство задач).
В демобазе по БСП (версии 3.1.10.403) есть пример, где задействуются нужные методы, и печать и подпись выводятся. Но сделано это только для одного поля - Организация и с бОльшей доработкой кода, чем предлагается в данной статье.
Цель этой публикации - показать, как включить механизм вывода печати и подписи в конфигурациях (ЕРП, ЕРПУХ, КА и УТ 11) и, заодно, немного его расширить по сравнению с тем же функционалом из 1С:Бухгалтерия 3.0 или демо примером БСП.
Алгоритм:
1. Сначала закомментировать строку "Настройки.ИспользоватьПодписиИПечати = Ложь;" в процедуре "ПриОпределенииНастроекПечати" общего модуля "УправлениеПечатьюПереопределяемый".
2. Переопределить процедуру "ПриПолученииПодписейИПечатей" в общем модуле "УправлениеПечатьюПереопределяемый". Она изначально пустая и сделана как раз для того, чтобы разработчики уже сами определяли какие картинки выводить (или, соответственно, не выводить в зависимости от признака "Подпись и печать").
3. Переопределить процедуру "ПрефиксыИменОбластейСПодписьюИПечатью" общего модуля "УправлениеПечатью"
Ниже представлен весь код.
В общем модуле "УправлениеПечатьюПереопределяемый") в расширении:
#Область ПрограммныйИнтерфейс
&ИзменениеИКонтроль("ПриОпределенииНастроекПечати")
Процедура ПодписиИПечати_ПриОпределенииНастроекПечати(Настройки)
УправлениеПечатьюЛокализация.ПриОпределенииНастроекПечати(Настройки);
//++ НЕ ГОСИС
#Удаление
Настройки.ИспользоватьПодписиИПечати = Ложь;
#КонецУдаления
//-- НЕ ГОСИС
КонецПроцедуры
&После("ПриПолученииПодписейИПечатей")
Процедура ПодписиИПечати_ПриПолученииПодписейИПечатей(Документы, ПодписиИПечати)
СоответствиеРеквизитов = Новый Структура;
СоответствиеРеквизитов.Вставить("Печать", "Организация");
СоответствиеРеквизитов.Вставить("Логотип", "Организация");
СоответствиеРеквизитов.Вставить("ПодписьРуководителя", "Руководитель");
СоответствиеРеквизитов.Вставить("ПодписьБухгалтера", "ГлавныйБухгалтер");
Для Каждого Документ Из Документы Цикл
МетаданныеДокумента = Документ.Метаданные();
СписокРеквизитовСтрока = "";
Для Каждого КлючЗначение Из СоответствиеРеквизитов Цикл
Если ОбщегоНазначения.ЕстьРеквизитОбъекта(КлючЗначение.Значение, МетаданныеДокумента) Тогда
СписокРеквизитовСтрока = СтрШаблон("%1%2,", СписокРеквизитовСтрока, КлючЗначение.Значение);
КонецЕсли;
КонецЦикла;
СписокРеквизитовСтрока = Лев(СписокРеквизитовСтрока, СтрДлина(СписокРеквизитовСтрока) - 1);
СтруктураПодписи = Новый Структура;
РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Документ, СписокРеквизитовСтрока);
Для Каждого РеквизитДокумента Из РеквизитыДокумента Цикл
Для Каждого КлючЗначениеСоответствия Из СоответствиеРеквизитов Цикл
Если КлючЗначениеСоответствия.Значение = РеквизитДокумента.Ключ Тогда
КлючКартинки = КлючЗначениеСоответствия.Ключ;
Картинка = КартинкаПоШаблонуИмени(РеквизитДокумента.Значение, КлючКартинки);
Если Не Картинка = Неопределено Тогда
СтруктураПодписи.Вставить(КлючКартинки, Картинка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если СтруктураПодписи.Количество() > 0 Тогда
ПодписиИПечати.Вставить(Документ, СтруктураПодписи);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция КартинкаПоШаблонуИмени(Объект, ШаблонИмени)
РезультатФункции = Неопределено;
ИмяСправочникаХранилищаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(Объект);
Если Не ЗначениеЗаполнено(ИмяСправочникаХранилищаФайлов) Тогда
Возврат РезультатФункции;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Файлы.Ссылка КАК Ссылка
|ИЗ
| &ИмяСправочника КАК Файлы
|ГДЕ
| Файлы.ВладелецФайла = &ВладелецФайлов
| И НЕ Файлы.ПометкаУдаления
| И ВРЕГ(Файлы.Наименование) ПОДОБНО ""&ШаблонИмени%""";
ПолноеИмяСправочника = "Справочник." + ИмяСправочникаХранилищаФайлов;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяСправочника", ПолноеИмяСправочника);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ШаблонИмени", ВРег(ШаблонИмени));
Запрос.УстановитьПараметр("ВладелецФайлов", Объект);
Выборка = Запрос.Выполнить().Выбрать();
Если Не Выборка.Следующий() Тогда
Возврат РезультатФункции;
КонецЕсли;
ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(Выборка.Ссылка, Ложь);
Если ДвоичныеДанные = Неопределено Тогда
Возврат РезультатФункции;
КонецЕсли;
Возврат Новый Картинка(ДвоичныеДанные);
КонецФункции
#КонецОбласти
В общем модуле "УправлениеПечатью" в расширении:
#Область СлужебныеПроцедурыИФункции
&ИзменениеИКонтроль("ПрефиксыИменОбластейСПодписьюИПечатью")
Функция ПодписиИПечати_ПрефиксыИменОбластейСПодписьюИПечатью()
Результат = Новый Массив;
Результат.Добавить("Печать");
Результат.Добавить("Подпись");
Результат.Добавить("Факсимиле");
#Вставка
Результат.Добавить("Логотип");
#КонецВставки
Возврат Результат;
КонецФункции
#КонецОбласти
Подробнее про доработку:
1. У документа, печатную форму которого мы выводим, есть определённые реквизиты (в данном случае - это Организация, Руководитель и ГлавныйБухгалтер). Элементы справочников из этих реквизитов используются для получения картинок. У Организации это могут быть картинка печати и логотипа. У Руководителя - подпись. И так далее. Список этих реквизитов перечисляем в коде путём добавления в код соответствующих строк.
2. К элементам соответствующих справочников этих реквизитов прикрепляем вложенные файлы картинок - печати, подписи или чего-то другого. Самое главное, чтобы имена этих файлов начинались на те слова, которые являются ключами соответствующих строк структуры. Например, в элементе справочника, который указан в реквизите "Руководитель" документа должно быть вложение с именем, начинающимся на "ПодписьРуководителя"
3. В макет печатной формы, редактируемом через пользовательский режим - добавляется в нужное место картинка с именем равным ключу соответствующей строки структуры. Например, для примера из п.2 - это "ПодписьРуководителя"
4. Изначально в функционале БСП определено, что выводимыми/скрываемыми картинками могут быть только картинки с именами, начинающимися на "Печать", "Подпись" или "Факсимиле". Чтобы расширить этот список (добавить, например, "Логотип") нужно переопределить процедуру "ПрефиксыИменОбластейСПодписьюИПечатью" общего модуля "УправлениеПечатью"
Готово.
Отличия от примера, приведённого в демобазе конфигурации БСП:
1. Картинки берутся из прикрепленных файлов. Нет необходимости дополнительно дописывать конфигурацию и добавлять реквизиты для хранения картинок.
2. Картинки можно брать из различных реквизитов документа, а не только из реквизита "Организация"
3. Можно брать сразу несколько картинок из одного реквизита (например, как в примере выше - "Печать" и "Логотип" из одного реквизита "Организация").
4. Используются макеты из "Макеты печатных форм".
На что стоит обратить внимание:
1. Флажок "Подпись и печать" будет появляться на форме только в том случае, если есть хотя бы одна картинка, которая была подключена с помощью этого механизма.
2. Если в типовом макете уже есть картинка с именем, которое мы хотим добавить (например, в типовом макете "Счет на оплату" уже есть картинка "Логотип"), то в редактируемый пользователем макет уже не добавить такую картинку. Это стандартное поведение платформы, просто нужно это держать в голове и в коде прописывать имя картинки уже с учётом этого (например, "ЛоготипОрганизации").
Для большинства случаев вышеприведённого кода достаточно. А в приложенном файле расширение со специфическим дополнительным функционалом для получения не только реквизитов документа, но и вложенных реквизитов этих реквизитов. Например, для получения картинки из элемента справочника "ФизическиеЛица", который является реквизитом справочника "ОтветственныеЛицаОрганизаций", элемент справочника которого является реквизитом "Руководитель" документа "ЗаказКлиента"
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.20.80