#std763

Форматирование даты, числа, Булево: требования по локализации

1.

При использовании функции Формат в ряде случаев применяйте НСтр для форматной строки.

Форматная строка, заданная в свойствах метаданных (форм), всегда подлежит локализации, как и синоним.

1.1.

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

Поэтому вместо явного формата даты используйте локальный формат даты ДЛФ.

Если нужен произвольный формат (ДФ) или представление пустой даты (ДП), оборачивайте форматную строку в НСтр, чтобы она могла переводиться.

Неправильно

Формат(ДатаУтверждения, "ДФ=дд.ММ.гггг");
Формат(ДатаУтверждения, "ДФ=ММММ гггг") + " г.";

Правильно

Формат(ДатаУтверждения, "ДЛФ=ДД");
Формат(ДатаУтверждения, НСтр("ru='ДФ=''ММММ гггг ""г.""'''"));
1.2.

Для чисел применяйте НСтр к форматной строке, когда:

  • задается нечисловое представление нулевого значения (ЧН);
  • задан шаблон форматирования числа (ЧФ);
  • переопределяется разделитель дробной части (ЧРД).

Неправильно

Предупреждение(Формат(100, "ЧН=Отсутствует"));
Предупреждение(Формат(100, "ЧФ=""$Ч' / Час'"""));

Правильно

Предупреждение(Формат(100, НСтр("ru = 'ЧН=Отсутствует'")));
Предупреждение(Формат(100, НСтр("ru = 'ЧФ=""$Ч'' / Час''""'"))); // "$100 / Час"
1.3.

Для вывода пользователю значений Булево всегда применяйте НСтр к форматной строке.

Неправильно

Предупреждение(Формат(Истина, "БЛ=Нет; БИ=Да"));

Правильно

Предупреждение(Формат(Истина, НСтр("ru='БЛ=Нет; БИ=Да'")));
1.4.

Не переопределяйте локализацию отображения данных по умолчанию (формат ОС).

При использовании Формат избегайте параметра L=.

2.

При задании формата в полях ввода форм и полях отчетов на СКД также предпочитайте локальный формат даты.

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

3.

При переопределении стандартных представлений полей в отчетах на СКД соблюдайте те же правила, что и в модульном коде.

Неправильно

"N " + ВОтветНаНомер + " от " + Формат(ВОтветНаДата, "ДФ=dd.MM.yyyy")

Правильно

СтрШаблон(
  НСтр("ru = 'N%1 от %2'"),
  ВОтветНаНомер,
  Формат(ВОтветНаДата, "ДЛФ=D"))
4.

Если значение нужно передать в машиночитаемом виде независимо от настроек локализации, вместо локализации выполняйте сериализацию.

Локализацию дат используйте всегда, когда это возможно. Отказ от нее допустим только по технической необходимости (например, генерация XML для внешней специфичной системы).

В общем случае для сериализации используйте XMLСтрока, для десериализации XMLЗначение или ПривестиЗначение объекта ОписаниеТипов.

4.1.

Для собственных форматов обмена рекомендуется сериализация дат в формате ISO ГГГГ-ММ-ДДTЧЧ:ММ:ССZ (тип dateTime XML Schema): http://www.w3.org/TR/xmlschema-2/#dateTime.

Неправильно

Строка = Формат(Дата, "ДФ=гггг-ММ-ддTЧЧ:мм:сс"); // Сериализация

Правильно

// Сериализация
Строка = XMLСтрока(Дата);
// Или
Строка = ЗаписатьДатуJSON(Дата, ФорматДатыJSON.ISO);

// Десериализация
ОписаниеТипа = Новый ОписаниеТипов("Дата");
Дата = ОписаниеТипа.ПривестиЗначение(Строка);

// Или
Дата = XMLЗначение(Тип("Дата"), Строка);
// Или
Дата = ПрочитатьДатуJSON(Строка, ФорматДатыJSON.ISO);
4.2.

Для чисел:

Неправильно

// Сериализация
Строка = Строка(Число);
// Или
Строка = Формат(Число);

Правильно

Строка = XMLСтрока(Число); // Сериализация
Число = XMLЗначение(Тип("Число"), Строка); // Десериализация
4.3.

Для Булево:

Неправильно

// Сериализация
Строка = Строка(Булево);
// Или
Строка = Формат(Булево);
// Или
Строка = Формат(Булево, "БЛ=off; БИ=on");

Правильно

// Сериализация
Строка = XMLСтрока(Булево);

// Десериализация
Булево = XMLЗначение(Тип("Булево"), Строка);

// Либо явное преобразование в прикладной формат
Строка = ?(Булево, "on", "off");
Проверки

#acc:335 #acc:1367 #acc:1368 #acc:1369

Источник

https://its.1c.ru/db/v8std#content:763