При работе в программах 1С:Предприятие (например, 1С:Бухгалтерия) пользователи часто сталкиваются с предупреждением или ошибкой о разнице во времени между клиентским рабочим местом и сервером. В результате рассинхронизации становится невозможным оперативное проведение документов, а в терминальных сеансах или при запуске тонкого/толстого клиента происходят сбои логики проведения. Разберем подробно, как устроена проверка времени платформой 1С, почему возникает эта проблема и как её решить.
Проанализируем механизм, заложенный разработчиками платформы. В прикладных решениях (в частности, в конфигурациях на базе Библиотеки Стандартных Подсистем, а также в классических редакторах вроде БП 2.0 или УТ 10.3) проверка осуществляется путем сравнения системного времени на клиенте и сервере. Платформа сравнивает значение функции ТекущаяДата() на клиентском рабочем месте со значением даты на сервере 1С.
При старте сеанса платформа кэширует поправку (разницу) между локальным временем ПК и временем сервера на период от 6 до 20 минут для уменьшения сетевых вызовов. Если в процессе работы происходит корректировка системных часов (например, служба NTP обновляет время на клиенте или сервере), кэшированное значение поправки не обновляется мгновенно. Из-за этого дата сеанса «уплывает», и оперативное проведение документов блокируется на уровне ядра платформы.
Рассмотрим главные факторы, из-за которых системные часы клиента и сервера начинают расходиться:
PostgreSQL) развернут на виртуальной машине (Hyper-V, VMware, KVM), часто возникает конфликт между внутренней службой ОС (w32time/NTP) и средствами интеграции гипервизора. В результате часы гостевой ОС постоянного скорректируются в разные стороны.Выясним, какие действия необходимо предпринять для полного устранения рассинхронизации времени.
Разберем административный подход к решению. Не рекомендуем перезагружать сервер каждую ночь для временного сброса разницы. Вместо этого необходимо настроить единый доверенный NTP-сервер для всех участников сети:
NTP.Если на сервере и клиентах время отображается верно, но предупреждения продолжают появляться (или их нужно временно отключить), проанализируем настройки самой 1С. В некоторых конфигурациях предусмотрена специальная константа.
Проверьте наличие константы ПроверятьРазницуВоВремениССервером (или аналогичной по названию в настройках параметров учета). Установка значения этой константы в Ложь полностью отключает вывод сообщения о разнице во времени.
Для предотвращения влияния локальных часовых поясов пользователей в коде модуля управляемого приложения (или при начале работы системы) можно явно устанавливать часовой пояс сеанса с помощью платформенной функции:
// Устанавливаем единый часовой пояс для сеанса пользователя
УстановитьЧасовойПоясСеанса("Europe/Moscow");
Если для проведения регламентных работ требуется сбросить текущие сеансы пользователей, не обязательно перезагружать весь сервер. Посмотрим, как корректно завершить работу пользователей с помощью утилиты администрирования кластера 1С rac или службы сервера:
1C:Enterprise Server Cluster Agent / ragent) без полной перезагрузки операционной системы:
net stop "1C:Enterprise 8.3 Server Agent"
net start "1C:Enterprise 8.3 Server Agent"
Применение этих мер позволит стабилизировать работу платформы 1С:Предприятие и исключить ошибки оперативного проведения документов, связанные с разницей во времени.