Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Синхронизация ТекущаяДата() и ТекущаяДатаСеанса() , Откуда берется ТекущаяДатаСеанса()?          
Talkman Подменю пользователя
сообщение 31.03.23, 9:01
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 189
Из: Черкассы
Спасибо сказали: 9 раз
Рейтинг: 9

После перевода часов ТекущаяДатаСеанса() стала показывать время на час раньше, из за чего в некоторых модулях конфигурации алгоритмы работают неверно. Время на сервере терминалов юзеров актуальное, время на сервере где установлен сервер 1С предприятия актуально + был перезапуск сервера при актуальном значении времени, время на сервере где БД актуально. Вопрос. Откуда рассинхрон? Платформа 8.3.16.1659. Заранее спасибо.

Talkman @ Сегодня, 9:41 * ,
Текущие данные по временам сеансов.

Текущая дата 31.03.2023 09:46:23
Текущая дата сеанса 31.03.2023 08:46:23
Часовой пояс Europe/Kiev
Часовой пояс сеанса Europe/Kyiv


Talkman @ Сегодня, 9:47 * ,
Часовой пояс у всех юзеров один.

denis84 Подменю пользователя
сообщение 31.03.23, 9:15
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 421
Из: Украина
Спасибо сказали: 133 раз
Рейтинг: 132.5

Talkman @ Сегодня, 10:01 * ,

Цитата
ИТС запрещает использовать ТекущаяДата(), но исчерпывающей информации на вопрос "Почему?" нет ни там, ни на ИС, поэтому написал данную заметку. Тем не менее, совсем не знакомым с темой, стоит прочитать статью на ИТС (по этой ссылке)и бегло статью на ИС "О времени и 1С" (к сожалению, ровно через неделю после моей публикации Юрий Пермитин удалил все свои статьи с инфостарта и ссылка уже не действительна).

Цитаты с ИТС:

2.1. Во всех серверных процедурах и функциях вместо функции ТекущаяДата, которая возвращает дату и время серверного компьютера, следует использовать функцию ТекущаяДатаСеанса, которая приводит время сервера к часовому поясу пользовательского сеанса.

3.1. В клиентском коде использование функции ТекущаяДата также недопустимо. Это требование обусловлено тем, что текущее время, вычисленное в клиентском и серверном коде, не должно различаться.

2.2. В тех случаях, когда требуется «универсальная» отметка времени, не зависящая от часового пояса текущего сеанса пользователя, в контексте которого выполняется серверный вызов, следует использовать функцию УниверсальноеВремя.

А именно остались вопросы:

1. Раз уж по неведомой пока причине, запретили использовать ТекущаяДата(), то почему бы вместо неё не дать возможность всегда использовать ТекущаяДатаСеанса()? Почему в платформе не сделали функцию ТекущаяДатаСеанса() доступной на клиенте? Тем более, что инфа о времени сеанса клиента изначально физически лежит на клиенте.

Потому что ТекущаяДатаСеанса() - согласно СП это серверная дата и время + часовой пояс клиента. А значит мы страхуемся от того, что на клиенте время вообще от балды идёт, например отстаёт на секунду.

2. Хорошо, раз на клиенте недоступна ТекущаяДатаСеанса(), то почему ИТС не разрешает на клиенте вызывать ТекущаяДата()? Ведь ТекущаяДатаСеанса() выполненная на сервере по идее будет равняться ТекущаяДата() выполненная на клиенте.
Вместо этого ИТС рекомендует вызывать метод БСП ДатаСеанса(), который как раз и вернёт значение равное ТекущаяДатаСеанса() только при этом не будет делать серверный вызов, за счёт того, что он был сделан однократно в начале сеанса и была вычислена ПоправкаКВремениСеанса = ТекущаяДатаСеанса(вычисленная на сервере) - ТекущаяДата(вычисленная на клиенте).

Ответ на данный вопрос вытекает из предыдущего: серверное и клиентское время время может отличаться не только на часовой пояс, и единственный выход пользоваться одинаковым временем, это брать его с сервера и добавлять клиентские часовые пояса - т.е. ровно то, что и делается в ТекущаяДатаСеанса() и ДатаСеанса()

Второй аргумент подсказал коллега (в достоверности не могу ручаться): ТекущаяДатаСеанса() на сервере и ТекущаяДата() на клиенте могут отличаться во фреше, т.к. это эталонное время для области в которой крутится сеанс и время Кластера соответсвенно.

3. Почему в качестве универсального времени ИТС указывает безальтернативно использовать УниверсальноеВремя()? Почему вместо этого нельзя использовать ТекущаяДата() вычисленное на сервере?


ТекущаяДата() на сервере тоже может меняться - например если сервер переехал. Или серверов может быть несколько. Поэтому УниверсальноеВремя() универсально в отличии от ТекущаяДата().


Проверено на платформе 8.3.17.1989.



взято с infostarta [необходимо зарегистрироваться для просмотра ссылки]

посмотрите, может это то что вам надо

Сообщение отредактировал denis84 - 31.03.23, 9:16

Спасибо сказали: Talkman,

Talkman Подменю пользователя
сообщение 31.03.23, 9:24
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 189
Из: Черкассы
Спасибо сказали: 9 раз
Рейтинг: 9

denis84 @ Сегодня, 10:15 * ,
Почему используется ТекущаяДатаСеанса() читал. Вопрос в том, какого рожна она резко стала отставать, когда часы на сервере 1С Предприятия показывают верное время, часы сервера терминалов (время сеансов юзверей) показывают верное время, время на сервере БД тоже верное. Вроде бы как все источники, откуда ТекущаяДатаСеанса() может браться имеют верное значение времени и синхронизированы с фактическим текущим временем, но по факту нет... Я не могу понять где в принципе может быть проблема. Хоть бери и ТекущаяДата() ставь вместо даты сеанса, что не есть красиво.
Перепроверил на другой базе, работающей на том же сервере 1С. Та же проблема... Сервер 1С предприятия перегружался при правильном времени на ОС сервера, где запущен.

denis84 Подменю пользователя
сообщение 31.03.23, 9:59
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 421
Из: Украина
Спасибо сказали: 133 раз
Рейтинг: 132.5

Talkman @ Сегодня, 10:01 * ,
[необходимо зарегистрироваться для просмотра ссылки]

пишут "чистка кэша" помогает

вот еще, про часовые пояса

Платформа начиная с версии 8.2 поддерживает методы преобразования с учетом системного часового пояса. Пример перевода в универсальное время и обратно (UTC), работает и на клиенте и на сервере:
Пример кода в 1С 8.3:

ДатаВремяСервера = УниверсальноеВремя(ТекущаяДатаСеанса());
ДатаВремяМестное = МестноеВремя(ДатаВремяСервера);



Сообщение отредактировал denis84 - 31.03.23, 10:04

Talkman Подменю пользователя
сообщение 31.03.23, 10:11
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 189
Из: Черкассы
Спасибо сказали: 9 раз
Рейтинг: 9

denis84 @ Сегодня, 10:59 * ,
Симптомы похожи, но только похожи. Рабочее пространство юзеров одно с одним конкретным правильным временем. Проверил на другом сервере терминалов с правильным временем с теми же базами 1С. Та же картина. По ссылке сказано про чистку кеша. Не подскажете какой кеш имеется в виду?

denis84 @ Сегодня, 10:59 * ,
Тут вопрос не в том, что можно переделать, чтобы заработало, а в том, чтобы понять что не так с временем сеанса. Код в конфигурации рабочий и проблем с ним не было ранее при переходе на летнее/зимнее время. Банальная замена ТекущаяДатаСеанса() на ТекущаяДата() в данном конкретном случае тоже решит проблему, так как все юзеры работают с одного сервера терминалов с одним сервером 1С. Но как то не правильно решать проблему изменением кода, который раньше работал при такой же ситуации sad.gif.

denis84 Подменю пользователя
сообщение 31.03.23, 10:20
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 421
Из: Украина
Спасибо сказали: 133 раз
Рейтинг: 132.5

Talkman @ Сегодня, 11:11 * ,
а платформа все время была одна и тоже? или Вы меняли платформу?

Любят там, что-то менять.

У меня не стыковки, но в другом (оаскраска строк в ТЗ) у меня красило, а в пользователя нет. а как оказалось разные платформы

Talkman Подменю пользователя
сообщение 31.03.23, 10:52
Сообщение #7

Завсегдатай
****
Группа: Пользователи
Сообщений: 189
Из: Черкассы
Спасибо сказали: 9 раз
Рейтинг: 9

denis84 @ Сегодня, 11:20 * ,
Все работают на одном сервере терминалов на одной платформе в одной базе подключенной к одному серверу 1С. В том то и вся оказия. Проблема одна у всех. Но на всех серверах время правильное + сервер 1С перегружался при правильном времени в ОС, на которой он поднят. Все предпосылки вроде как к тому, что где то что то не поменяно, но я не могу понять где...

Talkman @ Сегодня, 11:24 * ,
Платформа, не менялась.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 21:40
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!