Чтобы официанты могли контролировать выдачу готовых блюд, настройте изменение цвета блюда и заказа с блюдом, для которого прошло время приготовления.

Работа при этом будет выглядеть следующим образом: 

  1. Менеджер указывает на блюдах время, за которое они должны быть приготовлены и вынесены гостям
  2. При создании заказа на кассе отображается таймер, до окончания которого первое блюдо должно быть вынесено гостю.
    Система понимает, что все блюда готовятся разное время, поэтому на экране отображается минимальное время приготовления. Как только первая позиция готова и вынесена, время пересчитывается относительно следующего блюда.

  3. В процессе обслуживания официант, отдавая блюда гостям, меняет им статус на Выдано
  4. Если кухня задерживает заказ, или официант забыл его забрать на окне выдачи:
    • иконка заказа меняет цвет на красный, сигнализируя о проблеме

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

Для настройки описанного решения:

  1. Настройте статусы выдачи блюд по статье  — убедитесь, что всё работает корректно
  2. В справочнике Меню > Меню у блюда в свойстве Время приготовления укажите максимальное время приготовления в минутах

  3. Далее в справочнике Настройки > Графический интерфейс > Формы в форме Редактирование заказа примените скрипт:
    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


    Для этого:
    1. Сделайте копию с системной формы Редактирование заказа. Поменяйте название, оно задаётся в поле Комментарий
    2. С помощью двойного клика по созданной форме или через поле Модель перейдите к редактированию формы

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

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

  4. В справочнике Настройки > Графический интерфейс > Формы в форме Выбор заказа примените скрипт:
    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


    Для этого:
    1. Сделайте копию с системной формы Выбор заказа. Поменяйте название, оно задаётся в поле Комментарий
    2. С помощью двойного клика по созданной форме или через поле Модель перейдите к редактированию формы

    3. Выберите область выбора заказов, переключитесь на вкладку события, откройте раздел AfterConnectObject и замените пустое значение на указанный скрипт
    4. Укажите измененную форму в качестве основной в используемой схеме форм. При необходимости создайте и назначьте в использование новую Схему форм.
  5. Также в форму Выбор заказа добавьте таймер для автоматического обновления данных на экране и скрипт для него:
    procedure userTimer1OnTimer(Sender: TObject);
    begin
        TButtonPanel((GUI.FindComponentByName('OrderPanel'))).RedrawLevel;  
    end;
    SQL


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

    3. Выделите поле Visit commentary и поменяйте имя на VisitOtherInfo.
    4. Укажите измененную форму в качестве основной в используемой схеме форм. При необходимости создайте и назначьте в использование новую Схему форм.