Введение в скрипты

В справочнике (Сервис-Скрипты) содержатся в систематизированном виде практически все скрипты, которые могут использоваться в системе. Скрипты из этого справочника можно подвязать к операциям (справочник Сервис-Операции).

Скрипты так же можно писать в обработчике событий формы (справочник "Настройки-Графический интерфейс-Формы-Модель формы"), в дизайнере Макетов, в 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