Получаю ошибку несуществующего аргумента в момент очистки таблиц при первом за текущие сутки коннекте к серверу 9-30. Дальше работает корректно, все данные из таблицы лимитов получаются, при переконнекте скрипт не вылетает.
Попробовал посмотреть что она в этот момент возвращает ... y=type(getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2)) ...
получил: bad argument #1 to type (value expected)
Выборки из других таблиц getParamEx, getPortfolioInfoEx работают как и должны круглосуточно.
Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит
Kolossi написал: Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит
Почему именно баг? Вы же сами сказали что данных нет. А раз данных нет то и возвращать естественно нечего. И даже в документации про это сказано:
Kolossi написал: Добрый день ! Столкнулся с проблемой при использовании данной функции. ... y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
Добрый день!
Вы любите рисковать)) В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
Код
local depo = getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2)
local currentbal = depo and depo.currentbal
or 0 -- например
Kolossi написал: Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит
Почему именно баг? Вы же сами сказали что данных нет. А раз данных нет то и возвращать естественно нечего. И даже в документации про это сказано:
Цитата
В случае ошибки функция возвращает «nil».
остается только добавить проверку на nil
Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
Kolossi написал: Добрый день ! Столкнулся с проблемой при использовании данной функции. ... y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
Добрый день!
Вы любите рисковать)) В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
Код
local depo = getDepo Ex ( "MC0003300000" , "555555" , "SU26225RMFS1" , "L01-00000F00" , 2 )
local currentbal = depo and depo.currentbal
or 0 -- например
Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт. Повторюсь только в момент подключения к серверу в первый раз за сутки, когда очищаются данные на сервере (как прописано в настройках Квика). Дальше в течении дня все работает корректно.
Kolossi написал: Добрый день ! Столкнулся с проблемой при использовании данной функции. ... y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
Добрый день!
Вы любите рисковать)) В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
Код
local depo = getDepo Ex ( "MC0003300000" , " 555555 " , "SU26225RMFS1" , "L01 - 00000F00" , 2 )
local currentbal = depo and depo.currentbal
or 0 -- например
Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт. Повторюсь, только в момент подключения к серверу в первый раз за сутки, когда очищаются данные на сервере (как прописано в настройках Квика). Дальше в течении дня все работает корректно.
Kolossi написал: Добрый день ! Столкнулся с проблемой при использовании данной функции. ... y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
Добрый день!
Вы любите рисковать)) В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
Код
local depo = getDepo Ex ( "MC0003300000" , " 555555 " , "SU26225RMFS1" , "L01 - 00000F00" , 2 )
local currentbal = depo and depo.currentbal
or 0 -- например
Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт. Повторюсь, только в момент подключения к серверу в первый раз за сутки, когда очищаются данные на сервере (как прописано в настройках Квика). Дальше в течении дня все работает корректно.
Ну вот и спамером обозвали :(, не со зла я :) . Надеюсь админ почистит. По ситуации мне не понятно, почему такой проблемы нет в других функциях получения данных из таблиц типа getParamEx и др . Завтра на открытии попробую посмотреть getDepo(...)
Kolossi написал: Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
А это сообщение разве не говорит что значение nil?
Не говорит, это сообщение о причине остановки скрипта.
сообщение о причине остановки скрипта, как раз и говорит о том что Вы пытаетесь получить параметр таблицы которая есть nil Как уже было сказано и еще раз повторим, что для решения проблемы надо сделать проверку на nil
Kolossi написал: Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
А это сообщение разве не говорит что значение nil?
Не говорит, это сообщение о причине остановки скрипта.
сообщение о причине остановки скрипта, как раз и говорит о том что Вы пытаетесь получить параметр таблицы которая есть nil Как уже было сказано и еще раз повторим, что для решения проблемы надо сделать проверку на nil
Еще раз попробую объяснить. Я не тупой и не начинающий :) И пример с type тоже не зря привел. Сама проверка на nil, останавливает скрипт !!!. Т.е. в конструкции
if getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2) then y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal end
первая строка останавливает скрипт с диагнозом : attempt to index a nil value
if getDepo Ex ( "MC0003300000" , "555555" , "SU26225RMFS1" , "L01-00000F00" , 2 ) then
message ( "getDepoEx~=nil" )
else
message ( "getDepoEx is nil" )
end
Может у Вас версия терминала старая?
Новая. Вы не внимательно читаете. Ошибка выскакивает только в момент коннекта с сервером в первый раз за текущие сутки. Т.е. в терминале стоит реконнект начиная с 9-30 утра и в Основных настройках стоит "Очищать данные после смены даты ...на сервере". Вот в момент первого реконнекта это и происходит. Дальше все нормально работает.
PS У вас nil, потому что стоит не ваш счет клиента 555555 и другие параметры тоже не ваши.
Сергей, спасибо за ваши попытки помочь. Давайте попробуем воспроизвести ситуацию.
Пусть у вас в цикле getDepoEx(...).currentball получает количество бумаг определенного тикера периода T2. Т.е. той бумаги, которая у вас реально есть в портфеле.
В настройках Квика стоит "Очищать данные после смены даты ...на сервере" и "Восстанавливать связь с 9-30 до ...
С вечера запустите скрипт и если он живым доедет до 10-00 следующего утра, я посыплю голову пеплом и закрою вопрос или попробую поискать причину вне Квика.