Имя: Пароль:
1C
1С v8
Поддержка часового пояса в типе ЗначениеXDTO с типом dateTime
,
0 ant_222
 
14.07.23
19:24
Здравствуйте,
Это моё первое сообщение на форуме, и я пока вижу никаких инструментов для форматирования (MarkDown, BBCode...), поэтому пишу всё голым текстом.

Я обращаюсь в веб-сервису через WSПрокси. Среди данных, принимаемых этим веб-сервисом, есть величины типа dateTime
( https://www.w3.org/TR/xmlschema-2/#dateTime )
с опциональным часовым поясом. Так как тип Дата в 1С не содержит часовой пояс, то в результате простого присвоения примитивного типа Дата полю объекта XDTO:

    xdto.my_date_field = дата;

объект сериализуется в XML с датами без часового пояса. Поэтому я попытался создать ЗначениеXDTO в обход примитивного типа, напрямую через лексическое представление, согласно статье Использование объектов XDTO в web-сервисах (см. раздел Дата)
( https://its.1c.ru/db/metod8dev/content/1793/hdoc ):

    тип  = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "dateTime");
    знч  = ФабрикаXDTO.Создать(тип, "2007-11-12T12:58:00 AET");
    тест = знч.ЛексическоеЗначение; //= "2007-11-12T12:58:00"

Но и в этом случае дата также сериализуется без часового пояса. Что я делаю не так? Как передать часовой пояс в ОбъектXDTO?
1 volumnii
 
14.07.23
20:45
Не смог прочитать тему, так как автор не смог использовать MarkDown или BBCode в первом сообщении(

А так, это не спасает?
https://helpf.pro/faq/view/1301.html
2 Жан Пердежон
 
14.07.23
21:04
Ты не можешь передать инфу о часом поясе, так как типа дата в 1С такой инфы не содержит;
Более того, когда ты пишешь что-то вроде

ФабрикаXDTO.Создать(тип, "2007-11-12T12:58:00Z");

строковое представление даты будет сначала преобразовано в типа Дата, а уже только потом сериализовано
3 ant_222
 
15.07.23
14:09
volumnii,
да, тяжеловато писать пропорциональным шрифтом и без форматирования. Обычно, где нет форматирования, там чистый текст, т.е. моноширинный шрифт с ограниченной длиной строки: e-mail (non-HTML), mailing list, FidoNet, UseNet, BBS. Форматироване с таких случах достигается за счёт моноширинности, например:
http://inversed.ru/CoreWar/CoreOps_02.txt
Вы дали ссылку на вопрос о пересчёте даты-времени из одного часового пояса в другой. Нет, это не то, что мне нужно, потому что этот вопрос не связан с сериализацией даты в XML.

Жан Пердежон,
Да, я знаю, что 1С-ный родной тип не содержит часового пояса, однако это не является препятствием к передачи даты-времени с часовым поясом в XML, ведь необходимое строковое представление можно сформировать алгоритмически, приписав часовой пояс в конце, или на оснвании структуры с двумя полями: Дата и Пояс. Типы XML не обязаны один к одному соответсоввать типам системы, и не соответсвуют на практике, что не мешает библиотекам для других языков полноценно поддерживать SOAP.

Да, вы (здесь все на ты?) верно заметили насчёт промежуточного преобразования в тип Дата. У меня нет доступа к исходникам 1С (на C++ ?), но наблюдаемое поведение выглядит именно так. ЗначениеXSD типа dateTime должно работать по-другому: так или иначе поддерживать установку часового пояса.

Как выйти из этой ситуации без переработки сервера SOAP (что не в моей власти)? Можно ли обмануть его: использовать локальную подправленную копию WSDL, в которой dateTime заменён на string, заполняя бывшие поля dateTime правильным строковым представлением? Можно ли вместо механизма SOAP (WSПрокси, и проч.), вручную средствами 1С свормировать правильный XML и отправить его через запрос POST—поддерживает ли 1С полноценную генерацию XML с простанствами имён?
4 ant_222
 
15.07.23
14:26
Я написал «к передачи», и должно быть «к передаче»—это была опечатка а не грамматическая ошибка. Сообщения здесь нельзя редактировать?

Жан,
как вы тогда объясняете инструкцию в вышеупомянутой статье «Использование объектов XDTO в web-сервисах» о констуировании значения XDTO типа dateTime на основе полноценного лексического представления:
Год-Месяц-ДеньTЧас:Минута:Секунда ВременнаяЗона
Эта инструкция на официальном сайте не соответствует суровой реальности? А если соответствует, то в каких случаях указание часового пояса может повлиять на поведение 1С? Вы не знаете, как связаться с автором этой статьи, дарящей ложные надежды?
5 arsik
 
гуру
17.07.23
10:56
Так передавай всегда дату по 0-му часовому поясу.
6 Жан Пердежон
 
17.07.23
11:05
(4) что тебе не ясно в описании на ИТС и в чем ты видишь противоречие?
как этим пользоваться - написано в статье ИТС; как это работает - в (2)
7 Жан Пердежон
 
17.07.23
11:32
>> ЗначениеXSD типа dateTime должно работать по-другому

Во-первых, не ЗначениеXSD, а ЗначениеXDTO;
Во-вторых, ЗначениеXDTO как раз и служит для отображения примитивного значение платформы; указание часового пояса очень даже влияет при десериализации.
Ну и в-третьих, SOAP - используется поверх http, так что всегда есть вариант сформировать самому XML и заслать её по http - примеров в интернете полно.
9 Жан Пердежон
 
17.07.23
11:55
(8) ну попробуй передать разные часовые пояса для одной даты, и увидишь что бессмысленно, а что нет
10 arsik
 
гуру
17.07.23
12:08
(8) Ну так принимающая сторона, если не указан часовой пояс в дате, будет его интерпретировать как UTC+0.
12 Жан Пердежон
 
19.07.23
19:20
(10) принимающая сторона _может_ интерпретировать как угодно
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс