Очередное зависание Lua-скрипта

Страницы: 1
RSS
Очередное зависание Lua-скрипта, в функции getDepoEx
 
QUIK 13.0.0.165
Заинтересованные могут протестировать, скачав архив рабочего места по ссылке: https://cloud.mail.ru/public/PnRh/78X5kdGEB
Подключаться к серверу не требуется. Достаточно добавить в окно "Доступные скрипты" скрипт getDepoEx.lua (лежит в папке с программой) и запустить его.
Код
function main()
  local n = getNumberOf("depo_limits")
  message("Number depo_limits: " .. n)
  if n > 0 then
    getDepoEx("NC0011100000", "10382", "SBER", "NL0011100043", 20260601)
  end
  message("Завершение работы main.")
end

При запуске скрипта в окне "Системные сообщения" появляется сообщение "Number depo_limits: 4", и скрипт остаётся в запущенном состоянии. Сообщения "Завершение работы main." нет, что говорит о том, что не происходит выхода из функции getDepoEx.
При этом процесс info.exe грузит один из логических процессоров на 100%.
 
Добрый день.

Возможно, дело в том, что цикл, где вы пытаетесь получить позиции по инструменту, не останавливается т.к. в функцию getDepoEx были введены некорректные данные.

В качестве последнего параметра limit_kind указывается срок расчетов и getDepoEx принимает это значение в формате NUMBER. Возможные значения - положительные целые числа, начиная с «0», соответствующие срокам расчетов из таблицы «Позиции по инструментам»: «0» – T0, «1» – T1, «2» – T2 и т.д.

Попробуйте изменить этот момент и проверьте работу скрипта.
 
Не смог промолчать, прочитав ответ техподдержки.

1) В опубликованном в первом сообщении темы коде НЕТ ЦИКЛА.

2) limit_kind может принимать значения типа 20260601, если лимитирование идёт по календарным дням, а не по схеме T0, T1 и т.д.

3) В случае некорректных значений функция getDepoEx всё равно должна завершать свою работу без зависания.

4) Адекватной реакцией техподдержки должна быть попытка воспроизведения проблемы на своём тестовом контуре с одним из выводов: удалось воспроизвести и будем чинить, или не удалось воспроизвести.
 
Для п.2 приведу ссылку на тему форума, где было обсуждение такой схемы лимитирования.
https://forum.quik.ru/forum10/topic8865/
В документации QLua версии 13.0 этот момент не отражён.
 
Здравствуйте.

В ходе тестирования скрипта, у нас не возникло проблем, ошибок или зависаний Рабочего места. В окне сообщений появляются оба сообщения: о количестве позиций по инструментам и о завершении работы main.

Подскажите, пожалуйста, представленная часть кода - это весь скрипт? Запущены ли еще какие-то скрипты параллельно?
 
Oleg Kuzembaev, что показывает следующий скрипт?
Код
function main()
  local sec_code = "SBER"
  local n = getNumberOf("depo_limits")
  if n > 0 then
    message("Number depo_limits: " .. n)
    for i = 0, n - 1 do
      local l = getItem("depo_limits", i)
      message(l.sec_code .. ": limit_kind = " .. l.limit_kind .. "; currentbal = " .. l.currentbal .. "; wa_position_price = " .. l.wa_position_price)
    end
    message(tostring(getDepoEx("NC0011100000", "10382", "SBER", "NL0011100043", 20260601)))
  else
    message("depo_limits not found", 2)
  end
  message("Завершение работы main.")
end
 
Попробовал, не воспроизводиться.QUIK 13.0.0.165.
Страницы: 1
Читают тему
Наверх