Получение точного времени через Яндекс.Время


В данное время Росалкогольрегулирование активно отрабатывает все случаи продажи спиртного после 22-00. И даже законопослушные компании периодически попадают под санкции, вследствие банального несоответствия времени на компьютере с реальным, т.к. данные для отправки в ЕГАИС фиксируются по времени компьютера. Как одно из решений проблемы перед пробитием чека предлагаю сверять время на компьютере и время с сервера точного времени. Алгоритм, естественно, можно использовать и любым другим образом.

Получать время будем с сервера Яндекс.Времени. У меня все объекты находятся в одном часовом поясе, поэтому я получаю данные только по нему. Иначе придется этот параметр также определять.

Для того, чтобы получить код нужного региона в сервисе Яндекс.Времени, добавляю новые часы.

После этого нужно зайти в настройку часов и в меню выбрать «Информер на сайт». В коде информера параметр geoid это и есть наш код региона. Далее в коде в строке «АдресСкрипта» меняем параметр geo на нужный (в примере Томск).

Попытка
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("json");
АдресСервера = "yandex.com";
АдресСкрипта = "/time/sync.json?geo=67";

НТТР = Новый HTTPСоединение(АдресСервера, 443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Ответ = НТТР.Получить(Новый HTTPЗапрос(АдресСкрипта), ИмяФайлаОтвета);

ЧтениеОтвета = Новый ЧтениеJSON;
ЧтениеОтвета.ОткрытьФайл(ИмяФайлаОтвета);

ДанныеОтвета = ПрочитатьJSON(ЧтениеОтвета, Истина);
ЧтениеОтвета.Закрыть();

ВремяСтрокой = Формат(ДанныеОтвета.Получить("time"), "ЧГ=0");
ДатаВремя = ПрочитатьДатуJSON("new Date(" + ВремяСтрокой + ")", ФорматДатыJSON.JavaScript);
Сообщить(ДатаВремя);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

7 Comments

  1. Altair777

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

    Все остальное — от лукавого

    Reply
  2. kotloff

    (1)а если домена нет? не везде он нужен.

    Reply
  3. ipoloskov

    (1) в Мухосранском ООО «Бухнём» контроллера домена может банально не быть.

    Reply
  4. spacecraft

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

    Reply
  5. Requiem

    (3) Игорь все правильно понял, именно для этого решение и сделано

    Reply
  6. Altair777

    (5) учите кoманды DOS!

    net time

    Reply
  7. markers

    Код без использования временных файлов:

    Функция ПолучитьТекущееВремяИзИнтернета(КодЧасовогоПоясаЯндекс = 65) Экспорт
    
    Попытка
    
    АдресСервера = «yandex.ru»;
    АдресСкрипта = «/time/sync.json?geo=» + КодЧасовогоПоясаЯндекс;
    
    НТТР = Новый HTTPСоединение(АдресСервера, 443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    Ответ = НТТР.Получить(Новый HTTPЗапрос(АдресСкрипта));
    
    Если Ответ.КодСостояния <> 200 Тогда
    
    Возврат Неопределено;
    
    КонецЕсли;
    
    ЧтениеОтвета = Новый ЧтениеJSON;
    ЧтениеОтвета.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    
    ДанныеОтвета = ПрочитатьJSON(ЧтениеОтвета, Истина);
    ЧтениеОтвета.Закрыть();
    
    ВремяСтрокой = Формат(ДанныеОтвета.Получить(«time»), «ЧГ=0»);
    Возврат ПрочитатьДатуJSON(«new Date(» + ВремяСтрокой + «)», ФорматДатыJSON.JavaScript);
    
    Исключение
    КонецПопытки;
    
    Возврат Неопределено;
    
    КонецФункции // ПолучитьТекущееВремяИзИнтернета()
    

    Показать

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *