Контроль выдачи блюд
Чтобы официанты могли контролировать выдачу готовых блюд, настройте изменение цвета блюда и заказа с блюдом, для которого прошло время приготовления.
Работа при этом будет выглядеть следующим образом:
- Менеджер указывает на блюдах время, за которое они должны быть приготовлены и вынесены гостям
- При создании заказа на кассе отображается таймер, до окончания которого первое блюдо должно быть вынесено гостю.
Система понимает, что все блюда готовятся разное время, поэтому на экране отображается минимальное время приготовления. Как только первая позиция готова и вынесена, время пересчитывается относительно следующего блюда.
- В процессе обслуживания официант, отдавая блюда гостям, меняет им статус на Выдано
- Если кухня задерживает заказ, или официант забыл его забрать на окне выдачи:
- иконка заказа меняет цвет на красный, сигнализируя о проблеме

- блюда с задержкой также выделяются цветом внутри заказа.

- иконка заказа меняет цвет на красный, сигнализируя о проблеме
Для настройки описанного решения:
- Настройте статусы выдачи блюд по статье — убедитесь, что всё работает корректно
- В справочнике Меню > Меню у блюда в свойстве Время приготовления укажите максимальное время приготовления в минутах

- Далее в справочнике Настройки > Графический интерфейс > Формы в форме Редактирование заказа примените скрипт:Для этого:
procedure CheckViewOnGetColors(Sender: TObject; CheckItem: TObject; Selected: boolean; var Color, FontColor: TColor); var dState:string; smin:double; begin if SYS.ObjectInheritsFrom(TObject(TDish(CheckItem)), 'TDish') then begin smin:=0.0006944*TDish(CheckItem).CookMins; if ((TDish(CheckItem).Session.StartService+smin)<now) and (smin>0) then if TDish(CheckItem).KdsTakeOff=false then begin if Selected then Color:=clGreen else Color:=clLime; end; end; end; procedure DesignFormOnAfterOperation(Sender: TObject; Operation, Param: integer); var i:integer; it:tcheckitem; m, mTime:Tdatetime; fmin:double; begin if operation=rkoSaveOrder then begin mTime:=now+1; fmin:=0; for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin it := RKCheck.CurrentOrder.Sessions.Lines[i]; if SYS.ObjectInheritsFrom(it, 'TDish') then if (TDish(it).quantity>0) and (TDish(it).CookMins>0) and (TDish(it).KdsTakeOff=false) then begin fmin:=0.0006944*TDish(it).CookMins; if TDish(it).state=disOpened then m:=now+fmin else m:=TDish(it).Session.StartService+fmin; if mTime>m then mTime:=m; end; end; if fmin<>0then RKCheck.UpdateVisitComment(RKCheck.CurrentOrder.Visit.VisitExtraInfoToSave, timetostr(mTime)) else RKCheck.UpdateVisitComment(RKCheck.CurrentOrder.Visit.VisitExtraInfoToSave, '') ; end; end;SQL- Сделайте копию с системной формы Редактирование заказа. Поменяйте название, оно задаётся в поле Комментарий
- С помощью двойного клика по созданной форме или через поле Модель перейдите к редактированию формы

- Выберите область заказа, переключитесь на вкладку события, откройте раздел OnGetColors и замените пустое значение на указанный скрипт

- Укажите измененную форму в качестве основной в используемой схеме форм. При необходимости создайте и назначьте в использование новую Схему форм.

- В справочнике Настройки > Графический интерфейс > Формы в форме Выбор заказа примените скрипт:Для этого:
procedure OrderPanelAfterConnectObjectScript(Obj: TObject; Button: TGCustomButton); begin if SYS.ObjectInheritsFrom(Obj, 'TOrder') then begin if Torder(obj).Visit.VisitOtherExtraInfo<>'' then if strtotime(Torder(obj).Visit.VisitOtherExtraInfo)<time then Button.Color:=clRed; end; end;SQL- Сделайте копию с системной формы Выбор заказа. Поменяйте название, оно задаётся в поле Комментарий
- С помощью двойного клика по созданной форме или через поле Модель перейдите к редактированию формы

- Выберите область выбора заказов, переключитесь на вкладку события, откройте раздел AfterConnectObject и замените пустое значение на указанный скрипт

- Укажите измененную форму в качестве основной в используемой схеме форм. При необходимости создайте и назначьте в использование новую Схему форм.

- Также в форму Выбор заказа добавьте таймер для автоматического обновления данных на экране и скрипт для него:Для этого:
procedure userTimer1OnTimer(Sender: TObject); begin TButtonPanel((GUI.FindComponentByName('OrderPanel'))).RedrawLevel; end;SQL- Откройте ранее сделанную копию формы Выбор заказа.
- С помощью двойного клика по созданной форме или через поле Модель перейдите к редактированию формы
- Выберите компонент TTimer и на вкладке События вставьте указанный скрипт

- Если хотите, чтобы на кнопке заказа отображалось время готовности ближайшего блюда, отредактируйте форму Кнопки с заказами (обычные):
- Сделайте копию с системной формы Кнопки с заказами (обычные). Поменяйте название, оно задаётся в поле Комментарий
- С помощью двойного клика по созданной форме или через поле Модель перейдите к редактированию формы

- Выделите поле Visit commentary и поменяйте имя на VisitOtherInfo.

- Укажите измененную форму в качестве основной в используемой схеме форм. При необходимости создайте и назначьте в использование новую Схему форм.
