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

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 Ответить
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)