При работе с 1С постоянно требуется выводить числа или даты в каком-либо особенном, либо просто в пристойном, виде. Для всего этого существует функция Формат(), о ней собственно и пойдет речь.
Общие сведения о функции Формат()
Если упростить, то функция Формат() позволяет превратить число, дату или булево в строку. Функция Формат() принимает два параметра:
- <Значение> — это собственно то значения, которому мы хотим придать какой-либо вид, это может быть число, дата или булево. Параметр обязательный.
- <ФорматнаяСтрока> — второй параметр, в котором и заключается весь смысл функции Формат(), об этом параметре поговорим более подробно.
Следует сказать, что форматная строка не является обязательным параметром, и в этом случаем функция Формат() отличается от функции Строка() только тем, что для значений по умолчанию для типов Число и Дата (0 и 01.01.0001 00:00:00 соответственно) функция Формат() вернет пустую строку.
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(0)); // КонецПроцедуры |
В остальных же случаях форматная строка является строковым значением, которое состоит из одного или нескольких параметров форматирования, которые разделяются символом “;”.
Каждый параметр форматирования состоит из имени, знака “=” и значения параметра. При этом значение параметра можно указывать в одинарных или двойных кавычках, это в тех случаях, когда значение параметра содержит символы используемые в синтаксисе форматной строки (например знак “;”).
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(3.1234, "ЧДЦ=2; ЧРД=';'")); //3;12 КонецПроцедуры |
Внутри значения параметра можно использовать произвольные символы, которые будут отображаться как есть. Наиболее очевидный пример — разделители при формировании представления даты. Также можно использовать одинарные кавычки, если есть подозрение, что символ может быть неправильно воспринят.
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат('20170327', "ДФ=гггг+ММ=дд")); //2017+03=27 КонецПроцедуры |
Параметры форматирования
Л (L) — указание языка и страны для которой будет выполняться стандартное форматирование, полный список доступен в синтаксис-помощнике.
1 2 3 4 5 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат('20170327201510', "Л=ru_RU")); //27.03.2017 20:15:10 Сообщить(Формат('20170327201510', "Л=en_US")); //3/27/2017 8:15:10 PM КонецПроцедуры |
Преобразование числа в строку
ЧЦ (ND) — максимальная длина целой части числа. Исходное число при этом округляется по правилу “Окр15как20”. Если указан этот параметр, то для отображения дробной части обязательно использовать параметр «ЧДЦ» о котором ниже.
1 2 3 4 5 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(9.49, "ЧЦ=2")); //9 Сообщить(Формат(9.51, "ЧЦ=2")); //10 КонецПроцедуры |
ЧДЦ (NFD) — максимальная длина дробной части числа. Исходное число при этом округляется по правилу “Окр15как20”.
1 2 3 4 5 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(9.49, "ЧЦ=2; ЧДЦ=1")); //9,5 Сообщить(Формат(9.51, "ЧЦ=2; ЧДЦ=1")); //9,5 КонецПроцедуры |
ЧС (NS) — указывает сдвиг разрядов: положительный — деление, отрицательный — умножение.
1 2 3 4 5 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(3210.0123, "ЧС=2")); //32,100123 Сообщить(Формат(3210.0123, "ЧС=-2")); //321001,23 КонецПроцедуры |
ЧРД (NDS) — позволяет указать каким символом разделять целую и дробную части числа.
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(6543210.23, "ЧРД==")); //6543210=23 КонецПроцедуры |
ЧРГ (NGS) — позволяет указать каким символом разделять группы целой части числа. Если значением параметра будет пустая строка, то группы будут разделены неразрывным пробелом.
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(6543210.23, "ЧРГ=.")); //6.543.210,23 КонецПроцедуры |
ЧН (NZ) — представление нулевого значения. Если параметр отсутствует, то нулевое значение будет представлено пустой строкой. Если параметр указан в виде “ЧН=”, то представлением нулевого значения будет “0”.
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(0, "ЧН='Ничего нет'")); //Ничего нет КонецПроцедуры |
ЧВН (NLZ) — вывод лидирующих нулей. Параметр не имеет значения, само наличие “ЧВН=” уже свидетельствует о необходимости выводить лидирующие нули.
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(12345, "ЧЦ=10; ЧВН=")); //0000012345 КонецПроцедуры |
ЧГ (NG) — позволяет указать способ группировки для целой части числа. В качестве значения, через запятую указываются числа. Смысл имеют только первые два числа, поэтому один из вариантов предлагаемых конструктором форматной строки выглядит странно. Все группировки отсчитываются справа налево.
Всего есть несколько основных вариантов значения параметра:
- “0” — все число представляется одной группой;
- “x” — создается одна группа размером в “x” символов, остальные числа представляется одной отдельной группой;
- “x, 0” — все число делится на группы размера “x”;
- “x, y” — создается одна группа размером “x” символов, остальные числа делятся на группы размеров “y” символов.
1 2 3 4 5 6 7 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(987654321, "ЧГ=0")); //987654321 Сообщить(Формат(987654321, "ЧГ=2")); //9876543 21 Сообщить(Формат(987654321, "ЧГ=2,0")); //9 87 65 43 21 Сообщить(Формат(987654321, "ЧГ=4,2")); //9 87 65 4321 КонецПроцедуры |
ЧО (NN) — представление отрицательных чисел:
- 0 (0) — строка вида «(1,1)»;
- 1 (1) — строка вида «-1,1»;
- 2 (2) — строка вида «- 1,1»;
- 3 (3) — строка вида «1,1-«;
- 4 (4) — строка вида «1,1 -«.
1 2 3 4 5 6 7 8 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(-123, "ЧО=0")); //(123) Сообщить(Формат(-123, "ЧО=1")); //-123 Сообщить(Формат(-123, "ЧО=2")); //- 123 Сообщить(Формат(-123, "ЧО=3")); //123- Сообщить(Формат(-123, "ЧО=4")); //123 - КонецПроцедуры |
Преобразование даты в строку
ДФ (DF) — формат даты:
- д (d) — день месяца (цифрами) без лидирующего нуля;
- дд (dd) — день месяца (цифрами) с лидирующим нулем;
- ддд (ddd) — краткое название дня недели*;
- дддд (dddd) — полное название дня недели*;
- М (M) — номер месяца (цифрами) без лидирующего нуля;
- ММ (MM) — номер месяца (цифрами) с лидирующим нулем;
- МММ (MMM) — краткое название месяца*;
- ММММ (MMMM) — полное название месяца*;
- к (q) — номер квартала в году;
- г (y) — номер года без века и лидирующего нуля;
- гг (yy) — номер года без века с лидирующим нулем;
- гггг (yyyy) — номер года с веком;
- ч (h) — час в 12 часовом варианте без лидирующих нулей;
- чч (hh) — час в 12 часовом варианте с лидирующим нулем;
- Ч (H) — час в 24 часовом варианте без лидирующих нулей;
- ЧЧ (HH) — час в 24 часовом варианте с лидирующим нулем;
- м (m) — минута без лидирующего нуля;
- мм (mm) — минута с лидирующим нулем;
- с (s) — секунда без лидирующего нуля;
- сс (ss) — секунда с лидирующим нулем;
- вв (tt) — отображение половины дня AM/PM (действительно только для языков конфигурирования, поддерживающих 12 часовой вариант представления времени).
* — не используется для форматной строки поля ввода даты.
1 2 3 4 5 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат('20170327231510', "ДФ='дддд чч:мм:сс вв'")); //понедельник 11:15:10 PM Сообщить(Формат('20170327231510', "ДФ='дд ММММ гггг'")); //27 марта 2017 КонецПроцедуры |
ДЛФ (DLF) — локальный формат даты. Указывается вариант отображения частей даты:
- Д (D) — дата (цифрами);
- ДД (DD) — длинная дата (месяц прописью);
- В (T) — полное время, дата может объединяться со временем;
- ДВ (DT) — дата время.
1 2 3 4 5 6 7 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат('20170327231510', "ДЛФ=Д")); //27.03.2017 Сообщить(Формат('20170327231510', "ДЛФ=ДД")); //27 марта 2017 г. Сообщить(Формат('20170327231510', "ДЛФ=В")); //23:15:10 Сообщить(Формат('20170327231510', "ДЛФ=ДВ")); //27.03.2017 23:15:10 КонецПроцедуры |
ДП (DE) — представление пустой даты.
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат('00010101', "ДП='Пустая дата'")); //Пустая дата КонецПроцедуры |
Преобразование булево в строку
БЛ (BF) — представление логического значения Ложь.
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(Ложь, "БЛ='Неправда'")); //Неправда КонецПроцедуры |
БИ (BT) — представление логического значения Истина.
1 2 3 4 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат(Истина, "БИ='Правда'")); //Правда КонецПроцедуры |
Типовые задачи представления данных
Число без пробелов
1 2 3 4 | &НаКлиенте Процедура ЧислоБезПробелов(Команда) Сообщить(Формат(987654321.123, "ЧГ=0")); //987654321,123 КонецПроцедуры |
Дата без времени
1 2 3 4 5 | &НаКлиенте Процедура ДатаБезВремени(Команда) Сообщить(Формат('20170327231510', "ДЛФ=Д")); //27.03.2017 Сообщить(Формат('20170327231510', "ДФ='дд ММММ гггг'"));//27 марта 2017 КонецПроцедуры |
А также еще множество вариантов.
Месяц прописью из даты
1 2 3 4 5 | &НаКлиенте Процедура ТестФормат(Команда) Сообщить(Формат('20170227231510', "ДФ=МММ"));//февр. Сообщить(Формат('20170227231510', "ДФ=ММММ"));//Февраль КонецПроцедуры |