В практике разработки на платформе 1С часто возникает задача «замазывания» или цензурирования определенных данных в печатных формах. Это может быть необходимо для демонстрации структуры отчета без разглашения персональных данных или коммерческой тайны, либо для передачи документов контрагентам, которым не положено видеть определенные колонки (например, в книгах покупок и продаж). В данной статье мы подробно разберем, как реализовать вывод квадратиков вместо реальных символов, проанализируем различные подходы и выберем наиболее эффективные методы.
Самый надежный способ скрыть информацию — это заменить ее еще на этапе формирования табличного документа. Если мы просто изменим шрифт, данные останутся в файле, и их можно будет скопировать. Рассмотрим, как программно преобразовать любую строку в последовательность квадратиков. Проанализируем простой алгоритм: мы берем длину исходной строки и возвращаем строку такой же длины, состоящую из выбранного символа.
Разберем пример функции, которую можно разместить в модуле менеджера или модуле объекта:
Функция ПолучитьСтрокуМаскировки(Значение) Экспорт
ТекстДляОбработки = Строка(Значение);
Длина = СтрДлина(ТекстДляОбработки);
// Используем символ квадрата из Unicode (Символ 9633 или 9608)
Квадрат = Символ(9608);
Результат = "";
Для Сч = 1 По Длина Цикл
Результат = Результат + Квадрат;
КонецЦикла;
Возврат Результат;
КонецФункции
Затем, при заполнении параметров области макета, мы вызываем эту функцию. Например, для маскировки наименования контрагента в цикле вывода строк:
ОбластьСтрока.Параметры.Контрагент = ПолучитьСтрокуМаскировки(Выборка.Контрагент);
ТабДок.Вывести(ОбластьСтрока);
Если нам нужно обработать огромный отчет (например, книгу учета НДС за несколько лет), посимвольный перебор в цикле может существенно замедлить формирование печатной формы. Выясним причину: создание новых строк в памяти 1С при каждой итерации цикла — ресурсоемкая операция. Чтобы этого избежать, мы применим метод «предварительно подготовленного буфера».
Рассмотрим алгоритм оптимизации по шагам:
Лев().Посмотрим на пример реализации такой оптимизации:
// В начале процедуры формирования отчета
СтрокаМаска = "";
Для Сч = 1 По 500 Цикл
СтрокаМаска = СтрокаМаска + Символ(9608); // Сплошной черный блок
КонецЦикла;
// Внутри цикла вывода данных
ДлинаДанных = СтрДлина(Строка(ДанныеЯчейки));
Область.Параметры.Значение = Лев(СтрокаМаска, ДлинаДанных);
Такой подход работает в десятки раз быстрее, так как платформа не тратит время на конкатенацию строк в каждой ячейке отчета.
Если программная замена по каким-то причинам неудобна, можно рассмотреть вариант с изменением шрифта в макете 1С. Существуют шрифты, где вместо букв и цифр отображаются графические блоки. Самый известный предустановленный шрифт — это Wingdings. Однако у него есть существенный недостаток: разные символы заменяются на разные иконки (ножницы, конверты, знаки зодиака), что может выглядеть непрофессионально.
Для более качественного результата проанализируем возможность установки сторонних шрифтов:
Важный технический момент: Чтобы этот метод сработал при печати с сервера или при сохранении в PDF, данный шрифт должен быть установлен на сервере 1С. Кроме того, помните, что при сохранении в формате Excel (XLS/XLSX) пользователь сможет просто сменить шрифт обратно на Arial или Calibri и увидеть исходный текст. Поэтому использование шрифтов подходит только для бумажной печати.
Результат «замазывания» во многом зависит от того, какой символ вы выберете для замены. Стандартный Символ(9633) возвращает пустой контур квадрата. Чтобы это выглядело как настоящая цензура, лучше использовать блок «Элементы блоков» из таблицы Unicode.
Разберем наиболее подходящие варианты:
Символ(9608) — █ (Full Block). Полная заливка. Выглядит максимально строго.Символ(9619) — ▓ (Dark Shade). Плотная штриховка, экономит картридж при печати.Символ(9618) — ▒ (Medium Shade). Средняя плотность.Символ(42) — * (Asterisk). Классическая «звездочка», общепринятая для скрытия паролей или сумм.Проанализируем ситуации, в которых стоит выбирать тот или иной метод:
1. Если важна безопасность данных:
Однозначно используйте программную замену значения (Метод 1 или 2). Это гарантирует, что даже если файл попадет в руки злоумышленнику в электронном виде, восстановить информацию будет невозможно, так как в ячейках ТабличныйДокумент физически будут находиться только квадраты.
2. Если нужно быстро скрыть колонки в печатной форме без изменения кода:
Можно использовать условное оформление в отчетах (СКД), где в качестве формата указать использование шрифта типа Redacted. Но помните о рисках копирования данных из PDF/Excel.
3. Если данных очень много:
Применяйте метод буферизации (Метод 2) с использованием символа █. Это обеспечит высокую скорость формирования отчета и профессиональный внешний вид печатной формы.
В завершение отметим, что для достижения наилучшего результата рекомендуется комбинировать эти методы. Например, использовать программную замену на Unicode-символы полной заливки, что позволит сохранить структуру документа, обеспечит стопроцентную конфиденциальность и не потребует установки дополнительных шрифтов на рабочие станции пользователей.