ЭЦП в отчетах
Вывод ЭП при печати документов
(об указании места вывода штампа ЭП в ОД см описание "Оправдательные документы")
Возможные способы:
1) В виде штампа
(согласно Приказа Министерства связи и массовых коммуникаций РФ и Федеральной службы охраны РФ от 27 мая 2015 г. № 186/258)
Для вывода эмблемы (герба) следует задать настройку "Эмблема для визуального отображения в штампе ЭП" , иначе штамп будет выведен без герба.
1.1) В печатных формах документов и отчетов.
Вывод штампа с использованием переменной выборки данных для печати, содержащей набор реквизитов ЭП. Обычно (в большинстве отчетов) это переменная ecp .
Пример формулы в Excel шаблоне (.xlt):
>>>FIND_ECP_STAMP({ecp};5;1)
Пример формулы в RTF шаблоне (.rtf):
<ep>[dbo.get_one_ecp(max(ecp),1)]</ep>
1.2) В файлах ОД.
Вывод штампа и/или некоторых реквизитов ЭП с использованием специальных тэгов, обозначающих место вывода штампа ЭП. Метод применяется в файлах ОД. При этом ЭП считывается из документа напрямую, без применения каких-либо переменных выборки данных для печати.
В Excel и RTF файлах (в т.ч. шаблонах), прикрепляемых как ОД, можно обозначить место, в котором должен выводится штамп ЭП наложенный на ОД.
В шаблоне документа "Реестр соглашений" и его приложениях рекомендуем использовать теги для обозначения места вывода штампа ЭП, а не сам штамп ЭП.
Например, если в шаблоне печати документа "Справка об изменении росписи (форма 2)" прописать тег
В общем виде тэг выглядит как <ep>#stamp_paste:У;Х[;парам]</ep>
где У - реквизит ЭП (см далее), Х - значение реквизита требуемой ЭП. Например <ep>#stamppaste:5;1</ep> - вывести штамп ЭП 1 уровня (5 - реквизит "уровень ЭП", 1 - значение реквизита "уровень ЭП" ЭП, которую надо отобразить в виде штампа)_.
Возможные необязательные параметры парам:
- scale - задать масштабирование штампа, например <ep>#stamp_paste:5;1; scale: 3</ep> - увеличить в 3 раза, <ep>#stamp_paste:5;1; scale: 0,5</ep> - уменьшить в 2 раза.
- all - вывод всех ЭП подходящих под заданные условия. Вывод штампов осуществляется друг под другом.
Например: <ep>#stamp_paste:5;1;all</ep> - вывод всех ЭП 1-го уровня; <ep>#stamp_paste:0;1;all</ep> - вывод всех ЭП документа. - date - вывод даты наложения ЭП, например <ep>#stamp_paste:5;2;date</ep> . Вывод значения осуществляется с учетом формата текста ячейки (если отчет в Excel) или с учетом формата текста тэга (если отчет RTF).
- datetime - вывод даты и времени наложения ЭП.
-
date:"format" - вывод даты/времени наложения ЭП с пользовательским форматом. Например <ep>#stamp_paste:5;2;date:"dd MMMM yyyy"</ep> - вывод даты наложения ЭЦП 2 уровня в виде 27 марта 2022 . Вывод значения осуществляется с учетом формата текста ячейки (если отчет в Excel) или с учетом формата текста тэга (если отчет RTF).
Наборы символов/слов допустимые при описании формата (format):d День месяца, в диапазоне от 1 до 31. dd День месяца, в диапазоне от 01 до 31. ddd Сокращенное название дня недели (вт). dddd Полное название дня недели (вторник). M Месяц, в диапазоне от 1 до 12. MM Месяц, в диапазоне от 01 до 12. MMM Сокращенное название месяца. MMMM Полное название месяца. y Год, в диапазоне от 0 до 99. yy Год, в диапазоне от 00 до 99. yyyy Год в виде четырехзначного числа. g, gg Период или эра (нашей эры). h Час в 12-часовом формате от 1 до 12. hh Час в 12-часовом формате от 01 до 12. H Час в 24-часовом формате от 0 до 23. HH Час в 24-часовом формате от 00 до 23. m Минуты, в диапазоне от 0 до 59. mm Минуты, в диапазоне от 00 до 59. s Секунды, в диапазоне от 0 до 59. ss Секунды, в диапазоне от 00 до 59. K Данные о часовом поясе. t Первый символ указателя AM/PM (до полудня "A", после полудня "P"). tt Указатель AM/PM (до полудня AM, после полудня PM).
Любые символы вне этого списка выводятся в дате как есть.
Вывод некоторых реквизитов документа с использованием специальных тэгов в файле ОД:
<ep>#doc_paste:number</ep> - номер документа, к которому прикреплен ОД.
<ep>#doc_paste:date[:"format"]</ep> - дата документа в различных форматах, к которому прикреплен ОД. По умолчанию, без параметра "format" используется формат ДД.ММ.ГГГГ .
Использование тэгов doc_paste в шаблоне печатной формы документа позволяет заполнить номер и дату в документе после прохождения всех согласований, при этом печатная форма, прикрепленная в качестве ОД, не потребует переформирования по окончания процедуры согалсования и присовения документу номера и даты.
Примеры:
<ep>#doc_paste:number</ep> - выведет номер документа 123 .
<ep>#doc_paste:date</ep> - выведет дату документа как 25.09.2024
<ep>#doc_paste:date:"dd MMMM yyyy"</ep> - выведет дату документа как 25 сентября 2024 .
2) В виде текстового набора реквизитов ЭП
Вывод отдельных параметров (ФИО, уровень, достоверность и т.п.) ЭП с использованием переменной выборки данных для печати, содержащей набор реквизитов ЭП. Обычно (в большинстве отчетов) это переменная ecp .
Пример формулы в Excel шаблоне для приведенного примера - выводится 4 параметра (должность, ФИО, дата наложения ЭП и достоверность) :
>>>ПАРАМЕТР(FIND_ECP({ecp};5;1); 1; "|") &" "& ПАРАМЕТР(FIND_ECP({ecp};5;1); 2; "|") &" Дата подписания: "& ПАРАМЕТР(FIND_ECP({ecp};5;1); 3; "|") &" "& ПАРАМЕТР(FIND_ECP({ecp};5;1); 4; "|")
Пример формулы в RTF шаблоне для вывода реквизитов ФИО подписанта и даты подписания ЭП 3 уровня:
Исполнитель _____________________ /[dbo.GetElement(dbo.find_ecp(max(ecp),5,3), '|', 1)]/ ( [dbo.GetElement(dbo.find_ecp(max(ecp),5,3), '|', 2)] )
Результат
Исполнитель _____________________ /[dbo.GetElement(dbo.find_ecp(max(ecp),5,3), '|', 1)]/ ( [Left(dbo.GetElement(dbo.find_ecp(max(ecp),5,3), '|', 2),10)] )
Результат
3) В виде таблицы со списком ЭП.
Для вывода информации об ЭП в таком виде следует переключить настройку "Выводить информацию об ЭП для сохраненных и подписанных отчетов" соответствующего: документа, отчета либо режима "Сохраненные отчеты" - в значение "Сноски на каждом листе и подписи в конце файла". В этом случае:
- при печати документов/отчетов, при просмотре текстовых ОД (PDF, RTF, XLS, ...), при открытии Сохраненного отчета:
- на каждом листе будет выведен уникальный Идентификатор сеанса печати.
- в конце отчета (при достаточном количестве пустого пространства), либо на отдельном пустом листе выводится список ЭП, содержащий реквизиты подписанта, сертификата, машиночитаемой доверенности и времени подписания.
- при просмотре ОД в графическом формате (jpg, png и т.д.) добавляется дополнительная область (холст) для вставки списка ЭП.
Применение различных способов вывода информации об ЭП
Выборка данных для печати содержит переменную {ecp} (в большинстве случаев), в которой и находится информация обо всех ЭП документа в виде строки с разделителями # и | :
(1) должность подписанта первой ЭП по данным сертификата
|(2) ФИО подписанта 1-й ЭП по данным сертификата
|(3) дата наложения 1-й ЭП
|(4) примечание к 1-й ЭП (достоверность)
|(5) номер уровня 1-й ЭП
|(6) номер сертификата
|(7) срок действия сертификата
|(8) идентификатор логина наложившего ЭП
|(9) всегда пусто
|(10) логин наложивший ЭП
|(11) телефон логина наложившего ЭП
|(12) тип уровня ЭП
|(13) номер доверенности
#...вторая ЭЦП...
#...
В скобках показан порядковый номер реквизита (параметра ЭЦП) в блоке. В функциях Excel (ПАРАМЕТР() и FIND_ECP()) порядковый номер используется как есть, в функции для RTF шаблона GetElement() следует указывать порядковый номер на единицу меньше.
Должность (параметр №1) берется :
- из сертификата (при наличии в справочнике "Сертификаты" и при включенной настройке документа/режима печати "Проверять электронную подпись в печати документа");
- при отсутствии - из сохраненной ЭП документа (должность логина подписанта на момент наложения ЭП);
- при отсутствии - из реквизитов логина подписанта (на момент печати отчета).
ФИО (параметр №2) берется из сертификата.
Телефон (параметр №11) берется из реквизитов логина подписанта (см меню "Пользователи" вкладка "Исполнитель").
Тип уровня ЭП(параметр №12) - согласно значению в поле "Тип" справочника "Уровни ЭП".
Существует неявный индекс 0 (номер реквизита), который содержит порядковый номер ЭП (в порядке наложения ЭП, начиная с 1, не путать с уровнем ЭП) - который применяется в формулах и тэгах по выводу информации об ЭП. См далее примеры.
При использовании тэгов stamp_paste для задания условий выводимой ЭП возможно применение параметров №№: 0,1,2,5,6,8,10.
Если в момент печати SQL серверу недоступен Сервис проверки ЭЦП, указанный на пользователя, печатающего документ, то информация заполняется по данным примененного сертификата (справочник "Сертификаты"). При этом не заполняется параметр №4 - достоверность ЭП (в штампе не используется).
Настройка документов "Проверять электронную подпись в печати документа" - определяет заполнение поля №4 . Рекомендуемое значение НЕТ. Если разрешено, то осуществляется проверка всех ЭП, фигурирующих в отчете документов, что значительно увеличиывает время формирования отчетов - ЭП следует проверять в самом комплексе, а не при печати.
Пример значения поля ecp для документа, на который наложено три ЭП:
Специалист|Иванов Иван Иванович|02.03.2017 14:31:36| Подпись верна.|2|1D87D9|с 16.12.2016 по 16.03.2018|34#Специалист|Петров Петр Перович|05.03.2017 16:31:36|Подпись верна.|2|1D87D9|с 16.12.2016 по 16.03.2018|123#Руководитель|Сидоров Сидр Сидорович|02.04.2017 15:31:36| Неверная подпись.|3|1D87D9|с 16.12.2016 по 16.03.2018|36
Примеры применения формул
Вывод ЭЦП в виде штампа c эмблемой (для ЭЦП наложенных на клиенте не ниже 17.4.11 и с применением Сервиса ОД )
(согласно Приказа Министерства связи и массовых коммуникаций РФ и Федеральной службы охраны РФ от 27 мая 2015 г. № 186/258)
Примеры формул вывода штампа для Excel шаблонов (.xlt)
Подпись первого уровня: >>FIND_ECP_STAMP({ecp}; 5; 1)
Подпись максимального уровня: >>FIND_ECP_STAMP({ecp}; 5; "max")
Все подписи 1-го уровня: >>FIND_ECP_STAMP_ALL({ecp};5;1)
Первая по дате подписания подпись: >>FIND_ECP_STAMP({ecp}; 3; "min")
Последняя по дате подписания подпись: >>FIND_ECP_STAMP({ecp}; 3; "max")
Последняя по дате подписания подпись 2 уровня: >>FIND_ECP_STAMP({ecp}; 5; 2; 3; "max")
Подпись бухгалтера Иванова: >>FIND_ECP_STAMP({ecp}; 1; "бухгалтер"; 2; "Иванов")
Последняя по списку подпись: >>FIND_ECP_STAMP({ecp}; 0; "max")
Подпись заданного типа: >>>FIND_ECP_STAMP({ecp};12;"Председатель комиссии")
Примеры формул вывода штампа для WORD шаблонов (.rtf)
<ep>[dbo.get_one_ecp(max(ecp),1)]</ep> - подпись 1 уровня
<ep>[dbo.get_one_ecp(max(ecp),2)]</ep> - подпись 2 уровня
<ep>[dbo.get_one_ecp(max(ecp),0)]</ep> - подпись максимального уровня
В RTF шаблонах вывод ЭЦП должен быть последней строкой отчета с данными. После блока <ep>...</ep> вывод переменных невозможен, только прямой текст.
Примеры тэгов вывода штампа
<ep>#stamp_paste:5;3</ep> - вывод штампа ЭП 3 уровня.
<ep>#stamp_paste:1;"директор"</ep> - вывод штампа ЭП подписанной сертификатом директора (любой ЭП, в должности которой присутствует слово "директор").
<ep>#stamp_paste:2;"Иванов"</ep> - вывод штампа ЭП подписанной сертификатом Иванова (т.е. это и Иванов Иван Иванович, и Иванов Петр Петрович и т.п.).
<ep>#stamp_paste:2;"Иванов Иван Иванович"</ep> - вывод штампа ЭП подписанной сертификатом Иванова Иван Ивановича .
<ep>#stamp_paste:10;"grbs"</ep> - вывод штампа ЭП подписанной логином grbs (или grbs_2, или m_grbs_prip и т.п.).
<ep>#stamp_paste:3;min</ep> - вывод штампа ЭП, наложенной первой (с минимальной датой установки ЭП).
<ep>#stamp_paste:3;max</ep> - вывод штампа ЭП, наложенной последней (с максимальной датой установки ЭП).
<ep>#stamp_paste:0;2</ep> - вывод штампа ЭП, наложенной второй (вторая по порядку наложения ЭП).
<ep>#stamp_paste:0;1;all</ep> - вывод штампа всех ЭП документа.
<ep>#stamp_paste:5;2;date</ep> - вывод даты (не штампа) наложения ЭП 2 уровня, в формате ДД.ММ.ГГГГ, например 25.03.2022 .
<ep>#stamp_paste:5;2;date:"dd MMMM yyyyг."</ep> - вывод даты (не штампа) наложения ЭП 2 уровня, в виде 25 марта 2022г. .
<ep>#stamp_paste:5;2;date:"dd.MM.yyyy HH:mm:ss"</ep> - вывод даты и времени (не штампа) наложения ЭП 2 уровня, в виде 25.03.2022 10:45:32 .
Вывод ЭЦП текстом (для xlt шаблонов)
Примеры формул по выводу ФИО (реквизит 2) и примечания (реквизит 4) ЭЦП
Подпись третьего уровня: >>>ПАРАМЕТР(FIND_ECP({ecp};5;3); 2; "|") &" "& ПАРАМЕТР(FIND_ECP({ecp};5;3); 4; "|")
Подпись максимального уровня: >>>ПАРАМЕТР(FIND_ECP({ecp};5;"max"); 2; "|") &" "& ПАРАМЕТР(FIND_ECP({ecp};5;"max"); 4; "|")
Первая по дате подписания подпись: >>>ПАРАМЕТР(FIND_ECP({ecp}; 3; "min"); 2; "|") &" "& ПАРАМЕТР(FIND_ECP({ecp}; 3; "min"); 4; "|")
Последняя по дате подписания подпись 2 уровня: >>>ПАРАМЕТР(FIND_ECP({ecp}; 5; 2; 3; "max"); 2; "|") &" "& ПАРАМЕТР(FIND_ECP({ecp}; 5; 2; 3; "max"); 4; "|")
Подпись бухгалтера Иванова: >>>ПАРАМЕТР(FIND_ECP({ecp}; 1; "бухгалтер"; 2; "Иванов"); 2; "|") &" "& ПАРАМЕТР(FIND_ECP({ecp}; 1; "бухгалтер"; 2; "Иванов"); 4; "|")
Последняя по списку подпись: >>>ПАРАМЕТР(FIND_ECP({ecp}; 0; "max"); 2; "|") &" "& ПАРАМЕТР(FIND_ECP({ecp}; 0; "max"); 4; "|")
Описание функций
Для Excel шаблонов
FIND_ECP_STAMP(имя_поля; N; значение [; N2; значение2])
Для вывода штампа ЭЦП в Excel шаблонах. Параметры функции:
имя_поля - имя поля с данными ЭЦП, обычно {ecp};
N - число от 0 до 9, номер реквизита ЭП. Где: 0 - порядковый номер ЭП, 1-8 - реквизиты ЭП (см выше); 9 - аналог 1 (должность подписанта), но только точный поиск (по умолчанию поиск неточный - по вхождению) ;
значение - искомое значение заданного параметра. Может быть числом (для реквизита "Уровень ЭЦП" или порядкового номера) или строкой (текстом). Для строк поиск происходит не точный - по вхождению подстроки в строку, кроме параметра 9 - точный поиск заданной должности. Имеются зарезервированные значения "max" и "min" для поиска максимального и минимального значения.
[; N2; значение2] - если задана вторая пара значений, то сначала вычисляется первая пара, затем в результирующем наборе ищется вторая пара значений. Важно: пары значений с min и max ставить вторыми.
Пример: >>>FIND_ECP_STAMP({ecp}; 5; 2) - вывести в виде штампа ЭП 2-го уровня. Если их несколько, то выведен будет только один штамп первой попавшеся ЭП 2-го уровня.
Пример: >>>FIND_ECP_STAMP({ecp}; 1; "бухгалтер") - вывести в виде штампа ЭП с должностью подписанта, содержащей слово "бухгалтер".
Пример: >>>FIND_ECP_STAMP({ecp}; 9; "бухгалтер") - вывести в виде штампа ЭП с должностью подписанта дословно "бухгалтер".
FIND_ECP_STAMP_ALL(имя_поля; N; значение [; N2; значение2])
Для вывода штампа всех ЭП, подпадающих под заданное условие, в Excel шаблонах. Параметры функции идентичны функции FIND_ECP_STAMP().
Пример: >>>FIND_ECP_STAMP_ALL({ecp}; 5; 2) - вывести в виде штампа все ЭП 2-го уровня.
Пример: >>>FIND_ECP_STAMP_ALL({ecp}; 0; 1) - вывести в виде штампа все ЭП.
FIND_ECP_STAMP_AUTO_SIZE(имя_поля; N; значение [; N2; значение2])
Аналог функции FIND_ECP_STAMP() , отличается возможностью регулировать размер штампа:
- по горизонтали штамп подгоняется под ширину ячейки, в т.ч. объединенной, в которой указана формула - методом пропорционального изменения высоты и ширины штампа, вплоть до микроскопического размера;
- по вертикали ячейка подгоняется под высоту штампа, если штамп высотой больше высоты ячейки, в т.ч. объединенной, в которой указана формула. А если ячейка является объединенной по высоте, то изменяется высота первой или последней строки объединенной ячейки.
FIND_ECP({имя_поля}; N; значение [; N2; значение2])
Для поиска определенной ЭП в специальном тексте (поле), содержащем информацию об ЭП. Применяется в качестве первого параметра к функции ПАРАМЕТР(). Назначение параметров такое же, как у функции FIND_ECP_STAMP().
ПАРАМЕТР(строка; N; разделитель)
Для вывода значения одного заданного реквизита ЭП в текстовом виде. В общем случае назначение функции - выделить из произвольного текста с разделителями заданный порядковым номером кусок. Параметры функции:
строка - строка текста с разделителями.
N - порядковый номер части текста, ограниченной разделителем.
разделитель - символ, разделяющий части текста, в контексте ЭЦП это "|".
Пример: >>>ПАРАМЕТР(FIND_ECP({ecp}; 1; "бухгалтер"; 2; "Иванов"); 2; "|") &" "& ПАРАМЕТР(FIND_ECP({ecp}; 1; "бухгалтер"; 2; "Иванов"); 4; "|") - при наличии ЭП бухгалтера Иванова будет выведено его ФИО (первая функция, с параметром 2) и достоверность ЭП (вторая фнкция, с параметром 4).
Для RTF шаблонов
dbo.get_one_ecp(max(ecp),1)
Для вывода штампа ЭЦП в rtf шаблонах. Первый параметр - max(ecp) - имя поля содержащее информацию об ЭЦП, второй параметр - порядковый номер подписи.
dbo.find_ecp(строка ЭЦП, N, значение) - полный аналог Excel функции FIND_ECP(), но для RTF шаблонов - для поиска ЭП по заданному реквизиту. Применяется совместно с функцией dbo.GetElement(). Параметры функции:
- строка ЭЦП - поле выборки, содержащее структурированную информацию об ЭП, обычно поле ecp;
- N - число от 0 до 9, номер реквизита ЭП. Где: 0 - порядковый номер ЭП, 1-8 - реквизиты ЭП (см выше); 9 - аналог 1 (должность подписанта), но только точный поиск (по умолчанию поиск неточный - по вхождению) ;
- значение - искомое значение реквизита ЭП. Может быть числом (для реквизита "Уровень ЭЦП" или порядкового номера) или строкой (текстом). Для строк поиск происходит не точный - по вхождению подстроки в строку, кроме параметра 9 - точный поиск заданной должности. Имеются зарезервированные значения "max" и "min" для поиска максимального и минимального значения.
Пример: dbo.find_ecp(max(ecp), 5, 2) - найти в поле ecp ЭП с "уровнем ЭЦП=2"
Пример: dbo.find_ecp(max(ecp), 1, "бухгалтер") - найти в поле ecp ЭП с должностью подписанта, содержащей слово "бухгалтер".
Пример: dbo.find_ecp(max(ecp), 9, "бухгалтер") - найти в поле ecp ЭП с должностью подписанта дословно "бухгалтер".
Если нужен поиск по нескольким значениям, то вызывать функцию от функции, например: dbo.find_ecp(dbo.find_ecp(строка ЭЦП, N1, значение1), N2, значение2) .
dbo.GetElement(строка, разделитель, N)
Для вывода значения одного заданного реквизита ЭП в текстовом виде. В общем случае назначение функции - выделить из произвольного текста с разделителями заданный порядковым номером кусок. Параметры функции:
строка - строка текста с разделителями.
разделитель - символ, разделяющий части текста, в контексте ЭЦП это "|".
N - порядковый номер части текста, ограниченной разделителем. Отсчет начинается с 0, т.е. первый реквизит имеет номер 0, второй - номер 1, и т.д.
Например в Excel шаблоне вывод ФИО (реквизит №2) формулой: >>ПАРАМЕТР(FIND_ECP({ecp};5;1); 2; "|")
а в RTF шаблоне формулой (номер реквизита на 1 меньше): [dbo.GetElement(dbo.find_ecp(max(ecp),5,1), '|', 1)]
Настройки
Проверять электронную подпись в печати документа
Настройка на документ/отчет.
Если ВКЛючено, то при формировании отчетной формы, если в шаблоне печати предусмотрен вывод информации об ЭП, осуществляется проверка достоверности ЭП - что занимает значительное время (до десятков секунд на один документ). В противном случае - настройка ОТКЛючена - просто выводятся данные об ЭП, без проверки. Рекомендуемое значение ОТКЛючено - проверять ЭП следует в списках документов, а не при печати.