Скрипты в макетах печати
В Литве есть закон по которому ПО касовых апаратов баров и ресторанов должно выполнять печать количеств и сумм неоплаченых предварительных счётов в контрольной ленте при печати 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
Номера на чеке
Задача: Необходимо сделать так, чтобы при пробитии определенного блюда или блюд в чек добавлялся уникальный номер с текстом. Код будет равен первым 13 знакам уникального номера GUID. Например:
«Ваш код для участия в розыгрыше FC58AC1A-241C. Подробнее на сайте»
Код необходимо обвести в рамку, если возможно.
Решение:
Для этого добавьте мемо-поле в бэнде Чеки, а свойстве Скрипт укажите следующее:
Memo52.Text := 'Ваш код для участия в розыгрыше '+#10#13
+copy(\[GUID\],2,13)+#10#13
+'Подробнее на сайте';
Но вместо Memo52 укажите имя созданного мемо-поля.
Номер на чеке при пробитии определенных блюд
Если вы хотите добавить в чек уникальный номер с текстом, который будет печататься только при пробитии определенного блюда или блюд, воспользуйтесь этим же скриптом, но с некоторыми изменениями:
В свойстве Visible у Memo52 снимите флаг
memo52.visible := True;
CODEВ бэнде Блюда к имеющемуся скрипту допишите код блюда:
If \[Код\]=25 then
CODE
Тогда в случае наличия в чеке блюда с кодом 25, отобразится мемо52.
Скрипт на печать пароля в чеке при пороге суммы в заказе
Задача: Необходимо создать скрипт, который бы печатал пароль от Wi-Fi при преодолении необходимой суммы заказа.
Решение: Для этого в бэнде Чеки поместите мем-поле и задать для него скрипт:
if \[Сумма\]>200 then
Memo11.text := 'WiFi-пароль'
else
Memo11.text := ''
Вместо Memo11 укажите имя мемо-поля.
Разделение использования схем печати по принтерам
Задача: В ресторане разные фискальники: обычные и с узкой лентой 36 символов. Подключено все к одной станции через COM порты. Соответственно, использовать схемы печати необходимо разные, а текущие условия использования схем печати этого сделать не позволяют.
Решение: Проблему решить можно с помощью скрипта:
- Сделайте макет с шириной 80 и двумя листами:
- На первом листе ширина 80
- На втором листе ширина 36
В зависимости от кода принтера сделайте невидимым один из листов скриптом размещенным на первой странице макета:
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 месяца.
Данный скрипт можно использовать в следующих случаях:
- Если на пречеке необходимо написать: "Бонус по этому чеку действителен до ХХ.ХХ.ХХХ". Дата в зависимости от текущей плюс три месяца
Текущая дата доступна, как переменные CurShiftDate и Now - Если необходимо выводить на пречеке остаток по карте, а потом делать с ним математические операции.
Если используете графический макет, то это fastreport:
\[DayOf(Date)\].\[IIF+3>12,MonthOf(Now)+3-12,MonthOf(Now)+3)\].\[IIF+3>12,YearOf(Now)+1,YearOf(Now))\]
Если обычный, то это стандартный редактор макетов в 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
Разный вид печати для штучных и весовых блюд
Задача: Необходимо при печати:
- Для штучных — не писать дробную часть, если она нулевая, и дописывать шт.
- Для весовых — писать дробную часть и дописывать кг, или другую единицу веса из настроек блюда
- Для порционных — писать количество порций без дробной части и вес с дробной частью в скобках.
Решение: Используйте данный скрипт, если необходимо распечатать количество позиций в меню целым числом, а вес порций — дробным.
MemQnt замените на наименование мемо-поля, в котором выводится количество.
case \[Элементменю.Режимцены\] of
0: memQnt.Text := FormatFloat('0',\[Количество\])+' шт';
1: memQnt.Text := FormatFloat('0',\[Количество\])+' ('+FormatFloat('0.####',\[Элементменю.Веспорции\])+' '+\[Элементменю.Едизмерения\]+')';
2: memQnt.Text := FormatFloat('0.000',\[Количество\])+' '+\[Элементменю.Едизмерения\];
end;