Разделение по отделам в ККМ, задание типа платежа, налога, признак электронного чека и т.д.

Этот раздел относится логически к предыдущему про настройку внешнего вида чеков, так как затрагивает использование тех же скриптов.

Имейте ввиду, что для каждого ККМ номера отделов, типов платежа и остального имеют какой-то диапазон или формат. Следует уточнить это в документации по устройству. Также устройство может не поддерживать то или иное.

При желании разделять некоторые платежи по разным отделам можно использовать такую возможность, предоставляемую большинством ККМ. Для этого при добавлении в скрипте "формирование позиции чека" очередной позиции с помощью команды addPayment надо третьим параметром передать номер отдела. Таким образом отдел привязывается к продажной позиции.

Вычислить номер отдела можно на основании любых данных, например, типа платежа, номера принтера и т.д. и т.п. Пример использования:

int paymentDep = 0;
switch( payment.getPaymentTypeID() )
{
case 1:
paymentDep = 1;
break;
case 2:
paymentDep = 2;
break;
// .... итд
}
check.addPayment( payment.getSumma(), payment.getContractTitle(), paymentDep );

Можно просто отдавать в метод 0 (ноль), если вам не нужна эта возможность.

Тип платежа - это "наличные", "картой" итд. Поддерживается многими ККМ. Он задаётся для всего чека сразу. Вам нужен setPaymentType() у объекта Check. Туда передаётся целочисленный тип, назначение идентификаторов уточняйте в документации устройства или у поставщика. Так как тип платежа привязан ко всему чеку, подходящее место для установки - метод "завершение формирования чека" (но можно ставить и в момент формирования каждой позиции, нужно только учесть, что в следующей позиции он может перекрыться).

Номер налоговой группы - задаётся для всего чека, метод setTax() у объекта Check. Назначение номеров настраивается в самом ККТ, уточняйте в документации устройства.

Признак электронного чека - указание для ККТ что чек электронный, если он умеет такое, то печати бумажного чека не будет. Метод setOnlyElCheck(true) у объекта Check.

Указание customerAddress - для электронных чеков необходимо указание customerAddress (можно указывать и при бумажном). Метод setCustomerEmail("email/phone") у объекта Check. Формат передаваемого телефона/адреса уточняйте в документации ОФД.

Указание произвольного тега для ОФД - можно задать дополнительный любой тег. За это отвечают методы setTag(int tag, String value), setTag(int tag, byte value), setTag(int tag, byte[] value) у объекта Check.

Признак способа расчёта (Check.setPayMethod(int payMethod)) и Признак предмета расчёта (Check.setPayObject(int payObject)) - атрибуты ФФД 1.05, вообще это атрибут позиции чека, но здесь оно на весь чек задаётся.

Значение кассир (тег 1021) для чеков (Check.setCashierName(String cashierName)) и инн кассира (тег 1203) для чеков (Check.setCashierINN(String cashierINN)) - более удобные методы задания этих тегов, либо основной способ авторизации/указания кассиров в драйвере ru.bitel.frk.driver.atollibfptr.Driver (там нет авторизации по паролю кассира).