Skip to content

14. Внесение и выем наличных

Ansar8 edited this page Mar 20, 2023 · 10 revisions

Внесение и выем через приложение МодульКассы представляет из себя вызов экрана на стороне МодульКассы, отображающий прогресс регистрации и печати чека внесения/выема. Если внесение или выем прошли успешно, то вызывающее приложение получает сообщение об успешности операции Activity.RESULT_OK, а на кассе будет распечатан чек с информацией о внесении/выеме, иначе вызывающее приложение получает ответ с описанием и причиной ошибки.

Регистрировать внесение или выем можно только в открытой смене. Если смена закрыта, попытка зарегистрировать внесение или выем завершится с ошибкой:

"Перед печатью чеков необходимо открыть смену"

Согласно требованиям законодательства, длительность смены составляет 24 часа. По истечении этого времени необходимо закрыть смену. Иначе попытка зарегистрировать внесение или выем завершится с ошибкой:

"Длительность смены превышена. Необходимо закрыть текущую смену."

В случае, если происходит регистрация выема наличных, но в кассе недостаточно средств, то операция завершится с ошибкой:

"Недостаточно наличности на кассе."

Перед регистрацией внесения/выема подготовьте данные в соответствии со структурой MoneyCheck:

val moneyCheck = MoneyCheck(
    type = INCOME,
    amount = BigDecimal("100"),
    text = listOf("Внесение при открытии смены"),
    employee = Employee("Иванов И.И.")
)

Для поля type выбираем необходимое значение типа:

  • Чек внесения (MoneyCheckType.INCOME)
  • Чек выема (MoneyCheckType.OUTGO)

Для того, чтобы выполнить внесение или выем, с помощью CheckManager сформируйте Intent для отправки в МодульКассу. Запустите активити через startActivityForResult().

startActivityForResult(
    modulKassaClient.checkManager().createMoneyCheckIntent(moneyCheck),
    CREATE_MONEY_DOC_REQUEST_CODE
)

Обработайте результат стандартным для Android способом:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {
        ...
        CREATE_MONEY_DOC_REQUEST_CODE -> handleMoneyCheckAnswer(resultCode, data)
    }
}

private fun handleMoneyCheckAnswer(resultCode: Int, data: Intent?) {
    if (resultCode == Activity.RESULT_OK) {
       ...
    } else {
        val resultError = modulKassaClient.checkManager().parsePrintCheckError(data ?: Intent())
    }
}

Внимание!

Стоит обратить внимание, что интерфейс SDK не поддерживает внесение при открытии смены, в отличие от интерфейса Модулькассы, где на момент открытия смены можно указать сумму для внесения. Соответственно, при работе с SDK внесение можно произвести уже после открытия смены.

Стоить также не забывать, что если в настройках торговой точки в личном кабинете включена возможность переноса остатков на следующую смену, то при открытии смены через SDK (как и при открытии смены через Модулькассу) будет создан документ внесения без регистрации в ФН (фискальный накопитель) с остатком наличности из прошлой смены.