Форум OlegON > Программы и оборудование для автоматизации торговли > Кассовые программы > УКМ-4

Рекламная акция: на что похоже из уже сделанного? : УКМ-4

28.03.2024 15:03


21.02.2013 10:55
Aleks_Str
 
Придумали наши следующую РА:
Акция проходит в два этапа.
*******************************************************
Первый этап: с ХХ.ХХ.13 по УУ.УУ.13 – выдача скидочных купонов покупателям.
Второй этап: с ZZ.ZZ.13 по KK.KK.13 – предоставление скидки предъявителям купонов
Суть акции:
При совершении покупки на сумму от 1000 руб. в период с ХХ.ХХ.13 по УУ.УУ.13 покупателю будет дано право воспользоваться скидочным купоном на любую покупку на сумму от 200 руб., совершённую в период с ZZ.ZZ.13 по KK.KK.13

За каждую полную тысячу рублей в чеке покупателя выдается купон номиналом 50 руб.
При использовании купонов на скидку покупатель имеет право оплатить ими не более 20% от суммы покупки, остальная часть должна оплачиваться денежными средствами.

Cкидки по купонам суммируются с дисконтной картой.

Предлагаю персонализировать купонами штрих кодами,для отслеживания динамики движения купонов.
***********************************************************
Вопрос: на что похожа эта хотелка из списка УЖЕ РЕАЛИЗОВАННОГО в УКМ4 вер 49СП8?
21.02.2013 13:24
Little
 
Что-то похожее в самом начале УКМ-4 было реализовано для SPAR.
21.02.2013 13:34
Mtirt
 
Лично у меня появились вопросы:
1. Откуда купоны берутся? Их касса печатает? Как будет напечатано в случае чека на 2000 рублей? Два разных купона на 50 рублей или один купон на 100 рублей? Или купоны фиксированного номинала в 50 рублей заранее напечатали в типографии?
2. Во втором этапе что предоставляется? Скидка или оплата на сумму купона? Для меня это немного разные понятия... И что делается с купоном, если 20% меньше его суммы? Можно рассчитаться в следующий раз или всё равно купон отбираем?
21.02.2013 14:15
Onesoft
 
Совершенно аналогичная акция (за исключением сумм) проводится нами уже третий год подряд
До последнего раза (август-2012, 49sp3) реализовывали функционалом "дисконтные карты", на первом этапе (диапазон от стартового номера до конечного) их сканировали в чек со скидкой 0% (регистрация), потом из зарегистрированных генерировали пул номеров с опцией "одноразовая". Реализация сложна: уведомления кассиру через lua, контроль печати валидных купонов (отсекаются лишние), выборка валидных купонов для регистрации на второй этап. Кроме того, есть список товара, на который должно быть предоставлено специальное количество купонов, сумма этого товара исключается из расчёта количества купонов, выдаваемых на общих основаниях. Имеется баг с репликацией "интерактивного маркетинга" ("шторм" серверов), который разработчики пытаются исправить до сих пор..
В 50sp1 появился функционал "Суммовые купоны" (применили в январе на втором этапе очередной акции), возможности его применения выросли многократно (например, можно исключать из акции какой-либо товар, не задавая ему мин.цену), но тот же "шторм" всё портит, приходится постоянно мониторить репликацию данных.. Однако, скоро акция стартует снова, и у разработчиков снова появится возможность продолжить работу над ликвидацией "шторма".

Добавлено через 17 минут 58 секунд
Да, купоны полиграфические (но есть пожарный вариант с печатью уникальных в масштабах Сети 16-разрядных в Code-39 на отрывных талонах).

В случае превышения величины скидки 20%-порога предоставляется скидка 20%:



На этапе регистрации купонов функционал "дисконтные карты" не позволяет ограничивать количество введённых купонов, поэтому на экране кассира при вводе лишнего купона выводится сообщение:



И примерно такой вот печатается чек:



Здесь условия прошедшей акции.
04.03.2013 14:04
Aleks_Str
 
В очередной раз все изменили в самый последний момент.
Первое изменение:
после чека должно вылезти ИКС бумажек с надписью КУПОН НА 50 РУБЛЕЙ.
ИКС считается по формуле СУММА ЧЕКА/1000.
Главное изменение: прием купонов можно сделать через кнопку СКИДКА и далее выпадающий список 50/100/150 и .т.д.
Ограничение на скидку - через минимальную цену.
Все понятно как делать, кроме одного:
как поправить discount_coupon.lua что-бы вылезало ИКС бумажек?

Что-то типа:
X=SummaCheka\1000
For i=1 to X
ПЕЧАТЬ_КУПОНА
Отрезка_купона
next i

З.Ы. С печатью проблемы нет, как и с расчетом. А вот как отправить команду ОТРЕЗАТЬ???
04.03.2013 14:20
Mtirt
 
Из файла под названием "Общие правила работы и написания скриптов" ( Лежит на ФТР С+ в /HELP/UKM/LUA/ )
Цитата:
Класс printer – класс по работе с принтерами
константы: receipt – печать чека
journal – печать контрольной ленты
slip – подкладная печать
write - функция печати на принтере(string Text)
command_init – функция возвращает команду на инициализацию печатающего устройства
command_node - функция возвращает команду на инициализацию той или иной станции печатающего устройства
command_eject - функция возвращает команду на промотку бумаги
command_cut - функция возвращает команду на отрезку чека ()
06.03.2013 11:01
Aleks_Str
 
А как енто пользовать-то?
Вот так пробую - просто пустая строка выходит:
Код:
--Модуль печати купонов

--Чек-скидка типа купон
function print_discount_coupon(__rep, __print_data)
    local Itogo=0.0;
    local kolvo=0.0;
    local printer = ukm.get_printer(ukm.printer_type_master());
    if printer then
        local text = "";
        local width = printer:get_width();
--        text = text .. ukm.center("КУПОН - СКИДКА",width, " ") .. "\n";
--       УДАЛЕНЫ ЗАКОМЕНТИРОВАНЫЕ СТРОКИ ПО УМОЛЧАНИЮ
--        text = text .. ukm.center("*", width,"*") .. "\n"; 
--       первый купон
          text = text .. ukm.slice("Голова купона!!!", width) .. "\n";  
          text = text .. ukm.slice("Тельце купона", width) .. "\n"; 
          text = text .. ukm.slice("Ножки купона", width) .. "\n"; 
--       пытаюсь резать
          text = text .. ukm.center(hw_command_cut,width, " ")  .. "\n"; 
--       второй купон
          text = text .. ukm.slice("Заголовок купона!!!", width) .. "\n";  
          text = text .. ukm.slice("Тельце купона", width) .. "\n"; 
          text = text .. ukm.slice("Ножки купона", width) .. "\n"; 
        __print_data:add(text, ukm.printer_type_master());
   end
end
06.03.2013 18:43
Aleks_Str
 
Победил эту тему.
Спасибо поддержке - отрезку научили делать.
А вот посчитать количество купонов как в прошлый раз - не удалось. Пришлось дооолго и мучительно читать инет про ЛУА.
Засада была в расчете количества купонов.
Напрямую
Код:
 curItogo=__rep.receipt_amount;
поделить не получилось - оно-ж не число.
Стал преобразовывать в число: два часа
Код:
ttt=tonumber(curItogo);
выдавала nil.
В конце концов разобрался: все дело в том, что эта функция не могла определить что это число из-за того, что там была точка, а не запятая. Победил так:
Код:
curItogo=string.gsub(curItogo,"%p",",");
(это отдельная песня с этими регулярными выражениями - что-бы разобраться в них надо немало "поллитров" откушать *102 )

Вот что получилось в результате:
Код:
--Модуль печати купонов

--Чек-скидка типа купон
function print_discount_coupon(__rep, __print_data)    
    local printer = ukm.get_printer(ukm.printer_type_master());
    if printer then        
        local text = "";
        local width = printer:get_width();
        curItogo=__rep.receipt_amount;
       curItogo=string.gsub(curItogo,"%p",",");
       local ttt=0.0;
       ttt=tonumber(curItogo);
        Delit=700.00;
        KolKuponov = math.floor(ttt/Delit);
        for NomerKupona=1,KolKuponov,1 do      
           text = text .. "\n";
           text = text .. ukm.center("АКЦИЯ КАКАЯ-то!",width, " ") .. "\n";
           text = text .. ukm.center("КУПОН НА НЕСКОЛЬКО РУБЛЕЙ РУБ",width, " ") .. "\n";
           text = text .. ukm.center("Периуд действия купона:",width, " ") .. "\n";
           text = text .. ukm.center("с НАЧНЕТСЯ по ЗАКОНЧИТСЯ",width, " ") .. "\n\n";
           text = text .. ukm.center("БЕЗ ЧЕКА - НЕДЕЙСТВИТЕЛЕН!",width, " ") .. "\n\n";
           text = text .. "****************************************\n";
           text = text .. ukm.rightpad("Выдан по чеку " .. __rep.pos .. "." .. tostring(ukm.get_shift_number()) .. "." .. tostring(__rep.receipt_number), width, " ") .. "\n";
           text = text ..  ukm.rightpad("Сумма чека " .. __rep.receipt_amount, width, " ") .. "\n";
           text = text ..  ukm.rightpad("Купон номер " .. tostring(NomerKupona) .. " из "..tostring(KolKuponov), width, " ") .. "\n";
           text = text .. "****************************************\n";
           text = text .. hw_command_cut;
           __print_data:add(text, ukm.printer_type_master());
text = "";  
        end
   end
end
З.Ы. Нашел в commands.lua параметры hw_command_double_weight и hw_command_single_weight, при попытке применить их "в лоб", так-же как и отрезка чеков - слегка обломался Рассуждая логически - это Если случайно знаете как - черканите.
Часовой пояс GMT +3, время: 15:03.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.