Как реализовать защиту вложенных файлов от изменений и добавления страниц в 1С:Документооборот

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

В процессе работы с системой 1С:Документооборот (ДО) часто возникает критическая задача: обеспечить неизменность прикрепленных файлов (договоров, актов, внутренних распоряжений). Стандартного механизма версионирования не всегда достаточно, особенно когда требуется «лобовая» защита, предотвращающая саму возможность добавления страниц или правки реквизитов в форматах PDF и Microsoft Word. В рамках этой статьи мы разберем комплексный подход к защите документов, начиная от организационных мер и заканчивая глубокой технической реализацией с использованием внешних библиотек и скриптов.

Анализ проблемы: почему версионирования недостаточно?

Рассмотрим стандартную ситуацию: в системе включено версионирование, и каждый измененный файл сохраняется как новая итерация. Однако, если злоумышленник или невнимательный сотрудник изменит файл непосредственно в томах хранения (на сервере), система может не сразу это зафиксировать. Кроме того, «царьки-начальники» и другие пользователи могут вносить правки в текст договора перед печатью, что создает юридические риски. Нам необходимо внедрить механизмы, которые сделают документ «нечитаемым» для инструментов редактирования или визуально подтвердят его целостность.

Решение 1: Использование квалифицированной электронной подписи (ЭЦП)

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

Преимущества: Юридическая значимость, встроенная поддержка в 1С:ДО.
Недостатки: Требует наличия сертификатов у всех участников процесса и не всегда предотвращает визуальное изменение (пользователь все равно может открыть файл и что-то дописать, просто подпись «слетит»).

Решение 2: Программная установка защиты на PDF-файлы

Выясним, как технически запретить добавление страниц в PDF. Для этого мы можем использовать внешнюю утилиту PDFtk (PDF Toolkit), которую легко интегрировать с 1С через командную строку. Основная идея заключается в установке «пароля владельца» (Owner Password) и ограничении прав (Permissions).

Разберем пример кода, который вызывает внешнюю утилиту для наложения водяного знака и установки запрета на сборку документа:


// Пример вызова PDFtk для защиты файла
ПутьКPDFtk = "C:\Program Files (x86)\PDFtk\bin\pdftk.exe";
ИсходныйФайл = "D:\Docs\Contract.pdf";
ФайлФона = "D:\Docs\Watermark.pdf";
ВыходнойФайл = "D:\Docs\Contract_Protected.pdf";
Пароль = "SuperSecretPass123";

ПараметрыЗапуска = ИсходныйФайл + " background " + ФайлФона + " output " + ВыходнойФайл + " owner_pw " + Пароль + " allow printing copy";

ЗапуститьПриложение(ПутьКPDFtk + " " + ПараметрыЗапуска, , Истина);

В данном примере параметр allow printing copy разрешает только печать и копирование текста, но запрещает assembly (сборку, т.е. добавление или удаление страниц). Если пользователь попытается вставить страницу через Adobe Acrobat, программа потребует пароль владельца.

Решение 3: Защита документов Microsoft Word через COM-объекты

Документы в формате .docx защитить сложнее, так как это редактируемый формат по определению. Однако, используя объектную модель Word, мы можем программно установить защиту на документ. Посмотрим, как это сделать из 1С:


// Защита документа Word от редактирования
WordApp = Новый COMОбъект("Word.Application");
WordApp.Visible = Ложь;
Документ = WordApp.Documents.Open("C:\Temp\Draft.docx");

// Устанавливаем тип защиты: wdAllowOnlyReading (только чтение)
// 3 - это константа для wdAllowOnlyReading
Документ.Protect(3, Ложь, "MyPassword"); 

Документ.Save();
Документ.Close();
WordApp.Quit();

После выполнения этого кода документ станет доступен только для чтения. Все инструменты редактирования, включая вставку страниц, будут заблокированы в интерфейсе Word, пока не будет введен пароль.

Решение 4: Сквозная нумерация и QR-коды на каждой странице

Проанализируем метод визуальной защиты, который просил автор темы — создание «очевидной» защиты. Мы можем программно «штамповать» каждую страницу документа. Рассмотрим алгоритм:

  1. При сохранении файла в 1С:ДО сервер генерирует уникальный QR-код для данной версии документа.
  2. В QR-код зашивается ссылка на карточку документа в базе, номер версии и текст: «Страница N из M».
  3. С помощью библиотеки iTextSharp (для PDF) или колонтитулов (для Word) этот код размещается в углу каждой страницы.

Если злоумышленник подменит страницу или вставит новую, на ней либо не будет QR-кода, либо нумерация (например, «3 из 10») будет дублироваться или отсутствовать, что мгновенно выявит подделку при визуальном осмотре или проверке сканером.

Решение 5: Конвертация в Image PDF («Цифровая ксерокопия»)

Рассмотрим самый радикальный метод защиты реквизитов. Если документ уже согласован и не требует дальнейшей правки текста, мы можем перевести его в формат «Image PDF». Это процесс, при котором каждая страница документа рендерится в картинку (например, TIFF или PNG), а затем эти картинки собираются обратно в один PDF-контейнер.

Что это дает?

Автоматизация процесса в 1С:Документооборот

Чтобы описанные методы работали прозрачно для пользователя, их необходимо встроить в бизнес-логику системы. Лучше всего использовать механизм ОбработкаСобытийПриЗаписиФайла. Разберем шаги автоматизации:

  1. Пользователь завершает редактирование файла и нажимает «Закончить редактирование».
  2. Система на сервере перехватывает файл.
  3. Если формат файла Word, система (опционально) конвертирует его в PDF.
  4. Вызывается скрипт (например, на Python или через COM), который накладывает водяной знак с ФИО ответственного и датой.
  5. Устанавливается пароль на изменение структуры PDF.
  6. В систему сохраняется уже «защищенная» версия файла.

Важным моментом является контроль целостности через хэш-суммы. Мы рекомендуем при каждой записи файла вычислять MD5 или SHA-256 и сохранять его в отдельном реквизите карточки файла. При открытии файла пользователем система может быстро пересчитать хэш и сравнить его с эталонным. Если хэши не совпадают, это сигнал о том, что файл был изменен в обход механизмов 1С (например, вирусом-шифровальщиком или системным администратором непосредственно в томе хранения).

Заключение

Комплексная защита документов в 1С:Документооборот требует сочетания разных методов. Для юридической чистоты используйте ЭЦП. Для технического запрета на добавление страниц используйте утилиты типа PDFtk с установкой Permissions. А для визуального контроля применяйте динамическое штампование QR-кодами и сквозную нумерацию в колонтитулах. Совместное использование этих инструментов позволит создать надежный барьер против несанкционированных изменений важной документации.

← На главную