Откуда 1С берёт время и как добиться, чтобы у всех пользователей оно совпадало

· 9 мин

Содержание

Чтобы часы в 1С показывали верное время, синхронизируйте не саму программу, а компьютеры, на которых она работает. В клиент-серверной базе время берётся с рабочего сервера 1С, в файловой — с компьютера каждого пользователя. Настройка и синхронизация времени сводятся к трём действиям: NTP на всех машинах, верный часовой пояс программы и проверка расхождений.

Своих часов у платформы 1С:Предприятие 8.3 нет. Она спрашивает время у операционной системы. Поэтому отставание на 7 минут у бухгалтера почти всегда лечится в Windows, а не в Конфигураторе.

Как 1С получает время: клиент, сервер и сеанс

Встроенный язык даёт несколько функций времени. От того, какую из них вызывает конфигурация, зависит, чьи часы попадут в документ.

ФункцияЧьё времяГде применяется
ТекущаяДата()Компьютера, где выполняется код: на клиенте — ПК пользователя, на сервере — сервера 1ССтарый код, свои обработки
ТекущаяДатаСеанса()Время сервера, пересчитанное в часовой пояс сеансаТиповые конфигурации на БСП
ТекущаяУниверсальнаяДата()Время UTC без часового поясаОбмены, журналы, интеграции
РабочаяДата()Дата из параметров пользователяПодстановка даты в новые документы

Отсюда два вывода:

  • 🖥️ Клиент-серверный режим. Типовые конфигурации ставят дату документа и время записи по часам сервера 1С. Часы на ПК пользователя влияют меньше, но не исчезают из картины: на них завязаны вход по доменной учётной записи и защищённые соединения.
  • 📁 Файловый режим. Отдельного сервера нет, код «серверной» стороны выполняется на компьютере того, кто открыл базу. Если у пяти бухгалтеров пять разных часов, в базе будет пять разных «сейчас».
  • 🌐 Веб-клиент и публикация на IIS или Apache. Время берётся с сервера, где работает модуль расширения веб-сервера и процессы 1С.

Где ещё в базе живёт время

  • Журнал регистрации пишет время событий по часам сервера.
  • Регламентные задания запускаются по расписанию сервера 1С.
  • Электронная подпись и ЭДО ставят метку времени и проверяют срок действия сертификата по часам машины, где идёт криптография.

Часовой пояс программы и рабочая дата: настройка для всех пользователей сразу

Если сервер стоит в Москве, а бухгалтерия работает в Новосибирске, одной синхронизации мало. Нужно сказать программе, в каком поясе жить всей базе.

Часовой пояс информационной базы

В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3, УТ 11, КА 2) поле часового пояса находится в Администрирование → Общие настройки. Выберите пояс, в котором ведётся учёт, и сохраните. Настройка действует для всех сеансов базы, то есть это и есть групповой режим работы со временем.

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

Пояс меняйте вне рабочего дня. Документы, созданные до и после смены, получат время по разным правилам, а сдвиг на несколько часов около полуночи переносит документ на другие сутки.

Для доработчиков то же самое делается из кода:

// Пояс для всей информационной базы
УстановитьЧасовойПоясИнформационнойБазы("Asia/Novosibirsk");

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

Рабочая дата

Рабочая дата не меняет часы, а подменяет дату, которую программа подставляет в новые документы. Это удобно, когда бухгалтер в октябре вносит сентябрьские накладные.

Настройка находится в параметрах платформы: Главное меню → Сервис → Параметры, поле «Рабочая дата» и флажок использования текущей даты компьютера. Значение хранится у каждого пользователя отдельно.

Не забывайте вернуть текущую дату после ввода «задним числом» — иначе следующие документы тоже уйдут в прошлый месяц.

Синхронизация времени по NTP на серверах и рабочих станциях

Точное время дают NTP-серверы. Цепочка должна быть одна: внешний источник → главный сервер сети → остальные машины.

В домене Active Directory

В домене синхронизация уже встроена. Рабочие станции и серверы сверяют часы с контроллерами домена, а те — с контроллером в роли эмулятора PDC. Вам нужно настроить только его на внешний источник.

На контроллере с ролью эмулятора PDC выполните в командной строке от администратора:

w32tm /config /manualpeerlist:"ntp1.vniiftri.ru,0x8 ntp2.vniiftri.ru,0x8 pool.ntp.org,0x8" /syncfromflags:manual /reliable:yes /update
net stop w32time && net start w32time
w32tm /resync /rediscover

Остальные машины домена оставьте на доменной иерархии. Ручная настройка на сервере 1С внутри домена ломает цепочку и даёт расхождения.

Без домена (рабочая группа, небольшой офис)

На каждой машине, включая сервер 1С, укажите внешний источник той же командой w32tm /config, но без ключа /reliable:yes. Если машин много, выберите один компьютер главным источником и направьте остальные на него.

Сервер 1С на Linux

На современных Ubuntu и Debian ставится chrony:

sudo apt install chrony
# в /etc/chrony/chrony.conf добавить строку:
#   server ntp1.vniiftri.ru iburst
sudo systemctl restart chrony
chronyc tracking
timedatectl

В выводе timedatectl проверьте две строки: правильный часовой пояс и System clock synchronized: yes.

Если в сети заблокирован исходящий UDP-порт 123, ни одна из этих настроек не заработает. Проверьте правила межсетевого экрана до того, как искать проблему в 1С.

Время в 1С отстаёт или спешит: разбор рассинхронизации

Типовые жалобы и их причины укладываются в небольшую таблицу признаков.

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

Как найти, чьи часы врут

  1. На ПК пользователя выполните w32tm /query /status. Строка «Источник» покажет, откуда берётся время. Local CMOS Clock или Free-running System Clock означают, что синхронизации нет.
  2. Сравните часы клиента с сервером 1С: w32tm /stripchart /computer:srv1c /samples:5 /dataonly. В колонке смещения будут секунды расхождения.
  3. Проверьте пояс Windows: tzutil /g. Для Москвы это Russian Standard Time.
  4. В самой 1С сравните ТекущаяДата() и ТекущаяДатаСеанса() через табло отладки или простую внешнюю обработку. Разница больше пары секунд при одинаковом поясе — признак рассинхронизации.

Пользователи работают через терминальный сервер

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

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

Если часы постоянно сбиваются после перезагрузки

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

Какое расхождение времени допустимо

Единого норматива нет. Ориентируйтесь на то, что сломается первым.

Где расходятся часыОриентирЧто будет при превышении
Серверы кластера 1С между собойдо 1 секундыПутаница в журнале регистрации и порядке событий
Сервер 1С и сервер СУБДдо 1 секундыСложно разбирать журналы при расследовании сбоев
Клиент и контроллер доменадо 5 минут (по умолчанию Kerberos)Отказ входа по доменной учётной записи
ПК пользователя в файловой базедо 1 минутыДокументы с одинаковой датой встают в неверном порядке
Любой ПК и интернет-сервисы (ЭДО, обновления)до нескольких минутОшибки сертификатов и меток времени подписи

В нормально настроенной сети w32tm держит расхождение в пределах долей секунды, так что все ориентиры выполняются с запасом.

Скрипты для автоматической корректировки и проверки времени

Разовая синхронизация не спасает: часы снова уплывают. Нужна проверка по расписанию.

Принудительная синхронизация при входе в Windows

Положите bat-файл в автозагрузку или подключите через групповую политику входа:

@echo off
rem Синхронизация часов с источником перед запуском 1С
w32tm /resync /nowait >nul 2>&1

Обычному пользователю команда w32tm /resync может быть запрещена. Тогда лучше поручить синхронизацию службе времени, а не скрипту: она работает от системной учётной записи.

Проверка расхождения с сервером 1С на PowerShell

Скрипт для администратора: опрашивает список компьютеров и показывает смещение каждого относительно сервера.

$server = "srv1c"
$pcs = @("buh01", "buh02", "kassa01")
foreach ($pc in $pcs) {
    $out = w32tm /stripchart /computer:$pc /samples:1 /dataonly
    $line = $out | Select-Object -Last 1
    Write-Output "$pc : $line"
}

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

Корректировка большого сдвига на сервере 1С

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

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

Перезапуск службы w32time сам по себе сеансы 1С не обрывает. Перезапускать службу агента сервера 1С для применения нового времени не нужно.

Как сделать часы на форме 1С

Иногда «сделать часы» означает буквально: вывести тикающее время на форму обработки или рабочего места кассира. Это делается обработчиком ожидания.

  1. В Конфигураторе откройте форму, добавьте реквизит формы Часы типа «Строка».
  2. Перетащите реквизит на форму как поле надписи.
  3. В модуле формы добавьте код:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ОбновитьЧасы();
	ПодключитьОбработчикОжидания("ОбновитьЧасы", 1);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьЧасы()
	Часы = Формат(ТекущаяДатаСеанса(), "ДФ=HH:mm:ss");
КонецПроцедуры

ТекущаяДатаСеанса() на клиенте не обращается к серверу каждую секунду: платформа помнит смещение и пересчитывает время локально. Поэтому такие часы показывают время базы, а не время ПК, и не грузят сервер.

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

Интервал меньше секунды ставить незачем. Часы с секундами всё равно обновляются раз в секунду, а частые вызовы заметно нагружают слабые терминальные серверы.

Частые ошибки при настройке времени

  • ❌ Менять время только на компьютере бухгалтера. В клиент-серверной базе это не исправит время документов, нужен сервер 1С.
  • ❌ Настраивать NTP вручную на каждой машине домена. Ломается доменная иерархия, машины начинают спорить между собой.
  • ❌ Путать часовой пояс и рабочую дату. Пояс сдвигает время для всей базы, рабочая дата меняет только подставляемую дату у одного пользователя.
  • ❌ Держать на виртуальном сервере два источника времени. Время прыгает, в журнале регистрации появляются события «из будущего».
  • ❌ Переводить время сервера в разгар рабочего дня. Порядок документов внутри дня нарушается, а последствия всплывают только при перепроведении.

Частые вопросы о времени в 1С

Влияет ли перевод часов на зимнее или летнее время на 1С?
В России сезонного перевода нет с 2014 года. Важно, чтобы в Windows и Linux были установлены актуальные обновления часовых поясов, иначе пояс может отображаться со старым смещением.
Можно ли запретить пользователю менять время на своём компьютере?
Да, через групповую политику Windows: право «Изменение системного времени» оставляют только администраторам и системным службам. В файловой базе это заметно снижает путаницу с датами документов.
Почему время в журнале регистрации отличается от времени документа?
Журнал регистрации хранит время по часам сервера, а дата документа может быть рабочей датой пользователя или установленной вручную. Совпадать они и не обязаны.
Нужно ли синхронизировать время сервера СУБД?
Да. Время документов 1С берёт не из СУБД, но при разборе сбоев журналы SQL Server или PostgreSQL сопоставляют с технологическим журналом 1С. Расхождение в минуты делает такое сопоставление почти невозможным.
Что делать, если в облачной 1С время не совпадает с моим?
В облачных сервисах сервер управляется провайдером. Проверьте поле часового пояса в общих настройках программы: обычно его можно выбрать под свой регион.