Печать и подпись с минимальной доработкой ЕРП (и ЕРП УХ)
Активация (с доработкой) механизма отдельного вывода печати, подписи и других картинок в печатных формах наподобие того, как это сделано в 1С: Бухгалтерии 3.0. Также появится возможность выводить различные подписи, печати и другие картинки в зависимости от реквизитов печатаемого документа.
- Описание
- Подробнее
Описание
В конфигурациях серии ЕРП (ЕРП УХ, КА и УТ 11) на первый взгляд нет механизма вывода в печатную форму печати и подписи, как это сделано в конфигурации 1С:Бухгалтерия 3.0:

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