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

Разбирающимся в LUA: как получить кусок строки ПОСЛЕ 40(50) символа? : УКМ-4

23.11.2024 2:20


03.07.2017 12:29
Собственно, проблема следующая:
в названии товара присутствует КРИТИЧЕСКИ ЗНАЧИМАЯ информация для работы магазина. У С+ по каким-то причинам никак не удается выдать название товара полностью (хотя, в 10 прошиве выдавало).
Стал переделывать скрипт receipt.lua в функции печати свойств товара (есдиственная функция, в которой что-то можно сделать.
Например:
товар называется
СУПЕР-ПУПЕР МОТОРНОЕ МАСЛО ИЗ САМОЙ ГЛУБОКОЙ СКВАЖИНЫ В МИРЕ С ПРИСАДКАМИ 5Л
На 14 прошивке печатается только (для примера - 20 символов):
СУПЕР-ПУПЕР МОТОРНОЕ
Моя идея в следующем:
в секции где печатаются свойства выводить отдельной строкой то, что ПОСЛЕ 20 символа (20 - это для примера):
МАСЛО ИЗ САМОЙ ГЛУБОКОЙ СКВАЖИНЫ В МИРЕ С ПРИСАДКАМИ 5Л
А уж его можно печатать и в две строки.
Но вот беда!
Пытаюсь определить длину названия функцией string.len - выдает непонятное число, имеющее далекое отношение к реальной длине названия.
Вот копи-паста скрипта (для отладки - вставляется в function print_item_to_printer(__item, __printer_type, __print_data):
SQL код:
-- пытаюсь вытащить все что после символа DlinnoeNazvanie
       local intTmpDlName=string.len(__item.name);
       local strNamePosle35="";
       strNamePosle35=string.sub (__item.name, DlinnoeNazvanie);
     text = text .. ukm.leftpad("  *****отладка*******   ", width, ".") .. "\n";
  text = text .. ukm.leftpad(tostring(intTmpDlName), width, ".") .. "\n";
     text = text .. ukm.leftpad("  *****отладка*******   ", width, ".") .. "\n\n\n";
     text = text .. ukm.leftpad("  *****отладка*******   ", width, ".") .. "\n";
  text = text .. ukm.leftpad(strNamePosle35, width, ".") .. "\n";
     text = text .. ukm.leftpad("  *****отладка*******   ", width, ".") .. "\n\n\n"; 
А вот что оно выдает на печать:
SQL код:
Z000-0000574 Фильтр салонный угольный

................  *****отладка*******   
......................................46
................  *****отладка*******   


................  *****отладка*******   
....................�р салонный угольный
................  *****отладка*******   


                                        
                                        
 ШТ * 2.000 * 380.00             760.00 
ZF3000027291 Колодки тормозные комплект

................  *****отладка*******   
......................................50
................  *****отладка*******   


................  *****отладка*******   
..................�ки тормозные комплект
................  *****отладка******* 
Фильтр салонный угольный - 24 символа, возвращается - 46
Колодки тормозные комплект - 26 символов, возвращается 50

Как получить окончание названия?
03.07.2017 12:36
Потому что UTF-8, а string.len не предназначена для многобайтовых кодировок.
Есть ukm.str_len().
03.07.2017 13:28
Спасибо. Получилось.
Еще включу сжатый режим - надеюсь получу некоторую экономию бумаги
04.07.2017 16:03
Цитата:
УКМ_эксплуатант_2 Спасибо. Получилось.
Еще включу сжатый режим - надеюсь получу некоторую экономию бумаги
удалив в скрипте *LUA дубли: "\n"- сэкономишь еще пару строк)))
05.07.2017 10:06
Дык это только для отладки. В боевом - все по максимуму "обрезано"...
07.07.2017 09:01
У меня не печатается в чеке перед названием товара его код. Подскажите какую строчку и куда добавить в receipt.lua
Часовой пояс GMT +3, время: 02:20.

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