[ОТВЕТИТЬ]
Опции темы
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, время: 14:38.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.