Настройка внешнего вида чеков (скрипты, устаревший метод)

Строго рекомендуется не использовать этот метод.

Имеется возможность настраивать внешний вид печатаемых чеков. Это делается с помощью скриптов поведения. Возможности и способы работы с ними читайте в соответствующих разделах документации.

Скрипты служат для настройки внешнего вида чеков.

  • Позиция - это несколько строк, представляющие одну позицию в чеке, добавляются в объект check с помощью addPayment/addString;

  • один раз должна присутствовать установка платежа addPayment( ) - это будет "фискальная" строка, которая, собственно, представляет собой продажу; в этой строке может быть ещё одна строка, типа наименование продажи и отдел. Теоретически может не быть фискальной строки, но тогда в печать не выведется платёж, но, внимание!, по всем остальным признакам платёж пометится напечатанным. Замечание касается работы с фискальным оборудованием. При печати на произвольном принтере (термопринтере или обычном) возможно формирование с помощью скриптов любых данных для вывода;

  • в остальных строках - по одному параметру String, которая выведется;

  • или: прямой текст указан, так и выведется;

  • или: просто ничего (пробел), это будет пустая строка, типа вертикальная табуляция (например, для красоты при отделении блоков текста друг от друга и т.д.).

Скрипты и примеры кода:

  • [Чек: добавление позиции], по умолчанию будет только платёж и строка с предупреждением об отсутствии скрипта:

    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" );

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

Обратите особое внимание, что в каждом скрипте формирования внешнего вида чека (а именно происходит формирование каждой отдельной позиции чека) обязательно должна присутствовать ровно одна команда addPayment для всех устройств, являющихся ККМ. Дополнительно может быть любое количество addString. Для устройств, представляющих обычный принтер, для FOP-устройств (см. ниже) и т.п. команда addPayment не нужна, так как там не происходит добавление продажи во внутреннюю память.

Далее приведём пример скрипта "добавление позиции" для формирования FO-документа, для FOP-драйвера. Эти строки соответствуют шаблону cashcheck_pko.xsl, находящемуся в стандартной поставке сервера печати.

Код
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();