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

как сделать, чтобы печаталась на чеке сдача? : УКМ-4

20.04.2024 0:07


02.05.2017 12:25
ArchiHaki
 
А кто подскажет как сделать, чтобы печаталась на чеке сдача? А то кассиры недоумевают.
СП101Ф, УКМ 74 сп1.
02.05.2017 12:48
AlgolB
 
Поддерживаю вопрос. Только у меня УКМ 75. И кстати сумма принятая от покупателя равна сумме итога, как и это поправить?
02.05.2017 13:05
Mtirt
 
Разработчики УКМ4 для версии 75 предложили заменить print_receipt_footer.

Код:
 function print_receipt_footer(__footer, __print_data)

    local printer = ukm.get_printer(ukm.printer_type_master());

    if printer then

        local text = "";

        local width = printer:get_width();

 

        if (__footer.receipt.header:client_exists()) then

            if (__footer.receipt.header.client.saletype.type ==

ukm.saletype.sale_wholesale) then

             text = text .. ukm.center("Оптовая продажа", width, " ") .. "\n";

              if (__footer.receipt.header.client.saletype:invoice_exists())

then

                text = text .. ukm.adjustment("Счет-фактура №",

__footer.receipt.header.client.saletype.invoice.number, width, " ") .. "\n";

              else

                text = text .. ukm.slice("Номер счета-фактуры необходимо узнать

у администратора", width) .. "\n";

              end

            end

        end

 

 

    for i=0, __footer.receipt.discounts:size()-1 do

 

        local discount = __footer.receipt.discounts:at(i);

        local properties_iterator =

ukm.map.int.string.iterator(discount.properties);

 

        local slip_index =  ukm.core.field_discount_slip_script;

        local discount_slip = properties_iterator:at(slip_index);

        if( discount_slip ~= "") then

            text = text .. ukm.source(ukm.mashine.handle,discount_slip);

        end

 

     end

 

 

     if __footer.result == ukm.footer.normal then

--         local diff = __footer.receipt:get_clear_total() -

__footer.receipt:receipt_amount();

--            if diff > ukm.currency(0) then

--              text = text .. ukm.adjustment( "                СКИДКА:",

tostring(diff), width, " ") .. "\n";

--            end

        for i = 0, __footer.receipt.payments:size()-1 do

        local __payment = __footer.receipt.payments:at(i);

        if __payment.receipt.type ~= ukm.core.goods_receipt then

            if __payment.type == ukm.payment.void or __payment.type ==

ukm.payment.normal then

                local header_type = __payment.receipt.header:receipt_type();

                if header_type == ukm.header.nonfiscal or header_type ==

ukm.header.sale or header_type == ukm.header.pop then

                    paytype = "ПОЛУЧЕНО";

                elseif header_type == ukm.header.returnbyreceiptnonfiscal or

header_type == ukm.header.returnnonfiscal or header_type == ukm.header.creturn

or header_type == ukm.header.returnbyreceipt then

                    paytype = "ВОЗВРАТ";

                end

            elseif __payment.type == ukm.payment.change then

                paytype = "СДАЧА";

            end

            local npaytype = "";

            if __payment.type == ukm.payment.cancel then

                npaytype = "X";

            elseif __payment.type == ukm.payment.void  or __payment.type ==

ukm.payment.change then

                npaytype = "-";

            end

 

            if __payment.type ~= ukm.payment.change then

                paytype = paytype .. "," ..

ukm.str_upper(__payment.paymentname);

            end

            if(ukm.str_len(paytype .. ":." ..

tostring(__payment.amountwithchange) .. npaytype) > width) then

                local width_currency =

ukm.str_len(tostring(__payment.amountwithchange) .. npaytype);

                text = text .. ukm.adjustment(ukm.slice(paytype .. ":.", width

- width_currency), tostring(__payment.amountwithchange) .. npaytype, width*2 -

width_currency,".")  .. "\n";

            else

                text = text .. ukm.adjustment("   " .. paytype .. ":.",

tostring(__payment.amountwithchange) .. npaytype, width ,".") .. "\n";

            end

        end

    end

 

       text = text .. ukm.center("СПАСИБО ЗА ПОКУПКУ!",width," ") .. "\n";

 --        text = text .. ukm.center("www.monetka.ru",width," ") .. "\n" ..

"\n";

        elseif __footer.result == ukm.footer.cancel then

           text = text .. hw_command_alter_color;

           text = text .. ukm.leftpad("*", width, "*") .. "\n";

           text = text .. "*" .. ukm.center("Ч Е К   А Н Н У Л И Р О В А

Н",width-2," ") .. "*" .. "\n";

           text = text .. ukm.leftpad("*", width, "*") .. "\n";

           text = text .. hw_command_normal_color;

        elseif __footer.result == ukm.footer.push then

           text = text .. hw_command_alter_color;

           text = text .. ukm.leftpad("*", width, "*") .. "\n";

           text = text .. "*" .. ukm.center("Ч Е К   О Т Л О Ж Е Н",width-2,"

") .. "*" .. "\n";

           text = text .. ukm.leftpad("*", width, "*") .. "\n";

           text = text .. hw_command_normal_color;

        elseif __footer.result == ukm.footer.broken then

           text = text .. hw_command_alter_color;

           text = text .. ukm.leftpad("*", width, "*") .. "\n";

           text = text .. "*" .. ukm.center("ВЫКЛЮЧЕНИЕ  ПИТАНИЯ",width-2," ")

.. "*" .. "\n";

 

           text = text .. ukm.leftpad("*", width, "*") .. "\n";

           text = text .. hw_command_normal_color;

        end

 

       if __footer.receipt.type == ukm.core.goods_receipt then

          text = text .. " \n" .. " \n" .. "ПРОДАВЕЦ:_____________" .. " \n" ..

" \n";

          text = text .. ukm.rightpad("М.П.",width," ") .. " \n" .. " \n" .. "

\n";

       end

 

       __print_data:add(text, ukm.printer_type_master());

    end

end
Будет ли работать на 74 сп1 , мне неизвестно.
Но, если честно, предложила бы срочно обновить ее до 75 версии.
У меня на 74 сп1 было ОЧЕНЬ много расхождений с ОФД.
02.05.2017 14:46
AlgolB
 
Цитата:
Mtirt Разработчики УКМ4 для версии 75 предложили заменить print_receipt_footer.
В Вашем примере нет вот этой части:

for i=0, __footer.receipt.discounts:size()-1 do
local discount = __footer.receipt.discounts:at(i);
local properties_iterator = ukm.map.int.string.iterator(discount.properties);

local txt_index = ukm.core.field_discount_print_message;
local txt_msg = properties_iterator:at(txt_index);
if( txt_msg ~= "") then
text = text .. txt_msg .. "\n";
end
end

if __footer.receipt.aoomodeles:size() > 0 then
text = text .. ukm.adjustment("Ваши накопления", "Остаток", width -1, " ") .. "\n";
for i = 0, __footer.receipt.aoomodeles:size()-1 do
local model = __footer.receipt.aoomodeles:at(i);
local signamount = " ";
if(model.optype == 2) then
signamount = " -";
else
signamount = " +";
end
local strvalue = signamount .. tostring(model.amount);
local strname = ukm.left(model:get_account_type_name(),width - 12 - ukm.str_len(strvalue));
text = text .. ukm.adjustment(ukm.adjustment(strname , strvalue, width - 12, " "), " " .. tostring(model.balanceafter), width -1, " ") .. "\n";

end
end



-- Информация по внутренним счетам:
text = text .. get_accounts_info_to_receipt_footer(__footer);


if(__footer.receipt.fiscal_string ~= nil) then
text = text .. ukm.adjseparatedlines(__footer.receipt.fiscal_string, width) .. "\n";
end

Я так понимаю в этой части печатаются данные о состоянии внутреннего счета. Мне это необходимо. Можете выложить именно, что необходимо добавить/удалить для печати сдачи и суммы полученной от покупателя?
02.05.2017 14:53
Mtirt
 
Я выложила ровно тот текст, который был прислан разработчиками УКМ4, когда я сильно и громко ругалась по поводу сдачи с тех.поддержкой.
Лично мне внутренние счета не нужны.
Я сильно сомневаюсь, что в 75 версии вам удастся вывести информацию по ним в чеке, так как фискальник понимает всего два вида оплаты.
Например, подарочные сертификаты в 75 версии отражаются в чеке, как оплата наличными.

Но ничто не мешает вам самостоятельно поэкспериментировать с receipt.lua, т.е. добавить недостающий вам текст в то, что я выложила...
02.05.2017 15:13
AlgolB
 
Цитата:
Mtirt Но ничто не мешает вам самостоятельно поэкспериментировать с receipt.lua, т.е. добавить недостающий вам текст в то, что я выложила...
Я так сейчас и делаю. А у Вас один раз выводится сдача? У меня почему то дважды, причем пробовал и Ваш оригинальный вариант.
02.05.2017 15:46
AlgolB
 
Цитата:
AlgolB А у Вас один раз выводится сдача? У меня почему то дважды, причем пробовал и Ваш оригинальный вариант.
Отбой, это в вебе дважды показывается, в чеке один раз печатается. Все ок. Насчет внутреннего счета как проверю напишу.
02.05.2017 16:00
AlgolB
 
Еще выяснил, не печатается чек при анулировании чека.
02.05.2017 16:20
Mtirt
 
Не печатается. И С+ пока не знает, как заставить печататься.
Только на копии предыдущего чека видно, что чек аннулирован.
02.05.2017 18:24
AlgolB
 
С+ ответили, что аннулированные чеки не печатаются, потому что так задумано и не должны печататься. По сдаче ответили, что решат в 76 версии.
Часовой пояс GMT +3, время: 00:07.

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