При разработке или кастомизации печатных форм в 1С часто возникает ситуация, когда в параметр макета передается слишком длинная строка, которую необходимо урезать до определенного количества символов. Типичный пример: в макет выводится полное наименование контрагента, а требуется вывести только первые три буквы или сокращенный префикс. При этом часто накладывается ограничение — нельзя вносить изменения в модуль менеджера документа или создавать внешнюю печатную форму.
В этой статье мы подробно разберем, какие инструменты предоставляет платформа 1С:Предприятие для решения этой задачи непосредственно внутри макета, и выясним, почему стандартные функции типа Лев() не работают в квадратных скобках шаблона.
Для начала проанализируем ситуацию, с которой сталкиваются многие разработчики. Попытка прописать в ячейке с типом «Шаблон» конструкцию вида [Лев(ИмяПараметра, 3)] не приведет к желаемому результату. Система воспримет это не как вызов функции, а как имя параметра, которого нет в структуре данных, передаваемой в макет. В обычном табличном документе (не СКД) внутри квадратных скобок допускаются только имена параметров. Любые попытки вызвать функции встроенного языка напрямую в ячейке макета закончатся ошибкой или выводом пустого значения.
Разберем наиболее технически правильный метод изменения формата выводимых данных через свойства ячейки. Этот способ работает, если у вас есть доступ к редактированию макета в конфигураторе или через механизм редактирования макетов БСП.
Истина.Строка.Проанализируем, как это работает: при выводе области макета система попытается привести переданное значение параметра к заданному типу и длине. Если в параметре передается «СтрокаПипецКакаяДлинная», платформа автоматически отсечет лишние символы, оставив только первые три. Однако стоит учитывать, что этот механизм может вести себя по-разному в зависимости от версии платформы и режима работы (толстый или тонкий клиент).
Если программное ограничение типа данных недоступно (например, при редактировании макета в режиме «Предприятие» в упрощенном интерфейсе), мы можем прибегнуть к визуальной обрезке. Посмотрим, как настроить ячейку так, чтобы лишний текст просто не отображался и не печатался.
Рассмотрим пошаговую инструкцию по настройке визуальной обрезки:
Обрезать. Это заставит систему игнорировать текст, который не помещается в физические границы ячейки.Arial или Times New Roman) символы имеют разную ширину (буква «W» значительно шире буквы «i»). Чтобы обрезка всегда происходила точно после определенного количества знаков, установим для ячейки шрифт Courier New. В этом шрифте все знаки имеют одинаковую ширину, что позволит нам точно подогнать размер ячейки под 3 символа.Важный момент: Убедитесь, что для ячейки отключено свойство Автовысота строки, иначе при заполнении длинным текстом строка может растянуться вниз, если включен перенос текста.
В современных конфигурациях, использующих Библиотеку стандартных подсистем (БСП), пользователи могут редактировать макеты печатных форм без использования конфигуратора. Выясним причину, по которой некоторые настройки могут быть недоступны.
Если в режиме «1С:Предприятие» при редактировании макета (через меню «Макеты печатных форм») вы не видите галку Содержит значение, скорее всего, ячейка по умолчанию имеет тип заполнения Шаблон. Рассмотрим алгоритм действий в этой ситуации:
Если ваша печатная форма или отчет строятся на базе Системы компоновки данных (СКД), то задача решается гораздо проще. Проанализируем ситуацию, когда макет является частью схемы компоновки.
В макете СКД для параметра ячейки предусмотрено специальное поле Выражение. В отличие от обычного табличного документа, здесь можно использовать полноценные функции 1С:
// В поле "Выражение" для параметра в макете СКД
Лев(ИмяПараметра, 3)
Это выражение сработает в момент компоновки результата, и в ячейку попадет уже обработанная строка. Однако помните, что это применимо только к объектам, работающим через КомпоновщикМакета.
Мы рассмотрели несколько подходов к ограничению длины строки в макете. Выбор конкретного метода зависит от ваших прав доступа и инструментов:
Courier New.Помните, что любые манипуляции с визуальной обрезкой (Способ 2) требуют проверки при печати в разные форматы (PDF, Excel), так как рендеринг шрифтов может незначительно отличаться, что иногда приводит к появлению лишнего символа или, наоборот, к избыточной обрезке.