Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. При использовании функции Формат в некоторых случаях следует использовать функцию НСтр при создании форматной строки (формат представления или редактирования дат, Булево значения и т.п.) . При этом форматная строка, задаваемая в свойствах метаданных (форм), подлежит локализации всегда, также, как синоним.
для вывода дат следует учитывать, что в различных странах приняты различные порядок следования и разделители для составных частей даты.
Например, одна и та же дата: 20.12.2012 – для России, 12/20/2012 – для США.
Поэтому вместо явного задания формата даты рекомендуется использовать локальный формат даты (ДЛФ).
В случаях, когда использовать локальный формат даты не получатся, и требуется задать произвольный формат (ДФ) или указать представление пустой даты (ДП) нужно применять функцию НСтр к форматной строке, чтобы при локализации оставалась возможность переопределить выводимый формат:
Неправильно:
Формат(ДатаУтверждения, "ДФ=дд.ММ.гггг"); Формат(ДатаУтверждения, "ДФ=ММММ гггг") + " г.";
Правильно:
Формат(ДатаУтверждения, "ДЛФ=ДД"); Формат(ДатаУтверждения, НСтр("ru='ДФ=''ММММ гггг ""г.""'''"));
Следует применять функцию НСтр к форматной строке в случае, когда
• для числа задается нечисловое представление нулевого значения (ЧН) ;
• указан шаблон форматирования числа (ЧФ);
• переопределяется разделитель дробной части (ЧРД).
Неправильно:
Предупреждение(Формат(100, "ЧН=Отсутствует")); Предупреждение(Формат(100, "ЧФ=""$Ч' / Час'"""));
Правильно:
Предупреждение(Формат(100, НСтр("ru = 'ЧН=Отсутствует'"))); Предупреждение(Формат(100, НСтр("ru = 'ЧФ=""$Ч'' / Час''""'"))); // "$100 / Час"
Для вывода Булево значения пользователю всегда применяйте функцию НСтр к форматной строке.
Неправильно:
Предупреждение(Формат(Истина, "БЛ=Нет; БИ=Да"));
Правильно:
Предупреждение(Формат(Истина, НСтр("ru='БЛ=Нет; БИ=Да'")));
1.4. Не следует переопределять поведение отображения локализации данных по умолчанию – формат отображения операционной системы. При использовании функции Формат следует избегать использовать параметр «L=».
2. При задании формата в полях ввода в формах и полях отчетов на базе СКД также рекомендуется локальный формат даты. Использовать другие форматы допустимо, если по сути решаемой задачи локальный формат не подходит – тогда форматная строка будет переводиться при переводе конфигурации.
3. При переопределении стандартных представлений полей в отчетах на базе СКД следует придерживаться тех же правил, что и в коде модулей. Например, неправильно:
"N " + ВОтветНаНомер + " от " + Формат(ВОтветНаДата, "ДФ=dd.MM.yyyy")
правильное выражение, по которому вычисляется представление поля:
СтрШаблон( НСтр("ru = 'N%1 от %2'"), ВОтветНаНомер, Формат(ВОтветНаДата, "ДЛФ=D"))
4. В случае, когда требуется передача значения в машиночитаемом виде, вне зависимости от информационной системы и настроек локализации, применяемых в ней, вместо локализации значения следует выполнить сериализацию. Локализацию дат нужно использовать всегда, когда это возможно. В тех случаях, когда это технически нецелесообразно, допускается отказываться от локализации. Например, при генерации файла формата XML, поддерживаемого банк-клиентом системы, специфичной для России.
В общем случае для сериализации рекомендуется использовать метод XMLСтрока.
Для десериализации XMLЗначение. Или метод ПривестиЗначение объекта ОписаниеТипов.
При разработке собственных форматов передачи данных между различными системами рекомендуется сериализовать дату в формате ISO: "ГГГГ-ММ-ДДTЧЧ:ММ:ССZ", например "2009-02-15T00:00:00Z" (соответствует типу dateTime схемы XML см. http://www.w3.org/TR/xmlschema-2/#dateTime).
Неправильно:
Строка = Формат(Дата, "ДФ=гггг-ММ-ддTЧЧ:мм:сс"); // Сериализация
Правильно:
// Сериализация Строка = XMLСтрока(Дата); // Сериализация // Или Строка = ЗаписатьДатуJSON(Дата, ФорматДатыJSON.ISO); // Сериализация ОписаниеТипа = Новый ОписаниеТипов("Дата"); Дата = ОписаниеТипа.ПривестиЗначение(Строка);
// Десериализация Дата = XMLЗначение(Тип("Дата"), Строка); // Или Дата = ПрочитатьДатуJSON(Строка, ФорматДатыJSON.ISO);
Неправильно:
// Сериализация Строка = Строка(Число); // Или Строка = Формат(Число);
Правильно:
Строка = XMLСтрока(Число); // Сериализация
Число = XMLЗначение(Тип("Число"), Строка); // Десериализация
Неправильно:
// Сериализация Строка = Строка(Булево); // Или Строка = Формат(Булево); // Или Строка = Формат(Булево, "БЛ=off; БИ=on");
Правильно:
// Сериализация Строка = XMLСтрока(Булево); // Или Булево = XMLЗначение(Тип("Булево "), Строка); // Или Строка = ?(Булево, "on", "off");