Форматирование нулей и разрядов чисел в 1С 8.3
Содержание
За отображение нулей в 1С отвечает форматная строка — набор параметров, которые управляют тем, как число показывается на экране и в печати. Применяют её двумя способами: в коде через функцию Формат() или в свойстве «Формат» у поля формы и у ресурса отчёта.
Коротко по задачам: чтобы дописать нули после запятой — задают число дробных знаков (ЧДЦ); чтобы убрать нули у целых сумм — управляют тем же параметром; чтобы вместо нуля стоял прочерк или пусто — параметром ЧН; чтобы снять пробелы между тысячами — ЧГ=0. Ниже разберём каждый параметр с примерами кода и настройками полей.
Что такое форматная строка и где её задают
Форматная строка — это перечисление параметров через точку с запятой, например ЧДЦ=2; ЧН=0. Каждый параметр отвечает за один аспект вывода: количество знаков, разделители, поведение при нулевом значении.
Задать её можно в трёх местах:
- 🧩 В коде — функцией
Формат(Значение, "ЧДЦ=2"). Возвращает строку. - 🖼 На форме — у поля ввода или колонки есть свойство «Формат». Открывается конструктор форматной строки: галочки и поля вместо ручного набора параметров.
- 📊 В отчёте на СКД — у ресурса (числового поля) тоже есть свойство «Формат» в параметрах поля.
Конструктор удобен тем, что не нужно помнить сокращения: отмечаете «Количество дробных знаков = 2» — система сама подставит ЧДЦ=2. Но в коде параметры приходится писать руками, поэтому держите их под рукой.
Форматная строка влияет только на отображение. Само число в базе не меняется: Формат(10, "ЧДЦ=2") вернёт текст 10,00, но в регистре по-прежнему лежит 10.
Параметры форматной строки для чисел
Вот параметры, которые нужны для работы с нулями и разрядами:
| Параметр | Что делает | Пример результата |
|---|---|---|
ЧДЦ | число дробных знаков (после запятой) | ЧДЦ=2 → 10,00 |
ЧН | что выводить при нулевом значении | ЧН=0 → 0; ЧН= → пусто |
ЧГ | группировка разрядов | ЧГ=0 → 1234567 без пробелов |
ЧЦ | максимальное число выводимых разрядов | ЧЦ=10 ограничивает длину |
ЧРД | символ-разделитель дробной части | ЧРД='.' → точка вместо запятой |
ЧРГ | символ-разделитель групп разрядов | ЧРГ=' ' → пробел между тысячами |
Запомнить просто: буква Ч — «число», вторая буква — суть. ЧДЦ — дробные цифры, ЧН — нулевое, ЧГ — группы.
Параметры разделяются точкой с запятой, порядок значения не имеет:
Формат(ВводЦена, "ЧДЦ=2; ЧГ=0; ЧРД='.'")
Чтобы не собирать строку каждый раз с нуля, держите под рукой готовые сочетания под типовые задачи:
| Задача | Форматная строка | Было → стало |
|---|---|---|
| Деньги с копейками | ЧДЦ=2 | 10 → 10,00 |
| Количество, три знака | ЧДЦ=3 | 2 → 2,000 |
| Целое без хвоста | ЧДЦ=0 | 1500,00 → 1500 |
| Код для файла, без пробелов | ЧГ=0 | 1 250 → 1250 |
| Прочерк вместо нуля | ЧДЦ=2; ЧН='—' | 0 → — |
| Пустая ячейка при нуле | ЧДЦ=2; ЧН= | 0 → (пусто) |
Эти шесть строк закрывают почти все ситуации с нулями и разрядами. Остальное — комбинации тех же параметров.
Как добавить нули после запятой
Это самая частая задача: цена или сумма хранится как 10, а показать нужно 10,00. Отвечает параметр ЧДЦ — число дробных цифр.
// 10 → "10,00"
ЦенаСтрокой = Формат(Товар.Цена, "ЧДЦ=2");
// 10 → "10,000" (три знака, например для количества)
КолвоСтрокой = Формат(Строка.Количество, "ЧДЦ=3");
Параметр дописывает нули справа до нужной длины, даже если в числе их не было. ЧДЦ=2 гарантирует ровно два знака после запятой — это и есть «добавить нули» в денежных суммах.
Если ЧДЦ не указать, 1С показывает число с той точностью, которая есть у реквизита: целое — без дробной части, дробное — со значащими знаками. Поэтому для стабильного вида в печатных формах ЧДЦ ставят всегда.
Ведущие нули в кодах и номерах
Иногда нужно наоборот — дополнить нулями слева: получить 007 из 7. Форматная строка этого не делает (ЧЦ только ограничивает длину, но не дополняет). Решают строковой операцией:
// 7 → "007"
Код = Прав("000" + Формат(Число, "ЧГ=0"), 3);
Сначала склеиваем число с запасом нулей, затем функцией Прав() берём нужное количество символов справа. Для кода из пяти знаков берите "00000" и Прав(..., 5).
Как убрать лишние нули и хвосты в отчётах
Обратная задача: в отчёте целые суммы выглядят как 1500,00, а хочется 1500. Или ячейки с нулём замусоривают таблицу, и их нужно очистить.
Убрать дробные нули у целых — не задавать ЧДЦ вовсе или задать ЧДЦ=0. Тогда 1500,00 превратится в 1500.
Скрыть нулевые значения в ячейках — параметр ЧН с пустым значением:
// 0 → "" (пустая ячейка)
Формат(Остаток, "ЧДЦ=2; ЧН=")
После знака равенства ничего не пишем — и ноль выводится как пустая строка. Это стандартный приём для оборотно-сальдовых и прочих таблиц: нули не отвлекают, видны только реальные движения.
Поставить прочерк вместо нуля — задать строку в кавычках:
// 0 → "—"
Формат(Остаток, "ЧДЦ=2; ЧН='—'")
В отчёте на СКД то же самое делают без кода: у числового ресурса открывают свойство «Формат», в конструкторе снимают галочку «Выводить нули» или прописывают нужный ЧН.
Формат ресурса в СКД задают в одном из двух мест, и путать их не стоит:
- 🔹 В схеме компоновки — на вкладке с полями, у ресурса. Этот формат действует по умолчанию во всех вариантах отчёта.
- 🔹 В настройках варианта — через «Условное оформление» или пользовательские настройки. Этот перекрывает формат по умолчанию для конкретного варианта.
Если нули упорно не скрываются, значит формат задан в схеме, а вариант отчёта перекрывает его своим оформлением. Ищите настройку в том слое, который реально применяется к выводу.
По умолчанию Формат(0) возвращает строку 0, а не пусто. Если нули продолжают вылезать после настройки — проверьте, что ЧН= задан именно там, где формируется ячейка, а не только в одном месте макета.
Формат чисел в табличных частях и на формах
В документах числовые колонки табличной части (цена, количество, сумма) форматируют не в коде, а в свойствах поля формы.
Порядок такой:
- Откройте форму документа в конфигураторе или расширении.
- В дереве элементов выделите нужную колонку таблицы.
- В палитре свойств найдите свойство «Формат».
- Нажмите кнопку выбора — откроется конструктор форматной строки.
- Задайте число дробных знаков, разделитель, поведение при нуле.
Отдельно работает сам реквизит табличной части. Его тип «Число» имеет квалификаторы: длину (сколько всего разрядов) и точность (сколько из них дробных). Они ограничивают ввод на уровне данных — больше знаков пользователь просто не наберёт. Формат отвечает за показ, квалификаторы — за хранение; это разные настройки, и держать их согласованными полезно.
Пара нюансов для управляемых форм с интерфейсом «Такси»:
- Если колонка таблицы выведена через реквизит формы (а не напрямую с реквизита объекта), свойство «Формат» ищите у элемента формы, а не у реквизита данных.
- Для одного и того же числа можно задать разный вид в разных колонках: сумма с копейками в одной, целое — в другой. Формат привязан к элементу, не к данным.
- Менять формат «на лету» из кода тоже можно: свойству элемента
ЭлементыФормы-колонки присваивают новую форматную строку в обработчике. Но для стабильного вида проще задать формат один раз в конфигураторе.
Правка формы — это изменение конфигурации. Если база на поддержке и снимать её с замка нежелательно, ту же колонку форматируют через расширение конфигурации : заимствуют форму, меняют только свойство «Формат» у колонки и подключают расширение. Основная конфигурация остаётся нетронутой.
Деньги, валюта и точность
Для денежных сумм в рублях стандарт — два знака после запятой (ЧДЦ=2): копейки видны всегда, даже если они нулевые. Для валютных операций точность задают по той же логике, но помнят про округление.
Главная ошибка здесь — не формат, а накопление дробей. Если складывать неокруглённые значения, итог «уедет» на копейку. Округляйте результат функцией Окр():
// до копеек
Итог = Окр(Сумма, 2);
Третий параметр Окр() управляет тем, как обрабатывается ровно половина (0,5): отбрасыванием или округлением вверх. Если точный режим важен для расчёта — сверьтесь со справкой по функции, чтобы не получить расхождение с первичкой.
Для сумм количество знаков задают форматом только на вывод. Само хранение определяется точностью реквизита: если у реквизита «Сумма» точность 2, третий знак не сохранится, сколько бы вы ни задали в ЧДЦ.
С валютой добавляется ещё один слой — суммы ведут и в валюте документа, и в рублях по курсу. Для валюты обычно хватает двух знаков, но для курса точность берут больше: четыре-пять знаков, иначе пересчёт даст ощутимую погрешность на крупных суммах. Форматная строка для курса в печати — та же логика: ЧДЦ=4 покажет курс как 92,5100, добавив нули до нужной длины. А вот рублёвый эквивалент считают от неокруглённого произведения и округляют уже результат — так итог сойдётся с суммой по строкам.
Для печати суммы прописью форматная строка не нужна — для этого есть отдельные механизмы вывода, а не параметры числа.
Ошибки при склейке числа со строкой
Самая коварная проблема возникает, когда число переводят в текст без формата. Функция Строка() применяет к числу вид по умолчанию — с группировкой разрядов:
Сообщить("Сумма: " + Строка(1250));
// результат: "Сумма: 1 250" — с пробелом-разделителем
Этот пробел — не обычный символ, а служебный разделитель групп. При записи в файл, выгрузке в обмен или сравнении строк он ломает результат: "1 250" не равно "1250". Поэтому для технических строк всегда используйте явный формат без группировки:
Сообщить("Сумма: " + Формат(1250, "ЧГ=0"));
// результат: "Сумма: 1250"
Правило простое: для показа человеку — Строка() или формат с разделителями, для файлов и обменов — Формат(Число, "ЧГ=0").
При обратном преобразовании, когда число читают из строки, подводит пустое значение. Число("") вызывает ошибку, а строка с пробелом-разделителем может не разобраться. Защищайтесь проверкой:
Знач = ?(ПустаяСтрока(ВводСтрокой), 0, Число(СокрЛП(ВводСтрокой)));
Сначала проверяем пустоту, подставляем 0, лишние пробелы убираем СокрЛП(). Так конвертация типов не падает на пустом поле.
Ещё одна засада — дробный разделитель. Функция Число() ждёт запятую (по российской локали), а строка из внешнего источника часто приходит с точкой. Если число не разбирается, сначала приведите разделитель к ожидаемому — заменой символа через СтрЗаменить(Строка, ".", ",") — и только потом вызывайте Число().
Строка() или формат с группировкой. Используйте Формат(Число, "ЧГ=0").ЧДЦ=2 там, где дробная часть не нужна. Уберите ЧДЦ или поставьте ЧДЦ=0.ЧН= прописан не в том месте вывода. Задайте формат у ресурса СКД или у конкретной ячейки макета.ПустаяСтрока() и подставьте 0.Частые вопросы
Чем отличается `ЧЦ` от `ЧДЦ`?
ЧДЦ задаёт количество знаков после запятой. ЧЦ ограничивает общее число выводимых разрядов. Для добавления нулей после запятой нужен ЧДЦ.Как показать ноль как пусто, а не как `0`?
ЧН без значения: Формат(Число, "ЧН="). После знака равенства ничего не пишите.Почему `ЧДЦ=4` не сохраняет четвёртый знак в базе?
Можно ли одной строкой задать и разделитель, и нули?
"ЧДЦ=2; ЧГ=0; ЧН='—'".Как сделать точку вместо запятой в дробях?
ЧРД='.' — символ-разделитель дробной части. Пригодится при выгрузке в системы, где принята точка.