Синхронизация времени на ККМ для 10 версии драйвера Атол

Синхронизация времени на ККМ для 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 Тогда
        Возврат -ИсходноеЧисло
    Иначе
        Возврат ИсходноеЧисло
    КонецЕсли;

КонецФункции