Функция Формат в языке 1С предоставляет широкие возможности для форматирования значений примитивных типов в нужном виде. Например, можно отформатировать дату, оставив только год и месяц, или получить форматированное число, с двумя знаками после запятой. В этой статье мы рассмотрим функцию языка 1С Формат, а также конструктор форматной строки.
Содержание
Функция Формат
Синтаксис метода Формат весьма простой — функция принимает всего два параметра — собственно значение, которое мы хотим отформатировать, и форматную строку. Форматная строка может быть набрана вручную, но гораздо удобнее использовать для этого специальный конструктор (о нем — читайте ниже).
Формат(<Значение>, <ФорматнаяСтрока>)В качестве значения функция Формат может принимать только числа, даты и Булево. Другие типы значений передавать нельзя.
Форматная строка — это определенным образом записанное строковое значение, которое и отвечает за правила форматирования.
Важный момент, который упускают из вида начинающие разработчики. Функция Формат возвращает строку! Не важно, что мы передали в качестве параметра функции — дату, число или Булево. На выходе всегда получим строку. Поэтому неправильно использовать отформатированные значения в формулах, например, к форматированной дате прибавить сутки, или форматированное число умножить на 2.
Формат
Описание:
Формирует удобное для чтения представление значений. Полезно использование в отчетах и при прочем визуальном отображении значений.
Синтаксис:
Формат(<Значение>, <ФорматнаяСтрока>) |
Параметры:
<Значение> — Форматируемое значение.
<ФорматнаяСтрока> — Форматная строка представляет собой строковое значение, включающее параметры форматирования.
Параметры форматирования перечисляются через символ «;«. Наличие параметра означает отличие форматирования от стандартного.
Если параметр не задан, то применяется стандартное форматирование, которое в основном соответствует преобразованию значения к строке. Однако для значений типа Число и Дата по умолчанию (0 и 01.01.0001 00:00:00 соответственно) будет выдаваться пустая строка.
Каждый параметр задается именем параметра, символом «=» и значением параметра. Значение параметра может указываться в одинарных или двойных кавычках. Это необходимо, если значение параметра содержит символы, используемые в синтаксисе форматной строки.
Внутри значения параметра могут указываться произвольные символы, которые при формировании результирующей строки будут отображаться как есть. Таким образом, например, можно указывать разделители часов, минут и секунд при форматировании времени. Если эти символы совпадают со значениями форматной строки, их необходимо заключать в одинарные кавычки.
Имена и значения параметров форматной строки:
- Л — имя языка, страны, для которых будет выполняться стандартное форматирование.
- ЧЦ — общее число отображаемых десятичных разрядов целой и дробной частей. Исходное число округляется при этом в соответствии с правилами округления. Если указан этот параметр, то для отображения дробной части числа обязательно указание параметра ЧДЦ, иначе дробная часть отображаться не будет.
- ЧДЦ — число десятичных разрядов в дробной части. Исходное число округляется при этом в соответствии с правилами округления.
- ЧС — сдвиг разрядов: положительный — деление, отрицательный — умножение. Другими словами, это означает, что исходное число будет умножено или поделено на 10*С, где С — значение параметра по модулю.
- ЧРД — символ-разделитель целой и дробной части.
- ЧРГ — символ-разделитель групп целой части числа. Если в качестве разделителя использовать пустую строку, то в этом случае разделителем будет символ неразрывного пробела.
- ЧН — строка, представляющая нулевое значение числа. Если не задано, то представление в виде пустой строки. Если задано «ЧН=», то в виде «0». Не используется для числовых полей ввода.
- ЧВН — нужно ли выводить лидирующие нули. Значение данного параметра не задается, собственно наличие параметра определяет вывод лидирующих нулей.
- ЧГ — порядок группировки разрядов числа. В качестве значения указываются числа, через запятую, обозначающие количество группируемых разрядов справа налево. Имеют смысл только два первых числа. Первое из них указывает первичную группировку, то есть ту, которая будет использована для наименее значимых разрядов целой части числа. Если второе число не указано, то будут сгруппированы только наименее значимые разряды. Если в качестве второго числа задан 0, то для всех разрядов целой части числа будет применено значение указанное для первичной группировки. Если в качестве второго числа используется значение, отличное от 0, то это значение будет использовано для группировки всех разрядов, кроме уже сгруппированных наименее значимых.
- ЧО — представление отрицательных чисел.
- 0 (0) — строка вида «(1,1)»;
- 1 (1) — строка вида «-1,1»;
- 2 (2) — строка вида «- 1,1»;
- 3 (3) — строка вида «1,1-«;
- 4 (4) — строка вида «1,1 -«.
- ДФ — формат даты.
- д — день месяца (цифрами) без лидирующего нуля;
- дд — день месяца (цифрами) с лидирующим нулем;
- ддд — краткое название дня недели;
- дддд- полное название дня недели ;
- М — номер месяца (цифрами) без лидирующего нуля;
- ММ — номер месяца (цифрами) с лидирующим нулем;
- МММ — краткое название месяца;
- ММММ — полное название месяца;
- к — номер квартала в году;
- г — номер года без века и лидирующего нуля;
- гг — номер года без века с лидирующим нулем;
- гггг — номер года с веком;
- ч — час в 12 часовом варианте без лидирующих нулей;
- чч — час в 12 часовом варианте с лидирующим нулем;
- Ч — час в 24 часовом варианте без лидирующих нулей;
- ЧЧ (HH) — час в 24 часовом варианте с лидирующим нулем;
- м — минута без лидирующего нуля;
- мм — минута с лидирующим нулем;
- с — секунда без лидирующего нуля;
- сс — секунда с лидирующим нулем;
- вв — отображение половины дня AM/PM (действительно только для языков конфигурирования, поддерживающих 12 часовой вариант представления времени).
- ДЛФ — локальный формат даты. Указывается вариант отображения частей даты.
- Д — дата (цифрами);
- ДД — длинная дата (месяц прописью);
- В — полное время, дата может объединяться со временем;
- ДВ — дата время.
- ДП — строка, представляющая пустую дату (например, Формат(‘00010101000000’ ,»ДП=»»пустая дата»»») вернет строку «пустая дата»).
- БЛ — строка, представляющая логическое значение Ложь.
- БИ — строка, представляющая логическое значение Истина.
Конструктор форматной строки
Чтобы разработчику было удобнее составлять сложные форматные строки, в платформе предусмотрен специальный конструктор. Он вызывается при редактировании модуля из контекстного меню по правой кнопке мыши — пункт так и называется «Конструктор форматной строки». При вызове конструктора для пустой строки будет выдано сообщение:
Рассмотрим подробнее форму конструктора форматной строки:
Локальные форматы для чисел и дат будут зависеть от языка. Если установить флажок «Язык» и выбрать язык из списка, то локальный формат числа и даты будет указываться в соответствии с выбранным языком. В ином случае — будет использоваться текущий язык.
В зависимости от настроек — выбранных флажков, указанных значений — будет формироваться итоговая форматная строка. Также можно посмотреть пример, как будет отформатировано значение с этой форматной строкой. Можно ввести нужное число или дату, и посмотреть, как они будут выглядеть после форматирования.
Примеры формата даты в 1С 8.3
На примере одной и той же даты рассмотрим, как будет выглядеть значение после применения функции Формат с разными форматными строками. Дату возьмем 15.01.2022 12:34:56 с точностью до секунды.
НужнаяДата = '20220115123456';Получить дату без времени
Сообщить(Формат(НужнаяДата, "ДФ=dd.MM.yyyy")); // 15.01.2022Получить только время
Сообщить(Формат(НужнаяДата, "ДФ=hh:mm:ss")); // 12:34:56Сообщить(Формат(НужнаяДата, "ДЛФ=T")); // 12:34:56Локальный формат даты в 1С
Сообщить(Формат(НужнаяДата, "ДЛФ=DD")); // 15 января 2022 г.Дата, где месяц прописью
Сообщить(Формат(НужнаяДата, "ДФ='dd MMMM yyyy'")); // 15 января 2022Только месяц в именительном падеже
Сообщить(Формат(НужнаяДата, "ДФ=MMMM")); // январьСвое представление для пустой даты
Сообщить(Формат(Дата(1,1,1), "ДП='Дата не указана!'")); // Дата не указана!Важно! Учитывайте локализацию при использовании локальных форматов даты ДЛФ. Для разных языков представления могут отличаться. В случае, если нужно обеспечить одинаковое поведение для разных языков, следует использовать универсальный формат даты ДФ.
Примеры форматирования числа
// Всегда фиксированное число знаков после запятой
// Например - всегда два знака дробной части
Сообщить(Формат(123456, "ЧДЦ=2")); // 123 456,00
// Число без разделителей групп
// обычно это неразрывные пробелы
Сообщить(Формат(123456, "ЧГ=0")); // 123456
// Явное указание разделителя дробной части
// например, запятая вместо точки
// можно использовать один любой символ!
Сообщить(Формат(123456.78, "ЧДЦ=2; ЧРД=,")); // 123 456,78
//Так тоже будет работать!
Сообщить(Формат(123456.78, "ЧДЦ=2; ЧРД=9; ЧГ=0")); // 123456978
// Округление до целого
Сообщить(Формат(123456.78, "ЧДЦ=")); // 123 457
// вывести лидирующие нули до нужного количества знаков
Сообщить(Формат(123456.78, "ЧЦ=9; ЧВН=")); // 000 123 457Важно! При записи форматной строки вручную, порядок указания параметров может быть произвольным, т.к. это именованные параметры, и платформа их корректно определяет, вне зависимости от того, в какой последовательности они записаны.
Например, неважно, запишем ли мы «ЧЦ=9; ЧВН=» или «ЧВН= ; ЧЦ=9″.
если открыть форматную строку конструктором, она может быть преобразована, и параметры автоматически выстроятся в определенной последовательности.
Формат значений типа Булево
При помощи функции Формат можно заменить стандартное отображение значений Истина и Ложь на произвольное.
Сообщить(Формат(Истина, "БЛ='Никак нет!'; БИ='Так точно!'")); //Так точно!
Сообщить(Формат(Ложь, "БЛ='Никак нет!'; БИ='Так точно!'")); // Никак нет!Где еще применяется конструктор форматной строки
Помимо использования в языке 1С в функции Формат, форматная строка может применяться и в других местах, например:
- для указания формата ячеек в макете табличного документа
- в СКД в настройках оформления поля
- в СКД в параметрах редактирования поля
- в формате редактирования элемента формы
- в формате и формате редактирования колонки табличной части
и т.д.