Синхронизация времени на ККМ для 10 версии драйвера Атол
Posted On 2019-06-11
Синхронизация времени на ККМ для 10 версии драйвера Атол
&НаКлиенте
Процедура Синхронизировать(Команда)
fptr = Новый COMОбъект("AddIn.Fptr10");
fptr.setSingleSetting(fptr.LIBFPTR_SETTING_MODEL, Строка(fptr.LIBFPTR_MODEL_ATOL_22F));
fptr.setSingleSetting(fptr.LIBFPTR_SETTING_PORT, Строка(fptr.LIBFPTR_PORT_COM));
fptr.setSingleSetting(fptr.LIBFPTR_SETTING_COM_FILE, "COM5");
fptr.applySingleSettings();
Если fptr.open() < 0 Тогда
Сообщить("Ошибка соединения с ККТ: " + fptr.errorCode() + " [" + fptr.errorDescription() + "]");
Возврат;
КонецЕсли;
fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_SHIFT_STATE);
Если fptr.queryData() < 0 Тогда
Сообщить("Ошибка запроса состояния смены ККТ: " + fptr.errorCode() + " [" + fptr.errorDescription() + "]");
Возврат;
КонецЕсли;
СостояниеСмены = fptr.getParamInt(fptr.LIBFPTR_PARAM_SHIFT_STATE);
Сообщить("Cмена ККТ закрыта: " + ?(СостояниеСмены = fptr.LIBFPTR_SS_CLOSED, "Да", "Нет"));
fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_DATE_TIME);
Если fptr.queryData() < 0 Тогда
Сообщить("Ошибка запроса текущей даты и времени ККТ: " + fptr.errorCode() + " [" + fptr.errorDescription() + "]");
Возврат;
КонецЕсли;
ДатаВремяВККТ = Дата(fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME));
Сообщить("Дата и время в ККТ: " + ДатаВремяВККТ);
ТекДата = ТекущаяДата();
Сообщить("Системные дата и время: " + ТекДата);
ОтклонениеВСекундах = МодульЧисла(ДатаВремяВККТ - ТекДата);
Сообщить("Отклонение от системного времени, сек: " + Формат(ДатаВремяВККТ - ТекДата, "ЧН="));
Если ОтклонениеВСекундах < 10 Тогда
Сообщить("Отклонение времени ККТ от системного не большое (менее 10 сек). Корректировка времени в ККТ не требуется");
ИначеЕсли ОтклонениеВСекундах > 300 Тогда
Сообщить("Отклонение времени ККТ от системного слишком большое (более 300 сек). Корректировка времени в ККТ должна быть выполнена вручную");
ИначеЕсли СостояниеСмены <> fptr.LIBFPTR_SS_CLOSED Тогда
Сообщить("Корректировка времени в ККТ не выполнена, т.к. смена не закрыта.");
Иначе
fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, ТекДата);
Если fptr.writeDateTime() < 0 Тогда
Сообщить("Ошибка установки даты и времени в ККТ: " + fptr.errorCode() + " [" + fptr.errorDescription() + "]");
Возврат;
КонецЕсли;
Сообщить("Системные дата и время записаны в ККТ");
КонецЕсли;
Если fptr.close() < 0 Тогда
Сообщить("Ошибка закрытия соединения с ККТ: " + fptr.errorCode() + " [" + fptr.errorDescription() + "]");
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция МодульЧисла(ИсходноеЧисло)
Если ИсходноеЧисло < 0 Тогда
Возврат -ИсходноеЧисло
Иначе
Возврат ИсходноеЧисло
КонецЕсли;
КонецФункции