Имеется возможность настраивать внешний вид печатаемых чеков. Это делается с помощью скриптов поведения. Возможности и способы работы с ними читайте в соответствующих разделах документации.
Скрипты служат для настройки внешнего вида чеков.
Позиция - это несколько строк, представляющие одну позицию в чеке, добавляются в объект
с помощью /один раз должна присутствовать установка платежа
- это будет "фискальная" строка, которая, собственно, представляет собой продажу; в этой строке может быть ещё одна строка, типа наименование продажи и отдел. Теоретически может не быть фискальной строки, но тогда в печать не выведется платёж, но, внимание!, по всем остальным признакам платёж пометится напечатанным. Замечание касается работы с фискальным оборудованием. При печати на произвольном принтере (термопринтере или обычном) возможно формирование с помощью скриптов любых данных для вывода;в остальных строках - по одному параметру
, которая выведется;или: прямой текст указан, так и выведется;
или: просто ничего (пробел), это будет пустая строка, типа вертикальная табуляция (например, для красоты при отделении блоков текста друг от друга и т.д.).
Скрипты и примеры кода:
, по умолчанию будет только платёж и строка с предупреждением об отсутствии скрипта:
check = event.getCheck(); payment = event.getPayment(); // 1) строка сумма-контракт, плюс отдел (если надо, то вычисляется в этом же скрипте) check.addPayment( payment.getSumma(), payment.getContractTitle(), paymentDep ); // 2) строка с комментарием check.addString( payment.getContractComment() ); // 3) пустая строка check.addString( " " );
, по умолчанию - ничего к низу чека не прибавляется:
check = event.getCheck(); check.addString( "footer 1" ); check.addString( "footer 2" ); check.addString( "footer 3" );
Как известно, скрипты поведения привязаны к договорам. Если скрипт не привязан договору, то на чеке будет печататься предупреждение. Обратите на это внимание, если вдруг вы меняете формат чека в скрипте, а он при печати остаётся старым или с предупреждением. Итак, для печатаемого чека обязательно должен сработать скрипт формирования его вида!
Обратите особое внимание, что в каждом скрипте формирования внешнего вида чека (а именно происходит формирование каждой отдельной позиции чека) обязательно должна присутствовать ровно одна команда
для всех устройств, являющихся ККМ. Дополнительно может быть любое количество . Для устройств, представляющих обычный принтер, для FOP-устройств (см. ниже) и т.п. команда не нужна, так как там не происходит добавление продажи во внутреннюю память.Далее приведём пример скрипта "добавление позиции" для формирования FO-документа, для FOP-драйвера. Эти строки соответствуют шаблону
, находящемуся в стандартной поставке сервера печати.import bitel.billing.common.*; import bitel.billing.server.admin.bean.*; check = event.getCheck(); payment = event.getPayment(); //Сумма платежа: "120,00р." check.addString( String.valueOf(payment.getSumma()) + "р." ); //Номер договора check.addString( payment.getContractTitle() ); //Фамилия клиента: "ИВАНОВ И.И." check.addString( payment.getContractComment() ); //Дата платежа: 20-04-2009 check.addString( TimeUtils.format( payment.getDate(), "dd-MM-yyyy" ) ); //Организация: ООО "ПРОВАЙДЕР" check.addString( "ООО \"ПРОВАЙДЕР\"" ); //ФИО кассира (пользователя биллинга) UserManager um = new UserManager( con ); User user = um.getUserByID( payment.getUserID() ); check.addString( user.getName() ); //Тип платежа: "СПД №" check.addString( "СПД №" ); //Сумма прописью: "Сто двадцать рублей 00 коп" check.addString( SummaToString.summaToString( String.valueOf(payment.getSumma()), true ) );
В данном случае мы формируем 8 строк с произвольной информацией, которая передаётся в FOP-драйвер сервера печати, который напрямую передаёт их в FO-шаблон обычной линейной xml. Это позволяет формировать документ из любых строк, подготовленных в скрипте, и из любого написанного шаблона.
Также в событиях устанавливается поле "printer" - объект "принтер", на который производится печать. Это может понадобиться, например, при наличии двух разных принтеров и желания печатать на них разного вида информацию и на разные принтеры использовать разные скрипты (например, для FOP и ККМ скрипты всегда разные будут). Например, можно получить ID принтера (такой, какой он в конфигурации плагина):
int printerId = event.getPrinter().getId();