В практике разработки на платформе 1С иногда возникают специфические задачи, когда необходимо предоставить пользователю возможность ознакомиться с документом, но при этом максимально затруднить его вывод на бумажный носитель. Это может быть связано с защитой авторских прав, предотвращением утечки конфиденциальной информации или реализацией экологических акций (например, «спаси дерево»).
В данной статье мы разберем несколько подходов к решению этой задачи: от стандартных свойств платформы до использования внешних инструментов и веб-технологий.
Начнем с самого простого и логичного способа — управления свойствами объекта ТабличныйДокумент. Платформа 1С предоставляет штатные средства для ограничения действий пользователя с печатной формой. Проанализируем, как это работает на практике.
Основным инструментом здесь выступает свойство Вывод. Оно определяет, разрешено ли пользователю печатать документ, сохранять его в файл или копировать данные. Рассмотрим пример кода:
ТабДок = Новый ТабличныйДокумент;
// Заполняем документ данными...
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Защита = Истина;
ТабДок.Вывод = ИспользованиеВывода.Запретить;
ТабДок.Показать("Предварительный просмотр без печати");
Важный нюанс: Установка ИспользованиеВывода.Запретить блокирует не только физическую печать, но и возможность интерактивного сохранения документа в форматы PDF, Excel и другие. Если ваша задача — разрешить отправку файла по почте, но запретить его печать конечному получателю, этот метод внутри 1С сработает только для внутреннего интерфейса программы.
Разберем еще один «хитрый» способ — манипуляцию масштабом. Если установить экстремально маленький масштаб печати, документ станет нечитаемым при выводе на бумагу:
ТабДок.АвтоМасштаб = Ложь;
ТабДок.МасштабПечати = 10; // Устанавливаем масштаб 10% или меньше
Если нам нужно показать документ пользователю в управляемой форме, но запретить стандартную печать средствами браузера (или движка отображения 1С), мы можем конвертировать табличный документ в HTML и применить стили CSS.
Выясним причину эффективности этого метода: он позволяет использовать медиа-запросы @media print, которые определяют, как страница выглядит при отправке на принтер. Мы можем просто скрыть все содержимое страницы для принтера.
Рассмотрим шаги реализации:
ТабличныйДокумент.
// Вставьте этот CSS-код в текст HTML-документа
<style>
@media print {
body {
display: none !important;
}
}
</style>
При попытке пользователя нажать Ctrl+P в таком окне, принтер получит абсолютно пустой лист, хотя на экране монитора информация будет отображаться корректно. Это один из самых изящных способов защиты контента в современных интерфейсах.
Стандартный метод 1С Записать() с типом файла ТипФайлаТабличногоДокумента.PDF создает обычный PDF-файл без каких-либо ограничений. Если документ нужно отправить «наружу» (по электронной почте), и при этом запретить его печать в Adobe Reader или Chrome, нам потребуются внешние консольные утилиты, такие как PDFTK или QPDF.
Посмотрим на алгоритм совместной работы 1С и внешней утилиты:
ЗапуститьПриложение() вызывает утилиту, которая устанавливает права доступа (permissions) на файл.Пример командной строки для утилиты PDFTK, которую можно сформировать в коде 1С:
pdftk input.pdf output protected.pdf owner_pw ВашПароль allow printing none
Флаг allow printing none как раз и запрещает вывод на печать. Пользователь сможет открыть файл, прочитать его, но кнопка печати в просмотрщике будет заблокирована. Помните, что для работы этого метода на сервере или клиенте должна быть установлена соответствующая утилита.
Иногда достаточно сделать печать экономически невыгодной или визуально неприемлемой. Проанализируем ситуацию: пользователь хочет распечатать документ вопреки запрету. Мы можем применить следующие приемы в макете 1С:
Формат XPS (аналог PDF от Microsoft) изначально проектировался с глубокой интеграцией системы прав Windows. Если ваша инфраструктура построена полностью на Windows, вы можете программно формировать XPS-документы с установленными флагами запрета печати через COM-объекты операционной системы. Это более сложный путь, требующий понимания объектной модели Windows Printing, но он обеспечивает высокий уровень защиты внутри корпоративной сети.
Мы рассмотрели различные подходы к созданию непечатаемых форм. Наиболее надежным для внутренней работы в 1С является использование свойства ИспользованиеВывода.Запретить. Для документов, передаваемых внешним контрагентам, оптимальным выбором станет программная обработка PDF внешними утилитами или использование HTML-контейнеров с запрещающими печать стилями.
Важное напоминание: Любая техническая защита может быть обойдена (например, простым скриншотом экрана или использованием смартфона для фото). Поэтому технические меры должны сочетаться с организационными и юридическими мерами защиты информации.