При работе в среде 1С:Предприятие пользователи и разработчики иногда сталкиваются с досадной технической ошибкой: при попытке установить текущее время в документе через стандартный интерфейс (особенно в обычных формах) система автоматически прибавляет или отнимает ровно один час. Эта проблема кажется незначительной, но она может привести к серьезным нарушениям в последовательности проведения документов и партионном учете. Разберем детально причины этого явления и методы его устранения.
Проанализируем самую распространенную причину — разницу между системным временем и тем, как его интерпретирует платформа 1С. Часто это связано с отсутствием актуальных обновлений операционной системы Windows, касающихся часовых поясов. Даже если часы в трее показывают верное время, внутренние механизмы ОС могут ошибочно применять правила перехода на летнее или зимнее время, которые были отменены или изменены в законодательстве.
Для решения этой проблемы необходимо выполнить следующие шаги:
В платформе 1С существует понятие часового пояса сеанса. Выясним причину, по которой 1С может игнорировать системные часы. Если для информационной базы или конкретного пользователя программно или в настройках администрирования задано смещение, платформа будет автоматически корректировать каждую вводимую дату.
Посмотрим, как это может быть реализовано в коде, если бы мы искали причину в конфигурации (хотя автор темы утверждает, что код не менялся, проверить стоит):
// Установка часового пояса для всего сеанса
УстановитьЧасовойПоясСеанса("Europe/Moscow");
// Получение текущей даты с учетом пояса сеанса
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
Если в вашей базе используется механизм ТекущаяДатаСеанса(), а часовой пояс сеанса настроен неверно, вы получите тот самый сдвиг на час. Проверьте свойства информационной базы в консоли администрирования серверов 1С.
Разберем ситуацию в клиент-серверном варианте работы. 1С:Предприятие при выполнении определенных транзакций может запрашивать время непосредственно у СУБД (например, MS SQL Server). Если системное время сервера SQL отличается от времени сервера приложений 1С, возникают коллизии.
Проанализируем состояние реестра Windows на сервере, где установлен SQL. Особое внимание уделим ветке:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation.
Если параметр ActiveTimeBias содержит некорректное значение смещения, СУБД может отдавать платформе время со сдвигом. В этом случае 1С, пытаясь синхронизировать время документа с временем сервера, добавит лишний час.
Иногда причина кроется в «зависших» настройках в кэше пользователя или сервера. Если настройки времени на сервере менялись недавно, старые значения смещения могли сохраниться в конфигурационных файлах сеанса.
Выполним полную очистку кэша по следующему алгоритму:
%AppData%\1C\1Cv8 и %LocalAppData%\1C\1Cv8. Это заставит платформу заново считать региональные настройки из ОС при запуске.snccntx, которая находится в каталоге данных сервера (обычно это srvinfo). Будьте осторожны: это приведет к завершению всех активных сеансов.Малоизвестный, но важный момент — файл conf.cfg, расположенный в папке bin/conf установленной платформы. Рассмотрим его содержимое. В нем может присутствовать параметр SystemTimeOffset. Данный параметр предназначен для принудительного смещения времени во всех сеансах 1С на определенное количество секунд. Если кто-то из администраторов ранее внес туда изменения (например, для тестирования), это будет влиять на все базы, запускаемые на данном сервере.
Если пользователи работают в терминальном режиме, следует проанализировать групповые политики сервера. Существует политика «Перенаправление часового пояса клиента». При ее активации сервер терминалов пытается подстроить время сеанса под часовой пояс локального компьютера пользователя. Если на домашнем ПК пользователя время настроено неправильно или не установлены обновления часовых поясов, то в 1С он увидит смещенное время, даже если на сервере всё настроено идеально.
Для исправления ситуации рекомендуем либо синхронизировать настройки на всех клиентских машинах, либо отключить перенаправление часового пояса в настройках RDP-сервера, чтобы все пользователи работали в едином временном пространстве сервера.
Подводя итог, можно сказать, что «лишний час» в 1С — это всегда следствие несогласованности настроек времени в цепочке «Клиент — Сервер приложений — Сервер БД — Операционная система». Последовательная проверка каждого звена, обновление патчей временных зон и очистка кэша в 99% случаев решают данную проблему без необходимости вмешательства в программный код конфигурации.