ЭЦП в отчетах

Вывод ЭП при печати документов

(об указании места вывода штампа ЭП в ОД см описание "Оправдательные документы")

Возможные способы:

1) В виде штампа

(согласно Приказа Министерства связи и массовых коммуникаций РФ и Федеральной службы охраны РФ от 27 мая 2015 г. № 186/258)

otc_ecp_emblem

Для вывода эмблемы (герба) следует задать настройку "Эмблема для визуального отображения в штампе ЭП" , иначе штамп будет выведен без герба.

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)" прописать тег #stamp_paste:5;1, то при печати подписанного документа штамп ЭП не появится в отчете. Но если затем полученный отчет прикрепить как ОД и подписать его - то при открытии ОД будет добавлен штамп ЭП.

В общем виде тэг выглядит как <ep>#stamp_paste:У;Х[;парам]</ep>
где У - реквизит ЭП (см далее), Х - значение реквизита требуемой ЭП. Например <ep>#stamppaste:5;1</ep> - вывести штамп ЭП 1 уровня (5 - реквизит "уровень ЭП", 1 - значение реквизита "уровень ЭП" ЭП, которую надо отобразить в виде штампа)_.

Возможные необязательные параметры парам:

Вывод некоторых реквизитов документа с использованием специальных тэгов в файле ОД:
<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 .

otc_ecp_text

Пример формулы в 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)] )

Результат
otc_ecp_text_rtf

Исполнитель _____________________ /[dbo.GetElement(dbo.find_ecp(max(ecp),5,3), '|', 1)]/ ( [Left(dbo.GetElement(dbo.find_ecp(max(ecp),5,3), '|', 2),10)] )

Результат
otc_ecp_text_rtf2

3) В виде таблицы со списком ЭП.

Информация об ЭП с идентификатором

Для вывода информации об ЭП в таком виде следует переключить настройку "Выводить информацию об ЭП для сохраненных и подписанных отчетов" соответствующего: документа, отчета либо режима "Сохраненные отчеты" - в значение "Сноски на каждом листе и подписи в конце файла". В этом случае:

Применение различных способов вывода информации об ЭП

Выборка данных для печати содержит переменную {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(). Параметры функции:

Пример: 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)]

Настройки

Проверять электронную подпись в печати документа

Настройка на документ/отчет.
Если ВКЛючено, то при формировании отчетной формы, если в шаблоне печати предусмотрен вывод информации об ЭП, осуществляется проверка достоверности ЭП - что занимает значительное время (до десятков секунд на один документ). В противном случае - настройка ОТКЛючена - просто выводятся данные об ЭП, без проверки. Рекомендуемое значение ОТКЛючено - проверять ЭП следует в списках документов, а не при печати.