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