Форматирование сообщений об ошибках
Прокидывание сообщения от драйвера нижнего уровня без "обвязки"
На данный момент сообщение об ошибке, пришедшей от фискального регистратора, содержит примерно такой текст: "Ошибка (<имя драйвера нижнего уровня>, <код ошибки>). <Детализация ошибки>", где <код ошибки> как правило равен 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. Для остальных кодов ошибки в качестве детализации ошибки используется переведённое наименование типа ошибки, полученное по коду.