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

Печать в чеке чего-либо в зависимости от ИТОГО на чеке : УКМ-4

29.03.2024 2:07


29.03.2012 12:46
УКМ_эксплуатант
 
А вдруг кому-то пригодится. Если так не считаете - прибейте тему.
А дело было так: придумали маркетологи акцию - за каждую полную тыщу в ИТОГО покупателю дается ШТУК (а моем случае это был КУПОН), который потом можно тем или иным макаром применить. Т.е. у покупателя товаров на 3456 руб, то выдается 3 КУПОНА, 1234 - 1 КУПОН и т.д.
Вот как я это реализовал. Может кому пригодится
А если подскажут, как это сделать более "изящно" - буду рад посмотреть...
Пихаем этот кусок "кода" в скрипт receipt.lua функция print_hard_subtotal
Код:
       if string.len("К ОПЛАТЕ:." .. ukm.leftpad(tostring(__hard_subtotal.receipt.subtotal.amount), 14, ".") .. " ", width, " ") < (width + 1) then
          text = text .. ukm.leftpad("К ОПЛАТЕ:." .. ukm.leftpad(tostring(__hard_subtotal.receipt.subtotal.amount), 14, ".") .. " ", width, " ") .. "\n";

-- *************************************************************************************************************
--              ПЕЧАТЬ ИНФОРМАЦИИ О КУПОНАХ

          text=text.."\n".."\n";
          local tempStr=tostring(__hard_subtotal.receipt.subtotal.amount);
          local t1=string.sub(tempStr,1,1);
          local t2=string.sub(tempStr,2,2);
          local t3=string.sub(tempStr,3,3);
          local t4=string.sub(tempStr,4,4);
          local t5=string.sub(tempStr,5,5);
          local t6=string.sub(tempStr,6,6);
          local Poz=0;         
          if t1=="." then
            Poz=1;
          end;
          if t2=="." then
            Poz=2; 
          end;
          if t3=="." then
            Poz=3;
          end;  
          if t4=="." then
            Poz=4;
          end;
          if t5=="." then
            Poz=5;
          end; 
          if t6=="." then
            Poz=6;
          end;
          local KolvoKuponov=0;
          if Poz==5 then
             KolvoKuponov=t1+0;
          else 
             if Poz==6 then
                KolvoKuponov=(t1..t2)+0;
             end;
          end;  
-- собственно печать количества купонофф


       text = text .. ukm.center("!!!!! ВНИМАНИЕ - АКЦИЯ !!!!!",width," ") .. "\n";
       text = text .. ukm.center("C _______ до ____________",width," ") .. "\n";
       text = text .. ukm.center("Количество купонов - "..KolvoKuponov ,width," ") .. "\n";
       text = text .. ukm.center("ЧТО-ТО О ПРИМЕНЕНИИ КУПОНОВ" ,width," ") .. "\n";
          text=text.."\n".."\n";
-- *************************************************************************************************************



       else
          text = text .. ukm.rightpad("К ОПЛАТЕ:.", width, ".") .. "\n";
          text = text .. ukm.leftpad(tostring(__hard_subtotal.receipt.subtotal.amount) .. " " ,width, ".") .. "\n";

-- *************************************************************************************************************
--              ПЕЧАТЬ ИНФОРМАЦИИ О КУПОНАХ

          text=text.."\n".."\n";
          local tempStr=tostring(__hard_subtotal.receipt.subtotal.amount);
          local t1=string.sub(tempStr,1,1);
          local t2=string.sub(tempStr,2,2);
          local t3=string.sub(tempStr,3,3);
          local t4=string.sub(tempStr,4,4);
          local t5=string.sub(tempStr,5,5);
          local t6=string.sub(tempStr,6,6);
          local Poz=0;         
          if t1=="." then
            Poz=1;
          end;
          if t2=="." then
            Poz=2; 
          end;
          if t3=="." then
            Poz=3;
          end;  
          if t4=="." then
            Poz=4;
          end;
          if t5=="." then
            Poz=5;
          end; 
          if t6=="." then
            Poz=6;
          end;
          local KolvoKuponov=0;
          if Poz==5 then
             KolvoKuponov=t1+0;
          else 
             if Poz==6 then
                KolvoKuponov=(t1..t2)+0;
             end;
          end;  
-- собственно печать количества купонофф

         text = text .. ukm.center("!!!!! ВНИМАНИЕ - АКЦИЯ !!!!!",width," ") .. "\n";
       text = text .. ukm.center("C _______ до ____________",width," ") .. "\n";
       text = text .. ukm.center("Количество купонов - "..KolvoKuponov ,width," ") .. "\n";
       text = text .. ukm.center("ЧТО-ТО О ПРИМЕНЕНИИ КУПОНОВ" ,width," ") .. "\n";
          text=text.."\n".."\n";
-- *************************************************************************************************************



       end

       if __hard_subtotal.receipt.type == ukm.core.goods_receipt then
29.03.2012 18:04
vdm
 
В недоумении
- Не заметил смысла в 2-х одинаковых вставках кода внутрь if string.len(...
Почему не вынести наружу 1.
- Количество купонов - целое от деления суммы на 1000 - не?
29.03.2012 21:29
УКМ_эксплуатант
 
Два раза потому-что так заработало, а так как нужно было "вчера" - то так и запустили в дело. А потом было лень "вылизывать" код - работает и ладно...
Да. Количество купонов=целое от ИТОГО/1000
Но зачем лишний раз преобразовывать и считать, если пятый и шестой символы слева от точки и так дают количество купонов?

Добавлено через 4 минуты 58 секунд
ААА! Сейчас опять сообразил зачем два раза дела!
Два раза делается для того, что-бы эта надпись печаталась в любом случае: и когда "К ОПЛАТЕ" влезает в одну строчку, и когда не влезает.
З.Ы. Вроде так. В общем привязка к оформлению строки "К ОПЛАТЕ"....
30.03.2012 07:18
Mtirt
 
И какая связь со строкой "К ОПЛАТЕ"?
Ты же всё равно эту информацию с отдельной строки печатаешь?
30.03.2012 10:21
УКМ_эксплуатант
 
Хотели, что-бы эта информация печаталась после строки "К ОПЛАТЕ".
Насколько помню, это значение (итого) смог получить (может неправильно что-то писал) только в этой функции.
26.02.2015 10:02
Nordik
 
Подскажите пож-та нужно почти тоже самое . Только нужно чтобы печатался купон в котором было бы указано N карточек выдать. N(целое)= сумма чека/500. Т.е при покупке на сумму чека 2750 чтобы в купоне было напечатано "Получите у кассира 5 карточек", для этого сделал скидку печать купона от суммы чека равной 500руб.
Что нужно прописать в скрипте чтобы он высчитал кол-во карточек и это кол-во напечатал в купоне ? Спасибо
26.02.2015 10:14
Mtirt
 
Может не надо на чеке печатать, а просто выдать сообщение кассиру? На монитор?
26.02.2015 10:20
Nordik
 
Цитата:
Mtirt Может не надо на чеке печатать, а просто выдать сообщение кассиру? На монитор?
Поставили задачу такую чтобы клиент знал сколько ему должны выдать карточек, и кассир не забрала их себе.
26.02.2015 10:38
Mtirt
 
Как обычно, традиционные вопросы: что именно сделали, где не получается, какие ошибки и в каком месте получаете?
26.02.2015 11:21
Nordik
 
Сделал скидку печать купона от суммы чека равной 500руб.
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();
text = text .. ukm.center("Акция ",width, " ") .. "\n";
text = text .. ukm.rightpad("Получите на кассе " .. __rep.discount.." карточек ",width, " ") .. "\n";
text = text .. ukm.center("*", width,"*") .. "\n";
__print_data:add(text, ukm.printer_type_master());
end
end
в данном случае просто прописал в скидке диапазоны по 500 до 10000 , и беру rep.discount = в зависимоти от диапазона кол-ву карточек.
но проблема в том что чеки могут быть и 20000 и прописывать это в каждом магазине не вариант так как нет СГО. а с скриптами Lua не знаком.
Часовой пояс GMT +3, время: 02:07.

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