Доработка визуализации ЭП для 1С:Документооборот государственного учреждения КОРП

01.12.22

Задачи пользователя - Адаптация типовых решений

В этот раз хочу поделиться с вами решением одной практической задачи для одного из проектов Компании Омега, а именно доработки механизма визуализации электронной подписи, т.к. это потребовало проработки 3-х различных способах взаимодействия со сторонним ПО: работа с com-объектом Word (вставка в .doc), разбор структуры docx и создание картинки для дополнения ЭП и вставки этого добра в pdf.

Входные данные

Платформы: 8.3.17.2733, 8.3.20.2180 (в ходе проекта платформа обновилась).

Конфигурация: 1С:Документооборот государственного учреждения КОРП. Регион, редакция 2.1 (2.1.31.5).

Версия Word: word 2016

 

Постановка задачи

Изменить логику вывода электронной подписи на печать, а именно:

  1. Исправить ошибки, возникающие при открытии подписанного электронной подписью docx.
  2. Исправить ошибку вывода электронной подписи в doc (подпись на первом листе и всегда в левом верхнем углу)
  3. Доработать вывод электронной подписи:
    1. ЭП должна всегда выводиться в конце документа на новом листе.
    2. Доработка затрагивает следующие форматы: doc, docx и pdf.
    3. Должна работать настройка вывода (в каком углу листа выводить ЭП)
    4. Перед электронной подписью выводить краткую сопроводительную информацию: вид документа, номер и дату документа (на самом деле реквизитов было больше, но это для статьи не важно).

 

Решение

 
 Минутка эмоций

 

Задача 1 - Исправить ошибки, возникающие при открытии подписанного электронной подписью docx

Что делает заложенный в 1С алгоритм вставки изображений? Документ распаковывается как архив, а дальше происходит 2 вещи:

1. В папку/word/media закидывается визуализация ЭП

2. В xml-структуру документа вставляется описание и способ вывода этой картинки.

Проблема оказалась на этапе закидывания картинки в общую структуру. Картинка должна иметь имя, по форматуimage<ИдКартинки>, где ИдКартинки- это порядковый номер. Алгоритм вставки искал изображения в этой папке, но имя файла там было с большой буквы, а не с маленькой, поэтому id изображений пересекались, что недопустимо. Простенькое решение под спойлером.

 
 Общий модуль: ВизуализацияЭПВызовСервера.СохранитьИзображениеВоВнутреннейСтруктуреDocx

 

Задача 2 - Исправить ошибку вывода электронной подписи в doc и настроить вывод ЭП на новый лист.

В чём суть проблемы? Подпись всегда в левом верхнем углу независимо от настроек программы. Если кратко - не знаю почему, но выравнивание вставленной фигуры oGraphicObject = Док.Shapes.AddTextBox(1, 100, 100, 300, 150) не работает.

Вот тут пришлось зарыться в методы вставки изображений в doc и до сих пор нет уверенности, что найдено самое оптимальное решение. Однако решение рабочее и им можно пользоваться. Код под спойлером.

 
 Общий модуль: ВизуализацияЭПКлиентСервер.ВставитьКартинкуВФайлDocСУказаниемПоложения

P.S. Это единственная функция, которую сделан не через изменение и контроль, а через Вместо, т.к. методика вставки изменена полностью и посчитал некорректным делать это через изменение и контроль.

Задача 3 - Исправить выравнивание в документе docx и сделать вывод на новом листе.

Всё как в реальной жизни, после исправления одной ошибки - появляется другая. Docx стал открывать нормально, но повторилась ситуация как с doc. Выравнивание не работает и вставлять нужно на новый лист.

Тут пришлось сразу несколько мини-доработок сделать:

1. Исправить вставку куска xml-шаблона, чтобы она считалась не от начала документа, а с конца. 

2. Исправить масштабирование картинки, т.к. ЭП получалась непропорционально растянутой (коэффициент просто подобрал вручную...).

 
 Общий модуль: ВизуализацияЭПВызовСервера.ВставитьИзображениеЭПВФайлDocxСУказаниемПоложения

Макет делал свой т.к. думал, что там многое придётся менять, а изменился способ определения ширины картинки... Но уже править не стал, сроки поджимали.

Задача 4 - Доработать вывода электронной подписи, чтобы добавилось описание документа

Как устроена вставка электронной подписи в документ? Есть общий макет двоичных данных ШаблонОтметкиЭП. Это картинка, на которую выводятся данные электронной подписи средствами специальных программных продуктов (подробнее см. документацию по платформе)

Идея решения проста: делаем то же самое, во только вместо вывода электронной подписи - делаем вывод данных документа. Почему так? Потому что нам нужно доработать вставку в pdf, а в него всё это происходит строго через картинки.

Доработка состоит из двух частей:

  1. Доработка общего модуля генерации ЭП
  2. Создание процедуры генерации картинки описания ЭП
    - сохраняем картинку ЭП в отдельный файл
    - удаляем с картинки все надписи, нам нужен только сам прямоугольник с границами
    - генерируем картинку по аналогии с ЭП
    - учесть, что больше 60 символов на картинку не влезает и если будет очень длинный вид документа, необходимо переносить строку
 
Общий модуль: РаботаСЭП.ОбновитьОтметкуЭП
 
Общий модуль: РаботаСКартинками.СформироватьОписаниеДокумента

 

Задача 5 - Вывод в pdf

Ну и завершающая часть работы - повторить всё то же самое, но уже для pdf. Вообще вставка в pdf происходит следующим образом:

  1. Разбор pdf на картинки png
  2. Проставка штампа электронной подписи на каждую картинку
  3. Сборка pdf обратно

Новый алгоритм получился попроще:

  1. Разбор pdf на картинки png
  2. Добавление в pdf новой картинки фиксированного размера (потому что как сделать картинку такой же, как и прошлый лист, но пустой - я так и не нашёл)
  3. Вывод на новый лист электронной подписи
  4. Сборка pdf обратно
 
 Общий модуль: МодульРаботаСФайламиВызовСервера.ПолучитьВизуализациюЭП

 

Результат работы

Теперь электронные подписи выводятся в следующем формате

 

Пример вывода

 

Заключение

Ну вот собственно и всё. Коллегам из компании Омега спасибо, что разрешили поделиться материалом. Обобщить и выложить способ решения данной задачи захотелось исходя из двух соображений:

1. Решение узкоспециализированных задач быстро забывается, а так останется какой-никакой, но конспект о решении. И если вдруг когда-то задача повторится - будет проще.

2. Такая задача может возникнуть не у меня одного и коллегам будет от чего оттолкнуться. Как говорят великие: "мы стоим на плечах гигантов". 

Надеюсь, данный материал будет вам полезен. Спасибо за внимание.

ЭП Документооборот КОРП Доработка

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5678    14    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3926    11    0    

29

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5106    dimanich70    15    

21

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    5574    dimanich70    9    

18
Оставьте свое сообщение