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



Электронный документооборот шагает по стране, стали проходить в организацию мою электронные письма, даже 1С побаловала обновлением Документооборота с исправлением некоторых ошибок ЭДО. Однако совершенно непонятно, как с использованием 1С Документооборот выполнить пункт 5.23 ГОСТа Р 7.0.97-2024, а именно визуализировать электронную подпись (далее ЭП) на документе. Очень надеюсь, что в при следующих обновлениях 1С реализуют данную возможность, но пока предлагаю временное решение.

Т.к. используется режим совместимости с версией платформы 8.3.8, то с расширениями не забалуешь. Будем конфигурацию менять, но только чуть-чуть.

Конкретно передо мной стояла задача по подписанию исходящих писем, но вы можете встроить визуализацию ЭП в другие документы. Исходящее письмо — это документ формата MS Word 2007 и выше, который представляет из себя zip-архив, где текст документа лежит в файле document.xml. Туда и будем добавлять визуализацию.

Идею реализации впечатывания чего-либо в документ Word подсмотрел в модуле ШтрихкодированиеСервер основной конфигурации. Там штрихкоды впечатывают и в старый формат MS Word и даже в Open Document.

Чтобы избежать необходимости точно позиционировать штамп с информацией об ЭЦП, решено было его сделать в виде фигуры с абсолютным позиционированием и автоматическим размером по содержимому (LibreOffice Writer автоматический размер не понимает). Для пущей красоты сделан слабенький градиент. Перед печатью положение штампа пользователь может отрегулировать самостоятельно. Если документ подписан несколькими подписями, то все они выводятся по 2 штуки в строку. Первоначальное позиционирование штампа производится с помощью настроек положения штрихкода, форма которых выводится принудительно.

Файл конфигурации, который нужно объединить с основной, содержит общий макет «ВставкаЭЦПСуказаниемПоложения», где содержится xml-код фигуры с текстом и два общих модуля, в которых реализован серверный и клиентский функционал.

Непосредственно в форме элемента справочника «Исходящие документы» необходимо создать команду «ВизулизацияЭЦП», и привязать её к функциональной опции «ИспользоватьЭлектронныеПодписи». Эту команду нужно разместить в группе «ФормаЭПИШифрование/ЭП», желательно установить свойство «ТолькоВоВсехДействиях».

В модуле формы добавляем 2 процедуры:

#Область ВизуализацияЭЦП

&НаКлиенте
Процедура ВизулизацияЭЦП(Команда)
// открываем форму настройки положения
ПараметрыНастроек = Новый Структура;
ПараметрыНастроек.Вставить("ЗаголовокФормы", НСтр("ru = 'Положение штампа ЭПЦ на странице'"));
ПараметрыНастроек.Вставить("РежимИспользованияНастроек", 1);
ПараметрыНастроек.Вставить("ЗапросОриентацииСтраницы", Ложь);
ОписаниеОповещения = Новый ОписаниеОповещения("ВизуализацияЭЦППродолжение", ЭтотОбъект);
ШтрихкодированиеКлиент.ПолучитьНастройкиШтрихкода(ПараметрыНастроек, ОписаниеОповещения);
КонецПроцедуры

&НаКлиенте
Процедура ВизуализацияЭЦППродолжение(НастройкиШтрихкода, ДополнительныеПараметры) Экспорт
ВизуализацияЭЦПКлиент.ПоказатьДокументСЭЦП(ЭтаФорма);
КонецПроцедуры


#КонецОбласти

Вот и всё! Всех поздравляю с ещё одним шагом в цифровую эпоху.

13 Comments

  1. Timur.V

    В 2014г. Министерство связи и массовых коммуникаций РФ,

    прислало письмо с таким штампом.

    Обратите внимание, у них ещё на каждой станице нижний колонтитул. (я дату и время — скрыл)

    (стали проходить в организацию?)

    Reply
  2. soulner

    (1)

    стали проходить в организацию?

    Новый ГОСТ не требует включать информацию о способе создания документа. Пункт 5.25 содержит требования к информации об исполнителе.

    А по поводу слова приходить, скажу, что я сам в шоке. Я работаю в одной очень серьёзной государственной организации и к нам реально приходят бумажные письма, где вместо подписи руководителя стоит штамп об ЭП. Но они приходят из таких организаций, что позвонить туда и сказать, что они не правы никто не смеет.

    Только руководитель догадываться, что что-то не так, но ему не до того.

    Так и живём 🙂

    Reply
  3. peston

    Добрый день. Я правильно понимаю, что меняется сам файл документа? Или только при печати появляется штамп?

    Reply
  4. soulner

    Добрый вечер. Если изменить файл документа, то электронная подпись становится недействительной. Файл копируется на клиент в рабочий каталог, а потом в него впечатывается штамп в указанное место. После чего файл открывается в программе Word (или LibreOffice Writer, но с небольшими огрехами) и там можно мышкой подкорректировать его положение.

    Reply
  5. Roma1989

    Подскажите, пожалуйста, как можно изменить штамп (макет «ВставкаЭЦПСуказаниемПоложения»)?

    Хочу поменять фон у одной из строк. Это нужно делать в какой-то специальной программе?

    Reply
  6. soulner

    Порядок создания шаблона следующий:

    1. в пустом документе MS Word рисуем штамп любого вида (я делал прямоугольник с текстом внутри и абсолютным позиционированием);

    2. указываем внутри штампа переменные шаблона, которые будут заменены на нужный текст, оформляем их как надо:

    2.1 _НомерСерт_ — номер сертификата;

    2.2 _Субъект_ — субъект из сертификата;

    2.3 _ДатаНД_ и _ДатаОД_ даты начала и окончания действия сертификата;

    3. сохраняем файл в формате MS Word 2007+ (т.е. с расширением docx);

    4. меняем расширение на zip;

    5. распаковываем любым архиватором;

    6. ищем среди распакованных файлов document.xml (папка word) и открываем его редактором, который умеет форматировать XML-документы (я пользуюсь Notepad++ с плагином XML Tools);

    7. находим узел <w:p> … </w:p> (может это лишнее и нужно брать <w:pict>, не знаю), и удаляем всё, что выше и ниже этого узла;

    8. если вы штамп сделали из прямоугольника, то в узле <w:rect> после значения атрибута margin-left: вставляем переменную шаблона _ОтступСлева_, а после margin-top:_ОтступСверху_.

    После чего вставляем наше произведение в макет.

    П.С. если вы какие-то переменные использовать не хотите, то и код менять не нужно, просто команда СтрЗаменить ничего не заменит.

    ПП.С. у меня шаблон получился не с первого раза, т.к. MS Word создаёт избыточный код, который трудно читается и его требуется немного причесать.

    ППП.С. плагин может ругаться на пространство имён, это решается путём отключения верхней галочки в настройках.

    Reply
  7. Katty_K

    (6) Добрый день, спасибо большое за пост

    А можно ли с LibreOffice провернуть такую же штуку? А то у нас, к сожалению, нет возможности всех пользователей обеспечить MS Office…

    Reply
  8. Katty_K

    (6) Скажите, а как вы внутри фигуры вставили переменные? у меня в ворде внутри фигуры неактивна команда вставки элемента «Поле (элемент управления формы)»

    Reply
  9. Katty_K

    (8) вопрос снимается, вы в модуле замену производите… не поняла сначала))

    Reply
  10. Katty_K

    (7) Проблема с LibreOffice в том, что там стили параграфов задаются в «автоматических стилях», которые определяются вне <office:body> (до него), то есть скопировать часть xml-кода получится, но без оформления…

    а способа прописать стили оформления прямо в тэгах параграфов, как это в ms word сделано, я так и не нашла…

    Reply
  11. soulner

    Добрый день. Извините, вчера не мог ответить.

    В данный момент этой доработки у меня нет, уже стоит более поздняя версия https://infostart.ru/public/1006925/, там вставка штампа вручную тоже присутствует, но изменён шаблон, в частности он начинается тэгом w:pict.

    И да, он не работает в LibreOffice, штамп просто не выводится без ошибок и иных предупреждений.

    Если время будет, то попробую разобраться, а то получается, что не поддерживаю свободный софт, а это не хорошо.

    Спасибо, что обратили внимание.

    Reply
  12. Katty_K

    (11) Спасибо за ответ!

    Уже разобралась, подшаманила, работает и в LibreOffice 🙂

    И да, я тоже оставила только рисунок и сделала позиционирование по тексту замены, эх, жалко, что раньше не увидела ваш более поздний пост)))

    Reply
  13. it@medipal-onko.ru

    У Вас ошибка, Вы не обнуляете Шаблон после замены, поэтому при наличии нескольких подписей всегда печатается первая заполненная. Нужно добавить в конец цикла получение шаблона

    ШаблонДляВставкиШтампа = ВизуализацияЭЦПСервер.ПолучитьТекстДляВставки();

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *