Как вывести значение поля в скобках в макете 1С

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

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

Способ 1: Программная подготовка параметра (Конкатенация строк)

Самый простой и прямолинейный метод — это подготовка строкового значения непосредственно в программном коде перед передачей его в параметр макета. Рассмотрим типичную ситуацию, когда у нас есть выборка из результата запроса, и нам нужно вывести основание документа в скобках.

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


// Неверно: вызовет ошибку, если в выборке ссылка, а не строка
Доверенность = "(" + Выборка.ОснованиеПраваПодписи + ")"; 

// Верно: используем явное преобразование типов
Доверенность = "(" + Строка(Выборка.ОснованиеПраваПодписи) + ")";

Разберем, почему это важно. Функция Строка() получает строковое представление объекта (например, наименование договора или представление документа). Если этого не сделать, система может попытаться выполнить неявное преобразование, которое не всегда срабатывает предсказуемо, особенно в сложных выражениях. Также хорошим тоном считается использование функции СокрЛП(), чтобы убрать лишние пробелы по краям:

Доверенность = "(" + СокрЛП(Строка(Выборка.ОснованиеПраваПодписи)) + ")";

Способ 2: Использование типа заполнения «Шаблон» в самом макете

Этот метод позволяет минимизировать программный код и перенести логику оформления непосредственно в визуальный редактор макета. Для этого выполним следующие шаги:

  1. Откроем макет и выберем нужную ячейку.
  2. В палитре свойств ячейки установим свойство Заполнение в значение Шаблон.
  3. В тексте ячейки напишем конструкцию, используя квадратные скобки для параметров.

Например, в ячейке можно написать: ([Основание]) или (договор [НомерДоговора]). Система автоматически подставит значение параметра Основание внутрь скобок.

Важный нюанс: если в шаблоне используется параметр, который имеет ссылочный тип, 1С автоматически применит к нему стандартное строковое представление. Однако, если параметр не заполнен (равен NULL или ПустаяСсылка), в макете могут отобразиться пустые скобки (), что выглядит непрофессионально. Ниже мы разберем, как с этим бороться.

Способ 3: Применение функции СтрШаблон()

Для платформы 1С v8.3 доступна мощная функция СтрШаблон(), которая делает код более читаемым и защищенным от ошибок. Она работает по принципу подстановки параметров в строку-маску. Посмотрим на пример:


ТекстОснования = Строка(Выборка.ОснованиеПраваПодписи);
ПараметрМакета = СтрШаблон("(%1)", ТекстОснования);

Использование СтрШаблон особенно удобно, когда внутри скобок нужно вывести сразу несколько полей, разделенных знаками препинания. Например: (договор №23 от 01.01.2023). В коде это будет выглядеть так:


ПараметрМакета = СтрШаблон("(договор №%1 от %2)", Выборка.Номер, Формат(Выборка.Дата, "ДФ=dd.MM.yyyy"));

Способ 4: Обработка пустых значений

Проанализируем ситуацию, когда поле, которое мы хотим вывести в скобках, может быть не заполнено. Чтобы в печатной форме не выводились "одинокие" скобки, необходимо добавить проверку. Мы рекомендуем использовать сокращенную форму оператора Если — функцию ?():


ЗначениеПоля = Строка(Выборка.ОснованиеПраваПодписи);
Доверенность = ?(ЗначениеЗаполнено(ЗначениеПоля), "(" + ЗначениеПоля + ")", "");

В данном случае, если ОснованиеПраваПодписи пустое, в макет передастся пустая строка, и ячейка останется чистой.

Способ 5: Подготовка данных в запросе

Иногда эффективнее подготовить строковое представление сразу на уровне базы данных. В языке запросов 1С существует функция ПРЕДСТАВЛЕНИЕ(). Это позволяет получить готовую строку и избежать лишних обращений через точку в программном коде (что может привести к снижению производительности из-за подгрузки лишних объектов в память).


"ВЫБРАТЬ
|   ПРЕДСТАВЛЕНИЕ(ДоговорыКонтрагентов.Ссылка) КАК ДоговорПредставление
|ИЗ
|   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов"

Затем в коде обработки результата запроса вы просто добавляете скобки к уже готовой строке Выборка.ДоговорПредставление.

Способ 6: Форматная строка в свойствах ячейки

Если вы выводите число или дату и хотите заключить их в скобки, можно воспользоваться свойством ячейки Формат. Хотя стандартно оно предназначено для настройки разрядов и вида дат, там есть поля Префикс и Суффикс (в параметрах строки формата это Л — текст слева и П — текст справа).

Например, для числового номера можно задать формат: ЧГ=0; Л=(; П=). Это заставит систему автоматически рисовать скобки вокруг числа. Однако этот метод редко применяется для строк, так как он менее гибкий, чем программный способ или шаблоны.

Резюме и рекомендации

Подведем итоги нашего анализа:

  1. Если нужно простое решение "здесь и сейчас" — используйте конкатенацию "(" + Строка(Значение) + ")".
  2. Если вы хотите видеть структуру документа прямо в макете — используйте Шаблон ячейки с параметром в квадратных скобках [Параметр].
  3. Для сложных строк с несколькими переменными лучшим выбором будет СтрШаблон().
  4. Всегда проверяйте значение на заполненность, чтобы избежать вывода пустых скобок ().
  5. По возможности используйте ПРЕДСТАВЛЕНИЕ() в запросах для оптимизации работы с данными.

Рассмотренные методы позволяют гибко управлять внешним видом печатных форм, обеспечивая профессиональное оформление документов в любой конфигурации на платформе 1С.

← На главную