Продажа маркированной продукции
В связи с введением обязательной маркировки товаров реализован новый функционал их продажи с передачей информации в систему «Честный знак» (ЦРПТ).
Каждый товар маркируют уникальным двумерным Data Matrix кодом, который наносят на упаковку, ярлык или прямо на товар. Код выдается ЦРПТ, и он содержит информацию о продукции в базе данных системы маркировки.
Data Matrix код состоит из двух частей:
- Код идентификации: это позиция товара в системе и национальном каталоге товаров;
- Код проверки (крипто-хвост): генерируется оператором.
Необходимые требования для Атол: fpAtol 5.7.10 и unifr306000.
Настройки в менеджерской станции
В справочник Меню > Модификаторы по умолчанию добавлена подгруппа "ЕГАИС Маркированная продукция", в которую добавлен предустановленный модификатор "Маркированная продукция".
По умолчанию выставлен чекбокс "Печатать справочное имя". В этом случае в чеке r_keeper будет напечатано имя модификатора "Маркированная продукция" вместо значения отсканированной марки.
Свойство доступно, если выставлен чекбокс "Печатать в чеке".- В справочник Меню > Схемы модификаторов по умолчанию добавлена схема " РОССИЯ: ЕГАИС Маркированная продукция" с предустановленной группой модификаторов "ЕГАИС Маркированная продукция". У группы установлено ограничение 1 по максимальному и минимальному количеству. Модификатор из группы является обязательным.
- В справочник Меню >Классификации блюд по умолчанию добавлена классификация Маркировка/Россия с предустановленными категориями:
- Алкогольные коктейли
- Алкогольные напитки
- Маркированная продукция
- Молочная продукция
- Нет
- Пиво и слабоалкогольные напитки в кегах
- Пиво и слабоалкогольные напитки в упаковках
- Табак
- Упакованная вода.
Если классификация не активирована, активируйте ее.
Если меню было заведено до активации классификации, чтобы активировать классификацию Маркировка\Россия, снимите флаг Обяз. группировка. Активируйте классификацию, распределите блюда по активных категориям, а потом снова выставьте флаг, если обязательная группировка нужна.
Для категории "Маркированная продукция" выбрана предустановленная схема модификаторов "РОССИЯ: ЕГАИС Маркированная продукция".
- В справочнике Сервис > Обработка сигналов и устройств > Mcr алгоритмы добавлен предустановленный алгоритм для считывания кода Data Matrix.
- В справочнике Меню > Меню для маркированной продукции необходимо сделать следующие настройки:
- В разделе Порции — в поле Добавление в заказ выберите значение Отдельная строка для каждой порции
- В разделе Основное — в поле Штрих-коды введите штрих-код этого товара (EAN-13). С его помощью можно выбрать это блюдо в заказ, считав код с помощью сканера. Необязательное свойство.
- В поле Тип товара выбрать один из вариантов:
- Подакцизный товар без кода маркировки — должна быть акцизная марка, но нет DM-кода от Честного Знака. Например: алкогольная продукция.
- Подакцизный товар с кодом маркировки — должна быть акцизная марка, и DM-код от Честного Знака, например Табак.
- Неподакцизный товар без кода маркировки — не должно быть акцизной марки, должен быть DM-код от Честного Знака, но можно продать без него. Например: товар должен быть маркирован, но еще можно продавать (идет срок введения маркировки). Головка сыра должна иметь маркировку, весовые порции — нет.
- Неподакцизный товар с кодом маркировки — обязателен DM-код от Честного Знака, нет акцизной марки. Пример: молочная продукция, упакованная вода.
- Подакцизный товар без кода маркировки — должна быть акцизная марка, но нет DM-кода от Честного Знака. Например: алкогольная продукция.
- В разделе Модификаторы — в поле Ввод Datamatrics при оплате установите чекбокс, если необходимо создавать заказы с маркированным товаром без указания марки. Перед оплатой заказа для всех маркированных товаров необходимо будет добавить марку.
В разделе Классификации укажите необходимую классификацию. В справочнике Настройки >Печать > Схемы печати у представления документа не должно стоять флага Паковать перед печатью.
- В разделе Порции — в поле Добавление в заказ выберите значение Отдельная строка для каждой порции
- Если в Перечисляемом свойстве в Фискальном типе стоит значение, отличное от нуля, то для этого типа ФР используется это значение.
Иначе используется значение по умолчанию из поля Значение. - Для ФФД 1.05 и 1.1 в драйверах fpShtr54 и fpRU_AtolDTO производится подмена значений 27,28,29,32,33 на 1, а 30,31 на 2.
Скрипт, ограничивающий продажу блюд из категории с определенным кодом.
В r_keeper есть ограничение на продажу количества блюд определенной категории. Ниже приведен пример скрипта для ограничения продажи, не более 128 блюд.
procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string); var it : TCheckItem; Categ : TClassificatorGroup; i, dishCount, categCode : integer; begin dishCount := 0; categCode := 10; //Здесь указать код категории Categ := TClassificatorGroup(getitemBycodeNum('ClassificatorGroups', categCode)); for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin it := RKCheck.CurrentOrder.Sessions.Lines[i]; if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then if Categ.IsChild(it.RefItem) then dishCount:=dishCount + 1; end; if AEditType = etInsert then if SYS.ObjectInheritsFrom(AObjectAft, 'TDish') then if (dishCount >= 128) and (Categ.IsChild(TDish(AObjectAft).RefItem)) then begin AAllow:=false; AMessage := 'В этом заказе содержится максимальное количество маркированных товаров: 128. Добавление маркированных товаров в этот заказ невозможно'; end; end; procedure CheckViewOnAfterCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject); var it : TCheckItem; Categ : TClassificatorGroup; i, dishCount, categCode : integer; begin dishCount := 0; categCode := 10; //Здесь указать код категории Categ := TClassificatorGroup(getitemBycodeNum('ClassificatorGroups', categCode)); for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin it := RKCheck.CurrentOrder.Sessions.Lines[i]; if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then if Categ.IsChild(it.RefItem) then dishCount:=dishCount + 1; end; if AEditType = etInsert then if SYS.ObjectInheritsFrom(AObjectAft, 'TDish') then if (dishCount = 128) and (Categ.IsChild(TDish(AObjectAft).RefItem)) then gui.showmessage('В этом заказе уже содержится максимальное количество маркированных товаров: 128. Добавление маркированных товаров в этот заказ невозможно'); end;
Запасной вариант скрипта, который обрабатывает кнопку количество.
function GetQuantity(qnt,s:double; cat:integer): boolean;
var
i:integer;
Categ: TClassificatorGroup;
it : TCheckItem;
kolvo:double;
begin
Categ := TClassificatorGroup(getitemBycodeNum('ClassificatorGroups', cat));
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
it:= RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then
if Categ.IsChild(it.RefItem) then kolvo:=kolvo+TDish(it).Quantity;
end;
if kolvo+qnt>s then result:=true else result:=false;
end;
procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string);
var
numcateg:integer;
Categ: TClassificatorGroup;
maxQNT:double;
begin
//*********Parameters***************
numcateg:=16391; // код категории маркированных товаров
maxQNT:=128; // максимальное количество блюд
//**********************************
Categ := TClassificatorGroup(getitemBycodeNum('ClassificatorGroups', numcateg));
if (AEditType = etInsert) or (AEditType = etChange) then
begin
if SYS.ObjectInheritsFrom(TObject(AObjectBef), 'TDish') then
if (Categ.IsChild(TDish(AObjectBef).RefItem)) then
Begin
if getQuantity(1, maxQNT, numcateg) then
begin
AAllow:=False;
gui.showmessage('В заказе не может быть больше ' + floattostr(maxQNT)+' маркированных товаров!' );
end;
end;
end;
end;
procedure DesignFormOnOperation(Sender: TBasePanel; Operation, Param: integer; var res: integer);
var
ed: TObject;
curitem : TCheckItem;
numcateg:integer;
maxQNT:double;
Categ: TClassificatorGroup;
begin
//*********Parameters***************
numcateg:=16391; // код категории маркированных товаров
maxQNT:=128; // максимальное количество блюд
//**********************************
if operation=rkoEditAmount then
begin
Categ := TClassificatorGroup(getitemBycodeNum('ClassificatorGroups', numcateg));
CurItem := RKCheck.CurrentCheckItem;
ed := TObject(gui.FindComponentByName('Editor'));
if SYS.ObjectInheritsFrom(curitem, 'TDish') then
if (Categ.IsChild(curitem.RefItem)) then
if SYS.ObjectInheritsFrom(TObject(ed), 'TNumEditor') then
if getQuantity(strtofloat(TNumEditor(ed).Text)-TDish(curitem).quantity, maxQNT, numcateg) then
begin
res:=1;
gui.showmessage('В заказе не может быть больше ' + floattostr(maxQNT)+' маркированных товаров!' );
end;
end;
end;
Примеры использования
Продажа с указанием марки сразу после добавления товара в заказ
- Выберите товар в заказ вручную из меню, или отсканировав с товара код EAN-13. Затем отсканируйте DataMatrix код.
- При выборе товара к нему автоматически будет добавлен уникальный DataMatrix код (марка) в виде обязательного модификатора.
- Оплатите заказ стандартным образом.
При оплате заказа будет распечатан чек r_keeper, в котором вместо марки печатается имя модификатора.
При оплате заказа будет распечатан фискальный чек, в котором печатается тип товара "Подакцизный товар". DataMatrix код не печатается.
DataMatrix код передается только в ОФД.
Контрольно-кассовая техника отправляет данные о реализации маркированного товара в оператор фискальных данных, а тот в систему Честный Знак
В печатной форме чека по ФФД 1.1 отображается буква [M] с префиксом в квадратных скобках.
В зависимости от ответа статуса кода:
[M+] — фискальный накопитель положительно проверил крипто хвост КИ, и прошла проверка статуса в системе Честный знак
[M] — указывается, если любая из проверок не была завершена успешно. Или если аппарат работает в автономном режиме, без подключения к интернету;
[М-] — печатается на чеке, если возникла хотя бы одна ошибка при проверке, но кассир завершил реализацию по согласованию с гостем. Возможна ошибка в указании или в верификации кода есть сомнения.
Если валюта не является фискальной, а маркированная продукция полностью или частично закрывается этой валютой, то при оплате марка не передается в ОФД и, следовательно, в систему Честный Знак.
Продажа с отложенным указанием марки
Привязка уникального DataMatrix кода осуществляется не при добавлении блюда в заказ, а позже — перед оплатой. Код можно привязать как к несохраненному, так и к сохраненному блюду.
Примеры использования:
Обслуживание очереди через r_k Waiter. В заведении быстрого обслуживания сотрудник принимает заказ у гостей, ожидающих в очереди. На момент создания заказа у него нет в руках товара, который нужно отсканировать. Марку добавит сотрудник, собирающий заказ.
Доставка. На момент создания заказа не известно, какая марка попадет в заказ. Сборщик добавляет марку, после отдает заказ курьеру.
- Заказ, оформленный на киоске самообслуживания. Марка добавляется на KDS PRO в момент сборки заказа.
Работа на кассе.
- Добавьте товар в заказ вручную из меню или отсканируйте с его упаковки код EAN-13.
- Сохраните заказ
Перед оплатой заказа выберите маркированный товар и отсканируйте его DataMatrix код.
Если в заказе есть маркированные товары, для которых не указан DataMatrix код, то такой заказ оплатить нельзя. Система выдаст сообщение:- При оплате заказа будет распечатан чек r_keeper, в котором марка печатается как модификатор, и фискальный чек, в котором будет указан тип товара "Подакцизный товар". DataMatrix код в фискальном чеке не печатается и передается только в ОФД.
Расчет по местам
При расчете по местам блюда, относящиеся к категории Маркированная продукция, нельзя оставить в общих блюдах.
При расчете чека по местам, если в заказе есть маркированное блюдо с незаполненным местом, выйдет ошибка.
Настройки ОКП
Если код маркировки не выбывает в Честном Знаке:
- Убедитесь что ОФД отправляет данные в Честный Знак
- Проверьте настройку ОКП
ОКП — сервер обновления ключей проверки.
ОКП должен обновляться автоматически кассовой программой, при открытии смены.
Для этого в настройках фискального регистратора укажите IP адрес и Порт:
- Адрес: prod01.okp-fn.ru
- IP адрес: 31.44.83.184
- Порт: 26101