При выводе печатных форм и отчетов в 1С разработчики часто сталкиваются с задачей правильного представления числовых данных. Финансовые документы требуют строгого оформления: суммы должны выводиться с точностью до копеек (например, 1 000,00 вместо 1000), тысячи должны отделяться пробелами для удобства чтения, а нулевые значения не должны «теряться» и превращаться в пустые ячейки. В рамках этой статьи мы подробно разберем, как решить эти задачи с помощью встроенных механизмов платформы 1С.
Мы проанализируем различные подходы к форматированию чисел, выясним разницу между программным преобразованием и настройкой макета, а также научимся обходить популярные подводные камни, такие как некорректная выгрузка данных в Excel и обработка пустых значений.
Если вам необходимо быстро преобразовать число в строку нужного вида непосредственно в программном коде перед выводом в макет, идеальным инструментом станет встроенная функция платформы 1С Формат(). Эта функция принимает два параметра: само число и специальную форматную строку, которая определяет правила отображения.
Рассмотрим структуру идеальной форматной строки для вывода денежных сумм:
"ЧЦ=15; ЧДЦ=2; ЧГ=3; ЧН=0,00"
Разберем по шагам, за что отвечает каждый параметр внутри этой строки:
ЧЦ=15 (Число целых цифр) — указывает общую максимальную длину отображаемого числа, включая десятичную часть. Это стандартная длина для финансовых показателей в 1С, предотвращающая переполнение ячеек.ЧДЦ=2 (Число десятичных цифр) — жестко задает ровно два знака после запятой (копейки). Благодаря этому значению число 150 превратится в 150,00, а число 2.9 превратится в 2,90.ЧГ=3 (Группировка) — разбивает большие числа на группы по 3 цифры справа налево. Это позволяет разделять тысячи пробелами (например, число 1000000 будет представлено как удобное для чтения 1 000 000,00).ЧН=0,00 (Представление нуля) — ключевой параметр для решения проблемы скрытых нулей. Если значение переменной равно нулю, платформа выведет на печать строку 0,00 вместо пустого пространства.Посмотрим на практический пример использования функции в программном коде модуля печати:
// Пример программного заполнения параметров макета
ЦенаТовара = 12500;
КоличествоТовара = 0;
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.Цена = Формат(ЦенаТовара, "ЧЦ=15; ЧДЦ=2; ЧГ=3; ЧН=0,00");
ОбластьМакета.Параметры.Количество = Формат(КоличествоТовара, "ЧЦ=15; ЧДЦ=2; ЧГ=3; ЧН=0,00");
ТабличныйДокумент.Вывести(ОбластьМакета);
При таком подходе в печатной форме мы гарантированно получим значения 12 500,00 и 0,00.
Несмотря на свою простоту, программный способ таит в себе серьезную проблему, о которой важно знать заранее. Функция Формат() всегда возвращает текстовое значение (тип Строка).
Если пользователь вашей программы решит сохранить сформированный табличный документ на диск в формате Excel (.xls или .xlsx), то колонки с суммами выгрузятся туда как текстовые ячейки. В результате:
СУММ() по такой колонке будет возвращать результат 0).Чтобы избежать этой проблемы, рассмотрим более правильный и профессиональный подход — форматирование на уровне самого макета.
Чтобы сохранить тип данных Число в итоговой таблице и при этом визуально отображать копейки и нули, форматирование необходимо настраивать в свойствах ячейки макета. В этом случае в параметр передается чистое число (без преобразования функцией Формат()), а за его отображение отвечает сама платформа 1С.
Разберем по шагам, как настроить отображение в макете:
<Сумма>).Alt + Enter).....2.0,00.После этого платформа автоматически запишет форматное выражение в свойства ячейки. Теперь при передаче в этот параметр обычного числа оно примет требуемый вид, но останется числом при выгрузке в Excel!
// Пример правильного заполнения параметров макета без потери типов данных
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
// Передаем чистые числа, форматирование применится автоматически из макета
ОбластьСтрока.Параметры.Сумма = Выборка.Сумма;
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
Даже при идеальной настройке форматной строки (как программно, так и в макете) вы можете столкнуться с ситуацией, когда вместо 0,00 ячейка остается абсолютно пустой. Выясним причину этого поведения.
Дело в том, что формат применяется только к числовым типам данных. Если при левом соединении таблиц в запросе или из-за отсутствия данных в базе в параметр передается значение NULL или Неопределено, платформа 1С не считает это числовым нулем и просто оставляет ячейку незаполненной. Чтобы этого избежать, данные необходимо предварительно обработать.
Проанализируем пример исправления такой ситуации в тексте запроса:
// Использование функции ЕСТЬNULL в запросе
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
ЕСТЬNULL(Продажи.СуммаОборот, 0) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
Функция ЕСТЬNULL проверяет результат: если поле базы данных содержит NULL, оно принудительно заменяется на полноценное число 0, к которому без проблем применится настроенная форматная строка.
Если же вы заполняете параметры макета вручную из переменных кода, то используйте явное приведение типов с помощью функции Число():
// Принудительное приведение к числу в программном коде
ТекущееЗначение = ТекущаяСтрока.Количество; // Может содержать Неопределено
ОбластьМакета.Параметры.Количество = Число(ТекущееЗначение);
// Теперь там гарантированно либо число, либо 0 в случае пустоты
В современных конфигурациях 1С большинство отчетов строится с использованием Системы компоновки данных (СКД). В этом механизме писать программный код или вручную редактировать ячейки табличного документа вообще не требуется.
Рассмотрим по шагам, как задать формат чисел в СКД:
Сумма).0,00) и нажмите ОК.СКД автоматически применит эти настройки ко всем выводимым таблицам, группировкам и детальным записям отчета, сохраняя при этом исходный числовой тип данных для беспрепятственного экспорта отчета в сторонние редакторы.