ЭЦП в отчетах

Пред.  Начало  След.

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

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

 

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

 

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 файлах (в т.ч. шаблонах), прикрепляемых как ОД, можно обозначить место, в котором должен выводится штамп ЭП наложенный на ОД: для этого прописать в нужном месте файла тег <ep>#stamp_paste:У;Х</ep> , где У - параметр ЭП (см далее), Х - значение параметра. Например <ep>#stamp_paste:5;1</ep> - вывести штамп ЭП 1 уровня, где 5 - параметр, обозначающий уровень ЭП, 1 - требуемый уровень ЭП, чей штамп нужно отобразить.

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

 
  Например, если в шаблоне печати документа "Справка об изменении росписи (форма 2)" прописать тег <ep>#stamp_paste:5;1</ep>, то при печати подписанного документа штамп ЭП не появится в отчете. Но если затем полученный отчет прикрепить как ОД и подписать его - то при открытии ОД будет добавлен штамп ЭП.

 

  Возможные параметры:

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).

 

Любые символы вне этого списка выводятся в дате как есть.

 

 

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

 

 

 

  Варианты с использованием переменной (см выше п.1.1 и 2) выборки данных для печати - используют переменную {ecp} (в большинстве случаев), которая содержит информацию обо всех ЭП документа в виде строки с разделителями # и | :

(1) должность подписанта первой ЭП по данным сертификата

|(2) ФИО подписанта 1-й ЭП по данным сертификата

|(3) дата наложения 1-й ЭП

|(4) примечание к 1-й ЭП (достоверность)

|(5) номер уровня 1-й ЭП

|(6) номер сертификата

|(7) срок действия сертификата

|(8) идентификатор логина наложившего ЭП

|(9) всегда пусто

|(10) логин наложивший ЭП

|(11) телефон логина наложившего ЭП

|(12) тип уровня ЭП

#...вторая ЭЦП...

#...

 

  В скобках показан порядковый номер реквизита (параметра ЭЦП) в блоке. В функциях 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)]

 

 

Настройки

 

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

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