Как настроить часовой пояс сеанса в 1С, если время на клиенте отличается от времени сервера?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет IT и автоматизация бизнеса
← На главную

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

Архитектура работы со временем в платформе 1С

Проанализируем, как платформа 1С разделяет понятия времени и часовых поясов:

  1. Часовой пояс информационной базы — базовый пояс, заданный глобально для всей базы данных с помощью метода УстановитьЧасовойПоясИнформационнойБазы(). Если пояс явно не переопределен, по умолчанию используется системный пояс операционной системы сервера.
  2. Часовой пояс сеанса — контекстный пояс текущего подключения пользователя. Возвращается функцией ЧасовойПоясСеанса() и может переопределяться методом УстановитьЧасовойПоясСеанса().
  3. Системные функции времени: функция ТекущаяДата() на сервере возвращает локальное время операционной системы сервера, в то время как функция ТекущаяДатаСеанса() возвращает текущее время с учетом часового пояса сеанса конкретного пользователя.

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

Программная установка часового пояса сеанса

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

Идентификатор пояса передается в строковом виде (например, "Europe/Moscow", "Asia/Vladivostok", "GMT+05:00"). Полный список доступных платформе идентификаторов можно получить с помощью функции ПолучитьДопустимыеЧасовыеПояса().

Рассмотрим пример алгоритма, который вычисляет разницу между локальным временем клиента и временем сеанса на сервере, после чего применяет смещение:


&НаКлиенте
Процедура СкорректироватьЧасовойПоясСеанса()
    
    // Получаем текущее время на клиенте
    ВремяКлиента = ТекущаяДата();
    
    // Получаем текущее время сеанса с сервера
    ВремяСеансаСервер = ПолучитьВремяСеансаНаСервере();
    
    // Рассчитываем разницу в часах
    СмещениеВЧасах = Окр((ВремяКлиента - ВремяСеансаСервер) / 3600);
    
    Если СмещениеВЧасах = 0 Тогда
        Возврат;
    КонецЕсли;
    
    // Формируем строковый идентификатор часового пояса и применяем его
    Если СмещениеВЧасах > 0 Тогда
        СтрокаПояса = "GMT+" + Формат(СмещениеВЧасах, "ЧЦ=2; ЧВН=");
    Иначе
        СтрокаПояса = "GMT-" + Формат(ABS(СмещениеВЧасах), "ЧЦ=2; ЧВН=");
    КонецЕсли;
    
    УстановитьЧасовойПоясСеансаНаСервере(СтрокаПояса);
    
КонецПроцедуры

&НаСервере
Функция ПолучитьВремяСеансаНаСервере()
    Возврат ТекущаяДатаСеанса();
КонецФункции

&НаСервере
Процедура УстановитьЧасовойПоясСеансаНаСервере(Знач СтрокаПояса)
    УстановитьЧасовойПоясСеанса(СтрокаПояса);
КонецПроцедуры

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

Влияние разных часовых поясов на оперативный учет и проведение документов

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

  1. Раздельные последовательности оперативных отметок времени. При оперативном проведении документов платформа формирует оперативную отметку времени отдельно для каждого часового пояса сеанса. Это гарантирует хронологическую последовательность только внутри одного пояса.
  2. Коллизии в общих регистрах учета. В регистрах 1С реквизиты и измерения типа Дата не содержат данных о часовом поясе. Если филиал во Владивостоке проведет документ реализации в 15:00 по своему времени, а склад в Москве проведет приходную накладную на те же позиции в 10:00 по московскому времени (что физически соответствует 17:00 Владивостока), в базе дата реализации окажется позже даты прихода, если сравнивать числа буквально. Но при межфилиальных операциях или общих складах документ расхода может зафиксироваться раньше документа прихода, что вызовет отрицательные остатки, искажение себестоимости и ошибки при закрытии месяца.
  3. Разделение учета по организациям. Использование разных часовых поясов сеанса методически безопасно только тогда, когда удаленные филиалы ведут обособленный учет (отдельные склады, независимые организации, отсутствие пересечения остатков в реальном времени).

Требования к синхронизации времени (NTP)

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

← На главную