Числа, даты и строки в 1С:Предприятии 8.3: форматная строка, СтрШаблон и оформление в формах
Содержание
Форматировать текст в 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…%10— позиции параметров, их можно ставить в любом порядке и повторять.%%выводит сам знак процента.- Если сразу после подстановки идёт цифра, номер берут в скобки:
%(1)0. - Значения параметров преобразуются в строку по умолчанию. Поэтому числа и даты лучше заранее пропустить через
Формат.
Шаблон удобно хранить отдельно от кода, например в макете или константе. Тогда текст уведомления меняют без правки модуля.
Ещё несколько функций, которые часто идут вместе с форматированием:
| Задача | Функция | Пример |
|---|---|---|
| убрать пробелы по краям | СокрЛП | СокрЛП(" ООО Ромашка ") |
| дополнить строку до длины | Лев(Стр + " ", 10) | выравнивание в текстовом файле |
| заменить фрагмент | СтрЗаменить | СтрЗаменить(Стр, Символы.НПП, "") |
| разбить по разделителю | СтрРазделить | СтрРазделить("a;b;c", ";") |
| собрать из массива | СтрСоединить | СтрСоединить(Массив, ", ") |
| регистр | ВРег, НРег, ТРег | ТРег("иванов иван") → «Иванов Иван» |
Символы.НПП — тот самый неразрывный пробел. Замена на пустую строку чинит уже отформатированные суммы, которые пришли из чужого кода.
Оформление в формах, макетах и отчётах
Не всё нужно форматировать кодом. Для отображения в интерфейсе у объектов есть собственные свойства, и они работают быстрее и не ломают тип данных.
Поле формы
У поля ввода управляемой формы в палитре свойств два параметра:
- 🔸 Формат — как значение выглядит, когда поле не редактируется;
- 🔸 Формат редактирования — как оно выглядит при вводе.
В обоих случаях открывается тот же конструктор форматной строки. Значение реквизита остаётся числом или датой, меняется только показ. Цвет, шрифт и жирность задаются там же, в группе свойств оформления поля.
Форматированная строка в надписи
Чтобы выделить часть текста жирным или сделать ссылкой, используют тип ФорматированнаяСтрока:
Жирный = Новый Шрифт(, , Истина);
Части = Новый Массив;
Части.Добавить(Новый ФорматированнаяСтрока("Внимание: ", Жирный, WebЦвета.Красный));
Части.Добавить("остаток на складе меньше заказа. ");
Части.Добавить(Новый ФорматированнаяСтрока("Открыть номенклатуру", , , , "e1cib/list/Справочник.Номенклатура"));
Элементы.Надпись.Заголовок = Новый ФорматированнаяСтрока(Части);
Последний параметр конструктора — навигационная ссылка. Обработку нажатия делают в событии надписи ОбработкаНавигационнойСсылки. В типовых конфигурациях на БСП есть обёртка СтроковыеФункции.ФорматированнаяСтрока, которая понимает теги <b> и <a href> прямо в тексте.
Ячейка табличного документа
В макете печатной формы выделите ячейку, откройте её свойства и найдите Формат. Если ячейка заполняется параметром, формат применится к значению параметра автоматически. Так одна правка макета меняет вид суммы во всех строках, и Формат в модуле не нужен.
В типовой конфигурации не правьте макет напрямую в основной конфигурации: это снимает её с поддержки и мешает обновлению. Изменения печатной формы делайте через расширение конфигурации или загрузкой своего макета в режиме «Предприятие», если конфигурация это поддерживает.
Отчёты на СКД
В схеме компоновки данных формат задаётся в двух местах:
- Вкладка «Наборы данных», колонка «Оформление» у поля — параметр
Формат. Действует на все варианты отчёта. - Настройки варианта, «Условное оформление» — формат и цвет по условию. Например, отрицательный остаток красным и в скобках.
Пользователь в режиме «Предприятие» может настроить условное оформление сам, через настройки отчёта, без конфигуратора.
Частые ошибки при форматировании и как их устранить
Ещё три ловушки, которые не видны сразу:
- ❌ Сравнение отформатированных строк.
Формат(Сумма1, "ЧДЦ=2") = Формат(Сумма2, "ЧДЦ=2")сравнивает текст, а не числа. СравнивайтеОкр(Сумма1, 2) = Окр(Сумма2, 2). - ❌ Обратное преобразование.
Число("1 234,50")упадёт из-за неразрывного пробела. Храните числа как числа и форматируйте только на выходе. - ❌ Разделитель параметров — запятая.
"ЧДЦ=2, ЧГ=0"прочитается неверно: запятая станет частью значения. Нужна точка с запятой.
Частые вопросы
Чем Формат отличается от Строка()?
Строка() преобразует значение по умолчанию, без настроек. Формат() позволяет задать число знаков, разделители, вид нуля и шаблон даты.Округляет ли Формат по правилам бухгалтерии?
ЧДЦ=2 покажет 2,35. Но значение в базе не меняется. Для расчётов используйте Окр(Число, 2).Как вывести число с точкой вместо запятой?
ЧРД=. или язык L=en_US. Во втором случае поменяется и разделитель групп на запятую, поэтому добавьте ЧГ=0, если группировка не нужна.Можно ли использовать Формат в тексте запроса?
Формат нет. Форматируют результат после выполнения запроса либо задают формат полю в СКД.Как вывести название месяца в именительном падеже?
ДФ='ММММ гггг': без дня перед ним месяц выводится в начальной форме — «Октябрь 2026».