Ответ
 
Опции темы
Старый 18.04.2012, 07:15    | »»» |  #1
kzz1C
Начинающий
 
Аватар для kzz1C
 
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
kzz1C is on a distinguished road
Question OLE - расчет полей

Здравствуйте! Хочу выгрузить данные расчета полей по OLE в файл, чтобы потом разобрать его в 1С. Пробую следующим образом:

Код:
ДатаДляАвтографаНачПериода = Формат(НачПериода,"ДФ='dd.MM.yy H:mm:ss'");
ДатаДляАвтографаКонПериода = Формат(КонПериода,"ДФ='dd.MM.yy H:mm:ss");
//запускаем процедуру waitForFieldsComputing
WorkSensor = 1; 
WorkWidth = ?(
  ЗначениеЗаполнено(СтрокаТранспортноеСредство.ШиринаИнструмента),
    СтрокаТранспортноеСредство.ШиринаИнструмента,
    ШиринаИнструментаПоУмолчанию); //устанавливается в значение 10
Автограф.WaitForFieldsComputing(
    СтрокаТранспортноеСредство.ГрФайл,
    СтрокаТранспортноеСредство.СерийныйНомер,
    ДатаДляАвтографаНачПериода,ДатаДляАвтографаКонПериода,"GSM",WorkSensor,WorkWidth);
Автограф.TripIndex = 1; //Это важно (!!!), хотя, признаю, что и не прописано в документации... сам получил ошибку без этой строчки и воспользовался помощью главного программера...
Временный = ПолучитьИмяВременногоФайла()+".dbf";
Попытка 
    Автограф.ExportListToFile(Временный,"fields","",1,1);  
    ТаблицаРейсовПолей = DBFвТаблицу(Временный);
Исключение 
    Сообщить("Не удалось экспортировать данные: "+ОписаниеОшибки());
КонецПопытки;
прим. - коммент "Это важно (!!!)" и далее - это комментарий Самцова Константина, он раньше пробовал ответить мне на этот вопрос.

Итог этого кода - это всегда "Не удалось экспортировать данные", описание ошибки - неизвестная ошибка (описаниеошибки(), по идее, возвращает текст исключения, которое вернул Ole-объект).
Поля в папке Fields лежат в виде полигонов, все поля отмечены для расчета в окне "Расчет полей". Сам расчет полей, если его вызывать из программы Автограф, проходит в целом успешно, выгрузка в файл xls отрабатывает корректно. Если выгружать по OLE в файлы dbf, csv, txt, получаю ошибку. Рейсы у данного ТС в эти дни есть, трек проходит по полигону. Лобовое стекло протирала, по колесу пинала.
Что я делаю не так?

1. Надо ли запускать процедуру WaitForComputing перед WaitForFieldsComputing?
2. Надо ли создавать файл dbf перед тем, как выгружать туда поля?
3. Полигоны, которые я получаю путем рисования в вашем редакторе, в программе GPSMapEdit выглядят как незамкнутые контуры. Это может играть какую-то роль?
kzz1C вне форума   Ответить с цитированием
Старый 18.04.2012, 07:35    | »»» |  #2
zsergey
Пользователь
 
Аватар для zsergey
 
Регистрация: 16.03.2011
Сообщений: 178
zsergey is on a distinguished road
По умолчанию

Сообщение от kzz1C Посмотреть сообщение
Автограф.ExportListToFile(Временны й,"fields","",1,1);
хз, я меня все работает, пробовал так (полей нет):
Автограф.ExportListToFile(Временны й,"over_speed",,0,1) //создать dbf-файл
zsergey вне форума   Ответить с цитированием
Старый 18.04.2012, 07:38    | »»» |  #3
kzz1C
Начинающий
 
Аватар для kzz1C
 
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
kzz1C is on a distinguished road
По умолчанию

zsergey,
Спасибо за ответ, уважаемый.
У меня не работают именно "fields". И именно они, как назло, крайне нужны
kzz1C вне форума   Ответить с цитированием
Старый 18.04.2012, 07:49    | »»» |  #4
programmer
ТехноКом
 
Аватар для programmer
 
Регистрация: 17.12.2010
Сообщений: 2,865
programmer is on a distinguished road
По умолчанию

Сообщение от kzz1C Посмотреть сообщение
Автограф.TripIndex = 1; //Это важно (!!!),
Это была ошибка (ложная проверка индекса рейса, который никак не относится к обр. полей), она уже исправлена. Так что TripIndex можно не задавать после WaitForFieldsComputing.



Сообщение от kzz1C Посмотреть сообщение
1. Надо ли запускать процедуру WaitForComputing перед WaitForFieldsComputing?
Нет



Сообщение от kzz1C Посмотреть сообщение
2. Надо ли создавать файл dbf перед тем, как выгружать туда поля?
Нет. Но у Вас выполняется вызов ExportListToFile(Временный,"fields","",1,1);
где
Add = 1 – добавление записей к уже существующему файлу
CreateAlways = 1 – в случае ошибки создавать пустой файл
Попробуйте так ExportListToFile(Временный,"fields","",0,1);



Сообщение от kzz1C Посмотреть сообщение
3. Полигоны, которые я получаю путем рисования в вашем редакторе, в программе GPSMapEdit выглядят как незамкнутые контуры. Это может играть какую-то роль?
Нет. Вообще, попробуйте для начала просто выполнить расчёт из программы.

ООО «ТехноКом», г. Челябинск
Макаров Константин Евгеньевич - Главный Программист ООО «ТехноКом» (диспетчерское ПО «АвтоГРАФ»)
programmer вне форума   Ответить с цитированием
Старый 18.04.2012, 08:21    | »»» |  #5
kzz1C
Начинающий
 
Аватар для kzz1C
 
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
kzz1C is on a distinguished road
По умолчанию

programmer, спасибо. Я там написала в первом посте, расчет из программы отрабатывает корректно (если его запускать в гуи, в самом окне Автографа, не по оле). По оле он вроде тоже отрабатывает без ошибок. Исключение вызывается на процедуре ExportListToFile.

Попробовала указать 0 в параметре Add, все равно "Ошибка при вызове метода контекста (ExportListToFile): Неизвестная ошибка". Что интересно, файл тоже не создается, хотя в параметре CreateAlways я поставила 1.
Посоветуете что-нибудь?

Код:
    ДатаДляАвтографаНачПериода = Формат(НачПериода,"ДФ='dd.MM.yy H:mm:ss'");
    ДатаДляАвтографаКонПериода = Формат(КонПериода,"ДФ='dd.MM.yy H:mm:ss");
    WorkSensor = 1; WorkWidth = 10;
    Если Автограф = Неопределено Тогда ИнициализироватьCOMОбъект(); КонецЕсли;    
    Автограф.WaitForFieldsComputing(
    "ООО Вектор.ini",
    153508,
    ДатаДляАвтографаНачПериода,ДатаДляАвтографаКонПериода,"GSM",WorkSensor,WorkWidth);
    Временный = "D:\1.dbf";
    Попытка 
        Автограф.ExportListToFile(Временный,"fields","",0,1);
    Исключение 
        Сообщить("Не удалось экспортировать данные: "+ОписаниеОшибки());
    КонецПопытки;

Последний раз редактировалось kzz1C; 18.04.2012 в 08:25.
kzz1C вне форума   Ответить с цитированием
Старый 18.04.2012, 09:44    | »»» |  #6
storm
Опытный пользователь
 
Аватар для storm
 
Регистрация: 22.12.2010
Сообщений: 2,121
storm is on a distinguished road
Отправить сообщение для storm с помощью Skype™
По умолчанию

kzz1C,
попробуйте в блок Исключение добавить код
Автограф.PropertyName = "Last_Error";
Сообщить(Автограф.PropertyValue);
и напишите, какое сообщение у вас выведется

г. Челябинск
Ахмедьянов Алексей Адлерович
storm вне форума   Ответить с цитированием
Старый 18.04.2012, 09:57    | »»» |  #7
zsergey
Пользователь
 
Аватар для zsergey
 
Регистрация: 16.03.2011
Сообщений: 178
zsergey is on a distinguished road
По умолчанию

Сообщение от kzz1C Посмотреть сообщение
Автограф.ExportListToFile(Временны й,"fields","",0,1);
Попробуйте убрать кавычки в третьем параметре.
Вот так: Автограф.ExportListToFile(Временны й,"fields", ,0,1)
СОМ-сервер может не правльно интерпретировать эти кавычки!
zsergey вне форума   Ответить с цитированием
Старый 18.04.2012, 11:45    | »»» |  #8
kzz1C
Начинающий
 
Аватар для kzz1C
 
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
kzz1C is on a distinguished road
По умолчанию

zsergey, спасибо, убрала.


storm, "Неверный индекс рейса (0)" )) Версия Автографа - 3.4.12 (1955 билд)
Попробовала установить tripIndex в 1, получила:

Ошибка при установке значения атрибута контекста (TripIndex)
Автограф.TripIndex = 1;
по причине:
Произошла исключительная ситуация (AutoGRAPH.AutoGRAPHAutomation): Неверный индекс рейса (1)
kzz1C вне форума   Ответить с цитированием
Старый 18.04.2012, 11:53    | »»» |  #9
storm
Опытный пользователь
 
Аватар для storm
 
Регистрация: 22.12.2010
Сообщений: 2,121
storm is on a distinguished road
Отправить сообщение для storm с помощью Skype™
По умолчанию

kzz1C,
Сообщение от programmer Посмотреть сообщение
Это была ошибка (ложная проверка индекса рейса, который никак не относится к обр. полей), она уже исправлена. Так что TripIndex можно не задавать после WaitForFieldsComputing.
обновитесь до последней сборки(1960 билд, поставить можно через инсталляторы), там не нужно будет задавать номер рейса
а если выставлять рейсы, то вначале надо их рассчитать функцией WaitForComputing

г. Челябинск
Ахмедьянов Алексей Адлерович
storm вне форума   Ответить с цитированием
Старый 18.04.2012, 12:28    | »»» |  #10
kzz1C
Начинающий
 
Аватар для kzz1C
 
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
kzz1C is on a distinguished road
По умолчанию

storm,спасибо, уважаемый, сейчас попробую.

Добавлено через 29 минут
все равно та же фигня.

storm,вы не могли бы, чтобы я лучше понимала, привести полный работающий листинг какогонить модуля с участием процедуры расчета полей? Если не желаете флудить в теме, можно сбросить на nastya@adeptis.ru .
kzz1C вне форума   Ответить с цитированием
Старый 18.04.2012, 12:36    | »»» |  #11
storm
Опытный пользователь
 
Аватар для storm
 
Регистрация: 22.12.2010
Сообщений: 2,121
storm is on a distinguished road
Отправить сообщение для storm с помощью Skype™
По умолчанию

Сообщение от kzz1C Посмотреть сообщение
все равно та же фигня.
какая?

г. Челябинск
Ахмедьянов Алексей Адлерович
storm вне форума   Ответить с цитированием
Старый 18.04.2012, 13:25    | »»» |  #12
csistra
ЭКСПЕРТ
 
Аватар для csistra
 
Москва, Липецк, Воронеж, Тамбов, Пенза, Орел
Регистрация: 29.06.2011
Сообщений: 6,754
csistra is on a distinguished road
По умолчанию

фиговая
П.С. сорь не удержался

Консалтинговая Компания ITEGRA (ООО «Айтегра») г. Москва
Мартыненко Сергей Владимирович, эксперт
csistra вне форума   Ответить с цитированием
Старый 18.04.2012, 13:51    | »»» |  #13
kzz1C
Начинающий
 
Аватар для kzz1C
 
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
kzz1C is on a distinguished road
По умолчанию

В общем, ошибку с индексом рейса я все равно получала, даже обновившись на 3.4.12, поэтому попробовала так:
Код:
    НачПериода = Дата(2011,8,23,0,0,0);
    КонПериода = Дата(2011,8,31,23,59,0);    
    // Вставить содержимое обработчика.
    ДатаДляАвтографаНачПериода = Формат(НачПериода,"ДФ='dd.MM.yy H:mm:ss'");
    ДатаДляАвтографаКонПериода = Формат(КонПериода,"ДФ='dd.MM.yy H:mm:ss'");
    WorkSensor = 1; WorkWidth = 10;
    Если Автограф = Неопределено Тогда ИнициализироватьCOMОбъект(); КонецЕсли;    
    Автограф.WaitForComputing(
    "ООО Вектор.ini",
    153508,
    ДатаДляАвтографаНачПериода,ДатаДляАвтографаКонПериода,"GSM",1);
    Автограф.WaitForFieldsComputing(
    "ООО Вектор.ini",
    153508,
    ДатаДляАвтографаНачПериода,ДатаДляАвтографаКонПериода,"GSM",WorkSensor,WorkWidth);
    Временный = "D:\1.dbf"; Автограф.TripIndex = 1; 
    Попытка 
        Автограф.ExportListToFile(Временный,"fields","",0,1);
    Исключение 
        Автограф.PropertyName = "Last_Error";
        Сообщить("Не удалось экспортировать данные: "+ОписаниеОшибки()+Символы.ПС + "Сообщение Автографа: "+Автограф.PropertyValue);
    КонецПопытки;
Ошибка: Не указан тип или вид списка записей.

Добавлено через 6 минут
Пробую без расчета рейсов:
Код:
    Автограф.WaitForFieldsComputing(
    "ООО Вектор.ini",
    153508,
    ДатаДляАвтографаНачПериода,ДатаДляАвтографаКонПериода,"GSM",WorkSensor,WorkWidth);
    Временный = "D:\1.dbf";
    Попытка 
        Автограф.ExportListToFile(Временный,"fields","",0,1);
    Исключение 
        Автограф.PropertyName = "Last_Error";
        Сообщить("Не удалось экспортировать данные: "+ОписаниеОшибки()+Символы.ПС + "Сообщение Автографа: "+Автограф.PropertyValue);
    КонецПопытки;
Ошибка: Неверный индекс рейса (0).
kzz1C вне форума   Ответить с цитированием
Старый 18.04.2012, 21:15    | »»» |  #14
SK
Администратор
 
Аватар для SK
 
Регистрация: 27.05.2010
Сообщений: 29,977
SK has much to be proud ofSK has much to be proud ofSK has much to be proud ofSK has much to be proud ofSK has much to be proud ofSK has much to be proud ofSK has much to be proud ofSK has much to be proud of
Отправить сообщение для SK с помощью Skype™
По умолчанию

Пример. Машинки берутся из таблицы ТС.

Код:
Процедура ОтчетПоПолям()
 ТабТС.ВыбратьСтроки();
 ПроцВсе=0;
 ВсегоТС=0;
 ОбработаноТС=0;
 Ширина = 8;
 ФайлВыгрузки = "D:\!\FIELDS.DBF";
 ТабТС.ВыбратьСтроки();
 Пока ТабТС.ПолучитьСтроку() = 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);
  AG.WaitForFieldsComputing(ТабТС.ГрФайл,ТабТС.СерНом,ТСПериодНач,ТСПериодКон,"GSM",Ширина,0);
  AG.TripIndex = 1;
        AG.ExportListToFile(ФайлВыгрузки,"fields","",1,1);
  ОбработаноТС=ОбработаноТС+1;
  Форма.Проц.Заголовок(Строка(Окр(100/ВсегоТС*ОбработаноТС,0))+" %");
 КонецЦикла;
 Предупреждение("ГОТОВО");
КонецПроцедуры //ОтчетПоПолям()
Код:
Процедура ЗаполнитьТаблицуТС()
 // Инициализируем таблицу групп ТС
 ТабГрупп.УдалитьСтроки();
 // Инициализируем таблицу ТС
 ТабТС.УдалитьСтроки();
 ЧислоГрупп=AG.GroupsNum; //Определяем число групп ТС
 Если ЧислоГрупп>0 Тогда
  Для х = 1 По ЧислоГрупп Цикл
   AG.GroupIndex = х; //Передаем индекс (номер) группы в АГ 
   ГрЧислоТС = AG.GroupCarsNum; //Определяем число ТС в группе
   Если ГрЧислоТС > 0 Тогда  //Если кол-во ТС в текущей группе > 0 тогда выводим ТС группы, пустую группу - не выводим
    ТабГрупп.НоваяСтрока();
    ТабГрупп.Группа  = AG.GroupName;      //Название группы ТС
    Для хх = 1 По ГрЧислоТС Цикл
     AG.CarIndex = хх;                 //Передаем индекс (номер) ТС внутри группы в АГ
     ТабТС.НоваяСтрока();
     ТабТС.Метка   = "";               //Метка выбора - снята
     ТабТС.Группа  = AG.GroupName;     //Название группы ТС
     ТабТС.СерНом  = AG.CarDevice;     //Сер. номер контроллера
     ТабТС.Марка   = AG.CarModel;      //Марка ТС
     ТабТС.НомерТС = AG.CarNumber;     //Гос. номер ТС
     ТабТС.ГрФайл  = AG.GroupFileName; //Файл группы ТС (нужен для расчета)
    КонецЦикла;
   КонецЕсли;
  КонецЦикла;
 КонецЕсли;
КонецПроцедуры // ЗаполнитьТаблицуТС()
//****************************************************************************************************************************
// Предопределенная процедура ПриОткрытии()
// Инициализируем форму, таблицы и начальные значения переменных, создаем COM-объект
//****************************************************************************************************************************
Процедура ПриОткрытии()
 ОчиститьОкноСообщений();
 Форма.ИспользоватьСлой("Основной");
 //Сообщить(AG.CurrentVersion); // Текущая версия ПО «АвтоГРАФ»
 Форма.ИспользоватьЗакладки(1);
 AG=СоздатьОбъект("AutoGRAPH.AutoGRAPHAutomation"); // Создаем COM-объект
 ddd=AG.WaitForInitializing();                      // Ждем окончания инициализации объекта
 НепройденныеКТ = 1;                                // Устанавливаем чекбокс "Показывать отчет с непройденными КТ" в положение "Да"
 ВыбНачПериода  = ТекущаяДата();                    // Устанавливаем начальную дату отчета на начало текущего дня
 ВыбКонПериода  = ТекущаяДата();                    // Устанавливаем конечную дату отчета на конец текущего дня
 // Инициализируем таблицу групп ТС
 ТабГрупп.УдалитьСтроки();
 ТабГрупп.НоваяКолонка("Группа",,,,"Группа (+/-)",20,,1);
 // Инициализируем таблицу ТС
 ТабТС.УдалитьСтроки();
 ТабТС.НоваяКолонка("Метка",,,,"Х",3,,1);
 ТабТС.НоваяКолонка("Группа",,,,"Группа",20,,1);
 ТабТС.НоваяКолонка("СерНом",,,,"№ АГ",8,,1);
 ТабТС.НоваяКолонка("Марка",,,,"Марка/Модель",30,,1);
 ТабТС.НоваяКолонка("НомерТС",,,,"Рег. № ТС",20,,1);
 ТабТС.НоваяКолонка("ГрФайл",,,,"Файл группы",20,,1);
 ЗаполнитьТаблицуТС(); // Заполняем таблицу ТС и групп ТС
КонецПроцедуры //ПриОткрытии

ООО «ТехноКом», г. Челябинск
Самцов Константин Юрьевич - зам. директора по коммерческой деятельности
SK вне форума   Ответить с цитированием
Старый 19.04.2012, 06:17    | »»» |  #15
kzz1C
Начинающий
 
Аватар для kzz1C
 
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
kzz1C is on a distinguished road
По умолчанию

Сообщение от SK Посмотреть сообщение
AG.WaitForFieldsComputing(ТабТС.ГрФайл, ТабТС.СерНом,ТCПериодНач,ТС ПериодКон,"GSM",Ширина,0);
А в документации у вас другой порядок аргументов (не Ширина,Сенсор, а Сенсор,Ширина). Впрочем, сейчас попробую.

Последний раз редактировалось kzz1C; 19.04.2012 в 06:39.
kzz1C вне форума   Ответить с цитированием
Старый 04.05.2012, 09:20    | »»» |  #16
kzz1C
Начинающий
 
Аватар для kzz1C
 
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
kzz1C is on a distinguished road
По умолчанию

нашла еще баг (ну или какую-то мою недоработку) по расчету полей - порядок действий следующий.
На одном и том же экземпляре Автографа по OLE запускаю процедуру расчета по очереди для нескольких ТС - при этом, если результаты по данному ТС отсутствуют (т.е. оно не ездило по полям), а по предыдущему были, то выгружаются результаты по предыдущему ТС. Если запускать перед каждым расчетом новый экземпляр, то выгружается пустой dbf.
kzz1C вне форума   Ответить с цитированием
Старый 04.05.2012, 09:43    | »»» |  #17
programmer
ТехноКом
 
Аватар для programmer
 
Регистрация: 17.12.2010
Сообщений: 2,865
programmer is on a distinguished road
По умолчанию

kzz1C, исправим

ООО «ТехноКом», г. Челябинск
Макаров Константин Евгеньевич - Главный Программист ООО «ТехноКом» (диспетчерское ПО «АвтоГРАФ»)
programmer вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


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


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