ОФИЦИАЛЬНЫЙ ФОРУМ ГРУППЫ КОМПАНИЙ «ТЕХНОКОМ»

ОФИЦИАЛЬНЫЙ ФОРУМ ГРУППЫ КОМПАНИЙ «ТЕХНОКОМ» (https://forum.tk-chel.ru/index.php)
-   Система «АвтоГРАФ»: Программное обеспечение (https://forum.tk-chel.ru/forumdisplay.php?f=4)
-   -   1c (оле) <=> Автограф, запрос по заправкам топлива (https://forum.tk-chel.ru/showthread.php?t=2718)

Леонид Борисович 06.02.2013 08:57

1c (оле) <=> Автограф, запрос по заправкам топлива
 
Добрый день!

Задача такая... Необходимо получить данные запросом из 1с через оле в автограф по заправкам за период. Начало заправки, окончание, количество литров заправки.
Вроде все просто и понятно, но... Смотрим в описание полей dbf...
Для запроса через

AG.ExportDataToFile(ИмяФайлаБазыDBF,Р еквизитЗапроса,1);


Тип: 0 – координаты;
1 – аналоговые данные;
2 – счётчики 1-2;
3 – счётчики 3-4;
4 – характеристика движения;
5 – событие;
6 – 1-wire ID водителя;
7 – 1-wire температура 1-4;
8 – 1-wire температура 5-8;
9 – RS-485: датчики LLS 1-4;
10 – RS-485: датчики LLS 5-8;
11 – CAN1: скор., упр,. расход;
12 – CAN2: уровни топлива;
13 – CAN3: обороты, моточасы;
14 – CAN4: температура;
15 – CAN5: пробеги общ. и сут.;
16 – CAN6: нагрузка на колёса;
17 – CAN7: записи пользователя;
18 – счётчики 5-6;
19 – счётчики 7-8;
20 – RS-485: объём заправки;
21 – RS-485: расход топлива;
22 – RS-485: прод.-сть. заправки;
23 – RS-485: расширитель входов;
24 – RS-485: пассажиропоток;
25 – RS-485: вес (уровень);
26 – CAN: коды ошибок;
27 – CAN: калькулированный расход

Тут вроде ясно, строчка 22 – RS-485: прод.-сть. заправки, она нам и нужна.

т.е. в нашем случае AG.ExportDataToFile(ИмяФайлаБазыDBF,22 ,1); - это для продолжительности заправки,
для объема заправки ставим соответственно:
AG.ExportDataToFile(ИмяФайлаБазыDBF,20 ,1);

Далее делаем запрос в 1с ке

ДанныеОбработеКрановойУст ановки.Очистить();
AG=Новый COMОбъект("AutoGRAPH.AutoGRAPHAutomation"); // Создаем COM-объект
ddd=AG.WaitForInitializing(); // Ждем окончания инициализации объекта
НепройденныеКТ = 1; // Устанавливаем чекбокс "Показывать отчет с непройденными КТ" в положение "Да"
ТабГрупп.очистить();
ТабКТ.очистить();
ЗаполнитьТаблицуТС(Кран_);
Для каждого стр из ТабТС цикл
ТСПериодНач=НачалоДня(НачП ериода) ;
ТСПериодКон=КонецДня(КонПе риода) ;
AG.SetGroupIndexByFileName(стр.ГрФайл);
AG.SetCarIndexByDevice(стр.СерНом);
AG.WaitForComputing(стр.ГрФайл,стр.С рНом,ТСПериодНач,ТСПериод он,"GSM",1);
КолРейсов = AG.TripsNum;
ФайлКТ = AG.CarCheckPointsFile;
если КолРейсов > 0 тогда
AG.TripIndex = 1;
конецесли ;


СерийныйНомерКрана = стр.Серном ;

ИмяФайлаБазыDBF= строка("D:\kran.dbf");
Попытка
AG.ExportDataToFile(ИмяФайлаБазыDBF,22 ,1);
Исключение
AG.PropertyName = "Last_Error";
Сообщить(AG.PropertyValue);
Сообщить("Не удалось экспортировать данные: "+ОписаниеОшибки());
КонецПопытки;


Далее должен сформироваться файл dbf в него заходим и перебираем, берем что нам надо.
Но то что надо нам, нет.
Похоже что ExportDataToFile не воспринимает параметр 22.

Подскажите пожалуйста в чем засада?!
Может где то какой то параметр надо поставить?!

Добавлено через 51 минуту
система почему то обрезает сообщение. Чтобы посмотреть все, нажмите на расширенный режим...

SK 06.02.2013 09:15

Леонид Борисович, а почему через файл ? Эти данные легко и гораздо быстрее можно напрямки через массив получить.


Леонид Борисович 06.02.2013 09:31

Через массив ни разу не делали. Только через файл.
Подскажите пример пожалуйста.

Добавлено через 2 минуты
Как я понял, должно быть тоже самое, только заместо параметра

AG.ExportDataToFile(
ставим то что указали с нужными параметрами?

SK 06.02.2013 09:44

Вложений: 1
Отчет по заправкам и сливам:

Нажмите для просмотра содержимого...
Код:

//************************************************************************************************************************************************************************
// Процедура ОтчетПоЗИС() - по заправкам и сливам
//************************************************************************************************************************************************************************
Процедура ОтчетПоЗИС()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ОтчетЗИС");
Таб.Опции(0,0,0,0);
Таб.ВывестиСекцию("Шапка");
 
ТабТС.ВыбратьСтроки();
 
ПроцВсе=0;
ВсегоТС=0;
ОбработаноТС=0;
 
ТабТС.ВыбратьСтроки();
Пока ТабТС.ПолучитьСтроку() = 1 Цикл
Если ТабТС.Метка = "+" Тогда ВсегоТС = ВсегоТС + 1; КонецЕсли;
КонецЦикла;
ТабТС.ВыбратьСтроки();
Пока ТабТС.ПолучитьСтроку() > 0 Цикл
Если ТабТС.Метка = "" Тогда Продолжить; КонецЕсли;
ТСПериодНач=Формат(ДатаЧисло(ВыбНачПериода),"Ч(0)2.0")+"."+Формат(ДатаМесяц(ВыбНачПериода),"Ч(0)2.0")+"."+Строка(ДатаГод(ВыбНачПериода))+" 00:00:00";
ТСПериодКон=Формат(ДатаЧисло(ВыбКонПериода),"Ч(0)2.0")+"."+Формат(ДатаМесяц(ВыбКонПериода),"Ч(0)2.0")+"."+Строка(ДатаГод(ВыбКонПериода))+" 23:59:59";
 
AG.SetGroupIndexByFileName(ТабТС.ГрФайл);
AG.SetCarIndexByDevice(ТабТС.СерНом);
 
AG.WaitForComputing(ТабТС.ГрФайл,ТабТС.СерНом,ТСПериодНач,ТСПериодКон,"GSM",1);
ОбработаноТС=ОбработаноТС+1;
Форма.Проц.Заголовок(Строка(Окр(100/ВсегоТС*ОбработаноТС,0))+" %");
 
КолРейсов = AG.TripsNum;
 
Таб.ВывестиСекцию("ШапкаТС");
 
    Если КолРейсов=0 Тогда
  //Предупреждение("Рейсов не обнаружено");
Иначе
  Для х = 1 По КолРейсов Цикл
  AG.TripIndex = х;
    НомРейса = х;
    НачРейса = AG.TripStartRealTime;
    КонРейса = AG.TripEndRealTime;
  AG.TripEntriesListTypeName="tank";
  AG.TripEntriesListKindName="num1"; // ДЛЯ БАКА 1 !!!
  КолЗИС = AG.TripEntriesNum;
  Если КолЗИС > 0 Тогда
    Таб.ВывестиСекцию("РЕЙС"); //После проверки КолЗИС, т.к. заголовки рейсов без заправок или сливов не выводим
    Для хх = 1 По КолЗИС Цикл
    AG.EntryIndex = хх;
 
    Уровень1Нач = Окр (AG.EntryTank1StartLevel,2);
    Уровень1Кон = Окр (AG.EntryTank1EndLevel,2);
    ЗИС_Адрес  = AG.EntryStartAddress;
    ЗИС_Нач  = AG.EntryStartRealTime;
    ЗИС_Кон  = AG.EntryEndRealTime;
    ЗИС_Длит = AG.EntryRealCont;
    Если Уровень1Нач > Уровень1Кон Тогда
      ЗИС = "СЛИВ";
      ЗИС_Кол = Уровень1Нач - Уровень1Кон;
    Иначе
      ЗИС = "ЗАПРАВКА";
      ЗИС_Кол = Уровень1Кон - Уровень1Нач;
    КонецЕсли;
 
    Если ЗИС = "СЛИВ" Тогда
      Таб.ВывестиСекцию("СЛИВ");
    Иначе
      Таб.ВывестиСекцию("ЗАПРАВКА");
    КонецЕсли;
 
    КонецЦикла;
  КонецЕсли;
  КонецЦикла;
КонецЕсли;
 
Таб.ВывестиСекцию("Подвал");
 
КонецЦикла;
 
Таб.ТолькоПросмотр(1);
Таб.Показать("ОтчетЗИС","");
 
КонецПроцедуры //ОтчетПоЗИС() - по заправкам и сливам


Леонид Борисович 06.02.2013 14:15

Отличный ответ, большое спасибо.

Zircool 16.04.2013 16:31

А как можно подтянуть котрольные точки, через которые прошло ТС?

SK 16.04.2013 20:05

Цитата:

Сообщение от Zircool (Сообщение 54651)
А как можно подтянуть котрольные точки, через которые прошло ТС?

К чему подтянуть ?
Тремя постами выше - вложен пример отчетов для 1С - там есть и отчет по КТ, причем и просто по пройденным и по пройденным и непройденным...

Zircool 17.04.2013 12:32

Спасибо! Посмотрел разобрался.

SK подскажите еще а есть ли возможность создавать рейсы в автографе через OLE если у нас в 1с создаются путевки, можно прописать на обработку при записи связь с автографом и создание рейса.

SK 18.04.2013 06:15

Что значит "создавать рейсы" ? Рейсы не создаются, деление на рейсы делается согласно установленным признакам начала нового рейса.

Если надо что-то нестандартное или динамическое, Вы можете самостоятельно делить на рейсы как хотите, а потом в цикле подставлять полученные временные интервалы при формировании отчетов и получении данных в 1С.

У Вас по каким признакам начинается и заканчивается рейс ?
Имхо, сначала нужно поставить задачу - как правило все можно решить и без лишних кастомных телодвижений.

olegg72 25.06.2013 06:27

[QUOTE=Леонид Борисович;49291]Добрый день!

Задача такая... Необходимо получить данные запросом из 1с через оле в автограф по заправкам за период. Начало заправки, окончание, количество литров заправки.

Подскажите, а у Вас на машинах Дуты стоят? если да, то какая их точность?


Текущее время: 00:02. Часовой пояс GMT.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot