Есть 2 окна "Состояние счета": одно - ФОРТС, другое - акции. Вывожу по DDE в Excel из них данные. Выдается ошибка (https://yadi.sk/i/dNb14e8MQZ6j5w). Предполагаю, что это из-за одинакового названия таблиц "Позиции", т.к. если выводить только из одного окна - все в норме. Подскажите, может можно переименовать таблицу, или по другому справить данную ситуацию.
Игорь написал: Есть 2 окна "Состояние счета": одно - ФОРТС, другое - акции. Вывожу по DDE в Excel из них данные. Выдается ошибка ( https://yadi.sk/i/dNb14e8MQZ6j5w ). Предполагаю, что это из-за одинакового названия таблиц "Позиции", т.к. если выводить только из одного окна - все в норме. Подскажите, может можно переименовать таблицу, или по другому справить данную ситуацию.
Добрый день. Нужно больше информации. Версия Excel, версия QUIK, выводите в разные книги excel или в одну, попробуйте переименовать таблицу, например Позиции 2 и проверьте результат.
Добрый день. Нужно больше информации. Версия Excel, версия QUIK, выводите в разные книги excel или в одну, попробуйте переименовать таблицу, например Позиции 2 и проверьте результат.
Ясно. Предоставляю: Версия Excel - 2016, версия QUIK - 8.3.1.38. Вывожу в одну книгу, на разные листы (на один было раньше). Таблицу Позиции я бы переименовал, но не найду где. В самой таблице она не редактируется (https://yadi.sk/i/obxmNpDVKM_PZA). И сейчас даже одна таблица выдает ошибку при запуске Quik'а. Ту же, что выше на скрине давал. По логике - ошибка в настройках таблицы. Хотя что там можно такого изменить было?
Это бессмысленно, через дде имя таблицы вообще не передается. Передается то, что книга и лист написано.
Логично. Но законы Мура обычно работают против логики, т.ч. всякое может быть. Попробовал обе таблицы "Состояние счета" удалить и создать вручную по новой. Не помогло. Без них вообще вывод по DDE идет, как их включаешь на вывод (хоть одну, хоть обе) - ошибки и вывод останавливается.
Думал-думал, при чем тут автомат Мура или рост размера памяти. Потом, кажется, понял, что речь о Мерфи. Это лирика, впрочем. Насколько понимаю, другие таблицы, с которыми все хорошо, в ту же рабочую книгу идут? Я б с пристрастием поглядел, что там в таблице имеется, должно быть что-то такое, что эксель в ступор вгоняет. В других нет, а вот в этих есть. Что бы это могло быть. А если ей формальные заголовки поставить, то же ли самое будет?
Думал-думал, при чем тут автомат Мура или рост размера памяти. Потом, кажется, понял, что речь о Мерфи. Это лирика, впрочем. Насколько понимаю, другие таблицы, с которыми все хорошо, в ту же рабочую книгу идут? Я б с пристрастием поглядел, что там в таблице имеется, должно быть что-то такое, что эксель в ступор вгоняет. В других нет, а вот в этих есть. Что бы это могло быть. А если ей формальные заголовки поставить, то же ли самое будет?
Конечно же Мерфи, извиняюсь, клинануло что-то. Да, все идет в одну книгу. За идею спасибо, проанализирую. Хотя итак видно, что таблица "Состояние счета" не такая, как другие, двумерная, что ли. Попробую настройками упростить ее.
Думал-думал, при чем тут автомат Мура или рост размера памяти. Потом, кажется, понял, что речь о Мерфи. Это лирика, впрочем. Насколько понимаю, другие таблицы, с которыми все хорошо, в ту же рабочую книгу идут? Я б с пристрастием поглядел, что там в таблице имеется, должно быть что-то такое, что эксель в ступор вгоняет. В других нет, а вот в этих есть. Что бы это могло быть. А если ей формальные заголовки поставить, то же ли самое будет?
Конечно же Мерфи, извиняюсь, клинануло что-то. Да, все идет в одну книгу. За идею спасибо, проанализирую. Хотя итак видно, что таблица "Состояние счета" не такая, как другие, двумерная, что ли. Попробую настройками упростить ее.
Добрый день.
Проверили. У нас работает корректно. Сообщите рекомендации от пользователей Вам помогли?
Проверили. У нас работает корректно. Сообщите рекомендации от пользователей Вам помогли?
Рекомендации не помогли. Ставил заголовки формальные - то же самое. От одной таблицы (ФОРТС) отказался совсем - заменил данные из других. Осталась таблица "Состояние счета" со счетом фонды. Ошибка остается. Отключил вывод по DDE из таблицы "Состояние счета", создал новое окно, в нем создал новую таблицу "Состояние счета", в которой ничего не меняя установил только нужный счет и поставил значение "На дату" в Т2. Из нее сделал вывод в ту же книгу Excel, в тот же лист, что и раньше. Перезапустил Quik - при запуске сразу появляется ошибка: "DDE сервер 'excel'. Документ 'F:\Cloud@Mail.Ru\Файлы\Финансы\Отчеты\____.xlsm[Quik-old]'. Таблица 'Позиции'. Произошла ошибка: Ошибка при передаче таблицы, вывод приостановлен. Сервер отказался выполнять обмен данными: Размер либо формат данных неверен". Осталось отдельный Excel-файл создать новый, чтобы проверить до конца. Больше нет мыслей. Но другие таблицы же выводятся. Да и эта выводится, когда вручную ее запустишь.
Игорь написал: Перезапустил Quik - при запуске сразу появляется ошибка
Цитата
Игорь написал: Да и эта выводится, когда вручную ее запустишь.
Вот это очень важный, по-моему, довесочек. Выходит, квик стартует дде перед тем, как таблицу заполнил. Крайне было б любопытно взглянуть, что ж все-таки приезжает в эксель в первом случае, только софтину надо писать для этого.
Вот это очень важный, по-моему, довесочек. Выходит, квик стартует дде перед тем, как таблицу заполнил. Крайне было б любопытно взглянуть, что ж все-таки приезжает в эксель в первом случае, только софтину надо писать для этого.
Интересное предположение. Софтину написать я, конечно же, не смогу, но попробовал очистить лист, перед закрытием Excel, затем при запуске, после очередной ошибки посмотрел этот лист - естественно там ничего не было .
Игорь написал: попробовал очистить лист, перед закрытием Excel, затем при запуске, после очередной ошибки посмотрел этот лист - естественно там ничего не было
Неудивительно, эксель сразу же отклонил приехавшие данные, вставлять было нечего.
Цитата
Игорь написал: Софтину написать я, конечно же, не смогу
А я смогу, и тут как раз тот случай, когда любопытство перевесило лень. В общем, вот софтинка примитивнейшая, что с ней делать: 1. Убедиться, что эксель НЕ ЗАПУЩЕН. 2. Запустить софтинку, появится черное консольное окошко с надписью сервер работает. 3. Запустить экспорт из квика в эксель (софтинка притворяется экселем). 4. Смотреть в консольном окошке, что приехало из квика, делать скриншоты по желанию. 5. Остановить экспорт из квика. 6. Закрыть консоль.
Для начала я не парсил сами данные, проверяем только тип данных и диапазон приехавших ячеек, если тут все ок будет, допишем еще проверок. Интересно именно сравнить, что приезжает в нормальном случае и в случае ошибки.
Дисклеймер: софтинка ПРИМИТИВНАЯ, может вызывать в некоторых случаях побочные эффекты, включая зависание квика. Так что с осторожностью.
Игорь, если не удастся разобраться, то создайте в папке с программой Quik файл с именем quik_dde.log После перезапуска Quik, туда начнется записываться логи экспорта. Воспроизведите проблему, после чего пришлите полученный лога нам на ящик quiksupport@arqatech.com с указанием ссылки на эту ветку форума. А также архив рабочего места QUIK.
Anton написал: В общем, вот софтинка примитивнейшая , что с ней делать:1. Убедиться, что эксель НЕ ЗАПУЩЕН.2. Запустить софтинку, появится черное консольное окошко с надписью сервер работает.3. Запустить экспорт из квика в эксель (софтинка притворяется экселем).4. Смотреть в консольном окошке, что приехало из квика, делать скриншоты по желанию.5. Остановить экспорт из квика.6. Закрыть консоль.
Скачал, сделал как написано. 1. Excel закрыт, экспорт по DDE из всех таблиц остановлен. 2. Запустил - появилось окошко с надписью. 3. Запускаю экспорт - и вот тут какая-то недоработка, видимо. Похоже, что притворяется она не очень. Запускается Excel (пробовал убрать название рабочей книги, запускается пустая новая). 4. Соответственно в окошке - пусто.
И ошибки экспорта нет, верно я понял? Квик несколько раз присылает одно и то же, он подключен к серверу в этот момент? В остальном на этом уровне все ок, надо дописывать парсинг данных и смотреть, что там внутри ячеек.
Игорь написал: 3. Запускаю экспорт - и вот тут какая-то недоработка, видимо. Похоже, что притворяется она не очень. Запускается Excel (пробовал убрать название рабочей книги, запускается пустая новая).
По некотором размышлении это действительно недоработка, но не моя, а арки. Как видим, квик безусловно стартует заданное приложение перед началом дде-обмена, а это неправильно, правильно будет сначала попробовать подключиться как есть, и только если ответа нет и установлена галка автозапуска, тогда запустить сервер и пробовать подключиться еще раз.
Игорь, и еще одно предположение созрело, где может быть косяк. Попробуйте снять галку "новый поток на отдельный DDE-сервер" в основные настройки - экспорт данных, будет ли ошибка повторяться?
Anton написал: По некотором размышлении это действительно недоработка, но не моя, а арки. Как видим, квик безусловно стартует заданное приложение перед началом дде-обмена, а это неправильно, правильно будет сначала попробовать подключиться как есть, и только если ответа нет и установлена галка автозапуска, тогда запустить сервер и пробовать подключиться еще раз.
Кажется стало проясняться. Запустил Quik со снятыми галками "Запускать ... автоматически", в сообщениях вышли в ошибку (как указано выше) все мои 5 таблиц. Файл Excel не запустился, соответственно. Поставил во всех таблицах галку "Запускать ... автоматически", но снял "Вывод после создания", запуск прошел без ошибок, Excel не запустился. Я нажал Ctrl+Shift+L, запустился Excel без ошибок, вывод из всех таблиц идет. Впечатление, что вывод из таблиц начинает идти раньше, чем загрузится Excel. В принципе, меня устраивает и такой вариант, но к QUIK clients support просьба проверить. Файл Excel у меня около 1 Мб, в нем работают свои макросы в 5 модулях. Может файл тяжелый слишком?
Игорь написал: Впечатление, что вывод из таблиц начинает идти раньше, чем загрузится Excel.
Тогда была бы ошибка "не запущен эксель или и т.д.". Именно что инициация соединения проходит успешно, окно экселя уже существует и документ в него загружен, иначе он бы не ответил на запрос. Вот эта новая информация
Цитата
Файл Excel у меня около 1 Мб, в нем работают свои макросы в 5 модулях. Может файл тяжелый слишком?
еще укрепила мое подозрение, которое я теперь озвучу. Итак, вопрос арке, при отправке poke что делает квик, если получено негативное DDEACK? По идее, квик должен сначала проверить флаг fBusy, и если он установлен, повторить попытку экспорта того же самого блока данных, а если не установлен - тогда уже выпадать в ошибку "сервер отказался и т.д.". Вот у меня подозрение, что флаг не проверяется, соответственно эксель отвечает "занят" и квик сразу фейлит.
Все ж попробуйте в мой сервер вывести с парсером. Скрин уже, видимо, не стоит шарить, бо информация по счету вся будет видна, но там можно и так посмотреть, что все блоки данных идут последовательно, а не вперемешку. Если все же выводятся кашеобразно, это еще плюс один довод в пользу косяка с busy. Только имейте в виду, что сервер простенький и busy не отвечает, что может при неудачном раскладе подвесить квик.
Anton написал: при отправке poke что делает квик, если получено негативное DDEACK?
Вопрос снимается, сам проверил. При получении busy квик немедленно рвет соединение и вываливается в ошибку "сервер занят". Что не очень здорово, конечно, но, с другой стороны, полностью отвергает мое предположение, т.к. в рассматриваемом случае ошибка другая.
Игорь, у меня идеи на данный момент иссякли, остался один неясный вопрос. Вчерашний скрин был сделан при подключенном квике или при отключенном? Если при подключенном (и состояние счета менялось), то многократный вывод одних и тех же строк объясняется их изменением в квике, это нормально. Если же при отключенном, то дергать данные могли только ваши макросы, и тогда можно попробовать создать книгу без макросов и поэкспортировать в нее, будет ли ошибка тогда появляться.
Anton написал: Вчерашний скрин был сделан при подключенном квике или при отключенном?
Quik был подключен, Excel выгружен. Но таблица была по фонде, которая после 19 мск не работает уже, соответственно данные в ней не менялись. И да, ошибка появляется при загрузке Quik, еще до соединения с сервером. Она самая первая в сообщениях идет.
Игорь написал: соответственно данные в ней не менялись
Вот это странно, в таком раскладе квик должен был выплюнуть имеющиеся строки и на этом успокоиться. Выше я малость бред написал, прошу прощения, думал об одном, писал о другом, касаемо вот этих повторов строк надо думать, как и почему квик их обновлял, раз таблица не менялась. Но и вторая "полумысль" насчет макросов тоже стоит проверки (книгой без них). Возможно, они как-то мешают выводу на начальном этапе.
Anton написал: Остается вариант без макросов затестить
Убрал название из "Рабочей книги" совсем. При запуске открывается новый Excel файл, но перед ним - ошибка и вывод останавливается. Все таки рано передаются данные в файл, он не открылся еще. Еще раз: при автозапуске выходит ошибка, потом файл открывается уже. Если запускать вывод вручную - ошибки нет.
Игорь написал: при автозапуске выходит ошибка, потом файл открывается уже
Тогда похоже на то, что квик рановано начинает выводить. По итогу резюмируем, что мы тут разрыли: 1. Квик стартует сервер безусловно при установленной галке автозапуска. Обычно программы это умеют обрабатывать и действуют так: нас запустили с файлом, мы ищем, нет ли другого экземпляра с тем же файлом, если он есть - активируем этот другой экземпляр и сами тихонько завершаемся. По идее, конкретно эту ошибку оно вызывать не должно, хотя поведение несколько нестандартное, стандартно сначала пытаться начать экспорт, потом уже при неудаче запускать сервер. 2. Есть ли после запуска сервера вызов WaitForInputIdle? Это только в арке могут посмотреть. 3. Некоторые программы (включая эксель) регистрируют в реестре пожелание передавать им аргументы через DDE (а не через командную строку, как обычно), поэтому когда винда стартует эксель, она сама к нему коннектится и передает имя файла для открытия. Не возникает ли здесь гонка с квиком?
Где заголовки таблицы (а они настроены выводить)? Что за диапазоны негативные? В общем, косяк очевидный.
К автозапуску это отношения не имеет (вопреки всем предположениям выше), это исключительно действие галки "вывод после создания". Как воспроизвести: создать таблицу состояние счета, настроить вывод в эксель с любыми книгой/листом, поставить галку "вывод после создания", закрыть квик. Запустить сервер из поста выше, запустить квик. После старта дде вот это и приедет. Ну или можете своими средствами как-то отмониторить, что едет, если есть такие средства. Кстати, в quik_dde.log все хорошо-распрекрасно, туда даже факт ошибки не попадает, так что я б на него не надеялся.
Anton написал: создать таблицу состояние счета, настроить вывод в эксель с любыми книгой/листом, поставить галку "вывод после создания", закрыть квик. Запустить сервер из поста выше , запустить квик.
Давайте пошагово распишу, а то как-то процедура совсем не та. Во-первых, подключаться к серверу не нужно, все есть в файлах, если квик уже был подключен до этого хоть раз. Далее 1. Запустили квик. 2. Создали таблицу "состояние счета". В нее загрузится из файлов что есть, нам не надо тут точности, лишь бы было что-то. 3. Открыли настройку экспорта дде. Поставили сервер excel, книга test, лист test, запускать автоматически сняли, вывод после создания поставили. 4. Вот в таком виде закрыли квик. 5. Запустили фейкосервер. 6. Запустили квик, он загрузился и стартанул дде из нашей таблицы согласно галке. 7. Смотрим в сервере, что приехало. 8. Возвращаем квик в рабочий вид, закрываем. 9. Закрываем сервер.
Anton написал: 3. Открыли настройку экспорта дде. Поставили сервер excel, книга test, лист test, запускать автоматически сняли, вывод после создания поставили.4. Вот в таком виде закрыли квик.
Между 3 и 4 закрыли окно настроек дде, а то ж не сохранится.
Anton написал: Не надо эксель запускать, только фейкосервер.
Понял. Я поставил галку "Запускать ... автоматически". Думал по другому не стартует передача. 1. Убрал галку. 2. Запустил сервер. 3. Запустил квик: https://yadi.sk/i/HZqE02HUIMgeLQ 4. Прошло соединение. Передача идет циклически: https://yadi.sk/i/d2HXKCFH1CoBmg Ошибок не было совсем.
А их и не будет, сервер примет любую чепуху, в отличие от настоящего экселя, ему главное показать ее. Второй скрин - это как оно должно быть, это когда уже таблица создалась и заполнилась, едут ячейки со значениями. А вот первый - это как раз на чем настоящий эксель отказывается продолжать, вот этот диапазон R2C1-R2C0 "задом наперед". И должна была приехать первая строка с заголовками столбцов, а ее тоже нет. Очевидно, таблица еще не создана, а квик уже стартанул экспорт. Дело раскрыто, осталось арке поправить.
Поставил галку "Запускать ... автоматически", вышел из квика. Запускаю квик, загружается Excel (по ощущению, даже раньше квика на мгновение). Появляется окно квика (без ввода пароля), а ошибка уже в окне сообщений - самое ПЕРВОЕ сообщение.
Да, квик его стартует каждый раз, когда галка установлена, причем запуск экселя захардкодили, попробуйте другое имя сервера ввести - галка станет неактивной, не умеет квик другие приложения запускать. Но это уже не столь критично, хотя я б по-другому сделал. Можете еще без автозапуска в мой сервер вручную запустить (без галки "при создании") - увидите, как должен был выглядеть первый скрин без ошибки, с заголовками столбцов и нормальным диапазоном. Ну и так, если интересно, можете галками поиграть и посмотреть, как это на поток данных влияет.
В ходе разбора вашего обращения мы обнаружили ошибку в терминале при экспорте таблицы "Состояние счета" по DDE, которая проявляется при включенной опции "Вывод после создания". Ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.