Прокидывание сообщения от драйвера нижнего уровня без "обвязки"

На данный момент сообщение об ошибке, пришедшей от фискального регистратора, содержит примерно такой текст: "Ошибка (<имя драйвера нижнего уровня>, <код ошибки>). <Детализация ошибки>", где <код ошибки> как правило равен 200(логическая ошибка), в этом случае <Детализация ошибки> это "Логическая ошибка (0xC8): <внутренний текст ошибки>". На английском то же самое при коде 200: "Error ((<имя драйвера нижнего уровня>, 200). Logical error (0xC8): <внутренний текст ошибки>". Формируется этот текст ошибки через 2 форматные строки, которые переводятся и могут быть изменены в файлах перевода.

Когда драйвер правильно настроен и нет багов в подготовке данных для печати, то практически все ошибки которые могут возникнуть - это ошибка с кодом 200, тогда всё кроме <внутренний текст ошибки> является лишней информацией. Поэтому возникает желание оставить только <внутренний текст ошибки>, это можно сделать с помощью перевода 2 форматных строк:

  • Формат ошибки "Error (%0:s, %1:d). %2:s" → "%2:s"
  • Формат детализации ошибки "UniFrErrorFormat^%s (0x%2.2X): %s" → "%2:s"

Коды ошибок

Предопределены следующие коды ошибок, их описание переводится:

  • Универсальные ОШИБКИ ИНИЦИАЛИЗАЦИИ: 1..99
    •     errPortAlreadyUsed=1: 'Port is busy' → Порт уже используется
    •     errIllegalOS=2: 'Other OS' → Не та OS
    •     errProtocolNotSupported=3: 'Required protocol is not supported' → Запрашиваемый протокол не поддерживается
    •     errFunctionNotSupported=4: 'Driver function is not supported by the fiscal register' → Функция драйвера не поддерживается фискальным регистратором
    •     errInvalidHandle=5: 'Invalid handle' → Недопустимый дескриптор
    •     errPortOpenError=6: 'Error opening port' → Ошибка открытия порта
    •     errPortBadBaud=7: 'Invalid speed for the port' → Недопустимая скорость для порта
    •     errInternalException=8: 'Unexpected interrupt (internal error)'
    •     errExtPrintError=9: 'External printing error'
  •     //Универсальные ОШИБКИ НИЗКОГО УРОВНЯ: 100..199
    •     errLowNotReady=101: 'Device is not ready to receive command. Timeout expired' → Устройство не готово принять команду. Таймаут ожидания
    •     errLowSendError=102: 'Receive error of the command for the device' → Устройство отвечает ошибкой приёма команды
    •     errLowAnswerTimeout=103: 'Device does not answer to the command' → Устройство не отвечает на команду
    •     errLowInactiveOnExec=104: 'Device does not answer checking capacity to work after sending the command' → Устройство не отвечает на проверку работоспособности после отправки команды
    •     errLowBadAnswer=105: 'Device answers by trash (and repeat is impossible or does not help)' → Устройство отвечает мусором (и невозможно повторить или повтор не помог)
    •     errLowInternalError=106: 'Internal error'
  •     //ЛОГИЧЕСКИЕ ОШИБКИ: 200..299
    •     errLogicError=200: 'Logical error' → Логическая ошибка
    •     errLogic24hour=201: 'Duration of the shift has exceeded the maximum' → Смена превысила максимальную продолжительность
    •     errLogicPrinterNotReady=202: 'Printing was interrupted: device is not ready' → Печать была прервана по неготовности принтера
    •     errLogicPaperOut=203: 'End of paper while printing' → Закончилась бумага во время печати
    •     errLogicBadAnswerFormat=204: 'Bad device answer format'
    •     errLogicShiftAlreadyOpened=205: 'Shift Already Opened'
  •     //Ошибки ВО ВХОДНЫХ ДАННЫХ, обнаруженные ДО ОТПРАВКИ ДАННЫХ в ФР: 300..399
    •     errAssertItemsPaysDifferent=301:   'The mismatch between the amount of goods and payments in check' → В чеке не совпадают суммы по товарам и платежам
    •     errAssertInvalidXMLInitializationParams=302: 'Error in the XML data for initialization (UFRInit)' → Ошибка в XML-данных для инициализации (UFRInit)
    •     errAssertInvalidXMLParams=303: 'Error in the XML data (UFRFiscalDocument | UFRUnfiscalPrint | UFRCustomerDisplay)' → Ошибка в XML-данных (UFRFiscalDocument | UFRUnfiscalPrint | UFRCustomerDisplay)
    •     errAssertInsufficientBufferSize=304: 'The insufficient size of the buffer to receive data' → Недостаточный размер буфера для получения данных

Формат ошибки

Для изменения форматирования надо задать перевод для строки "Error (%0:s, %1:d). %2:s". Здесь

  • %0:s - имя драйвера нижнего уровня
  • %1:d - код ошибки (см. раздел коды ошибок)
  • %2:s - детализация ошибки (см. раздел Формат детализации ошибки)


Формат детализации ошибки

Для изменения форматирования надо задать перевод для строки "UniFrErrorFormat^%s (0x%2.2X): %s". Здесь

  • префикс "UniFrErrorFormat^" добавлен для обеспечения уникальности строки и не должен переводиться. 
  • первый %s, может быть заменён на %0:s, будет содержать переведённое наименование типа ошибки, см. раздел Коды ошибок, для 200 это будет перевод от "Logical error", на русском языке "Логическая ошибка"
  • %2.2X, может быть заменён на %1:2.2X - код ошибки в шестнадцатеричном представлении
  • второй %s, может быть заменён на %2:s - текст ошибки, пришедший от драйвера нижнего уровня

Этот формат используется только для кодов     errLogicError,    errLogic24hour,    errLogicPrinterNotReady,    errLogicPaperOut,    errExtPrintError,    errAssertInvalidXMLInitializationParams,    errAssertInvalidXMLParams,    errInternalException. Для остальных кодов ошибки в качестве детализации ошибки используется переведённое наименование типа ошибки, полученное по коду.