В процессе эксплуатации контрольно-кассовой техники (ККТ) нередко возникает расхождение системного времени компьютера и внутренних часов фискального регистратора. Если расхождение становится критическим или время кассы отстает от времени последнего фискального документа, пробитие чеков блокируется. Разберем, как правильно реализовать установку времени на ККТ из 1С, какие аппаратные и фискальные ограничения необходимо учитывать, а также как корректно обрабатывать время при работе в терминальном режиме (RDP) и в разных часовых поясах.
Прежде чем отправлять команду установки времени на фискальный регистратор, выясним жесткие правила, заложенные в прошивку ККТ и регламентированные требованиями к фискальным накопителям:
Проанализируем распространенную ситуацию: 1С развернута на терминальном сервере в одном регионе (например, Москва, UTC+3), а кассовое место и фискальный регистратор находятся в филиале в другом часовом поясе (например, Новосибирск, UTC+7). Если передавать на ККТ системное время сервера, возникнет ошибка ФФД, так как реквизиты чека должны содержать местное время места расчетов.
Для корректной работы с часовыми поясами в платформе 1С:Предприятие 8 предусмотрены специализированные механизмы:
ТекущаяДатаСеанса() вместо ТекущаяДата(). Функция ТекущаяДатаСеанса() возвращает дату и время с учетом часового пояса, назначенного конкретному сеансу пользователя или филиалу.Посмотрим на пример установки часового пояса сеанса и вычисления корректного времени для фискального регистратора:
// Установка часового пояса сеанса при запуске кассового места
УстановитьЧасовойПоясСеанса("Asia/Novosibirsk");
// Получение времени для синхронизации с ККТ
ВремяДляКассы = ТекущаяДатаСеанса();
В современных версиях интеграционных компонентов (включая ДТО 10 для касс Атол) ручное написание внешних обработок для перевода стрелок часто не требуется. Рассмотрим штатные варианты автоматизации:
Если требуется реализовать синхронизацию времени по кнопке или в рамках регламентной процедуры перед началом дня, разберем по шагам логику обращения к драйверу ККТ из 1С:
ТекущаяДатаСеанса().Посмотрим на типовой алгоритм программной записи времени:
// Пример программной записи даты и времени в ККТ
Если ОбъектДрайвера.СменаОткрыта Тогда
ВызватьИсключение "Синхронизация времени невозможна: кассовая смена открыта!";
КонецЕсли;
АктуальноеВремя = ТекущаяДатаСеанса();
// Заполнение параметров и вызов метода синхронизации даты/времени
ОбъектДрайвера.ДатаВремя = АктуальноеВремя;
Результат = ОбъектДрайвера.ЗаписатьВремя();
Если Не Результат Тогда
ВызватьИсключение "Ошибка записи времени: " + ОбъектДрайвера.ОписаниеОшибки;
КонецЕсли;
Таким образом, для поддержания точного времени на ККТ необходимо сочетать аппаратный контроль (проверка батарейки RTC), корректную настройку часового пояса сеанса в 1С при работе через терминал и выполнение синхронизации строго при закрытой смене.