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

Преобразование типов в луа: из currency в numeric : УКМ-4

19.03.2024 10:21


30.03.2012 20:54
УКМ_эксплуатант
 
Опять возникла похожая задача (см Печать в чеке чего-либо в зависимости от ИТОГО на чеке).
Но теперь делить надо не на 1000, а на 599/699/799 и т.д., т.е. без деления не обойтись.
Пытаюсь сделать так:

Код:
function print_receipt_footer(__footer, __print_data)
...
...
   text = text .. ukm.center("Спасибо за покупку!",width," ") .. "\n";

       text=text.."\n".."\n";
       
       local Delit=1.0;
       local Priznak= ;//определяем признак
       if Priznak=="1" then
          Delit=699.0;
       else
          Delit=799.0;
       end;    
       local KolvoKup= ITOGO/Delit;   // А ВОТ ТУТ КОСЯК!!!

       local tempStr=tostring(KolvoKup);
       text=text.."Проверочка "..tempStr.."\n";
       text=text.."\n".."\n";
Косяк заключается в том, что при делении происходит ошибка типа : для типа currency не перегружена операция деления.
Попытка сделать так:
Цитата:
local strItogo = tosting (ITOGO);
local dblItogo = tonumeric(strItogo,10);
local KolvoKup= dblItogo/Delit;
дает ошибку что dblItogo есть null (или nill).

Начал писать синтаксический разбор ITOGO (ИТОГО=первый символ+второй*10+третий*100+....). Утешает то, что вероятноcть покупки более 99999 ничтожно мала (ну сделаю до 999999 руб).

Но все-таки тешу себя надеждой что есть штатный способ поделить ДЕНЕЖКУ на ЦИФИРЬКУ....

Добавлено через 2 минуты 41 секунду
P/S/
Подставились смайлики.
Читать так:

(ИТОГО=первый символ+ второй * 10 + третий * 100 +....).
02.04.2012 07:46
Mtirt
 
Мне надо было не делить, а умножать.
В итоге это выглядело так:
Цитата:
text = text .. "\n";
text = text .. ukm.center("Уважаемый, покупатель! За эту покупку",width," ") .. "\n";
text = text .. ukm.center("Вы могли получить от "..tostring(__footer.receipt.subtotal.amount*ukm.currency(0.01)).." до "..tostring(__footer.receipt.subtotal.amount*ukm.currency(0.03)),width," ") .. "\n";
text = text .. ukm.center("поощрительных баллов, если бы" ,width," ") .. "\n";
text = text .. ukm.center("воспользовались картой Копилка!" ,width," ") .. "\n".. "\n";
Может тебе тоже написать: KolvoKup= dblItogo/ukm.currency(Delit) ?
02.04.2012 12:41
УКМ_эксплуатант
 
Победил. Спасибо за подсказку.
Вот что получилось:
Это в функции print_hard_subtotal
Тут, в зависимости от того, что записано в свойстве КПП магазина выбирается делитель и считается количество купонов.
Цитата:
text = text .. print_netto_subtotal(__hard_subtotal.receipt.items:leavenormal());
--***************************************************
curItogo=(__hard_subtotal.receipt.subtotal.amount);
local Priznak=ukm.shop_kpp;
local Delit=0.0;
if (Priznak=="1") then
Delit=699.00;
else
Delit=799.00;
end
KolKupov = curItogo/ukm.currency(Delit)+ukm.currency(0.5);
--***************************************************

if string.len("К ОПЛА
Это вписано первой строкой впереди всех функций:
Цитата:
KolKupov = 0.0;
А это в фйнкции print_receipt_footer
Цитата:
text = text .. ukm.center("СПАСИБО ЗА ПОКУПКУ!",width," ") .. "\n\n";
--********************************************************************************
local tempStr=tostring(KolKupov);
-- отрезаем последние три символа
tempStr=string.sub(tempStr,1,string.len(tempStr)-3);
if (tempStr ~= "0") then
text = text .. ukm.center("АКЦИЯ!",width," ") .. "\n";
text = text .. ukm.center("Получите "..tempStr.." наклеек!",width," ") .. "\n";
text = text .. ukm.center("Соберите 100 штук - получите телефизор",width," ") .. "\n";
text = text .. ukm.center("Соберите 200 штук - получите магнитофон",width," ") .. "\n";
text = text .. ukm.center("Соберите 300 штук - получите кучу фсего!",width," ") .. "\n\n";
end
--********************************************************************************
Часовой пояс GMT +3, время: 10:21.

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