14. Внесение и выем наличных
Внесение и выем через приложение МодульКассы представляет из себя вызов экрана на стороне МодульКассы, отображающий прогресс регистрации и печати чека внесения/выема. Если внесение или выем прошли успешно, то вызывающее приложение получает сообщение об успешности операции 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 (как и при открытии смены через Модулькассу) будет создан документ внесения без регистрации в ФН (фискальный накопитель) с остатком наличности из прошлой смены.