Форматирование нулей и разрядов чисел в 1С 8.3

· 9 мин

Содержание

За отображение нулей в 1С отвечает форматная строка — набор параметров, которые управляют тем, как число показывается на экране и в печати. Применяют её двумя способами: в коде через функцию Формат() или в свойстве «Формат» у поля формы и у ресурса отчёта.

Коротко по задачам: чтобы дописать нули после запятой — задают число дробных знаков (ЧДЦ); чтобы убрать нули у целых сумм — управляют тем же параметром; чтобы вместо нуля стоял прочерк или пусто — параметром ЧН; чтобы снять пробелы между тысячами — ЧГ=0. Ниже разберём каждый параметр с примерами кода и настройками полей.

Что такое форматная строка и где её задают

Форматная строка — это перечисление параметров через точку с запятой, например ЧДЦ=2; ЧН=0. Каждый параметр отвечает за один аспект вывода: количество знаков, разделители, поведение при нулевом значении.

Задать её можно в трёх местах:

  • 🧩 В коде — функцией Формат(Значение, "ЧДЦ=2"). Возвращает строку.
  • 🖼 На форме — у поля ввода или колонки есть свойство «Формат». Открывается конструктор форматной строки: галочки и поля вместо ручного набора параметров.
  • 📊 В отчёте на СКД — у ресурса (числового поля) тоже есть свойство «Формат» в параметрах поля.

Конструктор удобен тем, что не нужно помнить сокращения: отмечаете «Количество дробных знаков = 2» — система сама подставит ЧДЦ=2. Но в коде параметры приходится писать руками, поэтому держите их под рукой.

Форматная строка влияет только на отображение. Само число в базе не меняется: Формат(10, "ЧДЦ=2") вернёт текст 10,00, но в регистре по-прежнему лежит 10.

Параметры форматной строки для чисел

Вот параметры, которые нужны для работы с нулями и разрядами:

ПараметрЧто делаетПример результата
ЧДЦчисло дробных знаков (после запятой)ЧДЦ=2 → 10,00
ЧНчто выводить при нулевом значенииЧН=0 → 0; ЧН= → пусто
ЧГгруппировка разрядовЧГ=0 → 1234567 без пробелов
ЧЦмаксимальное число выводимых разрядовЧЦ=10 ограничивает длину
ЧРДсимвол-разделитель дробной частиЧРД='.' → точка вместо запятой
ЧРГсимвол-разделитель групп разрядовЧРГ=' ' → пробел между тысячами

Запомнить просто: буква Ч — «число», вторая буква — суть. ЧДЦ — дробные цифры, ЧН — нулевое, ЧГ — группы.

Параметры разделяются точкой с запятой, порядок значения не имеет:

Формат(ВводЦена, "ЧДЦ=2; ЧГ=0; ЧРД='.'")

Чтобы не собирать строку каждый раз с нуля, держите под рукой готовые сочетания под типовые задачи:

ЗадачаФорматная строкаБыло → стало
Деньги с копейкамиЧДЦ=210 → 10,00
Количество, три знакаЧДЦ=32 → 2,000
Целое без хвостаЧДЦ=01500,00 → 1500
Код для файла, без пробеловЧГ=01 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, а не пусто. Если нули продолжают вылезать после настройки — проверьте, что ЧН= задан именно там, где формируется ячейка, а не только в одном месте макета.

Формат чисел в табличных частях и на формах

В документах числовые колонки табличной части (цена, количество, сумма) форматируют не в коде, а в свойствах поля формы.

Порядок такой:

  1. Откройте форму документа в конфигураторе или расширении.
  2. В дереве элементов выделите нужную колонку таблицы.
  3. В палитре свойств найдите свойство «Формат».
  4. Нажмите кнопку выбора — откроется конструктор форматной строки.
  5. Задайте число дробных знаков, разделитель, поведение при нуле.

Отдельно работает сам реквизит табличной части. Его тип «Число» имеет квалификаторы: длину (сколько всего разрядов) и точность (сколько из них дробных). Они ограничивают ввод на уровне данных — больше знаков пользователь просто не наберёт. Формат отвечает за показ, квалификаторы — за хранение; это разные настройки, и держать их согласованными полезно.

Пара нюансов для управляемых форм с интерфейсом «Такси»:

  • Если колонка таблицы выведена через реквизит формы (а не напрямую с реквизита объекта), свойство «Формат» ищите у элемента формы, а не у реквизита данных.
  • Для одного и того же числа можно задать разный вид в разных колонках: сумма с копейками в одной, целое — в другой. Формат привязан к элементу, не к данным.
  • Менять формат «на лету» из кода тоже можно: свойству элемента ЭлементыФормы-колонки присваивают новую форматную строку в обработчике. Но для стабильного вида проще задать формат один раз в конфигураторе.

Правка формы — это изменение конфигурации. Если база на поддержке и снимать её с замка нежелательно, ту же колонку форматируют через расширение конфигурации : заимствуют форму, меняют только свойство «Формат» у колонки и подключают расширение. Основная конфигурация остаётся нетронутой.

Деньги, валюта и точность

Для денежных сумм в рублях стандарт — два знака после запятой (ЧДЦ=2): копейки видны всегда, даже если они нулевые. Для валютных операций точность задают по той же логике, но помнят про округление.

Главная ошибка здесь — не формат, а накопление дробей. Если складывать неокруглённые значения, итог «уедет» на копейку. Округляйте результат функцией Окр():

// до копеек
Итог = Окр(Сумма, 2);

Третий параметр Окр() управляет тем, как обрабатывается ровно половина (0,5): отбрасыванием или округлением вверх. Если точный режим важен для расчёта — сверьтесь со справкой по функции, чтобы не получить расхождение с первичкой.

Для сумм количество знаков задают форматом только на вывод. Само хранение определяется точностью реквизита: если у реквизита «Сумма» точность 2, третий знак не сохранится, сколько бы вы ни задали в ЧДЦ.

С валютой добавляется ещё один слой — суммы ведут и в валюте документа, и в рублях по курсу. Для валюты обычно хватает двух знаков, но для курса точность берут больше: четыре-пять знаков, иначе пересчёт даст ощутимую погрешность на крупных суммах. Форматная строка для курса в печати — та же логика: ЧДЦ=4 покажет курс как 92,5100, добавив нули до нужной длины. А вот рублёвый эквивалент считают от неокруглённого произведения и округляют уже результат — так итог сойдётся с суммой по строкам.

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

Ошибки при склейке числа со строкой

Самая коварная проблема возникает, когда число переводят в текст без формата. Функция Строка() применяет к числу вид по умолчанию — с группировкой разрядов:

Сообщить("Сумма: " + Строка(1250));
// результат: "Сумма: 1 250" — с пробелом-разделителем

Этот пробел — не обычный символ, а служебный разделитель групп. При записи в файл, выгрузке в обмен или сравнении строк он ломает результат: "1 250" не равно "1250". Поэтому для технических строк всегда используйте явный формат без группировки:

Сообщить("Сумма: " + Формат(1250, "ЧГ=0"));
// результат: "Сумма: 1250"

Правило простое: для показа человеку — Строка() или формат с разделителями, для файлов и обменов — Формат(Число, "ЧГ=0").

При обратном преобразовании, когда число читают из строки, подводит пустое значение. Число("") вызывает ошибку, а строка с пробелом-разделителем может не разобраться. Защищайтесь проверкой:

Знач = ?(ПустаяСтрока(ВводСтрокой), 0, Число(СокрЛП(ВводСтрокой)));

Сначала проверяем пустоту, подставляем 0, лишние пробелы убираем СокрЛП(). Так конвертация типов не падает на пустом поле.

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

Проверьте себя
Как добавить два знака после запятой к целому числу?
Что выведет `Формат(0, "ЧН=")` (после равенства пусто)?
Чем убрать пробел-разделитель между тысячами при записи в файл?
Диагностика: выберите симптом

Частые вопросы

Чем отличается `ЧЦ` от `ЧДЦ`?
ЧДЦ задаёт количество знаков после запятой. ЧЦ ограничивает общее число выводимых разрядов. Для добавления нулей после запятой нужен ЧДЦ.
Как показать ноль как пусто, а не как `0`?
Задайте параметр ЧН без значения: Формат(Число, "ЧН="). После знака равенства ничего не пишите.
Почему `ЧДЦ=4` не сохраняет четвёртый знак в базе?
Формат отвечает только за показ. Количество хранимых знаков определяет точность реквизита. Если точность равна 2, лишние знаки отбрасываются при записи, а формат лишь дорисовывает нули на экране.
Можно ли одной строкой задать и разделитель, и нули?
Да. Параметры перечисляются через точку с запятой в любом порядке: "ЧДЦ=2; ЧГ=0; ЧН='—'".
Как сделать точку вместо запятой в дробях?
Параметр ЧРД='.' — символ-разделитель дробной части. Пригодится при выгрузке в системы, где принята точка.