PDA

Просмотр полной версии : Проблема: Как запросом в автограф из 1с 8.1 через оле получить по конкретной машине пробег ?


Леонид Борисович
25.08.2015, 09:15
Добрый день!

Наверно этот вопрос к 'SK'.

Как запросом в автограф из 1с8.1 через оле получить пробег по машине?

Вычисляем промежутки времени, когда у машины была скорость > 0.

Какой параметр ставить в процедуре :

AG.WaitForComputing(ТабТС.ГрФайл,Таб ТС.СерНом,ТСПериодНач,ТСПе иодКон,"GSM",1);

КолРейсов = AG.TripsNum;

Если КолРейсов=0 Тогда
//Предупреждение("Рейсов не обнаружено");
Иначе
Для х = 1 По КолРейсов Цикл
AG.TripIndex = х;
AG.TripEntriesListTypeName="sensor_on";
AG.TripEntriesListKindName="num2";
КолСобытий = AG.TripEntriesNum;
Если КолСобытий > 0 Тогда
Для хх = 1 По КолСобытий Цикл
AG.EntryIndex = хх;

МЧДвиг1 = AG.EntryMotor1Hours;
РасходДвиг1 = AG.EntryMotor1Fuel;

КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;

Эта процедура взята из предъидущего вопроса по расходу топлива в разрезе моточасов.
Смотрел никак не могу понять, что "ловить" тут...
какой параметр подставлять?

AG.TripEntriesListTypeName="sensor_on";
AG.TripEntriesListKindName="num1";

Нашел в свойствах рейса параметр TripDistance , но это общий пробег.


Я так понял это процедура универсальная, только разные переменные подставлять и ловить через события - конкретные значения переменных.

SK
25.08.2015, 12:59
Не-не-не... это к нашему штатному 1С-нику - Шпарову Александру.
В принципе - сам код ничем не отличается от 7.7 - можно подсмотреть в примерах для 7.7

SK
25.08.2015, 13:00
Вычисляем промежутки времени, когда у машины была скорость > 0.
Их можно получить из списка остановок.

Леонид Борисович
26.08.2015, 06:46
добрый день!
интервалы когда машина едет я вычислил.
Вы написали, что в примерах 1с 77 есть кусок кода, где это можно посмотреть?

SK
26.08.2015, 08:40
ERT для 7.7
https://i.tk-chel.ru/sk/Temp/AG_TEST_OLE_2014-12-25.zip

Леонид Борисович
26.08.2015, 09:32
Да, все разобрались... Если кому надо, вот обработчик, который вычисляет пробег за период, когда скорость >0.

для каждого стр из ТабТС цикл
Если стр.Метка = ложь Тогда Продолжить; КонецЕсли;
ТСПериодНач=(НачПериода111) ;
ТСПериодКон=(КонПериода111) ;
AG.SetGroupIndexByFileName(стр.ГрФайл);
AG.SetCarIndexByDevice(стр.СерНом);
AG.WaitForComputing(стр.ГрФайл,стр.С рНом,ТСПериодНач,ТСПериод он,"GSM",1);
КолРейсов = AG.TripsNum;
Если КолРейсов=0 Тогда
//Предупреждение("Рейсов не обнаружено");
Иначе
Для х = 1 По КолРейсов Цикл
AG.TripIndex = х;
AG.TripEntriesListTypeName="sensor_on";
AG.TripEntriesListKindName="num1";
КолСобытий = AG.TripEntriesNum;
Если КолСобытий > 0 Тогда
Для хх = 1 По КолСобытий Цикл
AG.EntryIndex = хх;
Пробегг = Пробегг + AG.TripDistance/1000;
Расходд = Расходд + AG.TripMotor1Fuel ;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;

Спасибо!

:temazakryta:

SK
26.08.2015, 09:43
Леонид Борисович, у меня сложилось впечатление, что Вы пошли затратным по времени путем: у вас сначала вычисляются периоды движения, а потом по каждому рассчитывается рейс.
Есть подозрение, что всё это можно сделать на порядок быстрее.
Для этого надо посмотреть Ваш код, где Вы получаете периоды движения.

Леонид Борисович
26.08.2015, 10:56
Дело в том, что сначала получаем все данные точные с точностью до минуты, потом в зависимости от интервала берем выборки в 5, 10, 15 минут уже из общей таблицы. Так минутный интервал 1с в принципе не строит в диаграммах. Данных слишком много и вылетает, пишет какие то ошибки связанные с памятью. Графики от 5 минут и более диаграмма стоится. Поэтому приходится придумывать всякие выкрутасы.

Добавлено через 15 минут
Интервалы для анализа берем от 1 месяца и более. Поэтому чуть подрезаем точность, зато 1с строит диаграммы и не ругается на память, ее хватает.

Добавлено через 4 минуты
заправки машин по продолжительности от 10 и более минут, скачки уровня топлива ловим всегда. Да еще на графике диаграмм строим расчетные данные, которые задает для крана завод изготовитель. Расход во время движения, расход на холостом ходу, расход по моточасам, когда работает крановая установка. Чертим фактический расход и расчетный. вот такие задачки решаем...

SK
26.08.2015, 13:38
Леонид Борисович, я просто хотел сказать, что на интервальных данных, как правило, тоже пробеги есть и дополнительный расчет не требуется - их можно сразу взять.

Леонид Борисович
27.08.2015, 13:24
Спасибо. :temazakryta: