Актуальность содержимого таблиц
Одна из таблиц - сделки. Соответственно, вчера она заполнялась, сегодня с утра её брокер почистил. Машина на ночь не выключалась, квик не выключался, амишарп не выключался. Сейчас в квике таблица сделок пустая, в амишарпе - со вчерашними сделками. Пересоздать эту таблицу в амишарпе нельзя - если её через меню скрыть, то она больше не покажется.
Как определить, имеет ли место быть некий косяк и в амишарпе реально неактуальные данные или же это просто GUI в окне amisharp не обновляется?
Через OLE я пока это всё не дёргал, щупаю с внешней стороны.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Вы можете провести следующий эксперимент.
Добавьте в таблицу текущих параметров 5 бумаг
Сделайте экспорт этой таблицы по ДДЕ в Эксель
Убедитесь, что все 5 строчек есть в экселе
Не закрывая Эксель, уберите 4 из 5 бумаг в таблице текущих параметров и снова включите экспорт по ДДЕ
Посмотрите, как выглядит таблица в экселе - там те же самые 5 строк
Таким образом, терминал quik при УМЕНЬШЕНИИ количества строк (столбцов) не дает наружу никаких сигналов об этом.
К Вашему случаю. При смене торговой даты таблица сделок очистилась, но амишарпу (как и экселю, как и любому другому ДДЕ серверу) никто об этом ничего не скажет.
Как бороться.
При смене торговой даты можно отключить ДДЕ экспорт в квике (sendkeysby.....), удалить через DeleteTable все таблицы, созданные DDE экспортом и снова включить DDE экспорт. Вместо DeleteTable можно последовательно ко всем строкам применить DeleteRow - таблица также очистится.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
После посылки нажатий клавиш в квик винда переключается на на окно квика, тогда как было активным окно амиброкера.
Это как-то обходится?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Вот код, который я применяю для рестарта DDE и чистки существующих таблиц, как Вы рекомендовали:
amis_Object.SendKeysByClass(PathToQUIKExecutable, "^~S", "InfoClass");
// Delete all existing tables
strAmiSharpTablesList = amis_Object.ListOfTables(",");
for (i = 0; (strCurAmiSharpTable = StrExtract(strAmiSharpTablesList, i)) != ""; i++)
{
amis_Object.DeleteTable(strCurAmiSharpTable);
Trace(traceLog, " Deleted table " + strCurAmiSharpTable);
}
amis_Object.SendKeysByClass(PathToQUIKExecutable, "^~L", "InfoClass");
amis_Object.ActivateWindowByClass(PathToAmiBrokerExecutable, "AmiBrokerMainFrameClass");
Код этот должен работать при смене дат, но для теста я запустил его на каждое обновление графика. Из квика настроен вывод по DDE двух таблиц, одна с параметрами по бумаге, вторая со сделками. В таблице параметров по бумаге постоянно обновляется поле "оборот", в таблице сделок ничего не меняется.
Когда код отрабатывает первый раз, в логе видно, что он удалил две таблицы. Все последующие отработки этого кода он удаляет только ту таблицу, в которой поменялись данные (оборот), таблица сделок больше не пересоздаётся.
Если же пойти в квик и руками нажать ctrl-shift-s/l, то в амишарпе появятся обе таблицы. Возможно, есть что-то на поверхности, что я делаю не так? От чего после программного рестарта DDE вторая таблица в амишарпе не видна?
Спасибо.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Попробуйте явно задать в скрипте период обновления чарта . Скажем 5 секунд (RequestTimedRefresh) и посмотрите на результат.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
SendKeysByClass("C:\Program Files (x86) - Legacy\QUIK\info.exe","?H","InfoClass") = 0
вертает ноль, то есть ошибка.
Что такое "?H"? Это нормально?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
активация тоже не проходит...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Судя по логу, не проходят операции над процессами (клавиши не шлются в quik, окно амиброкера не активируется).
Имеет ли значение ось? У меня win7 64.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Ещё момент...
Раз я раньше спросил про то, как активировать окно амиброкера, значит отправка клавиш тогда срабатывала (окно QUIK совершенно точно становилось активным), она почему-то перестала срабатывать впоследствии.
А нельзя в лог добавить больше информации от системных функций, которыми Вы отправляете клавиши? Код ошибки?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.