<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Еще одна особенность SetTableNotificationCallback]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Еще одна особенность SetTableNotificationCallback форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Tue, 14 Apr 2026 22:47:32 +0300</pubDate>
		<item>
			<title>Еще одна особенность SetTableNotificationCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message40742/topic4888/">Еще одна особенность SetTableNotificationCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_WFzGcD92" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br />Черт, отправилось раньше времени. У вас поток квика никогда ничего в таблицу не запишет, пока цикл while не закончится, а он не закончится, потому что пока вы из колбека не вернетесь, квик ничего в таблицах менять не будет.<br />=============<br />Спасибо :-)<br />Значит это относиться ко всем колбекам. <br />
			<i>20.11.2019 14:03:12, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message40742/topic4888/</link>
			<guid>http://forum.quik.ru/messages/forum10/message40742/topic4888/</guid>
			<pubDate>Wed, 20 Nov 2019 14:03:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Еще одна особенность SetTableNotificationCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message40739/topic4888/">Еще одна особенность SetTableNotificationCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Черт, отправилось раньше времени. У вас поток квика никогда ничего в таблицу не запишет, пока цикл while не закончится, а он не закончится, потому что пока вы из колбека не вернетесь, квик ничего в таблицах менять не будет. <br />
			<i>20.11.2019 13:49:26, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message40739/topic4888/</link>
			<guid>http://forum.quik.ru/messages/forum10/message40739/topic4888/</guid>
			<pubDate>Wed, 20 Nov 2019 13:49:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Еще одна особенность SetTableNotificationCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message40738/topic4888/">Еще одна особенность SetTableNotificationCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Было бы удивительно, если бы не зависал вот тут<br />
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while getItem("orders", i).flags==25 do 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("flags = "..getItem("orders", i).flags)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1000) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end


</pre>
============= <br />
			<i>20.11.2019 13:46:48, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message40738/topic4888/</link>
			<guid>http://forum.quik.ru/messages/forum10/message40738/topic4888/</guid>
			<pubDate>Wed, 20 Nov 2019 13:46:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Еще одна особенность SetTableNotificationCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message40734/topic4888/">Еще одна особенность SetTableNotificationCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Зависает Quik при обработке событий в таблице, если прямо в функции сделать цикл на проверку изменения заявки.<br /><br />Порядок действий. Запускаем скрипт - открывается окно.<br />Двойной щелчок левой мыши по 1-й строчке таблицы - выставляется заявка<br />Еще двойной левой мыши - должна сняться заявка, но квик виснет из-за цикла проверки заявки в функции KillOrder()<br />
====code====
<pre>Account&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "7618xxx" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Код счета
CLASS_CODE&nbsp;&nbsp;&nbsp;&nbsp;= "SPBFUT"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Код класса
SEC_CODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "VBZ9"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Код инструмента

trans_id = os.time()&nbsp;&nbsp;&nbsp;&nbsp; -- Текущие дата и время в секундах хорошо подходят для уникальных номеров транзакций

IsRun = true 
firstRun = 0&nbsp;&nbsp; -- флаг первого запуска
flag = 0

function main()
&nbsp;&nbsp;&nbsp;while IsRun do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if firstRun==0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;priceMin = getParamEx(CLASS_CODE, SEC_CODE, "PRICEMIN").param_value+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Цена выставления заявки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateTable()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstRun=1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetTableNotificationCallback(t_id, Touch) --ждем двойного щелчка мыши, чтобы выставить заявку или удалить
&nbsp;&nbsp;&nbsp;end
end

function KillOrderS()
&nbsp;&nbsp;&nbsp;local N = getNumberOf("orders")-1
&nbsp;&nbsp;&nbsp;for i = N, 0 , -1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order = getItem("orders", i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if order.account==Account and order.balance&#62;0 and order.sec_code==SEC_CODE&nbsp;&nbsp;and order.flags==25 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trans_id = os.time()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local tkill = {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"CLASSCODE"&#93;=CLASS_CODE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"SECCODE"&#93;=SEC_CODE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"ACTION"&#93;="KILL_ORDER",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"ACCOUNT"&#93;=Account,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"TRANS_ID"&#93;=tostring(trans_id),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"ORDER_KEY"&#93;=tostring(order.order_num)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local res=sendTransaction(tkill)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if res ~= '' then message('KillOrderS(): Ошибка отправки транзакции: '..res) else message('KillOrderS(): Транзакция отправлена') end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(5000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while getItem("orders", i).flags==25 do 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("flags = "..getItem("orders", i).flags)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1000) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
end

function Touch(t_id, msg, par1, par2)
&nbsp;&nbsp;&nbsp;if msg==QTABLE_LBUTTONDBLCLK and par1==1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local On Off = "Off"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if flag==0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag = 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On Off = "On"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetColor(t_id, 1, 1, RGB(0,255,0), RGB(0,0,0), RGB(0,200,0), RGB(0,0,0));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TransOpenPos() 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetColor(t_id, 1, 1, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KillOrderS()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(t_id, par1, par2, OnOff)
&nbsp;&nbsp;&nbsp;end
end


function CreateTable()
&nbsp;&nbsp;&nbsp;t_id = AllocTable();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Получает доступный id для создания
&nbsp;&nbsp;&nbsp;AddColumn(t_id, 1, "ХЗ", true, QTABLE_CACHED_STRING_TYPE, 7);
&nbsp;&nbsp;&nbsp;t = CreateWindow(t_id); &nbsp;&nbsp;&nbsp;-- Создаем
&nbsp;&nbsp;&nbsp;SetWindowCaption(t_id, "ХЗ"); &nbsp;&nbsp;&nbsp;-- Даем заголовок
&nbsp;&nbsp;&nbsp;SetWindowPos(t_id, 0, 0, 100, 100)&nbsp;&nbsp;-- Положение окна
&nbsp;&nbsp;&nbsp;InsertRow(t_id, -1);&nbsp;&nbsp;-- добавляем countLineFileSave строк
&nbsp;&nbsp;&nbsp;SetCell(t_id, 1, 1, tostring(flag))
end


function TransOpenPos()
&nbsp;&nbsp;&nbsp;trans_id = os.time() 
&nbsp;&nbsp;local Transaction={
&nbsp;&nbsp;&nbsp;&nbsp;&#91;'TRANS_ID'&#93;&nbsp;&nbsp;= tostring(trans_id),&nbsp;&nbsp; -- Номер транзакции
&nbsp;&nbsp;&nbsp;&nbsp;&#91;'ACCOUNT'&#93;&nbsp;&nbsp; = Account,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Код счета
&nbsp;&nbsp;&nbsp;&nbsp;&#91;'CLASSCODE'&#93; = CLASS_CODE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Код класса
&nbsp;&nbsp;&nbsp;&nbsp;&#91;'SECCODE'&#93;&nbsp;&nbsp; = SEC_CODE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Код инструмента
&nbsp;&nbsp;&nbsp;&nbsp;&#91;'ACTION'&#93;&nbsp;&nbsp;&nbsp;&nbsp;= 'NEW_ORDER',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Тип транзакции ('NEW_ORDER' - новая заявка)
&nbsp;&nbsp;&nbsp;&nbsp;&#91;'OPERATION'&#93; = 'B',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Операция ('B' - buy, или 'S' - sell)
&nbsp;&nbsp;&nbsp;&nbsp;&#91;'TYPE'&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 'L',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Тип ('L' - лимитированная, 'M' - рыночная)
&nbsp;&nbsp;&nbsp;&nbsp;&#91;'QUANTITY'&#93;&nbsp;&nbsp;= '1',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Количество
&nbsp;&nbsp;&nbsp;&nbsp;&#91;'PRICE'&#93;&nbsp;&nbsp;&nbsp;&nbsp; = tostring(priceMin)&nbsp;&nbsp; -- Цена
&nbsp;&nbsp;}
&nbsp;&nbsp;-- Отправляет транзакцию
&nbsp;&nbsp;local Res = sendTransaction(Transaction)
&nbsp;&nbsp;if Res ~= '' then message('TransOpenPos(): Ошибка отправки транзакции: '..Res) else message('TransOpenPos(): Транзакция отправлена') end
end

</pre>
============= <br />
			<i>20.11.2019 13:17:52, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message40734/topic4888/</link>
			<guid>http://forum.quik.ru/messages/forum10/message40734/topic4888/</guid>
			<pubDate>Wed, 20 Nov 2019 13:17:52 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
