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

Как в lua умножить дробное число на целое число : УКМ-4

19.04.2024 16:17


29.05.2014 15:59
vdm
 
У меня в виндовом веб-интерфейсе на старой версии укм, "15.20" нормально преобразуется в число, nil получается от строки с запятой. Или на кассе по-другому, или в твоей версии поменялось.

Насчет замены в gsub, там точка - это спецсимвол regexp, в lua ее процентом экранировать нужно.

Код:
string.gsub(property.value, "%.", ",");
29.05.2014 17:39
Tiger
 
Завтра попробую оба вариант! А как на крайний случай перебрать по символьно строку в цикле и склеить уже строку с запятой вместо точки?
30.05.2014 05:56
Tiger
 
Всё получилось действительно нужно было поставить % перед точкой
Цитата:
string.gsub(property.value, "%.", ",");
Ну а дальше уже формула рассчитала комиссию!
30.05.2014 06:42
Mtirt
 
Насколько я помню, в УКМ4 надо не в число это всё переводить а в currency.
Т.е. tocurrency использовать. Причем, это лучше сделать с 0.04. Её привести и умножить...
30.05.2014 18:12
Павел Сосновских
 
tocurrency не нашел
точно есть ukm.currency()

например, есть такой код в receipt.lua:
Код:
text = text .. ukm.adjustment(" " .. discount.name, tostring(discount.increment*ukm.currency(-1)) .. " ", width, " ") .. "\n";
так что надо:
Код:
commission = tostring(ukm.currency(property.value) - ukm.currency(property.value)*ukm.currency(0.04));
02.06.2014 07:10
Mtirt
 
Да, конечно ukm.currency().
05.06.2014 19:12
Tiger
 
Цитата:
for i = 0, __item.properties:size() - 1 do
local property = __item.properties:at(i);
if (ukm.binary(property.flags) *
ukm.binary(ukm.item_property.flgprint)):get() ~= 0 then
local property_name = property.code;
if property.name ~= nil then
property_name = property.name:get();
end
text = text .. ukm.adjustment(" " .. property_name, property.value .. " ", width, ".") .. "\n";
if property_name == 'Сумма' then
commission = string.gsub(property.value, "%.", ",")-string.gsub(property.value, "%.", ",")*0.04;
end
if property_name == 'Номер телефона' then
text = text .. ukm.adjustment("Сумма с комиссией (4%)",round(commission,2) .. " ", width, ".") .. "\n";
end
end
end
На толкнулся еще на одну проблему почему-то в чеке не печатается строка property.name равна Сумма! Из какой таблицы берутся property.value и property.name? Вследствие чего получаю ошибку так ка comission равна null!
05.06.2014 19:13
Tiger
 
Цитата:
Mtirt Да, конечно ukm.currency().
Ошибка:

Цитата:
16:45:01: 0x00004000: WARNING: debug#/usr/local/storage/home/ukm/build-br-59-2014_05_29_15_43_01/ukm/libukm/ccore.cpp(3275) ReceiptAppendPayment: No matching overload found, candidates:
void __init(luabind::argument const&,quantity const&)
void __init(luabind::argument const&,currency const&)
void __init(luabind::argument const&,custom [d])
06.06.2014 06:58
Mtirt
 
Объясни мне, как я по сообщению об ошибке должна угадать, что ты там такого понаписал?
06.06.2014 07:38
Tiger
 
Цитата:
Mtirt Объясни мне, как я по сообщению об ошибке должна угадать, что ты там такого понаписал?
commission = tostring(ukm.currency(property.value) - ukm.currency(property.value)*ukm.currency(0.04));
Часовой пояс GMT +3, время: 16:17.

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