01.03.2021 12:25
Есть вопрос по вызову LUA скриптов УКМ из сторонних приложений
Все бы хорошо если бы не объект ukm.
Так как этот объект является внешним по отношению программы вызывающий его кто нибудь знает как к нему обратиться или "зарядить" в другом приложении
Задача состоит в том, чтобы удаленно выполнять сценарий lua во внешних приложениях

Спасибо
01.03.2021 12:32
УКМ доступен по SSH, например... непонятно, что конкретно надо сделать...
01.03.2021 13:12
Цитата:
OlegON УКМ доступен по SSH, например... непонятно, что конкретно надо сделать...
У меня есть свой софт я в этом софте хочу исполнить скрипт который зарегистрирован в УКМ например расчет скидки и печать чека
например скрипт печати купона
Вот например скрипт:
--Модуль печати купонов

--Чек-скидка типа купон
function print_discount_coupon(__rep, __print_data)
local printer = ukm.get_printer(ukm.printer_type_master());
if printer then
local text = "";
local width = printer:get_width();
text = text .. ukm.center("КУПОН - СКИДКА",width, " ") .. "\n";
text = text .. ukm.center(hw_command_document_barcode(__rep.coupon_number),width, " ") .. "\n";
text = text .. ukm.center(__rep.coupon_number, width, " ") .. "\n";
text = text .. ukm.rightpad("Скидка на сумму " .. __rep.discount, width, " ") .. "\n";
text = text .. __rep.card_number .. "\n";
text = text .. ukm.rightpad("Выдан по чеку " .. __rep.pos .. "." .. tostring(ukm.get_shift_number()) .. "." .. tostring(__rep.receipt_number), width, " ") .. "\n";
text = text .. ukm.ptime2str(__rep.date,"%d.%m.%Y %H:%M") .. "\n";
text = text .. ukm.rightpad("Сумма чека " .. __rep.receipt_amount, width, " ") .. "\n";
text = text .. __rep.discount_percent .. "\n";
text = text .. __rep.cashier .. "\n";
text = text .. ukm.slice(ukm.rightpad("Действителен " .. "с " .. ukm.ptime2str(__rep.date_from,"%d.%m.%Y") .. " по " .. ukm.ptime2str(__rep.date_to,"%d.%m.%Y"), width, " "),width) .. "\n";
text = text .. ukm.center("*", width,"*") .. "\n";
text = text .. ukm.slice("Количество купонов, принимаемых к оплате не ограничено, но сумма используемых купонов должна быть меньше суммы покупки", width) .. "\n";
text = text .. " " .. "\n";
text = text .. ukm.slice("Купоны размену или обмену не подлежат.", width) .. "\n";
text = text .. " " .. "\n";
text = text .. ukm.center("Срок действия купона ограничен", width," ") .. "\n";
text = text .. ukm.slice("Администрация оставляет за собой право прекратить выдачу купонов", width) .. "\n";
text = text .. ukm.center("*", width,"*") .. "\n";
__print_data:add(text, ukm.printer_type_master());
end
end

-- Печать суммовых купонов
function print_amount_coupon(__rep, __print_data)
local printer = ukm.get_printer(ukm.printer_type_master());
if printer then
local text = "";
local width = printer:get_width();
text = text .. ukm.center("КУПОН - СКИДКА",width, " ") .. "\n";
text = text .. ukm.center(hw_command_document_barcode(__rep.coupon_number),width, " ") .. "\n";
text = text .. ukm.center(__rep.coupon_number, width, " ") .. "\n";
text = text .. ukm.rightpad("Скидка на сумму " .. __rep.amount, width, " ") .. "\n";
text = text .. ukm.rightpad("Выдан по чеку " .. __rep.pos .. "." .. tostring(ukm.get_shift_number()) .. "." .. tostring(__rep.receipt_number), width, " ") .. "\n";
text = text .. ukm.rightpad("Выдан по скидке " .. __rep.discount, width, " ") .. "\n";
text = text .. ukm.slice(ukm.rightpad("Действителен " .. "с " .. ukm.ptime2str(__rep.date_from,"%d.%m.%Y") .. " по " .. ukm.ptime2str(__rep.date_to,"%d.%m.%Y"), width, " "),width) .. "\n";
text = text .. ukm.center("*", width,"*") .. "\n";
text = text .. ukm.slice("Купоны размену или обмену не подлежат.", width) .. "\n";
__print_data:add(text, ukm.printer_type_master());
end
end
он содержится в БД MySQL
Хочу вызвать его из своей проги которая крутится на другом софте не относящемся к УКМ
но имеет подключение к БД УКМ
мешает объект ukm который в моей проги не заряжен как его заряжать?
01.03.2021 20:33
То есть хочешь печатать чеки из своего софта? ;)
01.03.2021 20:35
Понятия не имею, можно ли использовать ukm вне экзешников самого УКМ.
Но можно попытаться пойти кружным путем - через php, также как его использует веб-интерфейс УКМ.

Например в \htdocs\ukm\protected\controllers\reports\FindReceiptController.php есть такое:
Код:
		if ($slip) {
			$str = "local printer = ukm.get_printer(ukm.printer_type_master());\nreturn \"$slip\";";

...

		$text = ukm_lua_executer($db['host'], $db['port'], $db['dbname'], $db['username'], $db['password'], $str);
Функцию ukm_lua_executer и некоторые другие, используемые в вебе - предоставляет расширение к php C:\phpukm\ext\php_ukm.dll

Более ничего сказать не могу.
01.03.2021 21:50
Кстати проверил вызов ukm_lua_executer через php.exe - вполне себе работает.
Но теоретически с использованием скриптов УКМ в неизменном виде могут быть проблемы.
Там же не только объект ukm, например __rep и __print_data это тоже объекты, которые м.б. не везде получится "сымитировать".
02.03.2021 09:31
Цитата:
vdm Кстати проверил вызов ukm_lua_executer через php.exe - вполне себе работает.
Но теоретически с использованием скриптов УКМ в неизменном виде могут быть проблемы.
Там же не только объект ukm, например __rep и __print_data это тоже объекты, которые м.б. не везде получится "сымитировать".
СПАСИБО !!!!!!!!!!!!!!!!!!!!!!!!!!!!
А можно пример?
Я хочу в своей проги использовать выpов и выполнения скриптов lua
как "Заряжать" объекты __rep и __print_data это другой вопрос тоже требует исследования но я так понимаю это таблицы их можно сформировать самому
МНЕ НУЖЕН ПРИМЕР СПАСИБО
02.03.2021 09:33
Цитата:
vdm Понятия не имею, можно ли использовать ukm вне экзешников самого УКМ.
Но можно попытаться пойти кружным путем - через php, также как его использует веб-интерфейс УКМ.

Например в \htdocs\ukm\protected\controllers\reports\FindReceiptController.php есть такое:
Код:
		if ($slip) {
			$str = "local printer = ukm.get_printer(ukm.printer_type_master());\nreturn \"$slip\";";

...

		$text = ukm_lua_executer($db['host'], $db['port'], $db['dbname'], $db['username'], $db['password'], $str);
Функцию ukm_lua_executer и некоторые другие, используемые в вебе - предоставляет расширение к php C:\phpukm\ext\php_ukm.dll

Более ничего сказать не могу.
ОГРОМНОЕ СПАСИБО БУДУ ПРОБЫВАТЬ
ПОПРОБУЮ В СВОЕЙ СИшной проги загрузить php_ukm.dll
может оттуда можно получить объект ukm
СПАСИБО ПОПРОБУЮ
по результатам отпишусь
02.03.2021 10:39
На сервере УКМ, в каталоге php

test_ukmlua.php
Код:
<?php
$script_lua = "
local printer = ukm.get_printer(ukm.printer_type_master());
return printer:get_default_width();
";
echo ukm_lua_executer('127.0.0.1', 3306, 'ukmserver', 'user', 'xxxxxx', $script_lua);
?>
Код:
C:\phpukm>php.exe test_ukmlua.php
40
02.03.2021 11:27
Цитата:
vdm На сервере УКМ, в каталоге php

test_ukmlua.php
Код:
<?php
$script_lua = "
local printer = ukm.get_printer(ukm.printer_type_master());
return printer:get_default_width();
";
echo ukm_lua_executer('127.0.0.1', 3306, 'ukmserver', 'user', 'xxxxxx', $script_lua);
?>
Код:
C:\phpukm>php.exe test_ukmlua.php
40
ОГРОМНЕЙШЕЕ СПАСИБО ДРУЖИЩЕ !!!!!!!!!!
СУПЕР ВСЕ ПРОШЛО ОК
МОЛОДЦЫ ЧЕМ СМОГУ ПОМОГУ ))
Часовой пояс GMT +3, время: 12:17.

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