getDepoEx

Страницы: 1
RSS
getDepoEx, Ошибки при выполнении функции
 

Добрый день !

Столкнулся с проблемой при использовании данной функции.

...
y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
...

Получаю ошибку несуществующего аргумента в момент очистки таблиц при первом за текущие сутки коннекте к серверу 9-30.  Дальше работает корректно, все данные из таблицы лимитов получаются, при переконнекте скрипт не вылетает.

Попробовал посмотреть что она в этот момент возвращает
...
y=type(getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2))
...

получил:   bad argument #1 to type (value expected)

Выборки из других таблиц getParamEx, getPortfolioInfoEx работают как и должны круглосуточно.

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

 
Цитата
Kolossi написал:
Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит
Почему именно баг? Вы же сами сказали что данных нет. А раз данных нет то и возвращать естественно нечего.
И даже в документации про это сказано:
Цитата
В случае ошибки функция возвращает «nil».
остается только добавить проверку на nil
 
Цитата
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 -- например
 
Цитата
Sergey Gorokhov написал:
Цитата
Kolossi написал:
Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит
Почему именно баг? Вы же сами сказали что данных нет. А раз данных нет то и возвращать естественно нечего.
И даже в документации про это сказано:
Цитата
В случае ошибки функция возвращает «nil».
остается только добавить проверку на nil
Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
 
Цитата
vgi написал:
Цитата
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 написал:
Цитата
vgi написал:
 
Цитата
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 написал:
Цитата
vgi написал:
 
Цитата
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 написал:
Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
А это сообщение разве не говорит что значение nil?
 
Цитата
Kolossi написал:
Цитата
vgi написал:
Вы любите рисковать))
Код
local depo = getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2)
...
 
Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт.

Помимо рисковать, ещё любите спамить))
Попробуйте кнопку Просмотр перед тем, как Отправить.
На форуме нет возможности исправить/удалить сообщение.

А по делу. Ситуация странная, надеюсь АРКА поможет.
Как бы то ни было, надо, чтобы ошибки не вышибали скрипт. Используйте pcall / xpcall и логгируйте ошибки.
https://forum.quik.ru/messages/forum10/message34051/topic3970/#message34051
 
Цитата
vgi написал:
Цитата
Kolossi написал:
 
Цитата
vgi  написал:
Вы любите рисковать))
Код
   local  depo  =   getDepo Ex ( "MC0003300000" ,  "555555" ,  "SU26225RMFS1" ,  "L01-00000F00" ,  2 )
 .. .
  
   
Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт.

Помимо рисковать, ещё любите спамить))
Попробуйте кнопку  Просмотр  перед тем, как  Отправить .
На форуме нет возможности исправить/удалить сообщение.

А по делу. Ситуация странная, надеюсь АРКА поможет.
Как бы то ни было, надо, чтобы ошибки не вышибали скрипт. Используйте pcall / xpcall и логгируйте ошибки.
https://forum.quik.ru/messages/forum10/message34051/topic3970/#message34051
Ну вот и спамером обозвали :(, не со зла я :) . Надеюсь админ почистит.
По ситуации мне не понятно, почему такой проблемы нет в других функциях получения данных из таблиц типа getParamEx и др . Завтра на открытии попробую посмотреть getDepo(...)
 
Цитата
Sergey Gorokhov написал:
Цитата
Kolossi написал:
Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
А это сообщение разве не говорит что значение nil?
Не говорит, это сообщение о причине остановки скрипта.
 
Цитата
Kolossi написал:
Цитата
Sergey Gorokhov написал:
 
Цитата
Kolossi  написал:
Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
А это сообщение разве не говорит что значение nil?
Не говорит, это сообщение о причине остановки скрипта.

сообщение о причине остановки скрипта, как раз и говорит о том что Вы пытаетесь получить параметр таблицы которая есть nil
Как уже было сказано и еще раз повторим, что для решения проблемы надо сделать проверку на nil
 
Цитата
Sergey Gorokhov написал:
Цитата
Kolossi написал:
 
Цитата
Sergey Gorokhov  написал:
 
Цитата
 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
 
 
Kolossi,

не воспроизводится
Код
if getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2) then
  message("getDepoEx~=nil")
else
  message("getDepoEx is nil")
end



Может у Вас версия терминала старая?
 
Цитата
Sergey Gorokhov написал:
Kolossi,

не воспроизводится
Код
   if   getDepo Ex ( "MC0003300000" ,  "555555" ,  "SU26225RMFS1" ,  "L01-00000F00" ,  2 )  then 
   message ( "getDepoEx~=nil" )
 else 
   message ( "getDepoEx is nil" )
 end 
  

 

Может у Вас версия терминала старая?
Новая. Вы не внимательно читаете.  Ошибка выскакивает только в момент коннекта с сервером в первый раз за текущие сутки.
Т.е. в терминале стоит реконнект начиная с 9-30 утра и в Основных настройках стоит "Очищать данные после смены даты ...на сервере".   Вот в момент первого реконнекта это и происходит. Дальше все нормально работает.

PS У вас nil, потому что стоит не ваш счет клиента 555555 и другие параметры тоже не ваши.  
 
Цитата
Kolossi написал:
Новая. Вы не внимательно читаете.
новая это какая?
И не вижу чтобы Вы сообщали версию.

Цитата
Kolossi написал:
PS У вас nil, потому что стоит не ваш счет клиента 555555 и другие параметры тоже не ваши.  

на первом коннекте тоже не воспроизводится.
 
версия 7.23.2.5

Сергей, спасибо за ваши попытки помочь. Давайте попробуем воспроизвести ситуацию.

Пусть у вас в цикле getDepoEx(...).currentball получает количество бумаг определенного тикера периода T2. Т.е. той бумаги, которая у вас реально есть в портфеле.

В настройках Квика стоит "Очищать данные после смены даты ...на сервере" и "Восстанавливать связь с 9-30 до ...

С вечера запустите скрипт и если он живым  доедет до 10-00 следующего утра, я посыплю голову пеплом и закрою вопрос или попробую поискать причину вне Квика.
 
Еще один момент.
Вчера поставил рядом две функции выборки из одной и той же таблицы:

1:   p=getDepo( "555555", "MC0003300000",  "SU26225RMFS1", "L01-00000F00").depo_current_balance
2:   y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal

В 9-30 скрипт вылетел с указанием на сроку 2.  Т.е. getDepo(...) отработала штатно в отличие от getDepoEx(...)

Хрень какая-то :(
Страницы: 1
Читают тему
Наверх