В Литве есть закон по которому ПО касовых апаратов баров и ресторанов должно выполнять печать количеств и сумм неоплаченых предварительных счётов в контрольной ленте при печати Z отчёта.

То есть необходимо, чтобы при закрытии общей смены печатался отчет, в котором было количество отказов пре-чеков и сумма всех отказанных пре-чеков.

Необходимый функционал реализован в 7.05.04.148. при отмене пречека (если пречек был распечатан) запись о нём сохраняется в таблице чеков PRINTCHECKS.

У таких записей:

DELETED=1
ISBILL=1
IGNOREINREP=1

Включено в 7.5.5.12 и 7.05.04.148

Теперь при отмене пречека (если пречек был распечатан) запись о нём сохраняется в таблице чеков PRINTCHECKS.

У таких записей:

DELETED=1
ISBILL=1
IGNOREINREP=1

Количество сервис чеков = количеству блюд в заказе

Задача: Стоит Delivery, r_k 7 и принтер этикеток. При пробитии заказа на принтер выходят этикетки.

Необходимо, чтобы количество блюд в заказе было равно количеству этикеток. Но сервис чеки выходят не правильно, то есть если в заказе есть две одинаковые пиццы и бургер, то принтер печатает 2 этикетки: с 1 бургером и с 1 пиццей.

Решение:  

Скрипт необходимо прописывать родительскому бэнду, в данном случае к бэнду Блюда:

var q: integer;
begin
q :=Trunc(\[Блюда.Количество\]);
if q < 1 then q := 1;
bndBandVirt.DataSetName := 'Virtual' + '\[' + IntToStr(q)+ '\]';
end
CODE

Номера на чеке

Задача: Необходимо сделать так, чтобы при пробитии определенного блюда или блюд в чек добавлялся уникальный номер с текстом. Код будет равен первым 13 знакам уникального номера GUID. Например:

«Ваш код для участия в розыгрыше FC58AC1A-241C. Подробнее на сайте»

Код необходимо обвести в рамку, если возможно.

Решение:

Для этого добавьте мемо-поле в бэнде Чеки, а свойстве Скрипт укажите следующее:

Memo52.Text := 'Ваш код для участия в розыгрыше '+#10#13
+copy(\[GUID\],2,13)+#10#13
+'Подробнее на сайте';
CODE

Но вместо Memo52 укажите имя созданного мемо-поля.

Номер на чеке при пробитии определенных блюд

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

  • В свойстве Visible у Memo52 снимите флаг

    memo52.visible := True;
    CODE
  • В бэнде Блюда к имеющемуся скрипту допишите код блюда:

    If \[Код\]=25 then
    CODE

Тогда в случае наличия в чеке блюда с кодом 25, отобразится мемо52.

Скрипт на печать пароля в чеке при пороге суммы в заказе

Задача: Необходимо создать скрипт, который бы печатал пароль от Wi-Fi при преодолении необходимой суммы заказа.

Решение: Для этого в бэнде Чеки поместите мем-поле и задать для него скрипт:

if \[Сумма\]>200 then
Memo11.text := 'WiFi-пароль'
else
Memo11.text := ''
CODE

Вместо Memo11 укажите имя мемо-поля.

Разделение использования схем печати по принтерам

Задача: В ресторане разные фискальники: обычные и с узкой лентой 36 символов. Подключено все к одной станции через COM порты. Соответственно, использовать схемы печати необходимо разные, а текущие условия использования схем печати этого сделать не позволяют.

Решение: Проблему решить можно с помощью скрипта:

  1. Сделайте макет с шириной 80 и двумя листами:
    • На первом листе ширина 80
    • На втором листе ширина 36
  2. В зависимости от кода принтера сделайте невидимым один из листов скриптом размещенным на первой странице макета:

    if \[Чеки.Принтер.Код\]=1 then
    begin
    Document1.Visible := True;
    Document2.Visible := False;
    end;
    CODE

    или

    if \[Чеки.Принтер.Код\]=2 then
    begin
    Document1.Visible := False;
    Document2.Visible := True;
    end;
    CODE

Кассовые формы в r_keeper и CRM

Данный скрипт используется при связке r_keeper и CRM. 

В заведении используются бонусные карты, на которые бонусы можно как копить, так с списывать. Период действия таких бонусов — 3 месяца.

Данный скрипт можно использовать в следующих случаях:

  1. Если на пречеке необходимо написать: "Бонус по этому чеку действителен до ХХ.ХХ.ХХХ". Дата в зависимости от текущей плюс три месяца
    Текущая дата доступна, как переменные CurShiftDate и Now
  2. Если необходимо выводить на пречеке остаток по карте, а потом делать с ним математические операции.

Если используете графический макет, то это fastreport:

\[DayOf(Date)\].\[IIF+3>12,MonthOf(Now)+3-12,MonthOf(Now)+3)\].\[IIF+3>12,YearOf(Now)+1,YearOf(Now))\]
CODE

Если обычный, то это стандартный редактор макетов в r_keeper. Для кассового макета у мемо поля укажите скрипт:

var s:string;
addmonths: integer;
begin
addmonths := 3;
S := FormatDateTime('dd.',\[Date\]);
if StrToInt(FormatDateTime('mm',\[Date\]))+addmonths > 12 then
s := s + IntToStr(StrToInt(FormatDateTime('mm',\[Date\]))+ addmonths - 12)
else
s := s + IntToStr(StrToInt(FormatDateTime('mm',\[Date\]))+ addmonths);
if StrToInt(FormatDateTime('mm',\[Date\]))+addmonths > 12 then
s := s + '.' + IntToStr(StrToInt(FormatDateTime('yyyy',\[Date\]))+ 1)
else
s := s + '.' + IntToStr(StrToInt(FormatDateTime('yyyy',\[Date\])));
memo11.text := s;
end
CODE

Разный вид печати для штучных и весовых блюд 

Задача: Необходимо при печати: 

  1. Для штучных — не писать дробную часть, если она нулевая, и дописывать шт.
  2. Для весовых — писать дробную часть и дописывать кг, или другую единицу веса из настроек блюда
  3. Для порционных — писать количество порций без дробной части и вес с дробной частью в скобках.

Решение: Используйте данный скрипт, если необходимо распечатать количество позиций в меню целым числом, а вес порций — дробным.

MemQnt замените на наименование мемо-поля, в котором выводится количество.

case \[Элементменю.Режимцены\] of
0:  memQnt.Text := FormatFloat('0',\[Количество\])+' шт';
1:  memQnt.Text := FormatFloat('0',\[Количество\])+' ('+FormatFloat('0.####',\[Элементменю.Веспорции\])+' '+\[Элементменю.Едизмерения\]+')';
2:  memQnt.Text := FormatFloat('0.000',\[Количество\])+' '+\[Элементменю.Едизмерения\];
end;
CODE