shtrih-m / javapos_shtrih

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

Передача тега 1226 #157

Closed Tango600 closed 1 year ago

Tango600 commented 1 year ago

Передаю тег в документ.

int quantityFactor = 1000000;
////

printer.fsWriteOperationTag(1226, info.getPartnerInn());
printer.printRecItem("Оплата", sumServicePayment, quantityFactor, 0, 0, "Оплата");

Тег не остаётся в документе, ошибок нет. Если прибавить пробелов в конец до длинны 12 символов, то тег остаётся в документе.

Tango600 commented 1 year ago

Дополнение: Я пробовал дописывать пробелы слева, не помогло. Очень интересный глюк.

VitalyKravtsov2016 commented 1 year ago

Вроде в ФФД так и написано: 1226, ИНН поставщика | Текст | Строка | ЦЦЦЦЦЦЦЦЦЦ или ЦЦЦЦЦЦЦЦЦЦЦЦ | Да | 12 | Если ИНН имеет длину меньше 12 цифр, то он дополняется справа пробелами. Данный реквизит принимает значение «000000000000» в случае если поставщику не присвоен ИНН на территории Российской Федерации

Tango600 commented 1 year ago

Обычно разработчик передавая ИНН полагает что он передаёт ИНН и больше ничего, что там в кассе внутри должно быть, уже выходит за рамки нормального формата данных.

VitalyKravtsov2016 commented 1 year ago

По идее драйвер должен дополнять до 12 символов. Проверю.

vladislav-larionov commented 1 year ago

У меня тоже есть аналогичная проблема. Правда она проявляется на устройстве Штрих Мобайл. На устройстве Штрих Нано ф такой проблемы нет, тег 1226 добавляется в тег 1059. К ИНН добавляю пробелы до длины 12. Если не дополнить, то в Штрих Нано ф тег добавляться не будет. На Штрих Мобайл с дополнением всё равно не появляется.

Информация по Штрих Мобайл: Версия ПО: A.4 Сборка ПО: 20045 Версия ФФД: 1.05

Информация по Штрих Нано ф: Версия ПО: C.1 Сборка ПО: 159 Версия ФФД: 1.05

Функция печати чека:

override fun ShtrihFiscalPrinter.printCheque(receipt: Receipt) {
    fiscalReceiptType = if (receipt.type == Receipt.Type.SELL) {
        FiscalPrinterConst.FPTR_RT_SALES
    } else {
        FiscalPrinterConst.FPTR_RT_REFUND
    }
    beginFiscalReceipt(true)
    writePaymentTags(receipt.tags)
    printNormal(FiscalPrinterConst.FPTR_S_RECEIPT, receipt.cheque)
    val unitName = if (receipt.type == Receipt.Type.SELL) {
        SELL_UNIT_NAME
    } else {
        REFUND_UNIT_NAME
    }
    receipt.positions.forEach { position ->
        setParameter(SmFptrConst.SMFPTR_DIO_PARAM_ITEM_PAYMENT_TYPE, position.methodType)
        setParameter(SmFptrConst.SMFPTR_DIO_PARAM_ITEM_SUBJECT_TYPE, position.subjectType)
        val vatInfo = mapToVatInfo(position.ndsType)
        printItem(
            description = position.name,
            price = position.amount.toKopeck(),
            vatInfo = vatInfo,
            unitName = unitName,
            type = receipt.type,
            quantity = (position.quantity * 1000).toInt(),
            unitPrice = floor(position.amount.toKopeck() / position.quantity).toLong()
        )
        if (receipt.tags.containsKey(AGENT_ATTRIBUTE_TAG_ID)) {
            if (receipt.vendorInn != null) {
                fsWriteOperationTag(1226, receipt.vendorInn)
            }
        }
    }
    printRecTotal(receipt.totalAmount.toKopeck(), receipt.totalAmount.toKopeck(), "0")
    endFiscalReceipt(false)
    waitForPrinting()
}