Comments (9)
https://its.1c.ru/db/v8std#content:-2145782884:hdoc
Требования по локализации -> Форматирование даты, числа, Булево: требования по локализации
Пишу вырезку из нового стандарта:
- В случае, когда требуется передача значения в машиночитаемом виде, вне зависимости от информационной системы и настроек локализации, применяемых в ней, вместо локализации значения следует выполнить сериализацию. Локализацию дат нужно использовать всегда, когда это возможно. В тех случаях, когда это технически нецелесообразно, допускается отказываться от локализации. Например, при генерации файла формата XML, поддерживаемого банк-клиентом системы, специфичной для России.
В общем случае для сериализации рекомендуется использовать метод XMLСтрока
.
Для десериализации XMLЗначение
. Или метод ПривестиЗначение
объекта ОписаниеТипов
.
4.1. Сериализация дат
При разработке собственных форматов передачи данных между различными системами рекомендуется сериализовать дату в формате 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);
4.2. Сериализация числа
Неправильно:
// Сериализация
Строка = Строка(Число);
// Или
Строка = Формат(Число);
Правильно:
Строка = XMLСтрока(Число); // Сериализация
Число = XMLЗначение(Тип("Число"), Строка); // Десериализация
4.3. Сериализация Булево
Неправильно:
// Сериализация
Строка = Строка(Булево);
// или
Строка = Формат(Булево);
// Или
Строка = Формат(Булево, "БЛ=off; БИ=on");
Правильно:
// Сериализация
Строка = XMLСтрока(Булево);
// Или
Булево = XMLЗначение(Тип("Булево "), Строка);
// Или
Строка = ?(Булево, "on", "off");
from bsl-language-server.
https://its.1c.ru/db/v8std#content:2149184148:hdoc
from bsl-language-server.
Вау!! А я и не знал )))
from bsl-language-server.
Тут надо понимать что кроме приведения в заголовке могут использоваться куча других способов и то какой реально нужен с выбросом исключения или нет надо выбирать по факту решения.
Может быть у тебя валидация принимаемого пакета на XMLЗначение должна все же падать, потому гасить ее попыткой нельзя. А может тебе надо без исключений всегда читать значение - тогда через ОписаниеТипов надо.
from bsl-language-server.
А остались сценарии когда необходимо использовать Число(Значение)?
Пока все выглядит так, что любое использование Число(Значение) можно диагностировать как ошибку, вне зависимости от того завернуто оно в попытку или нет.
from bsl-language-server.
Насколько я понимаю, приведение без попытки по стандарту ошибкой не является
from bsl-language-server.
А мне кажется, что приведенный пример одновременно иллюстрирует две ошибки:
- Частный случай некорректной работы с попытка/исключение (именно из этого раздела its взят пример).
- Некорректное приведение типов.
Что мы хотим реально проверить?
Вообще, диагностировать ошибку на, в целом, работающем коде и при этом пропускать Число(Значение) которое в любой момент может вывалится в исключение мне кажется странным.
По крайней мере, я пока не вижу кейсов когда прямое приведение типов может быть оправдано.
from bsl-language-server.
По крайней мере, я пока не вижу кейсов когда прямое приведение типов может быть оправдано.
Ну разбираешь ты какой-то пакет обмена. В одном случае тебе если пришло что-то не то надо все равно создать объект в системе получателе, в другом случае тебе надо завалиться на анализе пакета, потому что число используется в ключе поиска объекта, например. Потому ошибку разбора поля типа числа надо оставлять с выбросом исключения.
Другое дело, что лучше использовать XMLЗначение
вместо Число
для чтения.
from bsl-language-server.
Другое дело, что лучше использовать
XMLЗначение
вместоЧисло
для чтения.
О том и речь, что похоже не осталось рекомендаций к использованию Число(Значение)
from bsl-language-server.
Related Issues (20)
- Прогрессивная шкала расчета времени исправления замечания
- [FP] Диагностика UsageWriteLogEvent не учитывает получение представления ошибки через ОбработкаОшибок
- [BUG] HOT 1
- Описание метода есть, Но анализ все равно просит его указать. Расширение типового метода. HOT 3
- Расширение. Общий модуль должен иметь хотя бы один экспортный метод, а также область "ПрограммныйИнтерфейс" или "СлужебныйПрограммныйИнтерфейс".
- Метод из общего типового модуля якобы не существует. Расширение.
- Метод Выполнить на Клиенте, диагностируется как на Сервере. HOT 3
- [FP] Не определяются составные ссылки на типы в документирующих комментариях
- [BUG] В случае если каталог исполняемого файла и каталога с файлами для анализа различаются происходит ошибка анализа HOT 2
- Ложное срабатывание в типовом ЗУП "ОбменДанными.Загрузка=Истина"[FP]
- [MOD] Настройка префиксов для FunctionNameStartsWithGet
- [FP] MissingTemporaryFileDeletion срабатывает при асинхронном удалении
- Разделение scope файлов и диагностик
- [NEW] Диагностика избыточных отрицаний
- [MOD]BadWord - выполнение со множеством условий HOT 1
- Ошибка чтения роли. HOT 3
- [BUG] Лексема "По" для цикла в EN варианте должно быть "To", а не "For" HOT 3
- Диагностика LatinAndCyrillicSymbolInWordDiagnostic - параметр работает некорректно, если имя метода начинается с маленькой буквы
- [FP] UsingSynchronousCalls - проверяет модуль менеджера HOT 1
- subsystemsFilter settings HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bsl-language-server.