Browse Source

refs #1 Syncronizing with release commit: 74d7111ee8

qt5
parent
commit
c4549aa6ad
6 changed files with 93 additions and 35 deletions
  1. +7
    -0
      3.0/src/includes/Hardware/FR/FRBaseConstants.h
  2. +1
    -1
      3.0/src/modules/Hardware/CashAcceptors/src/SSP/SSPCashAcceptorConstants.h
  3. +2
    -2
      3.0/src/modules/Hardware/FR/src/Atol/Base/AtolFRBase.cpp
  4. +28
    -24
      3.0/src/modules/Hardware/FR/src/Shtrih/Online/ShtrihFROnlineConstants.h
  5. +49
    -8
      3.0/src/modules/Hardware/FR/src/Shtrih/Online/ShtrihOnlineFRBase.cpp
  6. +6
    -0
      3.0/src/modules/Hardware/FR/src/Shtrih/Online/ShtrihOnlineFRBase.h

+ 7
- 0
3.0/src/includes/Hardware/FR/FRBaseConstants.h View File

@@ -374,6 +374,13 @@ namespace CFR
static CPayOffSubjectTypes PayOffSubjectTypes;
typedef QSet<SDK::Driver::EPayOffSubjectTypes::Enum> TPayOffSubjectTypes;
/// Признаки предмета расчета, работа с которыми невозможна с ФН 36 месяцев и СНО == ОСН.
const TPayOffSubjectTypes PayOffSubjectTypesNo36 = TPayOffSubjectTypes()
<< SDK::Driver::EPayOffSubjectTypes::Unit
<< SDK::Driver::EPayOffSubjectTypes::AgentFee;
//--------------------------------------------------------------------------------
/// Типы систем налогообложения (1062, 1055)
class CTaxSystems : public CBitmapDescription<char>


+ 1
- 1
3.0/src/modules/Hardware/CashAcceptors/src/SSP/SSPCashAcceptorConstants.h View File

@@ -67,7 +67,7 @@ namespace CSSP
const SWaitingData NotReadyWaiting = SWaitingData(150, 1000);
/// Ожидание готовности, [мс].
const SWaitingData ReadyWaiting = SWaitingData(150, 5 * 1000);
const SWaitingData ReadyWaiting = SWaitingData(150, 15 * 1000);
/// Виртуальный статус Enabled.
const char EnabledStatus[] = "Enabled status";


+ 2
- 2
3.0/src/modules/Hardware/FR/src/Atol/Base/AtolFRBase.cpp View File

@@ -1502,8 +1502,8 @@ ESessionState::Enum AtolFRBase::getSessionState()
return ESessionState::Closed;
}
QString dateDataTime = data.mid(3, 6).toHex().prepend("20");
QDateTime currentDT = QDateTime::fromString(dateDataTime, CAtolFR::DateTimeFormat);
QString dateTimeData = data.mid(3, 6).toHex().prepend("20");
QDateTime currentDT = QDateTime::fromString(dateTimeData, CAtolFR::DateTimeFormat);
QDateTime lastSessionDT;
if (!currentDT.isValid() || !getLastSessionDT(lastSessionDT))


+ 28
- 24
3.0/src/modules/Hardware/FR/src/Shtrih/Online/ShtrihFROnlineConstants.h View File

@@ -103,6 +103,7 @@ namespace CShtrihOnlineFR
const SData PrintUserData = SData(12, 17); /// Печатать реквизиты [суб]дилера.
const SData FFDFR = SData(17, 17); /// ФФД ФР.
const SData PrintCustomFields = SData(25, 17); /// Автопечать тегов, вводимых на платеже.
const SData SetCustomFields = SData(28, 17); /// Установка тегов, вводимых на платеже.
const SData SerialNumber = SData( 1, 18); /// Серийный номер.
const SData INN = SData( 2, 18); /// ИНН.
const SData RNM = SData( 3, 18); /// РНМ.
@@ -140,6 +141,9 @@ namespace CShtrihOnlineFR
const SData IOErrors = SData( 5, 14); /// Количество ошибок чтения/записи.
const SData RetryCount = SData( 6, 14); /// Количество попыток доступа (?).
}
/// Не передавать признак предмета расчета в ФН на платеже.
const char DontSendPayOffSubjectType = 0x20;
}
/// Параметры автообновления.
@@ -194,30 +198,30 @@ namespace CShtrihOnlineFR
add('\x01', "Неизвестная команда, неверный формат посылки или неизвестные параметры");
add('\x02', "Неверное состояние ФН");
add('\x03', "Ошибка ФН", EType::FS);
add('\x04', "Ошибка КС", EType::FS);
add('\x05', "Закончен срок эксплуатации ФН", EType::FS);
add('\x06', "Архив ФН переполнен", EType::FS);
add('\x07', "ФН Неверные дата и/или время", EType::FS);
add('\x08', "Нет запрошенных данных", EType::FS);
add('\x09', "Некорректное значение параметров команды", EType::FS);
add('\x10', "Превышение размеров TLV данных", EType::FS);
add('\x11', "Нет транспортного соединения", EType::FS);
add('\x12', "ФН Исчерпан ресурс КС", EType::FS);
add('\x14', "ФН Исчерпан ресурс хранения", EType::FS);
add('\x15', "ФН Исчерпан ресурс ожидания передачи сообщения", EType::FS);
add('\x03', "Ошибка ФН", EType::FS);
add('\x04', "Ошибка КС", EType::FS);
add('\x05', "Закончен срок эксплуатации ФН", EType::FS);
add('\x06', "Архив ФН переполнен", EType::FS);
add('\x07', "ФН Неверные дата и/или время");
add('\x08', "Нет запрошенных данных");
add('\x09', "Некорректное значение параметров команды");
add('\x10', "Превышение размеров TLV данных");
add('\x11', "Нет транспортного соединения");
add('\x12', "ФН Исчерпан ресурс КС", EType::FS);
add('\x14', "ФН Исчерпан ресурс хранения");
add('\x15', "ФН Исчерпан ресурс ожидания передачи сообщения");
add('\x16', "ФН Продолжительность смены более 24 часов");
add('\x17', "ФН Неверная разница во времени между 2 операцими");
add('\x20', "ФН Сообщение от ОФД не может быть принято");
add('\x2F', "Таймаут обмена с ФН", EType::FS);
add('\x30', "ФН не отвечает", EType::FS);
add('\x2F', "Таймаут обмена с ФН", EType::FS);
add('\x30', "ФН не отвечает", EType::FS);
add('\x33', "Некорректные параметры в команде");
add('\x34', "Нет данных");
add('\x35', "Некорректный параметр при данных настройках");
add('\x36', "Некорректные параметры в команде для данной реализации ККТ");
add('\x37', "Команда не поддерживается в данной реализации ККТ");
add('\x38', "Ошибка в ПЗУ");
add('\x39', "Внутренняя ошибка ПО ККТ");
add('\x38', "Ошибка в ПЗУ", EType::FR);
add('\x39', "Внутренняя ошибка ПО ККТ", EType::FR);
add('\x3A', "Переполнение накопления по надбавкам в смене");
add('\x3C', "Смена открыта – операция не возможна");
add('\x3D', "Смена не открыта – операция не возможна");
@@ -261,7 +265,7 @@ namespace CShtrihOnlineFR
add('\x66', "Переполнение денег в секции");
add('\x68', "Не хватает денег по обороту налогов");
add('\x69', "Переполнение денег по обороту налогов");
add('\x6A', "Ошибка питания в момент ответа по I2C");
add('\x6A', "Ошибка питания в момент ответа по I2C", EType::FR);
add('\x6B', "Нет чековой ленты");
add('\x6D', "Не хватает денег по налогу");
add('\x6E', "Переполнение денег по налогу");
@@ -269,12 +273,12 @@ namespace CShtrihOnlineFR
add('\x71', "Ошибка отрезчика");
add('\x72', "Команда не поддерживается в данном подрежиме");
add('\x73', "Команда не поддерживается в данном режиме");
add('\x74', "Ошибка ОЗУ");
add('\x75', "Ошибка питания");
add('\x77', "Ошибка принтера: нет сигнала с датчиков");
add('\x78', "Замена ПО");
add('\x74', "Ошибка ОЗУ", EType::FR);
add('\x75', "Ошибка питания", EType::FR);
add('\x77', "Ошибка принтера: нет сигнала с датчиков", EType::FR);
add('\x78', "Замена ПО", EType::FR);
add('\x7A', "Поле не редактируется");
add('\x7B', "Ошибка оборудования");
add('\x7B', "Ошибка оборудования", EType::FR);
add('\x7C', "Не совпадает дата");
add('\x7D', "Неверный формат даты");
add('\x7E', "Неверное значение в поле длины");
@@ -296,10 +300,10 @@ namespace CShtrihOnlineFR
add('\x93', "Восстановление ОЗУ прошло успешно");
add('\x94', "Исчерпан лимит операций в чеке");
add('\xC0', "Контроль даты и времени (подтвердите дату и время)");
add('\xC2', "Превышение напряжения в блоке питания");
add('\xC2', "Превышение напряжения в блоке питания", EType::FR);
add('\xC4', "Несовпадение номеров смен");
add('\xC7', "Поле не редактируется в данном режиме");
add('\xC8', "Нет связи с принтером или отсутствуют импульсы от таходатчика");
add('\xC8', "Нет связи с принтером или отсутствуют импульсы от таходатчика", EType::Printer);
}
};
}


+ 49
- 8
3.0/src/modules/Hardware/FR/src/Shtrih/Online/ShtrihOnlineFRBase.cpp View File

@@ -23,6 +23,8 @@ ShtrihOnlineFRBase<T>::ShtrihOnlineFRBase()
mOFDFiscalParameters.remove(CFR::FiscalFields::Cashier);
mOFDFiscalParameters.remove(CFR::FiscalFields::TaxSystem);
mNeedReceiptProcessingOnCancel = true;
mSetCustomFields = ASCII::NUL;
mSetCustomFieldsCorrect = false;
setConfigParameter(CHardwareSDK::FR::CanWithoutPrinting, true);
@@ -105,6 +107,16 @@ bool ShtrihOnlineFRBase<T>::updateParameters()
}
QByteArray data;
mSetCustomFieldsCorrect = getFRParameter(CShtrihOnlineFR::FRParameters::SetCustomFields, data) && !data.isEmpty();
if (!mSetCustomFieldsCorrect)
{
toLog(LogLevel::Error, mDeviceName + ": Cannot get custom fields data");
}
else
{
mSetCustomFields = data[0];
}
if (getFRParameter(CShtrihOnlineFR::FRParameters::AutomaticNumber, data) && !clean(data).isEmpty())
{
@@ -493,13 +505,6 @@ bool ShtrihOnlineFRBase<T>::sale(const SUnitData & aUnitData, EPayOffTypes::Enum
QByteArray sum = getHexReverted(aUnitData.sum, 5, 2);
QString name = aUnitData.name;
bool isFS36Result = isFS36();
bool noPayOffSubjectType = (mFFDFS <= EFFD::F105) && isFS36Result * mFiscalServerPresence;
char payOffSubjectType = char(aUnitData.payOffSubjectType) * !noPayOffSubjectType;
toLog(LogLevel::Normal, QString("--- sale: mFFDFS = %1, isFS36() = %2, mFiscalServerPresence = %3, noPayOffSubjectType = %4, payOffSubjectType = %5")
.arg(int(mFFDFS)).arg(isFS36Result ? "true" : "false").arg(mFiscalServerPresence ? "true" : "false").arg(noPayOffSubjectType ? "true" : "false").arg(int(payOffSubjectType)));
QByteArray commandData;
commandData.append(char(aPayOffType)); // тип операции (1054)
commandData.append(getHexReverted(1, 6, 6)); // количество (1023)
@@ -509,7 +514,7 @@ bool ShtrihOnlineFRBase<T>::sale(const SUnitData & aUnitData, EPayOffTypes::Enum
commandData.append(taxIndex); // налоговая ставка
commandData.append(section); // отдел
commandData.append(char(aUnitData.payOffSubjectMethodType)); // признак способа расчета (1214)
commandData.append(payOffSubjectType); // признак предмета расчета (1212)
commandData.append(char(aUnitData.payOffSubjectType)); // признак предмета расчета (1212)
commandData.append(mCodec->fromUnicode(name)); // наименование товара (1030)
if (!processCommand(CShtrihOnlineFR::Commands::FS::Sale, commandData))
@@ -568,6 +573,42 @@ bool ShtrihOnlineFRBase<T>::performFiscal(const QStringList & aReceipt, const SP
}
}
if (mSetCustomFieldsCorrect && isFS36() && (aPaymentData.taxSystem == ETaxSystems::Main))
{
QStringList noPayLog;
foreach (const SUnitData & unitData, aPaymentData.unitDataList)
{
if (CFR::PayOffSubjectTypesNo36.contains(unitData.payOffSubjectType))
{
noPayLog << QString("%1 (%2, %3)").arg(unitData.name).arg(unitData.sum).arg(CFR::PayOffSubjectTypes[char(unitData.payOffSubjectType)]);
}
}
char newSetCustomFields = mSetCustomFields | CShtrihOnlineFR::FRParameters::DontSendPayOffSubjectType;
if (!noPayLog.isEmpty() && (mSetCustomFields != newSetCustomFields))
{
QString log = mDeviceName + QString(": Failed to make fiscal document due to cannot sale unit(s): %1, because ").arg(noPayLog.join("; "));
if (mFFDFS > EFFD::F105)
{
toLog(LogLevel::Error, log + QString("FFD FS = %1 > 1.05").arg(CFR::FFD[mFFDFS].description));
return false;
}
else if (!mFiscalServerPresence)
{
toLog(LogLevel::Error, log + "it is not fiscal server");
return false;
}
else if (!setFRParameter(CShtrihOnlineFR::FRParameters::SetCustomFields, newSetCustomFields))
{
toLog(LogLevel::Error, log + "impossible to set custom fields data");
return false;
}
}
}
if (!ShtrihFRBase<T>::performFiscal(aReceipt, aPaymentData))
{
return false;


+ 6
- 0
3.0/src/modules/Hardware/FR/src/Shtrih/Online/ShtrihOnlineFRBase.h View File

@@ -91,6 +91,12 @@ protected:
/// Невозможно включить автообновление прошивки.
bool mNotEnableFirmwareUpdating;
/// Параметр установки определенных фискальных тегов.
char mSetCustomFields;
/// Корректность значения параметра установки определенных фискальных тегов.
bool mSetCustomFieldsCorrect;
};
typedef ShtrihOnlineFRBase<ShtrihTCPFRBase> ShtrihOnlineTCPFR;


Loading…
Cancel
Save