external:dishmark

Отметка о выдаче блюда в интерфейсе кассы.

Описанный в данном документе скрипт предоставит официантам возможность отмечать выдачу ранее сохраненных блюд заказа.

Небольшой видеоролик, показывающий работу данной функции:
https://youtu.be/6NtqDdOf_I8

Внимание!!! Начиная с версий 7.06.02.174 и 7.06.04.109 данный скрипт включен в поставку ПО.
При использовании этих (и более старших) версий ничего делать не нужно.

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

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. Для верности перезапускаем кассу и наслаждаемся новым функционалом.

Данила Матюшев 2019/05/13 19:40

  • external/dishmark.txt
  • Последние изменения: 2019/08/23 09:39
  • Александр Ильин