1C-Company / DirectBank

DirectBank (прямой обмен с банком) – новая технология системы "1С:Предприятие 8"
51 stars 22 forks source link

Дата документа. Формат даты #56

Open naty-stolayrova opened 4 years ago

naty-stolayrova commented 4 years ago

Добрый день,

В исходящих от 1С документах (например, в платежном получении PayDocRu.xsd) поле DocDate имеет формат даты YYYY-MM-DD. По этому формату при разборе платежки в Банке невозможно понять часовой пояс, в котором платежное поручение было создано.

Например, пользователь Клиента 1С находится в Екатеринбурге, где время смещено на UTC+5, и отправляет в Московское отделение Банка платежку 08.04.2020 в 16:40. При формировании XML-файла PayDocRu система 1С отбросит часть со временем и оставит в поле DocDate только 2020-04-08.

Можно ли в таком случае ориентироваться на время, указанное в атрибуте creationDate, которое имеет формат ISO 8601 YYYY-MM-DDThh:mm:ssZ ? Правильно ли я понимаю, что в атрибуте creationDate будет всегда приходить время UTC без указания смещения, т.е. в данном случае в creationDate придет 2020-04-08T11:40:00Z ?

Если ориентироваться на атрибут creationDate нельзя, то каким способом следует определить тайм-зону отправителя документа?

SevDmitry commented 4 years ago

Поле DocDate соответствует полю 4 положения 383-П. В этом поле не может быть времени. Это дата составления распоряжения. creationDate - это дата формирования электронного документа. Но даты DocDate и creationDate могут отличаться. Пользователь может подготовить документ сегодня, а отправить в банк завтра. Значение creationDate имеет вид "2020-04-08T15:08:02", часовой пояс не указан. Зачем вам знать тайм-зону отправителя?

naty-stolayrova commented 4 years ago

Возможно, пример с платежным поручением был не совсем корректен, и стоило приводить платежное требование

В структуре банковского платежного требования дата документа имеет вид YYYY-MM-DDThh:mm:ss +- hh:mm с учетом тайм-зоны. При перекладывании значения поля DocDate в поле "дата документа" на стороне банка, мы должны выполнить определенное преобразование формата даты к временной зоне.

Фраза "Значение creationDate имеет вид "2020-04-08T15:08:02", часовой пояс не указан", означает, что дата 2020-04-08T15:08:02 - это время по Москве? или по Екатеринбургу?

SevDmitry commented 4 years ago

"Значение creationDate имеет вид "2020-04-08T15:08:02" - это текущее время на компьютере клиента, в каком бы он часовом поясе не находился.