Часы сервера 1С расходятся с рабочими местами: где смотреть и как выровнять

· 9 мин

Содержание

Проверить время на сервере 1С быстрее всего на самой машине кластера: в Windows командой w32tm /query /status и обычным Get-Date в PowerShell, в Linux — timedatectl. Именно эти часы 1С использует для ТекущаяДатаСеанса(), регламентных заданий и журнала регистрации. Часы на компьютере бухгалтера здесь ни при чём.

Частое заблуждение: «у меня в трее 10:15, значит и документ запишется в 10:15». В клиент-серверном режиме это не так. Типовые конфигурации берут время сервера, поэтому при расхождении в 7 минут документ «из будущего» встанет не на своё место в последовательности.

Чьё время на самом деле использует 1С

В клиент-серверной базе участвуют минимум три компьютера: клиент, сервер 1С:Предприятия и сервер СУБД. У каждого свои часы. Важно знать, какие из них за что отвечают.

Где идут часыЧто от них зависит
🖥️ Рабочий сервер кластера 1СТекущаяДатаСеанса(), ТекущаяДата() в серверном коде, время записей журнала регистрации, запуск регламентных заданий по расписанию
💻 Компьютер пользователяТекущаяДата() в клиентском коде, проверка сертификатов при подписи, вход по Kerberos
🗄️ Сервер СУБДзадания SQL Agent или cron, время резервных копий, журналы самой СУБД

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

В файловом варианте отдельного сервера 1С нет. Там все вычисления идут на компьютере пользователя, и «время сервера» — это часы того ПК, где запущен клиент.

Проверка времени на сервере 1С средствами Windows и Linux

Начните с операционной системы. Это две минуты и самый надёжный результат.

Windows Server

Откройте PowerShell на сервере 1С (по RDP или через консоль гипервизора) и выполните:

Get-Date -Format "yyyy-MM-dd HH:mm:ss zzz"
w32tm /query /status
w32tm /query /source
w32tm /tz

Что смотреть в выводе:

  • 🕐 Источник (Source) — откуда сервер берёт время: контроллер домена, внешний NTP или VM IC Time Synchronization Provider (это Hyper-V).
  • 📅 Последняя успешная синхронизация — если дата давняя, служба времени не работает .
  • 🌍 Часовой пояс — w32tm /tz покажет пояс и правило перехода.
  • ⚠️ Local CMOS Clock в источнике — сервер ни с кем не синхронизируется и идёт по собственным часам.

Сравнить сервер с контроллером домена можно так:

w32tm /stripchart /computer:dc01.company.local /samples:5 /dataonly

Команда выведет пять замеров смещения в секундах. Значения в пределах долей секунды — норма. Несколько секунд — уже повод разбираться.

Linux (Ubuntu, Astra, РЕД ОС)

timedatectl
chronyc tracking
chronyc sources -v

В timedatectl нужна строка System clock synchronized: yes и правильный Time zone. В chronyc tracking поле System time показывает, насколько часы отстают или спешат относительно источника. Если стоит systemd-timesyncd, а не chrony, состояние смотрите через timedatectl timesync-status.

Как посмотреть время сервера из самой 1С

Иногда доступа к серверу по RDP нет, а проверить время нужно. Тогда помогает маленькая внешняя обработка. Она сравнивает часы клиента и сервера в одном окне.

Создайте в Конфигураторе внешнюю обработку , добавьте форму и команду, а в модуль формы вставьте код:

&НаКлиенте
Процедура ПроверитьВремя(Команда)
	ВремяКлиента = ТекущаяДата();
	Данные = ВремяСервера();
	Расхождение = Данные.Сервер - ВремяКлиента;
	Сообщить("Клиент: " + Формат(ВремяКлиента, "ДЛФ=DT"));
	Сообщить("Сервер: " + Формат(Данные.Сервер, "ДЛФ=DT"));
	Сообщить("Сервер, UTC: " + Формат(Данные.UTC, "ДЛФ=DT"));
	Сообщить("Дата сеанса: " + Формат(Данные.Сеанс, "ДЛФ=DT"));
	Сообщить("Часовой пояс сеанса: " + Данные.Пояс);
	Сообщить("Расхождение, сек: " + Формат(Расхождение, "ЧН=0; ЧГ=0"));
КонецПроцедуры

&НаСервереБезКонтекста
Функция ВремяСервера()
	Результат = Новый Структура;
	Результат.Вставить("Сервер", ТекущаяДата());
	Результат.Вставить("UTC", ТекущаяУниверсальнаяДата());
	Результат.Вставить("Сеанс", ТекущаяДатаСеанса());
	Результат.Вставить("Пояс", ЧасовойПоясСеанса());
	Возврат Результат;
КонецФункции

Вычитание двух дат в 1С даёт разницу в секундах, так что последняя строка покажет расхождение сразу числом. Положительное значение — сервер спешит относительно клиента, отрицательное — отстаёт. Пара секунд набегает на сам вызов сервера, это нормально.

Откройте обработку в пользовательском режиме через Файл → Открыть. Для этого у пользователя должно быть право на интерактивное открытие внешних обработок.

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

Время в консоли кластера и через rac

Консоль администрирования серверов 1С:Предприятия не показывает «часы сервера» напрямую. Но время можно вычислить по сеансам.

Консоль администрирования

  1. Откройте консоль и разверните Кластеры → <ваш кластер> → Информационные базы → <база> → Сеансы.
  2. Только что войдите в базу с любого рабочего места.
  3. Найдите свой сеанс в списке и посмотрите время его начала и последней активности.
  4. Сравните с часами на своём ПК в момент входа.

Время в консоли формирует кластер, поэтому заметное расхождение с вашими часами означает, что спешат или отстают часы сервера (или ваши — проверьте их по точному источнику).

Если консоль не открывается с ошибкой про класс или COM-компонент, перерегистрируйте библиотеку radmin.dll той же версии платформы, что и сервер: regsvr32 "C:\Program Files\1cv8\<версия>\bin\radmin.dll" из командной строки от имени администратора.

Утилита rac

Для rac должен работать сервер администрирования ras (по умолчанию порт 1545). Порядок:

rac localhost:1545 cluster list
rac localhost:1545 session list --cluster=<uuid-кластера>

В выводе session list у каждого сеанса есть поля started-at и last-active-at. Войдите в базу и сразу сравните started-at своего сеанса с эталонным временем. Если на кластере задан администратор, добавьте --cluster-user и --cluster-pwd. Остальные параметры смотрите в rac help session.

rac удобен, когда серверов несколько: один скрипт обходит все кластеры и показывает, где время сеансов «уезжает».

Журнал регистрации как свидетель расхождения

Журнал регистрации в клиент-серверном варианте пишет рабочий процесс кластера. Значит, время каждой записи — это время сервера 1С.

Как использовать это для диагностики:

  1. Посмотрите на часы своего ПК, сверенные с точным источником, и запомните время.
  2. Сразу войдите в базу.
  3. Откройте журнал: в БП 3.0 и ЗУП 3.1 — Администрирование → Обслуживание → Журнал регистрации, в Конфигураторе — Администрирование → Журнал регистрации.
  4. Отберите события «Сеанс. Начало» по своему пользователю и сравните время последней записи с запомненным.

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

Из-за скачка времени назад в журнале могут появиться «дыры» и наложения интервалов. Это не повреждение журнала, а след того, что часы сервера переводили.

Время на сервере СУБД: MS SQL и PostgreSQL

Сама 1С не берёт даты документов у СУБД. Но часы сервера баз данных определяют время резервных копий, заданий обслуживания и записей в логах СУБД. При разборе инцидента их приходится сопоставлять с журналом 1С.

Для MS SQL Server:

SELECT SYSDATETIME()       AS local_time,
       SYSUTCDATETIME()    AS utc_time,
       SYSDATETIMEOFFSET() AS with_offset;

Для PostgreSQL:

SELECT now()                         AS transaction_time,
       clock_timestamp()             AS wall_clock,
       current_setting('TimeZone')   AS tz;

Если вы смотрите даты прямо в таблицах базы 1С на MS SQL, не пугайтесь года 4026 вместо 2026. При создании базы обычно задают смещение дат 2000, и платформа хранит все даты со сдвигом на 2000 лет. К часам сервера это отношения не имеет.

Виртуальные машины и служба времени Windows

Большинство серверов 1С сегодня работают в виртуальных машинах. Отсюда главная причина «плавающего» времени: у машины два претендента на роль источника — гипервизор и домен.

ПлатформаКто подводит часыНа что смотреть
Hyper-Vслужба интеграции «Синхронизация времени»w32tm /query /source показывает VM IC Time Synchronization Provider
VMwareVMware Toolsнастройка синхронизации времени с хостом в параметрах ВМ
Proxmox / KVMгостевой агент и chrony внутри ВМchronyc sources, часы хоста

Что обычно происходит:

  • 🔁 Двойная синхронизация. Домен ставит одно время, гипервизор — другое. Часы прыгают туда-сюда.
  • ⏪ Откат снимка. После восстановления ВМ из снимка часы показывают момент снимка до первой синхронизации.
  • 🚚 Миграция между хостами. Если часы хостов разошлись, при переезде ВМ время скачет.
  • 🛌 Пауза ВМ. После снятия с паузы часы отстают на время простоя.

Рекомендация простая: у каждой машины должен быть один источник. Для серверов в домене это иерархия домена, а синхронизацию с хостом отключают. Сам хост тоже синхронизируют с надёжным NTP.

Контроллер домена в виртуальной машине никогда не должен брать время у гипервизора — иначе весь домен вслед за ним уйдёт на время хоста.

Как устранить рассинхронизацию по шагам

Порядок важен: сначала исправляем источник, потом сервер 1С.

  1. Проверьте источник верхнего уровня. В домене это контроллер с ролью PDC-эмулятора. Он должен брать время у внешних NTP-серверов:
    w32tm /config /manualpeerlist:"0.ru.pool.ntp.org,0x8 1.ru.pool.ntp.org,0x8" /syncfromflags:manual /reliable:yes /update
    
  2. Переведите сервер 1С на доменную иерархию (если он в домене):
    w32tm /config /syncfromflags:domhier /update
    Restart-Service w32time
    w32tm /resync /rediscover
    
  3. Отключите синхронизацию с гипервизором для этой ВМ в настройках Hyper-V или VMware.
  4. Для Linux-сервера пропишите источник в /etc/chrony/chrony.conf (или /etc/chrony.conf) строкой server <адрес> iburst, затем systemctl restart chronyd (в Ubuntu служба называется chrony).
  5. Проверьте часовой пояс через w32tm /tz или timedatectl. Пояс меняйте только осознанно.
  6. Сверьте результат способами из разделов выше: команда ОС, обработка в 1С, свежий сеанс в консоли.

Как быть с большим расхождением, если часы ушли на 10–20 минут:

  • ⏩ Сервер отстаёт. Перевод вперёд безопасен для данных, но регламентные задания, которые «проспали» своё время, сработают сразу после перевода.
  • ⏪ Сервер спешит. Перевод назад опаснее. Документы, записанные «из будущего», окажутся позже новых, а последовательности и проверки по дате могут дать странный результат.

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

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

Диагностика: выберите симптом

Частые вопросы

Можно ли перевести время на сервере 1С, не останавливая службу?
Да. Агент сервера 1С перезапускать не обязательно: платформа берёт текущее время у ОС при каждом вызове. Перезапуск нужен, только если меняли часовой пояс и новое значение не подхватилось.
Нужно ли синхронизировать время сервера СУБД с сервером 1С?
Да, хотя 1С и не берёт у СУБД даты документов. Без этого время резервных копий и заданий обслуживания не совпадёт с журналом регистрации, и разбор инцидентов превратится в гадание.
Какое расхождение часов допустимо?
Для учёта — не больше нескольких секунд. Для входа по Kerberos предел по умолчанию 5 минут, дальше аутентификация перестаёт работать.
Почему у пользователей на терминальном сервере время верное, а в документах — нет?
Терминальный сервер — это клиент. Документы получают время рабочего сервера кластера, поэтому проверять нужно его часы и его часовой пояс.
Как часто проверять время на серверах?
Разовая проверка не спасает от дрейфа. Добавьте контроль смещения в систему мониторинга или запланируйте ежедневный запуск w32tm /query /status с записью в лог.