Отметка о выдаче блюда в интерфейсе кассы.
Описанный в данном документе скрипт предоставит официантам возможность отмечать выдачу ранее сохраненных блюд заказа.
Небольшой видеоролик, показывающий работу данной функции: https://youtu.be/6NtqDdOf_I8
Внимание!!! Начиная с версий 7.06.02.174 и 7.06.04.109 данный скрипт включен в поставку ПО. При использовании этих (и более старших) версий ничего делать не нужно.
Важно! Во встроенном варианте (который идет в поставке r_keeper) выделение отданных блюд происходит специальным значком в строке с блюдом. В варианте представленном на данной странице - выделение отданных блюд происходит цветом (выделяется вся строка с блюдом).
Если вы используете этот скрипт на более младших версиях, то при обновлении на версии указанные выше рекомендуется отключить наш скрипт и использовать встроенный, т.к. они начинают конфликтовать между собой.
1. В менеджерской станции RK7 в меню «Сервис > Скрипты» добавить новый пользовательский скрипт (Операция) следующего содержания:
procedure ProcessOperation1000455(Parameter: integer); var item:TCheckItem; dish:TDish; i:integer; unis:TStringList; cm:TComponent; begin unis:=TStringList.Create(); unis.text:=RKCheck.CurrentOrder.VisitOtherInfo; //Загружаем текущий список отмеченных блюд item := RKCheck.CurrentCheckItem; //Получаем текущую строку в заказе try if TObject(item) = nil then exit; //Прерываем операцию, если не выбрана ни одна строчка if SYS.ObjectInheritsFrom(item, 'TDish') then //Выделено блюдо? begin dish:=TDish(item); i:= unis.indexof(IntToStr(Dish.uni)); //>=0 если блюдо уже в списке отмеченных if i> -1 then begin if gui.MessageDlgEx('Блюдо уже отмечено как выданное.'#13#10'Снять отметку?', mtConfirmation, mbYes+mbNo, 'Да; Нет') = 6 then unis.delete(i); //Снять отметку end else begin if dish.state <> disPrinted then GUI.ShowMessage('Операция доступна только для сохраненного блюда.') else unis.add(IntToStr(Dish.uni)); //Добавить отметку только если блюдо сохранено end; //сохраняем обновленный список отмеченных блюд RKCheck.UpdateVisitComment(RKCheck.CurrentOrder.VisitExtraInfo,unis.text); //Принудительно перерисовываем заказ cm:=GUI.FindComponentByName('CheckView'); if cm <> nil then begin if SYS.ObjectInheritsFrom(cm, 'TCheckView') then begin TCheckView(cm).Visible:=False; TCheckView(cm).Visible:=True; end; end; end; finally item:=nil; dish:=nil; cm:=nil; unis.free; end; end;
2. Выбираем любую пользовательскую операцию, назначаем на нее данный скрипт, создаем функциональную клавишу с выбранной операцией, добавляем ее (кнопку) на форму редактирования заказа.
3. Копируем предустановленную форму редактирования заказа и заходим в редактор.
4. В редакторе выбираем компонент «CheckView», расположенный в левой части формы
5. Справа переключаемся на вкладку «События», находим событие «OnGetColors», добавляем обработчик (даблклик)
6. Заменяем созданную процедуру на следующую:
procedure CheckViewOnGetColors(Sender: TObject; CheckItem: TObject; Selected: boolean; var Color, FontColor: TColor); var unis:TStringList; begin unis:=TStringList.Create; try unis.Text:=RKCheck.CurrentOrder.VisitOtherInfo; //Загружаем список отмеченных блюд if not ObjectInheritsFrom(CheckItem,'TDish') then Exit; //Если рисуем не блюдо, то прерываем операцию if (unis.indexof(IntToStr(TDish(CheckItem).Uni))>= 0) then //Если блюдо отмечено как выданное, заменяем цвет begin if Selected then Color:=clGreen //Темно зеленый если блюдо выбрано в заказе else Color:=clLime; //Светло зеленый, если не выбрано end; finally unis.free; end; end;
7. Сохраняем изменения на форме, назначаем данную форму на использование в текущей схеме форм
8. Для верности перезапускаем кассу и наслаждаемся новым функционалом.
Особенность: работник должен иметь право на «Редактирование комментария визита».