В процессе работы с системой 1С:Документооборот (ДО) часто возникает критическая задача: обеспечить неизменность прикрепленных файлов (договоров, актов, внутренних распоряжений). Стандартного механизма версионирования не всегда достаточно, особенно когда требуется «лобовая» защита, предотвращающая саму возможность добавления страниц или правки реквизитов в форматах PDF и Microsoft Word. В рамках этой статьи мы разберем комплексный подход к защите документов, начиная от организационных мер и заканчивая глубокой технической реализацией с использованием внешних библиотек и скриптов.
Рассмотрим стандартную ситуацию: в системе включено версионирование, и каждый измененный файл сохраняется как новая итерация. Однако, если злоумышленник или невнимательный сотрудник изменит файл непосредственно в томах хранения (на сервере), система может не сразу это зафиксировать. Кроме того, «царьки-начальники» и другие пользователи могут вносить правки в текст договора перед печатью, что создает юридические риски. Нам необходимо внедрить механизмы, которые сделают документ «нечитаемым» для инструментов редактирования или визуально подтвердят его целостность.
Проанализируем самый надежный с юридической точки зрения метод — подписание файлов ЭЦП. В 1С:Документооборот этот функционал является типовым. Когда файл подписывается, система создает отсоединенную или присоединенную подпись. Любое изменение хотя бы одного байта в теле файла приведет к тому, что подпись станет невалидной.
Преимущества: Юридическая значимость, встроенная поддержка в 1С:ДО.
Недостатки: Требует наличия сертификатов у всех участников процесса и не всегда предотвращает визуальное изменение (пользователь все равно может открыть файл и что-то дописать, просто подпись «слетит»).
Выясним, как технически запретить добавление страниц в 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, программа потребует пароль владельца.
Документы в формате .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, пока не будет введен пароль.
Проанализируем метод визуальной защиты, который просил автор темы — создание «очевидной» защиты. Мы можем программно «штамповать» каждую страницу документа. Рассмотрим алгоритм:
iTextSharp (для PDF) или колонтитулов (для Word) этот код размещается в углу каждой страницы.Если злоумышленник подменит страницу или вставит новую, на ней либо не будет QR-кода, либо нумерация (например, «3 из 10») будет дублироваться или отсутствовать, что мгновенно выявит подделку при визуальном осмотре или проверке сканером.
Рассмотрим самый радикальный метод защиты реквизитов. Если документ уже согласован и не требует дальнейшей правки текста, мы можем перевести его в формат «Image PDF». Это процесс, при котором каждая страница документа рендерится в картинку (например, TIFF или PNG), а затем эти картинки собираются обратно в один PDF-контейнер.
Что это дает?
Чтобы описанные методы работали прозрачно для пользователя, их необходимо встроить в бизнес-логику системы. Лучше всего использовать механизм ОбработкаСобытийПриЗаписиФайла. Разберем шаги автоматизации:
Python или через COM), который накладывает водяной знак с ФИО ответственного и датой.Важным моментом является контроль целостности через хэш-суммы. Мы рекомендуем при каждой записи файла вычислять MD5 или SHA-256 и сохранять его в отдельном реквизите карточки файла. При открытии файла пользователем система может быстро пересчитать хэш и сравнить его с эталонным. Если хэши не совпадают, это сигнал о том, что файл был изменен в обход механизмов 1С (например, вирусом-шифровальщиком или системным администратором непосредственно в томе хранения).
Комплексная защита документов в 1С:Документооборот требует сочетания разных методов. Для юридической чистоты используйте ЭЦП. Для технического запрета на добавление страниц используйте утилиты типа PDFtk с установкой Permissions. А для визуального контроля применяйте динамическое штампование QR-кодами и сквозную нумерацию в колонтитулах. Совместное использование этих инструментов позволит создать надежный барьер против несанкционированных изменений важной документации.