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

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

22.11.2024 6:21


06.03.2015 12:08
Если еще нужно.
1 диапазон без ограничения сверху.
Количество вычисляется от суммы чека.
Код:
kolvo = math.floor(tonumber(ukm.rightcut(__rep.receipt_amount,3))/500);
text = text .. ukm.rightpad("Получите на кассе " .. tostring(kolvo) .." карточек ",width, " ") .. "\n";
16.07.2015 17:12
Последнее не сработало. Ругалась на "правый кусь": не стал разбираться.
Главная проблема в том, что сумма получается в "хрен знает" каком формате и стандартные операции (преобразования типов, арифметика) не срабатывает (ukm.currency тоже какой-то убогий).
Пришлось в цикле урезать до точки. Тоже замучился (забыл, что в ЛУА НЕРАВНО записывается как ~=, а не <> или !=; об.....ля с функцией string.sub), но победил...
Делал так (receipt.lua) (вставленные мной куски выделены звездочками)
В начале скрипта:
Код:
-- Модуль печати чека
--переменная для сжатой печати
compresed_print = false;
--**********************************************
ITOGO=0;
--**********************************************
В функцию print_hard_subtotal (наверное, в любом месте можно)
Код:
--печать скидок чека
--*******************************************************************
ITOGO=__hard_subtotal.receipt.subtotal.amount;
--*******************************************************************
Ну и в print_receipt_footer (я захотел после СПАСИБО ЗА ПОКУПКУ):
Код:
 text = text .. ukm.center("СПАСИБО ЗА ПОКУПКУ!",width," ") .. "\n";

--**************************************************************

local sss=tostring(ITOGO);
local it="";
-- получаем без копеек
local i = 1;
while string.sub(sss,i,i) ~= "." do
   it=it..string.sub(sss,i,i);
   i = i + 1;
end;
kolvo = math.floor(tonumber(it)/999);
 text = text .. ukm.center("\n\n****************************************",width," ") .. "\n";
text = text .. ukm.center("Получите на кассе " .. tostring(kolvo) .." купона (-ов)",width, " ") .. "\n";
 text = text .. ukm.center("****************************************",width," ") .. "\n\n";
--**************************************************************
З.Ы. Почитав "мурзилку" по ЛУА от С+ нашел НУ ОЧЕНЬ "ВКУСНУЮ" функцию! Все кто не пользовался (по какой-либо причине) рекомендую!!!
Вот она:
Код:
ukm.debug("ТЕКСТ")
или
Код:
PEREMENNAYA=100;
ukm.debug(PEREMENNAYA);
выведет в логи сервера
ТЕКСТ
или
100
соответственно!

Ну прям в восторге!
16.07.2015 17:13
P.P.S. Если кто знает более изящное решение - буду благодарен.
17.07.2015 10:01
ukm.currency вполне себе удобен тем, что автоматически округляется до копеек.
А вот вручную искать в числе точку чтобы выбросить копейки, смысла не вижу. tostring() от currency всегда дает строку с точкой и двузначными копейками (ну, для рублевых единиц по крайней мере).
"Проблемы" могут быть у tonumber() от строки с нецелым числом, где-то она точку воспринимает как разделитель дробной части, а где-то запятую. Сам с таким сталкивался.
28.07.2015 13:08
Во-во! Вот из-за неразберихи с "." и "," пришлось заниматься ....измом...
28.07.2015 14:08
Я так полагаю, что десятичный разделитель определяется локалью. Соответственно, надо либо ее контролировать, либо задавать свою.
Часовой пояс GMT +3, время: 06:21.

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