Получение координатных записей через COM
Приветствую, господа АвтоГРАФоды (водители АвтоГРАФ-а)!
Давно известно (судя по форуму), что данные можно получать из системы через COM. Жаль что документация где-то запрятана, но интернет тут помог - нашел доку страниц в 9-10, с описание COM-объектов, аналогичное этому: документация по OLE. Методом проб и ошибок таки вышло получить достать через COM текущие (последние) данные по группам и технике. А вот с историей прямо засада. Вытащил только "рейсы", а через них получил положение и скорость в точках (+время). Однако в доке видел TripCrdEntriesNum который, по логике, должен указывать на количество координатных записей которые (по логике) вытаскиваются через CrdEntryIndex = 1..TripCrdEntriesNum Но при попытке установить CrdEntryIndex выдается ошибка. Вот фрагмент схемы тестового алгоритма (данные по всей техники всех групп): Код:
числоГрупп = AG.GroupsNum; Вообще хочу вытащить показания сенсоров по точкам, в частности уровень топлива. |
Цитата:
|
Во-первых, Вы перепутали переменные:
Код:
колРейсов = AG.TripsNum; |
Цитата:
Если Вы представляете, как работает терминал, то должны знать, что координатные записи пишутся асинхронно с данными различных датчиков. Иными словами, координаты опрашиваются повременно или адаптивно (от изменения вектора скорости), а те же ДУТ-ы - по времени (но интервал задается отдельно) или адаптивно (по изменению уровня). Если бы в каждой точке писались абсолютно все значения всех датчиков - трафик вырос бы на два порядка. |
массивКоординатРейса = AG.TrackCrdsArray;
Это Вам не поможет, т.к. 1С не работает с такими штуками... Надо типа такого: Код:
колРейсов = AG.TripsNum; |
Цитата:
Цитата:
Код:
AG.TrackCrdsArray.Выгрузить() Но проблема даже не в этом, а в том что при попытке установить значение CrdEntryIndex для обхода списка AutoGRAPH отваливается. Ошибок я не вижу. Цитата:
Код:
AG = Новый COMОбъект("AutoGRAPH.AutoGRAPHAutomation"); Утром попробовал на чистой машине запустить обработку из пустой файловой базы с АвтоГРАФ-ом версии 4.0.6 с одной группой и 12 машинами (сразу после загрузки онлайновых данных). Отработало без ошибок. Помогло то ли что автограф на локальной машине отработал, то ли что база файловая и все работало с правами пользователя, то ли на чистой машине нет косяков с COM. Кстати, почему открывается окно программы ? Означает ли это что на сервере COM работать не будет (из-за того что будет вызвано из службы) из-за того что не сможет окно создать ? |
Цитата:
|
lefion, окно всегда будет а служба может запускаться от реального пользователя
|
Пробовал аналогично получить данные и на C# - на чистой машине отрабатывает, на моей нет.
Возможно что-то с COM у меня, а может что-то опять поломалось после очередной синхронизации в АвтоГРАФ-е. Кстати, скорость обработки не радует ни в 1С, ни в C# - долго выполняется обход Crd для рейсов. Я понимаю, что доходит до 10k элементов, и что это все таки COM, но тем не менее... Загрузка одного ядра АвтоГРАФом достигает 100%. При том что через AG.TrackCrdsArray (только координаты) достаются практически моментально (больше времени уходит на создание COM-соединения). Идея механизма обхода данных в целом неплохая, но пригодна только для не частого использования. Добавлено через 4 минуты Кстати, можно ли сразу обратиться у нужной технике, не перебирая все группы в поисках нужной ? Хотя бы по её коду, который выдаётся AG.CarDevice ( AG.CurrentCarDevice ) ? Добавлено через 9 минут И второй интересующий момент, это возможность достать координатные записи за период, не поделенные на рейсы. Ведь, как я понимаю, кроме рейсов есть ещё и "стоянки", и, возможно, координатные записи для них ? |
ТабТС - это табличка, где у меня выводится в 1С список ТС, чтобы пометить те, по которым выводить отчет. Код:
//************************************************************************************************************************************************************************ |
Текущее время: 02:37. Часовой пояс GMT. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot