Получение даты ККМ и ее изменение

1. olololeg 31.07.20 09:10 Сейчас в теме
Приветствую шаманы!
Суть задачи проверить время на ККМ, если оно не сходиться с текущем временем, тогда меняем дату и время на ККМ.
Возникла такая проблема:
//Подключаюсь к драйверу
Компонента = "AddIn.DrvFR";

ПодключитьВнешнююКомпоненту(Компонента);
ДрайверККТ = Новый (Компонента);
//Получаю состояние, что бы в ДрайверККТ появилось время, иначе дата 31.12.1899, время 00:00:00
ДрайверККТ.ПолучитьСостояниеККМ();

//Получаю время	
Час     = Формат(Час( ТекущаяДата() )    ,"ЧЦ=2; ЧВН=");
Минута  = Формат(Минута( ТекущаяДата() ) ,"ЧЦ=2; ЧВН=");
Секунда = Формат(Секунда( ТекущаяДата() ),"ЧЦ=2; ЧВН=");

//Из драйвера получаю время	
ВремяККМ = Дата(Формат(ДрайверККТ.Дата,"ДФ=dd.MM.yyyy") + " " + Формат(ДрайверККТ.Время,"ДЛФ=T")); 

//Вывожу время для проверки
Сообщить(Формат(ДрайверККТ.Дата,"ДФ=dd.MM.yyyy") + " " + Формат(ДрайверККТ.Время,"ДЛФ=T"));
//Если время в драйвере отличается от текущего, тогда меняю
Если ВремяККМ <> ТекущаяДата() Тогда	
	ДрайверККТ.Время = Дата("18991230" + Час + Минута + Секунда);
	ДрайверККТ.Дата  = НачалоДня(ТекущаяДата());
	//Устанавливаем время
        ДрайверККТ.SetTime();
КонецЕсли;
//Для проверки измененного времени выводим сообщение
Сообщить(Формат(ДрайверККТ.Дата,"ДФ=dd.MM.yyyy") + " " + Формат(ДрайверККТ.Время,"ДЛФ=T"));
Показать

Но время не изменилось( Пожалуйста дорогие коллеги, читатели, да просто люди добрые помогите! Как решить проблему и записать на ККМ нужное время? Всем откликнувшимся "+" в карму.
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. M_A_D 184 31.07.20 09:53 Сейчас в теме
Я не уверн в своих суждениях, но это может быть правдой)))

Мы используем VikiPrint 57Ф и есть один нюанс, если на ККТ уже открыта смена, то поменять время нельзя, время меняется только при условии закрытой смены....
3. olololeg 31.07.20 10:18 Сейчас в теме
(2)Вы абсолютно правы, по этому я получаю до открытия, при этом он даже время меняет в рамках выполнения процедуры, но при повторном обращении, когда я пытаюсь вновь прочитать данные через метод ПолучитьСостояниеККМ() у меня появляются старые значения(
4. user1357043 31.07.20 10:20 Сейчас в теме
(3)Может быть проблема в том, что касса онлайн и синхронизирует время с интернетом? какая разница во времени между кассой и компьютером (в смысле ровно часы или минуты)? Попробуйте ради интереса отключить кассу от интернета и проверить, меняется время или нет.
5. M_A_D 184 31.07.20 10:39 Сейчас в теме
(4)
на сколько я знаю касса, хоть и называется ОНЛАЙН, но она ничего не получает из интернета, она только передает туда информацию)))


(3)А попробуйте в "Сообщить" вывести не функцию получения времени, а "Время ККМ", может быть там собака зарыта?
Если он в эту переменную не верные значения передает, то именно поэтому у вас и не меняется время.
6. olololeg 31.07.20 10:40 Сейчас в теме
(4)Вчера на тестах уже было около 30 мин, по идее эта довольно частая проблема, увы я так и не нашел решения, изначально вообще не мог получить дату и время, всегда было 31.12.1899 00:00:00, после получения состояния ккм вроде появились даты, может я вообще не правильно их получаю и есть рабочий способ
7. M_A_D 184 31.07.20 10:43 Сейчас в теме
(6)
Прямо тут же на форуме нашел вот такое решение:
На Атол 55Ф работает:

Процедура  ДанныДляОтправкиПоКассе()  
    
        //Синхронизируем время
        Попытка
            // Загрузка внешней компоненты
            ВнешняяКомпонента = "AddIn.FPrnM8";
            ПодключитьВнешнююКомпоненту(ВнешняяКомпонента);             
            
            //ПодключитьВнешнююКомпоненту("AddIn.ATOL_KKM_1C");            
            Попытка
                // Создание объекта      
                Драйвер = Новый (ВнешняяКомпонента);                   
            Исключение
                
            КонецПопытки;
        Исключение
            Возврат;
        КонецПопытки;      
        
        
            Попытка
                //Подключаемся к кассе
                //Параметры можно посмотреть в логгах кассы
                Драйвер.AddDevice();   
                Драйвер.PortNumber = Касса.Порт;//порт кассы;
                //Драйвер.BaudRate = Касса.Скорость;//Объект.Параметры.Скорость;
                // параметры выше (порт, скорость) можно вычитать в файле логов
                // FprnM1C.log или FprnM1C82.log, в папке C:\Users\user\AppData\Roaming\ATOL\DRIVERS
                // например - сначала сделав тест устройства из 1С (появятся записи в логах, вы увидите все значения полей
                // в последних строках файла логов )
                Драйвер.DeviceEnabled = 1;
                Драйвер.Password = Касса.Пароль; //Пароль Пользователя кассы
                
                //Устанавливаем время
                Драйвер.Режим = 0;    
                Драйвер.SetMode();
                Драйвер.Hour = Строка(Час(ТекущаяДата()));
                Драйвер.Minute = Строка(Минута(ТекущаяДата()));     
                Драйвер.Second = Строка(Секунда(ТекущаяДата()));
                РезультатУстановкиВремени = Драйвер.SetTime();                 
                        
                Если   РезультатУстановкиВремени = 0 Тогда
                    //Все нормально, время установленно
                    
                Иначе
                    //Время не установленно                
                КонецЕсли;
                //Отключаемся
                Драйвер.DeviceEnabled = 0; //на последние строки драйвер атола ругался на
                Драйвер.DeleteDevice();    //последовательность команд (но только в логах, юзер этого не видит) 
            Исключение
                
            КонецПопытки;           
                   
        
        Драйвер.DeviceEnabled = 0; //на последние строки драйвер атола ругался на
        Драйвер.DeleteDevice();    //последовательность команд (но только в логах, юзер этого не видит) 
        
        Драйвер = 0;    //Незнаю зачем, нашел в чужом коде      
        
            
КонецПроцедуры
Показать
8. M_A_D 184 31.07.20 10:46 Сейчас в теме
(6)
Думаю ошибку можно сразу увидеть.
АТОЛы требуют установить флаг. что устройство включено, и на этапе:
" Драйвер.DeviceEnabled = 1;"
Исполняется этой действие, у вас этот момент упущен, вероятно именно тут и проблема, ведь в таком случае, данные передаются, но касса не принимает эти данные....
Извечная проблема с Атолом)
olololeg; +1 Ответить
9. olololeg 31.07.20 10:59 Сейчас в теме
(8)Спасибо, протестирую отвечу, у меня Штрих, но думаю, вполне может быть такая же проблема. По поводу теста сейчас какая картина у меня вырисовывается:
Подключаю драйвер на нем дата и время 31.12.1899 00:00:00
Компонента = "AddIn.DrvFR";

ПодключитьВнешнююКомпоненту(Компонента);
ДрайверККТ = Новый (Компонента);

Далее получаю состояние получаю 31.07.2020 11:19:31
ДрайверККТ.ПолучитьСостояниеККМ();

Устанавливаю текущую дату 31.07.2020 10:47:31
ДрайверККТ.SetTime();


Далее снова делаю проверку, также подключаюсь к драйверу, но на нем время которое я установил 31.07.2020 10:47:31, а при получении состояния меняется на 31.07.2020 11:19:31 (ну плюс время выполнения).

Буду пробовать делать по вашему способу с Атолом, а то вариантов уже перепробовал массу, но результата особого нет(
10. muskul 03.08.20 02:39 Сейчас в теме
время можно поменять только на закрытой смене
olololeg; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот