Описание шаблона

Шаблон основного чека предназначен для печати документов продажи и возврата. Шаблон имеет строго определенную, но расширяемую структуру. Шаблон чека описан в формате JSON и имеет обязательные переменные.

Пример основного чека

Базовая структура шаблона чека:
{
   "margin_left": 0,
   "margin_right": 10,
   "show_storno_position": true,
   "strikeout_storno_position": true,
   "show_storno_payment": true,
   "strikeout_storno_payment": true,
   "variables": {
       "change": "(сдача)",
       "type_sale": "Продажа",
       "type_return": "Возврат",
       "tax_without_vat": "Без НДС"
   },
   "header": [...],
   "positions": [...],
   "position_totals": [...],
   "payments": [...],
   "payment_totals": [...],
   "footer": [...]
}
Переменные, отвечающие за отображение данных:
  • margin_left - Отступ в пикселях от края слева;
  • margin_right - Отступ в пикселях от края справа;
  • show_storno_position: (true, false) - Отображать сторнированные позиции номенклатуры;
  • strikeout_storno_position: (true, false) - Отображать сторнированные позиции номенклатуры зачеркнутыми. При show_storno_position = false опция не используется;
  • show_storno_payment: (true, false) - Отображать сторнированные позиции оплаты.
  • strikeout_storno_payment: (true, false) - Отображать сторнированные позиции оплаты зачеркнутыми. При show_storno_payment: false опция не используется;
  • alignment - Выравнивание текста: 0 - По левому краю, 1 - По центру, 2 - По правому краю;
  • <SF> - Заполнение пробелами ( );
  • <DF> - Заполнение прочерками (-);
  • <UF> - Заполнение знаком (_);
  • <EF> - Заполнение знаком равенства (=);
  • <PF> - Заполнение знаком плюс (+);
  • <AF> - Заполнение знаком звёздочка (*).
Текстовые переменные:
  • change - Текст к сумме сдачи payment.type_name. Значение по умолчанию - "(сдача)";
  • type_sale - Текст переменной doc.type в чеке документа продажи. Значение по умолчанию - "Продажа";
  • type_return - Текст переменной doc.type в чеке документа возврата. Значение по умолчанию - "Возврат";
  • tax_without_vat - Текст для отображения, если позиция с товаром без НДС. Значение по умолчанию - "Без НДС".

Далее структура шаблона имеет следующие разделы:

header - Заголовок шаблона чека

Может содержать информацию о смене, кассире, кассе, дате продажи.

   "header":[
       {
           "text": "",
           "font": "",
           "interval": 30,
           "alignment": 1,
           "img_src": "\\Cheque\\regos.png",
           "img_width": 180,
           "img_height": 180
       },
       {
           "text": "Добро пожаловать",
           "font": "Lucida Console, 12pt, style=bold",
           "interval": 10,
           "alignment": 1
       },
       {
           "text": "Код:<SF><doc.code>",
           "font": "Lucida Console, 8pt",
           "interval": -3,
           "alignment": 1
       },
       {
           "text": "<doc.date><SF><doc.time>",
           "font": "Lucida Console, 8pt",
           "interval": -3,
           "alignment": 1
       },
       {
           "text": "Тип:<SF><doc.type>",
           "font": "Lucida Console, 8pt",
           "interval": -3,
           "alignment": 1
       },
       {
           "text": "Касса:<SF>0000<doc.cash_id>",
           "font": "Lucida Console, 8pt",
           "interval": -3,
           "alignment": 1
       },
       {
           "text": "Смена:<SF><doc.session>",
           "font": "Lucida Console, 8pt",
           "interval": -3,
           "alignment": 1
       },
       {
           "text": "Кассир:<SF><doc.cashier_name>",
           "font": "Lucida Console, 8pt",
           "interval": -3,
           "alignment": 1
       },
       {
           "text": "<DF>",
           "font": "Lucida Console, 8pt",
           "interval": 3,
           "alignment": 1
       }
   ],

В разделе доступны для использования следующие переменные:

  • doc.code - Код документа продажи или возврата;
  • doc.date - Дата регистрации чека;
  • doc.time - Время регистрации чека;
  • doc.session - Код кассовой смены, в которой регистрируется чек;
  • doc.cashier_name - Имя кассира;
  • doc.seller_name - Имя продавца;
  • doc.type - Тип документа. Значение переменной берётся из переменных в начале шаблона;
  • doc.cash_id - ID кассы;
  • doc.cash_serial_num - Номер кассы;
  • doc.card_barcode - Штрих-код карты покупателя;
  • doc.customer_main_phone - Основной телефон покупателя;
  • doc.customer_full_name - ФИО покупателя;
  • doc.promo_balance - Баланс карты покупателя до покупки (возврата);
  • doc.promo_withdraw - Списанная сумма бонусов;
  • doc.promo_enrollment - Начисленная сумма бонусов;
  • doc.promo_new_balance - Баланс карты покупателя после покупки (возврата).

Если текстовый блок в данном разделе включает в себя следующие теги, то текстовое содержимое блока игнорируется и в блоке отображается указанное изображение:

  • img_src - "\Cheque\regos.png" - Адрес изображения;
  • img_width - 180 - Ширина изображения в пикселях;
  • img_height - 180 - Высота изображения в пикселях.

Пример:

       {
           "text": "",
           "font": "",
           "interval": 30,
           "alignment": 1,
           "img_src": "\\Cheque\\regos.png",
           "img_width": 180,
           "img_height": 180
       },

Если текстовый блок в данном разделе включает в себя следующие теги, то текстовое содержимое блока преобразуется в указанный тип штрих-кода и отображается в блоке:

  • barcode_height - 50 - Высота штрих-кода в пикселях;
  • barcode_module - 2 - Размер штрих-кода, коэффициент масштабирования. Минимальное значение 1;
  • barcode_show_text - (true, false) - Отображать текст под штрих-кодом;
  • barcode_type - Тип штрих-кода: 1 - Code128, 2 - EAN13, 3 - QRCode.

Пример:

       {
           "font": "Lucida Console, 8pt",
           "text": "<doc.code>",
           "barcode_height": 50,
           "barcode_module": 2,
           "barcode_show_text": false,
           "barcode_type": 1,
           "interval": 30,
           "alignment": 1
       },
positions - Список позиций

Содержит информацию о списке номенклатуры, её количестве, цене.

   "positions": [
       {
           "text": "<pos.n>. <pos.item.name>[<pos.item.unit>]",
           "font": "Lucida Console, 6pt",
           "interval": 2,
           "alignment": 0
       },
       {
           "text": "Цена без скидки:<SF><pos.full_price>",
           "font": "Lucida Console, 6pt",
           "interval": 2,
           "alignment": 1
       },
       {
           "text": "Размер скидки за 1 единицу:<SF><pos.discount_value>",
           "font": "Lucida Console, 6pt",
           "interval": 2,
           "alignment": 1
       },
       {
           "text": "Сумма скидки на позицию:<SF><pos.discount_amount>",
           "font": "Lucida Console, 6pt",
           "interval": 2,
           "alignment": 1
       },
       {
           "text": "<pos.quantity> x <pos.price> = <pos.amount>",
           "font": "Lucida Console, 7pt",
           "interval": -5,
           "alignment": 2
       },
       {
           "text": "в т.ч. НДС <pos.vat_amount> ",
           "font": "Lucida Console, 7pt",
           "interval": -5,
           "alignment": 2
       }
   ],

В разделе доступны для использования следующие переменные:

  • pos.n - Номер позиции номенклатуры;
  • pos.item.name - Наименование номенклатуры;
  • pos.item.code - Код номенклатуры;
  • pos.item.articul - Артикул номенклатуры;
  • pos.item.unit - Единица измерения количества номенклатуры;
  • pos.item.unit2 - Единица измерения количества номенклатуры с КДТ;
  • pos.item.kdt - Количество номенклатуры с КДТ;
  • pos.item.size - Размер номенклатуры;
  • pos.item.color - Цвет номенклатуры;
  • pos.item.brand - Бренд номенклатуры;
  • pos.item.producer - Производитель номенклатуры;
  • pos.item.country - Страна производителя номенклатуры;
  • pos.item.department - Отдел номенклатуры;
  • pos.item.group - Номенклатурная группа;
  • pos.quantity - Количество номенклатуры;
  • pos.price - Цена номенклатуры;
  • pos.amount - Значение суммы цены номенклатуры (pos.quantity * pos.price);
  • pos.full_price - Цена без скидки;
  • pos.discount_value - Размер скидки за 1 единицу номенклатуры;
  • pos.discount_amount - Сумма скидки на позицию в чеке (pos.quantity * pos.discount_value);
  • pos.vat.name - Наименование ставки НДС;
  • pos.vat_amount - Значение суммы ставки НДС;
  • pos.icps - ИКПУ;
  • pos.label - Маркировка.
position_totals - Итоги по списку позиций

Содержит информацию о итоговой сумме, сумме скидки.

   "position_totals": [
       {
           "text": "<DF>",
           "font": "Lucida Console, 8pt",
           "interval": 3,
           "alignment": 1
       },
       {
           "text": "Всего:<SF><pos.total.price2>",
           "font": "Lucida Console, 8pt",
           "interval": 2,
           "alignment": 0
       },
       {
           "text": "Скидки:<SF><pos.total.discount>",
           "font": "Lucida Console, 8pt",
           "interval": 2,
           "alignment": 0
       },
       {
           "text": "К оплате:<SF><pos.total.price>",
           "font": "Lucida Console, 10pt, style=bold",
           "interval": 2,
           "alignment": 0
       },
       {
           "text": "<DF>",
           "font": "Lucida Console, 8pt",
           "interval": 3,
           "alignment": 1
       }
   ],

В разделе доступны для использования следующие переменные:

  • pos.total.price2 - Значение полной суммы чека;
  • pos.total.discount - Значение суммы скидки;
  • pos.total.price - Значение итоговой суммы чека с учетом скидки.
payments - Список позиций оплат

Содержит информацию о списке оплат, сумме каждой оплаты и её типа.

   "payments": [
       {
           "text": "<payment.type_name><SF><payment.value>",
           "font": "Lucida Console, 8pt",
           "interval": 2,
           "alignment": 0
       }
   ],

В разделе доступны для использования следующие переменные:

  • payment.type_name - Наименование типа оплаты;
  • payment.value - Значение типа оплаты.
payment_totals - Итоги по списку оплат

Содержит информацию о итоговой сумме оплат, сумме сдачи.

   "payment_totals": [
       {
           "text": "<DF>",
           "font": "Lucida Console, 8pt",
           "interval": 3,
           "alignment": 1
       },
       {
           "text": "Оплачено:<SF><payment.total.payed_value>",
           "font": "Lucida Console, 8pt, style=bold",
           "interval": 2,
           "alignment": 0
       },
       {
           "text": "Сдача:<SF><payment.total.change_value>",
           "font": "Lucida Console, 8pt, style=bold",
           "interval": 2,
           "alignment": 0
       },
       {
           "text": "<DF>",
           "font": "Lucida Console, 8pt",
           "interval": 3,
           "alignment": 1
       }
   ],

В разделе доступны для использования следующие переменные:

  • payment.total.payed_value - Общая сумма оплаты;
  • payment.total.change_value - Значение суммы сдачи.

Содержит дополнительную информацию.

   "footer": [
       {
           "font": "Lucida Console, 8pt",
           "text": "<doc.code>",
           "barcode_height": 50,
           "barcode_module": 2,
           "barcode_show_text": false,
           "barcode_type": 1,
           "interval": 30,
           "alignment": 1
       },
       {
           "text": "Спасибо за покупку",
           "font": "Lucida Console, 10pt, style=bold",
           "interval": 3,
           "alignment": 1
       }
   ]

В разделе доступны для использования те же переменные, что и в блоке header.

Пример основного чека