Как задать формат значения в выражении шаблона табличного документа в 1С 8.х?

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

Когда мы переходим от работы с 1С 7.7 к платформе 1С 8.х, мы часто сталкиваемся с тем, что некоторые привычные нам механизмы работают иначе или вовсе отсутствуют. Один из таких вопросов, который вызывает затруднения у разработчиков, – это форматирование значений непосредственно в выражениях шаблонов табличного документа. В 1С 7.7 можно было легко задать формат, используя символы вроде решетки (#), что позволяло удобно оформлять числовые или строковые данные прямо в макете. В 1С 8.х такой прямой подход с использованием решетки или встроенных функций, например, [Формат(А, ...)], в шаблонных выражениях (тех, что заключены в квадратные скобки []) не поддерживается. Это может быть проблемой при создании печатных форм, например, ценников, где требуется точное и красивое отображение данных.

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

1. Использование свойства "Формат" ячейки макета для значений типа "Параметр"

Самый распространенный и, пожалуй, наиболее очевидный способ задать формат для выводимого значения — это использовать свойство "Формат" непосредственно для ячейки макета табличного документа. Этот подход значительно упрощает процесс, если значение выводится как параметр, а не как часть динамического шаблона. Для изменения макетов прямо в интерфейсе типовых конфигураций подойдёт инструкция по редактированию печатных форм в пользовательском режиме.

Как это работает?

  1. Мы открываем макет табличного документа в конфигураторе.
  2. Выбираем ячейку, в которую должно выводиться форматированное значение.
  3. В палитре свойств этой ячейки находим свойство "Заполнение" и устанавливаем его в значение "Параметр".
  4. Чуть ниже в палитре свойств находим свойство "Формат". Здесь мы можем задать форматную строку, которая будет применяться к значению, выводимому в эту ячейку. Форматная строка аналогична той, что используется во встроенной функции Формат().

Примеры форматных строк:

Применение в коде:

После того как мы настроили ячейку в макете, нам необходимо программно передать в нее значение. Для этого мы используем объект "Параметры" области макета:


Перем ОбластьМакета;
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьЦены"); // Предположим, у нас есть область с именем "ОбластьЦены"
// ... Получаем нужные данные ...
ОбластьМакета.Параметры.Цена = СтрокаТабличнойЧасти.Цена; // Цена - это имя параметра в нашей ячейке макета
ТабличныйДокумент.Вывести(ОбластьМакета);

В этом случае, если для параметра Цена в макете установлено свойство "Формат", оно будет автоматически применено к значению СтрокаТабличнойЧасти.Цена при выводе. Критически важно: убедитесь, что для ячейки установлен флажок "Содержит значение", иначе свойство "Формат" может быть проигнорировано.

2. Разделение области с шаблоном на несколько ячеек

Часто возникает ситуация, когда нам нужно отформатировать только часть текстовой строки. Например, у нас есть строка "Итого: [СуммаИтого] руб.", где только сумма должна быть отформатирована, а остальной текст остается без изменений. Поскольку прямое форматирование в шаблонах ([СуммаИтого]) не поддерживается, мы можем использовать комбинированный подход, разбивая область на несколько ячеек.

Рассмотрим подробнее этот метод:

Вместо одной ячейки, содержащей весь текст с шаблонным выражением, мы создаем три отдельные ячейки, расположенные рядом:

  1. Первая ячейка: содержит статический текст "Итого: " (тип заполнения "Текст").
  2. Вторая ячейка: содержит имя параметра <СуммаИтого> (тип заполнения "Параметр"). Для этой ячейки мы устанавливаем необходимое свойство "Формат" (например, ЧДЦ=2; ЧРГ=, чтобы округлить до двух знаков после запятой и убрать группировку разрядов).
  3. Третья ячейка: содержит статический текст " руб." (тип заполнения "Текст").

Все три ячейки должны быть объединены в одну область макета. В результате при выводе в табличный документ они будут выглядеть как единая строка, но форматирование будет применено только к числовому значению.

Пример использования в коде:


Перем ОбластьИтого;
ОбластьИтого = Макет.ПолучитьОбласть("ОбластьИтоговойСтроки");

// Устанавливаем значение для параметра, который находится во второй ячейке
ОбластьИтого.Параметры.СуммаИтого = ОбщаяСуммаДокумента;

ТабличныйДокумент.Вывести(ОбластьИтого);

Таким образом, мы обходим ограничение на прямое форматирование в шаблонных выражениях, используя более гибкую структуру макета и возможности форматирования ячеек типа "Параметр". Этот метод особенно полезен, когда нужно сохранить структуру строки, но применить форматирование к отдельным динамическим элементам.

3. Программное форматирование значения перед его выводом

Если нам требуется более сложная логика форматирования, зависящая от различных условий, или если формат не может быть задан статически в свойствах ячейки, мы всегда можем отформатировать значение программно перед его выводом в табличный документ. Этот подход дает нам максимальный контроль и гибкость. Для выявления расхождений в данных после доработки алгоритмов формирования таких отчётов применяется автоматическое сравнение бухгалтерских и налоговых проводок между базами.

Как это реализовать:

Мы используем встроенную функцию Формат() языка 1С:Предприятия. Эта функция принимает значение, которое нужно отформатировать, и строку формата, по которой оно будет преобразовано. Результатом работы функции является уже отформатированная строка, которую мы затем присваиваем соответствующему параметру области табличного документа.

Посмотрим на пример:


Перем ОбластьСтроки;
ОбластьСтроки = Макет.ПолучитьОбласть("ОбластьТабличнойЧасти");

// ... В цикле по строкам табличной части документа ...
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
    // Программное форматирование цены и суммы
    Перем ОтформатированнаяЦена;
    ОтформатированнаяЦена = Формат(СтрокаТЧ.Цена, "ЧЦ=10; ЧДЦ=2; ЧРГ=0; ЧН=0.00"); // Цена с 2 знаками после запятой, без группировки
    
    Перем ОтформатированнаяСумма;
    ОтформатированнаяСумма = Формат(СтрокаТЧ.Сумма, "ЧЦ=15; ЧДЦ=2; ЧРГ=0; ЧН=0.00; ЧВТ=."); // Сумма с 2 знаками, без группировки, разделитель групп точек

    // Присваиваем отформатированные значения параметрам области
    ОбластьСтроки.Параметры.Цена = ОтформатированнаяЦена;
    ОбластьСтроки.Параметры.Сумма = ОтформатированнаяСумма;
    ОбластьСтроки.Параметры.Номенклатура = СтрокаТЧ.Номенклатура; // Остальные параметры без форматирования

    ТабличныйДокумент.Вывести(ОбластьСтроки);
КонецЦикла;

В этом примере мы явно указываем формат для числовых значений цены и суммы, а затем передаем уже текстовые (отформатированные) представления этих чисел в параметры макета. Для других параметров (например, Номенклатура) мы передаем исходные значения, если к ним не требуется применять специфическое форматирование.

Важные моменты:

4. Использование форматированной строки (начиная с платформы 8.3.24)

В более новых версиях платформы 1С:Предприятие, начиная с версии 8.3.24, появилась очень мощная и гибкая функциональность — "Форматированная строка". Этот механизм значительно расширяет возможности по оформлению текста в табличных ячейках, позволяя задавать различные стили, цвета, шрифты и другие параметры оформления для отдельных частей строки. Это особенно актуально, когда нужно выделить часть текста, отобразить значения разными цветами в зависимости от условий или реализовать сложное многоуровневое форматирование. Чтобы своевременно переходить на актуальные релизы платформы и использовать новые возможности разработки, может выполняться автоматическое обновление и техническое обслуживание нескольких баз 1С по расписанию.

Основные преимущества "Форматированной строки":

Применение "Форматированной строки" программно:

Мы создаем объект Новый ФорматированнаяСтрока() и добавляем в него фрагменты текста, каждый из которых может иметь свой собственный стиль. Затем этот объект присваивается параметру области табличного документа.

Пример использования:


Перем ОбластьДокумента;
ОбластьДокумента = Макет.ПолучитьОбласть("ОбластьСуммы");

// Предположим, у нас есть сумма, которую нужно вывести
Перем СуммаКВыводу = 12345.678;
Перем ЗначениеСкидки = 0.15; // 15% скидки

Перем ФорматированнаяИтоговаяСтрока = Новый ФорматированнаяСтрока();

// Добавляем текст "Итого:" обычным стилем
ФорматированнаяИтоговаяСтрока.Добавить("Итого: ");

// Добавляем отформатированную сумму красным цветом, если есть скидка, или черным
Перем СтильСуммы;
Если ЗначениеСкидки > 0 Тогда
    СтильСуммы = Новый СтильТекста(ЦветТекста.Красный, Истина); // Жирный, красный
Иначе
    СтильСуммы = Новый СтильТекста(ЦветТекста.Черный, Ложь); // Обычный, черный
КонецЕсли;

ФорматированнаяИтоговаяСтрока.Добавить(Формат(СуммаКВыводу, "ЧДЦ=2; ЧН=0.00"), СтильСуммы);

// Добавляем единицу измерения " руб." серым цветом
ФорматированнаяИтоговаяСтрока.Добавить(" руб.", Новый СтильТекста(ЦветТекста.Серый, Ложь));

// Передаем форматированную строку в параметр
ОбластьДокумента.Параметры.ИтоговаяСумма = ФорматированнаяИтоговаяСтрока;

ТабличныйДокумент.Вывести(ОбластьДокумента);

В этом примере мы формируем строку, где часть текста (сумма) может быть выделена красным цветом и жирным шрифтом в зависимости от условия (наличия скидки), а остальные части строки имеют свой стиль. Это открывает широкие возможности для создания по-настоящему информативных и наглядных печатных форм.

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

← На главную