Почему при установке текущего времени в документе 1С время смещается на один час

Программист 1С v8.3 (Обычные формы)
← На главную

При работе в среде 1С:Предприятие пользователи и разработчики иногда сталкиваются с досадной технической ошибкой: при попытке установить текущее время в документе через стандартный интерфейс (особенно в обычных формах) система автоматически прибавляет или отнимает ровно один час. Эта проблема кажется незначительной, но она может привести к серьезным нарушениям в последовательности проведения документов и партионном учете. Разберем детально причины этого явления и методы его устранения.

Анализ региональных настроек и сезонного перевода времени

Проанализируем самую распространенную причину — разницу между системным временем и тем, как его интерпретирует платформа 1С. Часто это связано с отсутствием актуальных обновлений операционной системы Windows, касающихся часовых поясов. Даже если часы в трее показывают верное время, внутренние механизмы ОС могут ошибочно применять правила перехода на летнее или зимнее время, которые были отменены или изменены в законодательстве.

Для решения этой проблемы необходимо выполнить следующие шаги:

  1. Проверим наличие последних обновлений (KB-патчей) для Windows на всех машинах: и на сервере приложений 1С, и на сервере баз данных, и на клиентских рабочих станциях.
  2. Сравним настройки часового пояса. Важно, чтобы везде был установлен один и тот же часовой пояс (например, UTC+3), а не разные пояса с одинаковым текущим временем.
  3. Убедимся, что в настройках даты и времени отключен автоматический переход на летнее время, если он не предусмотрен в вашем регионе.

Различие между временем сеанса и системным временем

В платформе 1С существует понятие часового пояса сеанса. Выясним причину, по которой 1С может игнорировать системные часы. Если для информационной базы или конкретного пользователя программно или в настройках администрирования задано смещение, платформа будет автоматически корректировать каждую вводимую дату.

Посмотрим, как это может быть реализовано в коде, если бы мы искали причину в конфигурации (хотя автор темы утверждает, что код не менялся, проверить стоит):


// Установка часового пояса для всего сеанса
УстановитьЧасовойПоясСеанса("Europe/Moscow");

// Получение текущей даты с учетом пояса сеанса
ТекущаяДатаСеанса = ТекущаяДатаСеанса();

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

Влияние настроек SQL-сервера

Разберем ситуацию в клиент-серверном варианте работы. 1С:Предприятие при выполнении определенных транзакций может запрашивать время непосредственно у СУБД (например, MS SQL Server). Если системное время сервера SQL отличается от времени сервера приложений 1С, возникают коллизии.

Проанализируем состояние реестра Windows на сервере, где установлен SQL. Особое внимание уделим ветке: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation. Если параметр ActiveTimeBias содержит некорректное значение смещения, СУБД может отдавать платформе время со сдвигом. В этом случае 1С, пытаясь синхронизировать время документа с временем сервера, добавит лишний час.

Очистка кэша как универсальное средство

Иногда причина кроется в «зависших» настройках в кэше пользователя или сервера. Если настройки времени на сервере менялись недавно, старые значения смещения могли сохраниться в конфигурационных файлах сеанса.

Выполним полную очистку кэша по следующему алгоритму:

  1. Клиентский кэш: Удалим содержимое папок %AppData%\1C\1Cv8 и %LocalAppData%\1C\1Cv8. Это заставит платформу заново считать региональные настройки из ОС при запуске.
  2. Серверный кэш: Если проблема наблюдается у всех пользователей, необходимо остановить службу 1C:Enterprise 8.3 Server Agent и очистить папку snccntx, которая находится в каталоге данных сервера (обычно это srvinfo). Будьте осторожны: это приведет к завершению всех активных сеансов.

Проверка файла конфигурации платформы conf.cfg

Малоизвестный, но важный момент — файл conf.cfg, расположенный в папке bin/conf установленной платформы. Рассмотрим его содержимое. В нем может присутствовать параметр SystemTimeOffset. Данный параметр предназначен для принудительного смещения времени во всех сеансах 1С на определенное количество секунд. Если кто-то из администраторов ранее внес туда изменения (например, для тестирования), это будет влиять на все базы, запускаемые на данном сервере.

Особенности работы через RDP (удаленный рабочий стол)

Если пользователи работают в терминальном режиме, следует проанализировать групповые политики сервера. Существует политика «Перенаправление часового пояса клиента». При ее активации сервер терминалов пытается подстроить время сеанса под часовой пояс локального компьютера пользователя. Если на домашнем ПК пользователя время настроено неправильно или не установлены обновления часовых поясов, то в 1С он увидит смещенное время, даже если на сервере всё настроено идеально.

Для исправления ситуации рекомендуем либо синхронизировать настройки на всех клиентских машинах, либо отключить перенаправление часового пояса в настройках RDP-сервера, чтобы все пользователи работали в едином временном пространстве сервера.

Итоги

Подводя итог, можно сказать, что «лишний час» в 1С — это всегда следствие несогласованности настроек времени в цепочке «Клиент — Сервер приложений — Сервер БД — Операционная система». Последовательная проверка каждого звена, обновление патчей временных зон и очистка кэша в 99% случаев решают данную проблему без необходимости вмешательства в программный код конфигурации.

← На главную