Введение
Введение в скрипты
В справочнике (Сервис-Скрипты) содержатся в систематизированном виде практически все скрипты, которые могут использоваться в системе. Скрипты из этого справочника можно подвязать к операциям (справочник Сервис-Операции).
Скрипты так же можно писать в обработчике событий формы (справочник "Настройки-Графический интерфейс-Формы-Модель формы"), в дизайнере Макетов, в MCR-алгоритмах.
Скрипты могут быть нескольких предустановленных типов: «Контроль кассовых операций», "Награды/Штрафы", "Обработка карт других систем", "Операции" и "Правила применения скидок".
Скрипты типа "Контроль кассовых операций" описывают некоторые проверки, которые будут выполняться перед выполнением операции в форме редактирования заказа. Скрипты типа "Операции" обрабатывают операции, которых нет в списке предустановленных операций системы.
Например, приведенный ниже скрипт добавляет в заказ блюдо с открытой ценой и устанавливает его стоимость в соответствии с введенным в окно ввода значением. В справочнике Операции скрипт связывается с пользовательской операцией (операция, принадлежащая одноименной группе операций). Затем операция назначается на функциональную кнопку, которую нужно вытащить в селектор операций на форме редактирования заказа.
procedure ProcessOperation1001510(Parameter: integer);
var NumberEditor: TNumEditor;
SomeoneBonus: double;
BonusPercent: double;
MenuItemCode: string;
begin
MenuItemCode := '99';
if not RkCheck.Valid then
exit;
NumberEditor := TNumEditor(gui.FindComponentByName('Editor'));
if assigned(NumberEditor) then begin
BonusPercent := strtofloat(NumberEditor.Text);
if BonusPercent = 0 then begin
gui.ShowMessage('Введите ненулевой процент поощрения');
exit;
end;
SomeoneBonus := RkCheck.CurrentOrder.ToPaySum * BonusPercent / 100;
// Добавим блюдо
RkCheck.CreateCheckItemByReferenceCode(rkoDishSelector, MenuItemCode);
// Зададим значение цены
NumberEditor.Text := floattostr(SomeoneBonus);
// И установим его только что добавленному блюду
RK7.PerformOperation(rkoEditOpenPrice, 0);
//
end;
end;
Для использования скриптов типа «Контроль кассовых операций» следует выбрать их на странице Ссылки на скрипты справочника Схемы форм и назначить использование схемы форм.
Синтаксис языка написания скриптов напоминает синтаксис языка Pascal и помимо использования процедур и объектов собственной разработки, использует стандартные элементы языка Pascal - функции по работе со строками и числами.
Обзор компонентов
TForm | Форма |
OnRefObject | |
OnProcessCard | |
TGButton | Кнопка |
TGOperationButton | Кнопка выполняющая станд. операцию |
OnPressButton | Обработчик нажатия кнопки TNotifyEvent |
TButtonPanel | Набор кнопок |
TSelectorPanel | Селектор |
OnSuitableObject | Проверка, нужно ли показывать данный объект procedure (Sender:tBasePanel;Obj: TObject;var Suitable:boolean) |
AfterConnectObject | Позволяет изменять свойства кнопки, на которой выводится объект procedure(Obj:TObject; Button:TGCustomButton) |
OnContainChilds | Проверяет, есть ли у объекта подэлементы procedure(Sender: TCustomButtonPanel; Obj: TObject; var res: boolean) |
OnButtonPressed | Обработчик нажатия кнопки TNotifyEvent |
OnSelectItem | Вызывается при выделении объекта (больше для клавиатурных станций) procedure(Obj:TObject; Button:TGCustomButton) |
OnCanChangeSelection | Можно ли переходить к другому элементу procedure (Sender:TCustomButtonPanel;var Allow:boolean) |
OnGetPanelSize | Задание размеров селектора procedure (Sender: TCustomButtonPanel; var RowCount, ColCount, MinRowCount, MinColCount: integer) |
TCheckView | Просмотр содержимого заказа |
OnBeforeCheckViewEdit | Вызывается перед добавлением элемента в заказ procedure (Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string) |
OnAfterCheckViewEdit | Вызывается после добавления элемента в заказ procedure (Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject) |
OnOrderVerify | Вызывается перед важными событиями procedure (Sender: TObject; AVerifyType: TVerifyType; oper: integer; var AContinue: boolean) |
BeforeCurItemChanged | Вызывается перед переходом в CheckView к другой строке procedure (Sender: TObject; NewItem: integer; var Allow: boolean) |
OnGetColors | Позволяет раскрашивать CheckView в зависимости от содержимого заказа procedure (Sender: TObject; CheckItem: TObject; Selected: boolean; var Color, FontColor: TColor) |
OnGetCollection | Задает какую коллекцию показывать в селекторе procedure (Sender:TSelectorPanel; var col:tReferentCollection; var ParentObject:tObject) |
OnCompare | Сравнение элементов. Вызывается для сортировки элементов селектора по типу custom function(a,b:tObject):integer |
OnSendObject | procedure (Sender:TSelectorPanel; var item:tObject) |
TGEditor | Поле ввода для текста |
OnChange | Вызывается для проверки, можно ли изменить текст procedure (Sender: TObject; var NewText: string; var Allow: boolean) |
OnChanged | Вызывается при изменении текста tNotifyEvent |
TNumEditor | Поле ввода для чисел |
OnEnterKey | Вызывается при нажатии кнопки Enter procedure(Sender:TCustomNumEditor;var GoNextField:Boolean) |
TCodeEditor | Поле ввода для выбора элемента справочника |
OnSuitableItem | Проверка, можно ли выбирать данный объект procedure (Sender:tBasePanel;item:tReferentItem;var Suitable:boolean) |
OnNewItem | Вызывается при выборе объекта procedure(Item:tReferentItem;Editor:tCodeEditor) |
TGLabel | Текстовая метка |
TGPanel | Панель |
TTimer | Таймер |
OnTimer | Действие, которое нужно выполнять по срабатыванию таймера TNotifyEvent |
Обзор классов
Есть два вида классов: классы для справочников (referent classes) и классы для чековых данных (checkitem classes). Каждому элементу справочника соответствует определенный класс. Ниже приведен список справочников и соответствующих им классов.
TRK7MenuItem | Элемент меню |
---|---|
TModifier | Модификатор |
Теперь рассмотрим классы для чековых данных
TCheckItem | Общий предок |
---|---|
RO Sifr | Идентификатор |
RO State | Статус: disOpened, disFixed, disPrinted, disPartClosed, disClosed, disDeleted |
RO Seat | Номер посадочного места |
TCheckItemList | Список checkitem'ов |
TDish | Блюдо |
RO Quantity | Количество |
RO SrcQuantity | Исходное количество (до войдирования) |
RO Pieces | Количество порций |
RO Price | Цена |
RW IsUserPrice | Флаг «Цена задана вручную» |
RW UserPrice | Ручная цена |
RO PRListSum | Сумма без учета скидкок |
RO PaySum | Сумма с учетом скидок |
RO MinPrice | Минимальная цена |
RO Modifiers | Список модификаторов |
RO Discounts | Список скидок на блюдо |
RO Consumators | Список консумантов |
RO Voids | Список отказов |
RO PayBindings | Список биндингов |
RW NeedRecalc | Флаг «Нужно пересчитать сумму блюда» |
TPortion | Порционное блюдо |
Weight | Вес блюда |
PortionWeight | Вес одной порции блюда |
WeightPrinted | Флаг «Вес уже был изменен после сервис-печати» |
TRatedDish | Тарифицируемое блюдо |
TModiItem | Модификатор |
TDiscountItem | Скидка |
RO Localization | Локализация скидки (chlVisit, chlOrder, chlOrderSeat, chlDish) |
RW ChargeSource | Происхождение скидки: chsHuman (вручную), chsPay (на оплату), chsAuto (автоматически), chsChangeTip(образована чаевыми), chsInterface (интерфейс), chsMCR (пришла с картой), chsXML. ChsCoupon (купон на скидку) |
RW SrcAmount | Значение скидки в случае скидки с изменяемым значением |
RO CalcAmount | Расчетное значение скидки |
RW BonusType | Идентификатор типа бонуса |
RO CardCode | Код карты |
RO AccountIdent | Номер счета |
RO MInterface | Идентификатор интерфейса |
TConsumItem | Консумант |
TVoidItem | Отказ |
TVisit | Визит |
RO Creator | Идентификатор работника создавшего визит |
RO GuestType | Идентификатор типа гостей |
RO GuestCnt | Количество гостей |
RO StartGuestCnt | Количество гостей без учета закрытых мест |
RO VisitExtraInfoToSave | Сохраняемый комментарий |
RO VisitOtherExtraInfo | Не сохраняемый комментарий |
TOrder | Заказ |
RO OrderName | Имя заказа |
RO BillExists | Флаг «По заказу распечатан пречек» |
RO IsQuickCheck | Флаг «Заказ является быстрым чеком» |
RO Paid | Флаг «Заказ оплачен (пуст)» |
RO CalcBySeats | Флаг «Заказ рассчитан по местам» |
RO MainWaiter | Идентификатор главного официанта |
RO TableID | Идентификатор стола |
RO COT | Идентификатор типа заказа |
RO UOT | Идентификатор категории заказа |
RO Defaulter | Идентификатор типа неплательщика |
RO PriceListSum | Сумма без учета скидок |
RO ToPaySum | Сумма к оплате |
RO PaidSum | Оплаченная сумма |
RO DiscountSum | Сумма скидок/наценок (без учета нераспределяемых) |
RW UserTag1-UserTag4 | Свободные свойства, для использования в скриптах |
TPayBinding | Биндинг |
TTaxItem | Элемент налога |
TDiscPartItem | Элемент скидко-налога |
TChargeLine | Нераспределяемая наценка |
TOrderSession | Пакет |
RO iSessionType | Способ создания пакета: stAuto (автоматически), stManual (вручную), stTransferIn (перенос из другого заказа), stTransferShift (перенос при закрытии смены) |
RO iPriceScale | Идентификатор типа цены |
RO iTradeGroup | Идентификатор торговой группы |
RO iStation | Идентификатор станции на которой пакет был создан |
RO Creator | Идентификатор создателя |
RO Author | Идентификатор последнего правившего заказ |
RO Lines | Список элементов пакета |
RO PrintFlag | Флаг печати: pfNo (не надо), pfNow (текущее время), pfLater (конкретное время), pfPrinted (уже напечатан) |
RO PrintAt | Время печати |
RO RemindFlag | Флаг напоминания |
RO RemindAt | Время напоминания |
RO ReadyFlag | Флаг подачи |
RO ReadyAt | Время подачи |
RO KDSState | Статус КДС |
TOrderSessions | Список пакетов |
TPrintCheckItem | Чек |
RO CheckNum | Уникальный номер чека |
RO PrintNumber | Печатный номер чека |
RO BasicSum | Сумма чека |
RO PRListSum | Сумма чека без учета скидок |
RO TaxSum | Сумма налогов |
RO iPrintStation | Идентификатор станции, на которой чек был распечатан |
RO iPrinter | Идентификатор принтера, на котором чек был распечатан |
RO CloseDateTime | Датавремя закрытия чека |
RO IsBill | Флаг «Пречек» |
RO BillError | Флаг «Ошибка печати пречека» |
RO PrintError | Флаг «Ошибка печати чека» |
TPayLine | Оплата |
RO OriginalSum | Сумма оплаты |
RO BasicSum | Сумма оплаты в базовой валюте |
RO NationalSum | Сумма оплаты в национальной валюте |
RO DBKurs | Ставка |
RO OwnerInfo | Информация о клиенте |
RO PayLineType | Тип платежа: pltCash, pltCrCard, pltHotel, pltPayCard, pltCashExclude (фиктивная сдача), pltOtherNonCash |
RO IsPrepay | Флаг «Предоплата» |
RO CardNum | Номер карты |
RO AccountIdent | Номер счета |
RO Defaulter | Идентификатор типа неплательщика |
RO AuthType | Тип авторизации |
RO MInterface | Идентификатор интерфейса |
TCheckCurrLine | Элемент платежа |
TMcrPay | |
TMcrCoupon |