Сихронизация времени на ККМ Атол #807416


#0 by php5
Добрый день! ККМ Атол 22Ф (~50 шт.) подключены по ip к "Рознице, редакция 2.2". Постоянно имеются расхождения по времени на минуты, хотелось бы реализовать синхронизацию времени перед открытием смены, но в интеграционной компоненте нет метода установки времени. Если с ККМ работать напрямую, через драйвер АТОЛ, то там есть метод SetTime, но не могу понять как подключиться к нужной ККМ через IP. Кто-нибудь сталкивался с подобной проблемой и как решали?
#1 by php5
Путем опытов, получилось так, это черновик:         Сообщить("Смена открыта, время изменить нельзя!");
#2 by Woldemar177
Молодец, нашел, сохраню к себе в бложик.
#3 by mehfk
Прямо так с тремя вподряд идущими ТекущаяДата ?
#4 by Woldemar177
И даже с таким IP адресом.
#5 by isa2net
В Program Files ATOLDrivers8Samples примеры и там ECR = new ActiveXObject ("AddIn.FPrnM45");
#6 by Сияющий в темноте
В новый год данный код может показать себя во всей красе
#7 by
26-03-2019

Procedure CheckDate(ip:String); var dt:TDateTime; H,Min,S,ms,Y,M,D: Word; smena:String; ECR: OleVariant; Begin

// ECR.DeviceEnableTimeout:=1000; ECR.DeviceEnabled := False; ECR.PortNumber:=99; // TCP/IP ECR.HostAddress:=ip+':5555';

// занимаем порт ECR.DeviceEnabled := true; if ECR.ResultCode <> 0 then Begin ECR.DeviceEnabled := False; Log(ip+' not connected'); form1.Memo1.Lines.Append(DateTimeToStr(now)+' не удалось соединиться с '+ip); Exit; End;

// получаем состояние ККМ if ECR.GetStatus <> 0 then Begin // Result:='Ошибка='+inttostr(ECR.ECRError)+' '+ECR.ECRErrorDescription; ECR.DeviceEnabled := False; Log(ip+' '+'Ошибка='+inttostr(ECR.ECRError)+' '+ECR.ECRErrorDescription); form1.Memo1.Lines.Append(DateTimeToStr(now)+' '+ip+' Ошибка='+inttostr(ECR.ECRError)+' '+ECR.ECRErrorDescription); Exit; End;

Log('Соединились c '+ip);

dt:=EncodeTime(ECR.Hour,ECR.Minute,ECR.Second,0)+EncodeDate(ECR.Year,ECR.Month,ECR.Day);

// form1.Memo1.Lines.Append(ip+' Разница '+inttostr(minutesbetween(dt,now))+' min. 1');

// if MinutesBetween(dt,now)>1 then if secondsBetween(dt,now)>30 then Begin if ECR.SessionOpened then smena:='смена открыта пропускаем!' else smena:='изменяем!'; Log(ip+' Разница '+inttostr(secondsBetween(dt,now))+' сек.! '+smena+' FD='+DateTimeToStr(dt)); form1.Memo1.Lines.Append(DateTimeToStr(now)+' '+ip+' Разница '+inttostr(secondsBetween(dt,now))+' сек.! '+smena+' FD='+DateTimeToStr(dt));

 if not ECR.SessionOpened then // Если смена закрыта, то пробуем изменить дату и время.
Begin
if EncodeDate(ECR.Year,ECR.Month,ECR.Day)<>date Then // если дата не совпадает с текущей.
Begin
Log(ip+' Устанавливаем сегодняшнюю дату.');
form1.Memo1.Lines.Append(DateTimeToStr(now)+' '+ip+' Устанавливаем сегодняшнюю дату.');
DecodeDate(now,Y,M,D);
ECR.Day := D;
ECR.Month := M;
ECR.Year := Y;
ECR.SetDate;
Log(ip+' Установили.');
form1.Memo1.Lines.Append(DateTimeToStr(now)+' '+ip+' Установили дату.');
End; Log(ip+' Устанавливаем текущее время.');
form1.Memo1.Lines.Append(DateTimeToStr(now)+' '+ip+' Устанавливаем текущее время.');
DecoDeTime(NOW,H,Min,S,ms);
ECR.Hour := H;
ECR.Minute := Min;
ECR.Second := S;
ECR.SetTime;
form1.Memo1.Lines.Append(DateTimeToStr(now)+' '+ip+' Установили время.');
End;
End else Log(ip+' '+DateTimeToStr(dt)+' ('+IntToStr(secondsBetween(dt,now))+' сек.) разница небольшая. не меняем.');

ECR.DeviceEnabled := False; End;

Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С