Числа, даты и строки в 1С:Предприятии 8.3: форматная строка, СтрШаблон и оформление в формах

· 9 мин

Содержание

Форматировать текст в 1С из кода нужно функцией Формат(Значение, ФорматнаяСтрока): она превращает число, дату или булево в строку по заданным правилам. Например, Формат(1234.5, "ЧДЦ=2") вернёт 1 234,50, а Формат(ТекущаяДата(), "ДФ=дд.ММ.гггг") — дату вида 07.10.2026. Для склейки готовых фрагментов в фразу есть СтрШаблон, для оформления на экране — свойство «Формат» у поля формы и ячейки макета.

Частое заблуждение — что Формат округляет число «для расчёта». Нет: функция возвращает строку. Сумма 10,005 в базе так и останется 10,005, а округлить её для учёта можно только Окр(). Всё, что ниже, работает в платформе 8.3 одинаково для любой конфигурации — БП, ЗУП, УТ или собственной разработки.

Как устроена форматная строка функции Формат

Синтаксис простой:

Результат = Формат(Значение, "Параметр1=Значение1; Параметр2=Значение2");

Правила записи форматной строки:

  • 🔹 параметры разделяются точкой с запятой, пробел после неё допустим;
  • 🔹 имя параметра — русскими буквами (ЧДЦ, ДФ) или английскими аналогами (ND, DF);
  • 🔹 значение с пробелами, запятыми или точкой с запятой берут в одинарные кавычки: ЧФ='Ч руб.';
  • 🔹 первым можно указать язык: L=ru_RU или L=en_US. От него зависят разделители и названия месяцев.

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

Писать форматную строку руками не обязательно. В модуле конфигуратора поставьте курсор внутрь строкового литерала, откройте контекстное меню и выберите Конструктор форматной строки. Он покажет вкладки «Число», «Дата», «Булево» и соберёт строку с галочками.

Тип значения определяет, какие параметры сработают. Числовые параметры к дате не применяются и наоборот, ошибки при этом не будет — лишнее просто игнорируется. Это удобно, но и коварно: опечатку в имени параметра никто не подсветит.

Форматирование чисел и денежных сумм

Числовых параметров больше всего. Сводная таблица:

ПараметрЧто делаетПример вызоваРезультат
ЧДЦзнаков после запятой, с округлениемФормат(1234567.891, "ЧДЦ=2")1 234 567,89
ЧЦобщая длина числа (целая + дробная часть)Формат(42.5, "ЧЦ=5; ЧДЦ=1")42,5
ЧРДсимвол десятичного разделителяФормат(12.5, "ЧРД=.")12.5
ЧРГсимвол разделителя группФормат(1234567, "ЧРГ='-'")1-234-567
ЧГгруппировка разрядов, 0 — без группФормат(1234567, "ЧГ=0")1234567
ЧНчто выводить вместо нуляФормат(0, "ЧН='—'")—
ЧВНведущие нули (работает вместе с ЧЦ)Формат(42, "ЧЦ=5; ЧВН=")00042
ЧОвид отрицательного числа, 0–4Формат(-5, "ЧО=0")(5)
ЧСсдвиг разрядов: 3 — в тысячахФормат(1234567, "ЧС=3; ЧДЦ=1")1 234,6
ЧФшаблон вокруг числа, Ч — само числоФормат(1500, "ЧФ='Ч руб.'")1 500 руб.

Ведущие нули обычно ставят целым числам: так получают коды и номера фиксированной длины для выгрузок в банк или в текстовый файл.

Суммы в документах и отчётах

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

СуммаСтрокой = Формат(Сумма, "ЧДЦ=2; ЧН='0,00'");
// 15000     → "15 000,00"
// 0         → "0,00"
// -320.4    → "-320,40"

Без ЧН ноль превращается в пустую строку. В печатной форме это выглядит как пропущенное поле, и бухгалтер звонит программисту.

Вариант со скобками для отрицательных значений, как в финансовой отчётности:

Формат(-12500, "ЧДЦ=2; ЧО=0")   // "(12 500,00)"

Числа для обмена и файлов

Для XML, JSON, CSV и URL группировка вредна. Разделитель групп в русской локали — неразрывный пробел (код 160), а не обычный. Внешняя система его не распознает:

Формат(1234567.5, "ЧГ=0; ЧРД=.")   // "1234567.5"
XMLСтрока(1234567.5)              // "1234567.5" — тоже без пробелов

Для обменов надёжнее XMLСтрока: она не зависит от локали клиента.

Число прописью

Сумму прописью для счёта или платёжки выводит отдельная функция ЧислоПрописью. Третьим параметром передают склонения предмета счёта:

ПараметрыПредмета = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";
Текст = ЧислоПрописью(1250.40, "L=ru_RU; ДП=Ложь", ПараметрыПредмета);
// "Одна тысяча двести пятьдесят рублей 40 копеек"

Схема такая: три формы единицы, её род (м, ж, с), три формы дробной части, её род и число знаков дробной части. Параметр ДП=Истина пишет прописью и копейки.

Как вывести дату и время в нужном виде

Для дат два главных параметра: ДФ — произвольный шаблон, ДЛФ — готовые локальные форматы.

Готовые форматы ДЛФ

ЗначениеЧто получится
ДЛФ=Д07.10.2026
ДЛФ=ДД7 октября 2026 г.
ДЛФ=В14:05:09
ДЛФ=ДВ07.10.2026 14:05:09
ДЛФ=ДДВ7 октября 2026 г. 14:05:09

Если нужен стандартный вид, берите ДЛФ: он сам подстроится под язык пользователя.

Свой шаблон ДФ

Шаблон собирают из символов:

  • 📅 д, дд — день без нуля и с ведущим нулём; ддд, дддд — краткое и полное название дня недели;
  • 📅 М, ММ — номер месяца; МММ, ММММ — краткое и полное название;
  • 📅 гг, гггг — год двумя или четырьмя цифрами; к — номер квартала;
  • 🕐 ЧЧ — часы от 0 до 23, чч — от 1 до 12;
  • 🕐 мм — минуты, сс — секунды.

Регистр решает: ММ — месяц, мм — минуты. Шаблон дд.мм.гггг выдаст минуты вместо месяца, и дата 07.10.2026 14:05 превратится в 07.05.2026. Это самая частая ошибка с датами.

Рабочие примеры:

Формат(Дата, "ДФ=дд.ММ.гггг")            // "07.10.2026"
Формат(Дата, "ДФ='дд ММММ гггг'")         // "07 октября 2026"
Формат(Дата, "ДФ=ггггММдд")              // "20261007" — для имён файлов
Формат(Дата, "ДФ='ЧЧ:мм'")               // "14:05"

Когда за днём идёт полное название месяца, платформа ставит месяц в родительный падеж — «октября», а не «октябрь».

Пустая дата

Пустая дата '00010101' по умолчанию превращается в пустую строку. Чтобы в отчёте было понятно, что дата не заполнена, задайте ДП:

Формат(ДатаОплаты, "ДЛФ=Д; ДП='не оплачено'")

Булево

Для булевых значений есть пара БЛ и БИ:

Формат(Проведен, "БЛ=Нет; БИ=Да")        // "Да" / "Нет"
Формат(ЕстьНДС, "БЛ='без НДС'; БИ='с НДС'")

Шаблоны строк и подстановка параметров через СтрШаблон

Склеивать фразы плюсами неудобно: длинно, легко потерять пробел, а число без Формат попадёт в текст с неразрывным пробелом внутри. С платформы 8.3.6 есть функция СтрШаблон:

Текст = СтрШаблон("Счёт № %1 от %2 на сумму %3",
    Номер,
    Формат(Дата, "ДЛФ=Д"),
    Формат(Сумма, "ЧДЦ=2; ЧН='0,00'"));
// "Счёт № 0000-000125 от 07.10.2026 на сумму 15 000,00"

Как работают подстановки:

  1. %1 … %10 — позиции параметров, их можно ставить в любом порядке и повторять.
  2. %% выводит сам знак процента.
  3. Если сразу после подстановки идёт цифра, номер берут в скобки: %(1)0.
  4. Значения параметров преобразуются в строку по умолчанию. Поэтому числа и даты лучше заранее пропустить через Формат.

Шаблон удобно хранить отдельно от кода, например в макете или константе. Тогда текст уведомления меняют без правки модуля.

Ещё несколько функций, которые часто идут вместе с форматированием:

ЗадачаФункцияПример
убрать пробелы по краямСокрЛПСокрЛП(" ООО Ромашка ")
дополнить строку до длиныЛев(Стр + " ", 10)выравнивание в текстовом файле
заменить фрагментСтрЗаменитьСтрЗаменить(Стр, Символы.НПП, "")
разбить по разделителюСтрРазделитьСтрРазделить("a;b;c", ";")
собрать из массиваСтрСоединитьСтрСоединить(Массив, ", ")
регистрВРег, НРег, ТРегТРег("иванов иван") → «Иванов Иван»

Символы.НПП — тот самый неразрывный пробел. Замена на пустую строку чинит уже отформатированные суммы, которые пришли из чужого кода.

Оформление в формах, макетах и отчётах

Не всё нужно форматировать кодом. Для отображения в интерфейсе у объектов есть собственные свойства, и они работают быстрее и не ломают тип данных.

Поле формы

У поля ввода управляемой формы в палитре свойств два параметра:

  • 🔸 Формат — как значение выглядит, когда поле не редактируется;
  • 🔸 Формат редактирования — как оно выглядит при вводе.

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

Форматированная строка в надписи

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

Жирный = Новый Шрифт(, , Истина);
Части = Новый Массив;
Части.Добавить(Новый ФорматированнаяСтрока("Внимание: ", Жирный, WebЦвета.Красный));
Части.Добавить("остаток на складе меньше заказа. ");
Части.Добавить(Новый ФорматированнаяСтрока("Открыть номенклатуру", , , , "e1cib/list/Справочник.Номенклатура"));
Элементы.Надпись.Заголовок = Новый ФорматированнаяСтрока(Части);

Последний параметр конструктора — навигационная ссылка. Обработку нажатия делают в событии надписи ОбработкаНавигационнойСсылки. В типовых конфигурациях на БСП есть обёртка СтроковыеФункции.ФорматированнаяСтрока, которая понимает теги <b> и <a href> прямо в тексте.

Ячейка табличного документа

В макете печатной формы выделите ячейку, откройте её свойства и найдите Формат. Если ячейка заполняется параметром, формат применится к значению параметра автоматически. Так одна правка макета меняет вид суммы во всех строках, и Формат в модуле не нужен.

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

Отчёты на СКД

В схеме компоновки данных формат задаётся в двух местах:

  1. Вкладка «Наборы данных», колонка «Оформление» у поля — параметр Формат. Действует на все варианты отчёта.
  2. Настройки варианта, «Условное оформление» — формат и цвет по условию. Например, отрицательный остаток красным и в скобках.

Пользователь в режиме «Предприятие» может настроить условное оформление сам, через настройки отчёта, без конфигуратора.

Частые ошибки при форматировании и как их устранить

Диагностика: выберите симптом

Ещё три ловушки, которые не видны сразу:

  • ❌ Сравнение отформатированных строк. Формат(Сумма1, "ЧДЦ=2") = Формат(Сумма2, "ЧДЦ=2") сравнивает текст, а не числа. Сравнивайте Окр(Сумма1, 2) = Окр(Сумма2, 2).
  • ❌ Обратное преобразование. Число("1 234,50") упадёт из-за неразрывного пробела. Храните числа как числа и форматируйте только на выходе.
  • ❌ Разделитель параметров — запятая. "ЧДЦ=2, ЧГ=0" прочитается неверно: запятая станет частью значения. Нужна точка с запятой.

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

Чем Формат отличается от Строка()?
Строка() преобразует значение по умолчанию, без настроек. Формат() позволяет задать число знаков, разделители, вид нуля и шаблон даты.
Округляет ли Формат по правилам бухгалтерии?
Округляет при выводе по арифметическому правилу: 2,345 при ЧДЦ=2 покажет 2,35. Но значение в базе не меняется. Для расчётов используйте Окр(Число, 2).
Как вывести число с точкой вместо запятой?
Укажите ЧРД=. или язык L=en_US. Во втором случае поменяется и разделитель групп на запятую, поэтому добавьте ЧГ=0, если группировка не нужна.
Можно ли использовать Формат в тексте запроса?
Нет, в языке запросов функции Формат нет. Форматируют результат после выполнения запроса либо задают формат полю в СКД.
Как вывести название месяца в именительном падеже?
Используйте шаблон только из месяца и года, например ДФ='ММММ гггг': без дня перед ним месяц выводится в начальной форме — «Октябрь 2026».