shtrih-m / javapos_shtrih

Реализация JavaPOS драйвера принтера фискального регистратора для устройств Штрих-М
http://www.shtrih-m.ru
MIT License
33 stars 16 forks source link

ошибка при получении версии ФФД getFDVersion #136

Open VladislavKhambikov opened 2 years ago

VladislavKhambikov commented 2 years ago

На версии драйвера 631 возникает ошибка при получении версии ффд на МГМ

jpos.JposException: Invalid int: "" Логи https://disk.yandex.ru/d/tYdOx_N7pwlTNQ this.readTable(17, 1, 17) возвращает пустую строку и при попытке привести ее к int возникает NumberFormatException

@VitalyKravtsov2016

Tango600 commented 2 years ago

Версия ФФД так.

    public FfdVersion getFfdVersion() {
        String result = null;
        try {
            DeviceMetrics metrics = printer.readDeviceMetrics();
            try {
                if (metrics.isShtrihNano()) {
                    result = callPrinterMethod(() -> printer.readTable(17, 1, 17), "readTable", "17, 1, 17");
                } else if (metrics.isShtrihMobile()) {
                    result = callPrinterMethod(() -> printer.readTable(10, 1, 4), "readTable", "10, 1, 4");
                }
            } catch (Exception ex) {
                Logger.getInstance().log(LogLevel.ERROR, "Ошибка чтения версии ФФД: " + ex.getMessage());
                throw new PpsException("Ошибка чтения версии ФФД: " + ex.getMessage(), 10);
            }
        } catch (Exception metricsEx) {
            Logger.getInstance().log(LogLevel.ERROR, "Ошибка чтения метрик устройства: " + metricsEx.getMessage());
        }

        if (result != null) {
            if (StringComparator.IsEquals(result, "0") || StringComparator.IsEquals(result, "1")) {
                return FfdVersion.Ffd100;
            } else if (StringComparator.IsEquals(result, "2")) {
                return FfdVersion.Ffd105;
            } else if (StringComparator.IsEquals(result, "3")) {
                return FfdVersion.Ffd11;
            } else if (StringComparator.IsEquals(result, "4")) {
                return FfdVersion.Ffd12;
            }
        }

        return FfdVersion.Ffd105;
    }
VladislavKhambikov commented 2 years ago

нет, интересует именно метод драйвера

public int getFDVersion() throws Exception {
    if (this.fdVersion == null) {
        this.fdVersion = Integer.parseInt(this.readTable(17, 1, 17));
    }

    return this.fdVersion;
}

в частности он вызывается при печати маркировки в методе sendItemCode

Tango600 commented 2 years ago

Я не зря привёл кусок процедуры, обратите внимание на этот кусок кода.

                if (metrics.isShtrihNano()) {
                    result = callPrinterMethod(() -> printer.readTable(17, 1, 17), "readTable", "17, 1, 17");
                } else if (metrics.isShtrihMobile()) {
                    result = callPrinterMethod(() -> printer.readTable(10, 1, 4), "readTable", "10, 1, 4");
                }
VladislavKhambikov commented 2 years ago

так проблема в том что в методе драйвера sendItemCode, напрямую вызывается метод getFDVersion() https://github.com/shtrih-m/javapos_shtrih/blob/af1cd8ffb9e1ec8ee25735321163076705b24ebc/Source/Core/src/com/shtrih/fiscalprinter/SMFiscalPrinterImpl.java#L4724