0. soulner 100 19.02.19 13:34 Сейчас в теме

Визуализация электронной подписи на исходящих документах в соответствии с ГОСТ Р 7.0.97-2016. Полная автоматизация

Визуализация ЭЦП по ГОСТу Р 7.0.97-2016, предложенная в предыдущей статье (https://infostart.ru/public/931674/) на данную тему, очень прижилась у меня в организации. Начальник часть писем повелел подписывать ЭЦП и не тревожить его по пустякам. Но механизм подписи требовал некоторого количества ручных действий, а хочется полной автоматизации.
Итак, постановка задачи: штамп должен позиционироваться сам, pdf-файл со штампом ЭЦП должен создаваться сам и в карточку исходящего документа тоже должен сам загружаться.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. antonio_i 44 18.03.19 17:53 Сейчас в теме
Здравствуйте.
Правильно ли я понимаю, что штамп позиционируется только при использовании шаблона файла, а в случае, если файл будет загружен не по шаблону, а произвольный, то установка штампа не произойдёт?
И вопросец. А пробовали добавлять штамп в xml в нижней части страницы, чтобы просто отдельной строкой или таблицей?
2. soulner 100 18.03.19 23:37 Сейчас в теме
Доброй ночи! Штамп ЭЦП впечатывается вместо текстовой метки "Sign1" (или 2, 3 и т.д.). Эта метка может быть где угодно и её удобно использовать в шаблоне, но совершенно не обязательно.
Обработка меток происходит в 2 этапа:
1. сначала определяется количество меток в тексте шаблона
код подсчёта количества меток

2. потом xml-файл пересоздаётся с заменой этих меток на код соответствующего по номеру штампа.
код замены меток на штампы

Второго вопроса я не понял. Что имеется ввиду под нижней частью таблицы? Нижний колонтитул? Если да, то штамп туда поставить можно, а вывести поля формы для автозаполнения нет.
3. antonio_i 44 19.03.19 07:11 Сейчас в теме
(2)То есть к первому вопросу. Если нет меток то штамп не будет вставлен, т.е. в произвольном документе, который загрузит пользователь ничего не изменится, если его попытаться подписать и впечатать штампы.
2. Во втором вопросе я имел в виду:
А почему бы не добавлять абзацы(строки) с подписями и штампами прямо в нижней части документа без использования позиционирования? Я предположил, что, возможно, вы это пробовали сделать, может быть столкнулись с трудностями.

Дело в том, что мне всю вставку штампа нужно обработать на сервере, т.к. клиентская машина может быть не-windows.
В добавок, шаблон документа не подходит, т.к. неизвестно заранее количество подписей, и часто сам документ пользователь может добавить не по шаблону.
Плюс ко всему этому есть желание подписывать именно уже визуализированный документ в pdf, чтобы отправлять подписанный, а не "визуализацию" подписанного файла. Думаю, подписывать оба файла будет правильнее. И уже после вставки штампика.
4. antonio_i 44 19.03.19 08:53 Сейчас в теме
(2) Словил ошибку:

{ОбщийМодуль.ПЛ_ВизуализацияЭЦПСервер.Модуль(42)}: Поле объекта не обнаружено (SN)
?(Сертификат.Субъект.Свойство("O"), Сертификат.Субъект.SN + " " + Сертификат.Субъект.GN, Сертификат.Субъект.CN)));


У себя поправил на:
...Сертификат.Субъект.Свойство("SN ")...

И ещё:
{ОбщийМодуль.ПЛ_ВизуализацияЭЦП_Клиент.Модуль(215)}: Ошибка при вызове метода контекста (Close)
МСВорд.Documents.Close();
по причине:
Произошла исключительная ситуация (Microsoft Word): Метод или свойство недоступны, поскольку эту команду нельзя использовать в режиме чтения.
5. soulner 100 19.03.19 09:07 Сейчас в теме
1. Там в меню 2 команды: "Визуализация ЭЦП" и "Создать файл визуализации". По команде "Визуализация ЭЦП" метки не ищутся и выводится штамп прямо сверху документа, чтобы его можно было позиционировать руками куда надо (предварительно запрашиваются координаты). А по команде "Создать файл визуализации" ищутся метки и вместо них вставляются штампы. Если метки не найдены, то файл визуализации не формируется и выводится предупреждение.
2. Отвечу цитатой п.п. "а" п. 5.23 ГОСТ Р 7.0.97-2016: "место размещения отметки об электронной подписи должны соответствовать месту размещения собственноручной подписи в аналогичном документе на бумажном носителе;". Однако многим на это начхать. В версии 1С БГУ 1.0, например, информация об ЭЦП выводится над документом, полученным по ЭДО. И ничего страшного, мы публикуем такие документы на портале госзакупок и пока никто ничего не сказал. Несоответствие ГОСТу не делает документ юридически менее значимым.
3. По этому вопросу ничего не скажу. Выводить подписи снизу не по ГОСТу, но при формировании на сервере без меток непонятно как распределить штампы. ХЗ, короче.
Подписывать визуализированный файл идеологически неверно. По закону № 63-ФЗ "Об ЭЦП" есть определение: электронная подпись - информация в электронной форме, которая присоединена к другой информации в электронной форме (подписываемой информации) или иным образом связана с такой информацией и которая используется для определения лица, подписывающего информацию; Соответственно ЭЦП может быть прикреплённая и откреплённая (отдельный файл). Если Вы хотите отправлять юридически значимый файл контрагенту, то нужно его отправлять вместе с файлом ЭЦП, а на принимающей стороне должна производиться проверка корректности ЭЦП.
В настоящее время складывается практика отправки сканов документов со штампами ЭЦП (визуализированных документов), что неверно с точки зрения закона, но, как сказал наш юрист, "допустимо в сложившейся практике документооборота".
7. antonio_i 44 19.03.19 09:23 Сейчас в теме
(5)
Подписывать визуализированный файл идеологически неверно.

Это потому что подписывание идёт вслед за установкой штампа?
Но получается, что установка штампа после подписи сломает подпись.


(5)
Выводить подписи снизу не по ГОСТу

А почему не по ГОСТу? Ведь даже в примере подпись (штампик) снизу.
Ну может я плохо объясняю.
Я имел в виду всю строку, где указан подписант, его должность и сам штамп формировать полностью.
9. antonio_i 44 19.03.19 09:29 Сейчас в теме
(5) И ещё
Правильно ли я понимаю, что на не-windows системах работать не будет?
6. soulner 100 19.03.19 09:13 Сейчас в теме
По поводу имён свойств не подскажу, всегда считал, что есть общепринятые свойства сертификата (O, CN, SN и т.д.), если у вас по-другому, то это странно.
Команду МСВорд.Documents.Close(); оберните в конструкцию Попытка ... Исключение ... У меня на клиентских машинах без данной команды оставались висеть процессы MS Word.
8. antonio_i 44 19.03.19 09:25 Сейчас в теме
(6) Да в итоге когда закомментировал уже ошибка совместного доступа.
{ОбщийМодуль.ПЛ_ВизуализацияЭЦП_Клиент.Модуль(181)}: Ошибка при вызове метода контекста (ПереместитьФайл)
	ПереместитьФайл(НовыйФайлZip, НовыйПутьКФайлу);
по причине:
Ошибка переименования файлов
по причине:
Ошибка совместного доступа к файлу 'C:\temp\!!!!!!!Исх шаблон.docx'. 32(0x00000020): Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. 


Надо будет добавить проверку на существование одноимённого файла.
11. antonio_i 44 19.03.19 14:07 Сейчас в теме
(6)
Оказалось, что документ открывался только на чтение в строке
WordДокумент = МСВорд.Documents.Open(НовыйПутьКФайлу,, -1);

Исправил на
WordДокумент = МСВорд.Documents.Open(НовыйПутьКФайлу,, Ложь);

и ошибка пропала.
Возможно разные версии office. Не понятно.

Ещё всё же, думаю, стоит имена файлов во временном хранилище формировать с помощью
ПолучитьИмяВременногоФайла ()
Ну или уникальный идентификатор приписывать...
и потом в конце прикрепления удалять файлы из временного хранилища. (в процессе их можно накапливать в массиве, к примеру)
10. soulner 100 19.03.19 10:24 Сейчас в теме
1. Идеологически неверно потому, что визуализируется уже существующая подпись (так следует из ГОСТа), а сама подпись - это информация. И, конечно, вставка подписи в файл сделает подпись недействительной (1C:Документооборот не даст сохранить файл).
2. В примере штампик внизу, но он находится между полей формы, которые заполняются при заполнении шаблона: слева должность подписанта, справа его ФИО, так, что строго выполняется п.п. "а" п. 5.23 ГОСТа.
3. Для не-Windows систем есть следующие выходы:
а) если не-Windows клиент, а сервер Windows, то можно переписать алгоритм для формирования визуализации на сервере, но тогда только по шаблону с метками;
б) если Windows нет совсем, то можно адаптировать работу алгоритма к LibreOffice (тут коллеге удалось, можно связаться и уточнить), но тогда нужно решать вопрос с созданием PDF и либо искать соответствующую команду COM-сервера, либо пытаться реализовать печать на виртуальном принтере PDF (примеры для 1С и windows я находил в сети).
4.Ошибка МСВорд.Documents.Close(); очень странная. Я тестировал работу алгоритма на MS Word 2007 и 2016 и всё было нормально. Может переменная МСВорд.Documents как-то переинициализируется. Не знаю что и предположить.
12. kaljro 21.03.19 13:22 Сейчас в теме
"Произошла исключительная ситуация (Microsoft Word): Метод или свойство недоступны, поскольку эту команду нельзя использовать в режиме чтения." - Такая же ошибкаи у меня. Ворд подвешивается, и если еще раз прожать, то уже "Процесс не может получить доступ к файлу" естественно.
13. soulner 100 21.03.19 14:15 Сейчас в теме
(12) Очень жаль, что вы не указываете хотя бы номер строки, в которой произошла ошибка. А в телепатии я пока слаб.
Очень похоже на ошибку, описанную с посте № 4, уважаемого antonio_i, он нашёл решение и описал его в посте № 11. Лично я с такой ошибкой не сталкивался.
14. antonio_i 44 21.03.19 15:14 Сейчас в теме
(12)
Посмотрите мой ответ № 11
Там у меня была такая же ошибка, я исправил.
15. Монту 31.05.19 16:12 Сейчас в теме
Неплохая реализация, никаких проблем как у antonio_i не было. Жаль что юридическая составляющая этого всего никакая... т.к. док не подписан, а просто картинка.

А идей по поводу добавления визуализации в pdf нету?
16. soulner 100 31.05.19 16:38 Сейчас в теме
(15) Позвольте не согласиться. Юридическая составляющая нормальная. Документ подписан в соответствии с ФЗ № 63 и визуализирован согласно ГОСТу.
Визуализация в pdf делается с помощью библиотеки pdftk. Там можно слепить 2 pdf-документа. Верхний содержит визуализацию и прозрачный фон, а нижний - сам документ. Тут сложными являются вопросы позиционирования штампа и согласования размеров изображений, на основании которых сделаны файлы pdf.
17. it@medipal-onko.ru 30.07.19 14:43 Сейчас в теме
1. Если файл подписан несколькими подписями (Петров, Сидоров), то выводится 2 подписи Петрова.
2. Как заставить подпись позиционироваться внизу документа?
18. soulner 100 30.07.19 16:45 Сейчас в теме
(17) 1. Я не тестировал на предмет вставки нескольких штампов (у меня только одна ЭП). Разные варианты штампов хранятся в массиве ГотовыеШтампыЭП. Надо посмотреть отладчиком что там. В новой версии ДО, разработчики суют все подписи в один штамп, может так и надо.
2. Штамп может вставляться вместо метки или по координатам. Подберите координаты, чтобы подпись вставала куда надо. Координаты указываются в форме настройки положения штрихода (https://infostart.ru/public/931674/)
it@medipal-onko.ru; +1 Ответить
19. it@medipal-onko.ru 05.08.19 10:06 Сейчас в теме
(18) 1. У Вас ошибка, Вы не обнуляете Шаблон после замены, поэтому при наличии нескольких подписей всегда печатается первая заполненная. Нужно добавить в конец цикла получение шаблона
ШаблонДляВставкиШтампа = ВизуализацияЭЦПСервер.ПолучитьТекстДляВставки();

Тогда все красиво

2. Подскажите, как получить координаты подвала последней страницы в файле?
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Ведущий программист 1С
Омск
зарплата от 70 000 руб. до 110 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата до 120 000 руб.
Полный день

Консультант-аналитик 1С
Рязань
зарплата до 80 000 руб.
Полный день

Программист 1С
Калининград
зарплата от 60 000 руб. до 80 000 руб.
Полный день