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

Печать слипа сбербанка в составе чека : УКМ-4

20.05.2022 18:18


Контакты Поиск
21.03.2022 06:27
LightStep
 
Добрый день.
Подскажите вопрос. Решил перенести печать слипа в состав чека и столкнулся с проблемой. Символы скобок в этом случае заменяются переносом строки. Смог от ТП добиться только функции которая печатает слип в составе чека: print_receipt_slip в slip.lua. Может кто то уже модернизировал эту функцию, что-бы убрать этот недостаток?
21.03.2022 06:33
OlegON
 
лучше писать версию УКМ, на чем печатаешь и его версию, а так же какой конкретно текст со скобками?
21.03.2022 06:48
LightStep
 
УКМ4 102сп1
ФР402 с последней прошивкой 10.4.746. Ниже слипы отдельным документом и в составе чека.



(0.02Мб)


(0.15Мб)

Правка: LightStep, 21.03.2022 06:52 Причина: указание версии прошивки
21.03.2022 08:33
LightStep
 
Немного переделал функцию. Стало лучше, но все равно есть лишние переводы каретки. Есть идеи?
function print_receipt_slip(__payment, __is_last, __print_data)
local text = 'return "' .. __payment.slip .. '"'
text = ukm.source(ukm.mashine.handle, text)

tbl = split(text, '\n')
text = ''
local ln = ''
local n = #tbl
for i = 1, n do
ln = rtrim(tbl[i])
if ln ~= '' then
text = text .. ln .. ' '
end
end
text = rtrim(text)

local line = ''
local lines = ''
for word in (text .. " "):gmatch("(.-) ") do

if #line + #word < 56 then
line = line .. " " .. word
else
lines = lines .. line .. '\n'
line = word
end
line = line:match("^%s*(.-)%s*$")
end
text = lines

if not __is_last then
local printer = ukm.get_printer(ukm.printer_type_master())
text = text .. '\n' .. string.rep('-', printer:get_width())
end
__print_data:add(text, ukm.printer_type_master())
end


(0.04Мб)
21.03.2022 09:58
student
 
Цитата:
LightStep но все равно есть лишние переводы каретки
если ты про пустую строку перед --------------
то попробуй убрать \n в строке
Цитата:
LightStep text = text .. '\n' .. string.rep('-', printer:get_width())
21.03.2022 10:04
LightStep
 
По скрипту должен быть перенос по словам. при превышении длины строки 56 символов. Поэтому "Одобрено" по идее должно быть на строчку выше, после слова "оплата". Так же и другие строчки должны сместиться. Судя по всему есть еще какие то непечатные символы.
21.03.2022 11:30
vdm
 
Цитата:
LightStep Решил перенести печать слипа в состав чека и столкнулся с проблемой. Символы скобок в этом случае заменяются переносом строки
Я не понял, для чего там в split "лишние" символы и выбросил их. СБРФ/ВТБ печатаются нормально.

Код:
function split(inputstr, sep)
   if sep == nil then
     sep = '%s'
   end
   local t = {}
--   for str in string.gmatch(inputstr, '([^(?!'..sep..')]+)') do
   for str in string.gmatch(inputstr, '([^'..sep..']+)') do
     table.insert(t, str)
   end
   return t
end
21.03.2022 11:44
LightStep
 
vdm, попробовал ваш вариант, все равно есть дополнительные переносы строк.
21.03.2022 12:00
OlegON
 
может, переменные в файл покидать? где-то в составе самих строк переносы пролезают?
21.03.2022 12:06
LightStep
 
Уже отключил полностью блок split. Добавил удаление всех переновсов, табуляций, переводов каретки. Даже по asci удаляю 0d и 0a. Результат не изменился.
function print_receipt_slip(__payment, __is_last, __print_data)
local text = 'return "' .. __payment.slip .. '"'
text = ukm.source(ukm.mashine.handle, text)

-- tbl = split(text, '\n')
-- text = ''
-- local ln = ''
-- local n = #tbl
-- for i = 1, n do
-- ln = rtrim(tbl[i])
-- if ln ~= '' then
-- text = text .. ln .. ' '
-- end
-- end
-- text = rtrim(text)
text = text:gsub("\x0D", "")
text = text:gsub("\x0A", "")
text = text:gsub("\n", "")
text = text:gsub("\b", "")
text = text:gsub("\r", "")
text = text:gsub("\t", "")
text = text:gsub("\v", "")
text = text:gsub("\f", "")


local line = ""
local lines = ""
for word in (text .. " "):gmatch("(.-) ") do
if #line + #word < 56 then
line = line .. " " .. word
else
lines = lines .. line .. '\n'
line = word
end
line = line:match("^%s*(.-)%s*$")
end
lines = lines:match('^\n*(.-)\n*$')
text = lines

if not __is_last then
local printer = ukm.get_printer(ukm.printer_type_master())
text = text .. '\n' .. string.rep('-', printer:get_width())
end
__print_data:add(text, ukm.printer_type_master())
end

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