Часы сервера 1С расходятся с рабочими местами: где смотреть и как выровнять
Содержание
Проверить время на сервере 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С:Предприятия не показывает «часы сервера» напрямую. Но время можно вычислить по сеансам.
Консоль администрирования
- Откройте консоль и разверните
Кластеры → <ваш кластер> → Информационные базы → <база> → Сеансы. - Только что войдите в базу с любого рабочего места.
- Найдите свой сеанс в списке и посмотрите время его начала и последней активности.
- Сравните с часами на своём ПК в момент входа.
Время в консоли формирует кластер, поэтому заметное расхождение с вашими часами означает, что спешат или отстают часы сервера (или ваши — проверьте их по точному источнику).
Если консоль не открывается с ошибкой про класс или 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С.
Как использовать это для диагностики:
- Посмотрите на часы своего ПК, сверенные с точным источником, и запомните время.
- Сразу войдите в базу.
- Откройте журнал: в БП 3.0 и ЗУП 3.1 —
Администрирование → Обслуживание → Журнал регистрации, в Конфигураторе —Администрирование → Журнал регистрации. - Отберите события «Сеанс. Начало» по своему пользователю и сравните время последней записи с запомненным.
Журнал полезен и задним числом. Если пользователи жалуются, что «документы встали не туда», найдите записи, где время идёт назад: начало более позднего сеанса записано раньше, чем у предыдущего. Так выглядит ручная перестановка часов или резкий скачок после синхронизации.
Из-за скачка времени назад в журнале могут появиться «дыры» и наложения интервалов. Это не повреждение журнала, а след того, что часы сервера переводили.
Время на сервере СУБД: 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 |
| VMware | VMware Tools | настройка синхронизации времени с хостом в параметрах ВМ |
| Proxmox / KVM | гостевой агент и chrony внутри ВМ | chronyc sources, часы хоста |
Что обычно происходит:
- 🔁 Двойная синхронизация. Домен ставит одно время, гипервизор — другое. Часы прыгают туда-сюда.
- ⏪ Откат снимка. После восстановления ВМ из снимка часы показывают момент снимка до первой синхронизации.
- 🚚 Миграция между хостами. Если часы хостов разошлись, при переезде ВМ время скачет.
- 🛌 Пауза ВМ. После снятия с паузы часы отстают на время простоя.
Рекомендация простая: у каждой машины должен быть один источник. Для серверов в домене это иерархия домена, а синхронизацию с хостом отключают. Сам хост тоже синхронизируют с надёжным NTP.
Контроллер домена в виртуальной машине никогда не должен брать время у гипервизора — иначе весь домен вслед за ним уйдёт на время хоста.
Как устранить рассинхронизацию по шагам
Порядок важен: сначала исправляем источник, потом сервер 1С.
- Проверьте источник верхнего уровня. В домене это контроллер с ролью PDC-эмулятора. Он должен брать время у внешних NTP-серверов:
w32tm /config /manualpeerlist:"0.ru.pool.ntp.org,0x8 1.ru.pool.ntp.org,0x8" /syncfromflags:manual /reliable:yes /update - Переведите сервер 1С на доменную иерархию (если он в домене):
w32tm /config /syncfromflags:domhier /update Restart-Service w32time w32tm /resync /rediscover - Отключите синхронизацию с гипервизором для этой ВМ в настройках Hyper-V или VMware.
- Для Linux-сервера пропишите источник в
/etc/chrony/chrony.conf(или/etc/chrony.conf) строкойserver <адрес> iburst, затемsystemctl restart chronyd(в Ubuntu служба называетсяchrony). - Проверьте часовой пояс через
w32tm /tzилиtimedatectl. Пояс меняйте только осознанно. - Сверьте результат способами из разделов выше: команда ОС, обработка в 1С, свежий сеанс в консоли.
Как быть с большим расхождением, если часы ушли на 10–20 минут:
- ⏩ Сервер отстаёт. Перевод вперёд безопасен для данных, но регламентные задания, которые «проспали» своё время, сработают сразу после перевода.
- ⏪ Сервер спешит. Перевод назад опаснее. Документы, записанные «из будущего», окажутся позже новых, а последовательности и проверки по дате могут дать странный результат.
Крупную коррекцию времени назад делайте вне рабочих часов. Предупредите пользователей: если после коррекции придётся перезапускать службу агента сервера 1С, все сеансы оборвутся и несохранённые данные пропадут. После перевода проверьте документы, записанные в период ошибки, и при необходимости перепроведите их в порядке реальных событий.
Перед перезапуском службы сервера 1С или перезагрузкой ВМ убедитесь, что в базах нет активных сеансов, а свежая резервная копия есть.
Частые вопросы
Можно ли перевести время на сервере 1С, не останавливая службу?
Нужно ли синхронизировать время сервера СУБД с сервером 1С?
Какое расхождение часов допустимо?
Почему у пользователей на терминальном сервере время верное, а в документах — нет?
Как часто проверять время на серверах?
w32tm /query /status с записью в лог.