====== Отметка о выдаче блюда в интерфейсе кассы. ======
Описанный в данном документе скрипт предоставит официантам возможность отмечать выдачу ранее сохраненных блюд заказа.
Небольшой видеоролик, показывающий работу данной функции: [[https://youtu.be/6NtqDdOf_I8|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. Для верности перезапускаем кассу и наслаждаемся новым функционалом.
**Особенность:** работник должен иметь право на "Редактирование комментария визита".