Как программно и через макет настроить формат вывода сумм с копейками и отображение нуля в 1С

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

При выводе печатных форм и отчетов в 1С разработчики часто сталкиваются с задачей правильного представления числовых данных. Финансовые документы требуют строгого оформления: суммы должны выводиться с точностью до копеек (например, 1 000,00 вместо 1000), тысячи должны отделяться пробелами для удобства чтения, а нулевые значения не должны «теряться» и превращаться в пустые ячейки. В рамках этой статьи мы подробно разберем, как решить эти задачи с помощью встроенных механизмов платформы 1С.

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

Способ 1. Программное форматирование с помощью функции Формат()

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

Рассмотрим структуру идеальной форматной строки для вывода денежных сумм:

"ЧЦ=15; ЧДЦ=2; ЧГ=3; ЧН=0,00"

Разберем по шагам, за что отвечает каждый параметр внутри этой строки:

  1. ЧЦ=15 (Число целых цифр) — указывает общую максимальную длину отображаемого числа, включая десятичную часть. Это стандартная длина для финансовых показателей в 1С, предотвращающая переполнение ячеек.
  2. ЧДЦ=2 (Число десятичных цифр) — жестко задает ровно два знака после запятой (копейки). Благодаря этому значению число 150 превратится в 150,00, а число 2.9 превратится в 2,90.
  3. ЧГ=3 (Группировка) — разбивает большие числа на группы по 3 цифры справа налево. Это позволяет разделять тысячи пробелами (например, число 1000000 будет представлено как удобное для чтения 1 000 000,00).
  4. ЧН=0,00 (Представление нуля) — ключевой параметр для решения проблемы скрытых нулей. Если значение переменной равно нулю, платформа выведет на печать строку 0,00 вместо пустого пространства.

Посмотрим на практический пример использования функции в программном коде модуля печати:


// Пример программного заполнения параметров макета
ЦенаТовара = 12500;
КоличествоТовара = 0;

ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.Цена = Формат(ЦенаТовара, "ЧЦ=15; ЧДЦ=2; ЧГ=3; ЧН=0,00");
ОбластьМакета.Параметры.Количество = Формат(КоличествоТовара, "ЧЦ=15; ЧДЦ=2; ЧГ=3; ЧН=0,00");
ТабличныйДокумент.Вывести(ОбластьМакета);

При таком подходе в печатной форме мы гарантированно получим значения 12 500,00 и 0,00.

Почему программное форматирование усложняет работу в Excel

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

Если пользователь вашей программы решит сохранить сформированный табличный документ на диск в формате Excel (.xls или .xlsx), то колонки с суммами выгрузятся туда как текстовые ячейки. В результате:

Чтобы избежать этой проблемы, рассмотрим более правильный и профессиональный подход — форматирование на уровне самого макета.

Способ 2. Настройка форматирования непосредственно в макете печатной формы

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

Разберем по шагам, как настроить отображение в макете:

  1. Откройте нужный макет печатной формы в конфигураторе.
  2. Найдите ячейку-параметр, в которую выводится сумма (например, <Сумма>).
  3. Нажмите на ячейку правой кнопкой мыши и выберите пункт Свойства (или нажмите комбинацию клавиш Alt + Enter).
  4. В палитре свойств найдите строку Формат и нажмите на кнопку выбора с троеточием ....
  5. Откроется интерактивный Конструктор форматной строки.
  6. На вкладке "Число" установите флаг "Округлять" и укажите точность 2.
  7. Заполните поле "Представление нуля", вписав туда значение 0,00.
  8. Установите флаг "Группировать" для разделения тысяч.
  9. В нижней части конструктора в поле "Пример" вы сразу увидите, как будут выглядеть ваши числа. Нажмите кнопку ОК.

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


// Пример правильного заполнения параметров макета без потери типов данных
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    // Передаем чистые числа, форматирование применится автоматически из макета
    ОбластьСтрока.Параметры.Сумма = Выборка.Сумма; 
    ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;

Борьба с пустыми значениями: NULL и Неопределено в запросах и коде

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

Дело в том, что формат применяется только к числовым типам данных. Если при левом соединении таблиц в запросе или из-за отсутствия данных в базе в параметр передается значение NULL или Неопределено, платформа 1С не считает это числовым нулем и просто оставляет ячейку незаполненной. Чтобы этого избежать, данные необходимо предварительно обработать.

Проанализируем пример исправления такой ситуации в тексте запроса:


// Использование функции ЕСТЬNULL в запросе
ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    ЕСТЬNULL(Продажи.СуммаОборот, 0) КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи

Функция ЕСТЬNULL проверяет результат: если поле базы данных содержит NULL, оно принудительно заменяется на полноценное число 0, к которому без проблем применится настроенная форматная строка.

Если же вы заполняете параметры макета вручную из переменных кода, то используйте явное приведение типов с помощью функции Число():


// Принудительное приведение к числу в программном коде
ТекущееЗначение = ТекущаяСтрока.Количество; // Может содержать Неопределено
ОбластьМакета.Параметры.Количество = Число(ТекущееЗначение); 
// Теперь там гарантированно либо число, либо 0 в случае пустоты

Альтернативный вариант: Настройка форматирования в СКД

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

Рассмотрим по шагам, как задать формат чисел в СКД:

  1. Откройте схему компоновки данных вашего отчета.
  2. Перейдите на вкладку Наборы данных.
  3. В списке полей найдите числовой показатель, формат которого требуется настроить (например, поле Сумма).
  4. В строке этого поля найдите колонку Оформление и нажмите на кнопку с троеточием.
  5. В открывшемся окне найдите свойство Формат, активируйте его флажком и откройте конструктор форматной строки.
  6. Задайте необходимые параметры (точность 2 знака, представление нуля как 0,00) и нажмите ОК.

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

← На главную