02.02.2017 14:40
jfk74
 
Поставили задачу максимально сократить чек при печати, видел тут тему, но сейчас что то не могу найти поиском.
Нужно в одну строчку печатать

артикул название(8 символов) количество*цена сумма

ну или чтото около того.

Готовым Luaшником никто не поделится?
Спасибо.
02.02.2017 16:08
Eugin_S
 
Сейчас это не актуально - все переделывать нужно из-за 54ФЗ, там появилась куча новых обязательных аттрибутов, в т.ч для каждой позиции налоговая ставка и сумма скидки, в одну строку не влезет никак. Да и редактировать новый чек через LUA теперь нельзя.
02.02.2017 17:16
jfk74
 
Ну у нас до 01.07.17 есть еще время. Работаем пока на 69sp6. Там lua вполне редактируемый. Ну а то что будет после 01.07 будем об этом потом думать)
07.02.2017 05:07
qwrty40
 
Мой изврат (кому интересно)...
Включаем сжатый режим печати (56 символов на строку). Правим receipt.lua (функция print_item_to_printer(...) ):
Код:
--        text = text .. ukm.left(__item.item .. " " .. __item.name, width - 1) .. "\n";
        text = text .. ukm.left(__item.item .. " " .. __item.name, 31);

        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";
        end
    end


--      if ukm.str_len(" " .. __item.measurement .. "*" ..  tostring(__item.totalquantity) .. "*" .. tostring(__item.price) .. " " .. tostring(__item.total) .. itemsign) < (width + 1) then
       if ukm.str_len("   " .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price) .. " " .. tostring(__item.total) .. itemsign) < 25 then

--           text = text .. ukm.adjustment(" " .. __item.measurement .. "*" .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price), tostring(__item.total) .. itemsign, width, " ") .. "\n";
           text = text .. ukm.adjustment("   " .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price), tostring(__item.total) .. itemsign, 24, " ") .. "\n";

       else

--           text = text .. ukm.rightpad(" " .. __item.measurement .. "*" .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price) .. " ", width-1, ".") .. "\n";
           text = text .. ukm.rightpad("\n" .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price) .. " ", width-1, ".") .. "\n";

           text = text .. ukm.leftpad(tostring(__item.total) .. itemsign, width, ".") .. "\n";
       end
Штатные строки заремлены, мое "творчество" строкой ниже...
07.02.2017 05:09
qwrty40
 
Хотел блок кода вставить...
Вот оно

-- text = text .. ukm.left(__item.item .. " " .. __item.name, width - 1) .. "\n";
text = text .. ukm.left(__item.item .. " " .. __item.name, 31);

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";
end
end


-- if ukm.str_len(" " .. __item.measurement .. "*" .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price) .. " " .. tostring(__item.total) .. itemsign) < (width + 1) then
if ukm.str_len(" " .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price) .. " " .. tostring(__item.total) .. itemsign) < 25 then

-- text = text .. ukm.adjustment(" " .. __item.measurement .. "*" .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price), tostring(__item.total) .. itemsign, width, " ") .. "\n";
text = text .. ukm.adjustment(" " .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price), tostring(__item.total) .. itemsign, 24, " ") .. "\n";

else

-- text = text .. ukm.rightpad(" " .. __item.measurement .. "*" .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price) .. " ", width-1, ".") .. "\n";
text = text .. ukm.rightpad("\n" .. tostring(__item.totalquantity) .. "*" .. tostring(__item.price) .. " ", width-1, ".") .. "\n";

text = text .. ukm.leftpad(tostring(__item.total) .. itemsign, width, ".") .. "\n";
end
07.02.2017 14:52
jfk74
 
qwrty40, то что надо. спасибо. но еще хотелось бы добавить вот что. Если длина __item.item .. " " .. __item.name меньше 31 символа, то добить в конце пробелами до длины 31 символов?
07.02.2017 23:37
qwrty40
 
Цитата:
jfk74 qwrty40, то что надо. спасибо. но еще хотелось бы добавить вот что. Если длина __item.item .. " " .. __item.name меньше 31 символа, то добить в конце пробелами до длины 31 символов?
Функция ukm.adjustment, как я понимаю: (что, до какой длины, чем)...

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