18.04.2012, 07:15
|
| »»» |
#1
|
Начинающий
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
|
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 выглядят как незамкнутые контуры. Это может играть какую-то роль?
|
|
|
|
18.04.2012, 07:35
|
| »»» |
#2
|
Пользователь
Регистрация: 16.03.2011
Сообщений: 178
|
Сообщение от kzz1C
|
Автограф.ExportListToFile(Временны й,"fields","",1,1);
|
хз, я меня все работает, пробовал так (полей нет):
Автограф.ExportListToFile(Временны й,"over_speed",,0,1) //создать dbf-файл
|
|
|
|
18.04.2012, 07:38
|
| »»» |
#3
|
Начинающий
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
|
zsergey,
Спасибо за ответ, уважаемый.
У меня не работают именно "fields". И именно они, как назло, крайне нужны
|
|
|
|
18.04.2012, 07:49
|
| »»» |
#4
|
ТехноКом
Регистрация: 17.12.2010
Сообщений: 2,865
|
Сообщение от 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 выглядят как незамкнутые контуры. Это может играть какую-то роль?
|
Нет. Вообще, попробуйте для начала просто выполнить расчёт из программы.
ООО «ТехноКом», г. Челябинск
Макаров Константин Евгеньевич - Главный Программист ООО «ТехноКом» (диспетчерское ПО «АвтоГРАФ»)
|
|
|
|
18.04.2012, 08:21
|
| »»» |
#5
|
Начинающий
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
|
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.
|
|
|
|
18.04.2012, 09:44
|
| »»» |
#6
|
Опытный пользователь
Регистрация: 22.12.2010
Сообщений: 2,121
|
kzz1C,
попробуйте в блок Исключение добавить код
Автограф.PropertyName = "Last_Error";
Сообщить(Автограф.PropertyValue);
и напишите, какое сообщение у вас выведется
г. Челябинск
Ахмедьянов Алексей Адлерович
|
|
|
|
18.04.2012, 09:57
|
| »»» |
#7
|
Пользователь
Регистрация: 16.03.2011
Сообщений: 178
|
Сообщение от kzz1C
|
Автограф.ExportListToFile(Временны й,"fields","",0,1);
|
Попробуйте убрать кавычки в третьем параметре.
Вот так: Автограф.ExportListToFile(Временны й,"fields", ,0,1)
СОМ-сервер может не правльно интерпретировать эти кавычки!
|
|
|
|
18.04.2012, 11:45
|
| »»» |
#8
|
Начинающий
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
|
zsergey, спасибо, убрала.
storm, "Неверный индекс рейса (0)" )) Версия Автографа - 3.4.12 (1955 билд)
Попробовала установить tripIndex в 1, получила:
Ошибка при установке значения атрибута контекста (TripIndex)
Автограф.TripIndex = 1;
по причине:
Произошла исключительная ситуация (AutoGRAPH.AutoGRAPHAutomation): Неверный индекс рейса (1)
|
|
|
|
18.04.2012, 11:53
|
| »»» |
#9
|
Опытный пользователь
Регистрация: 22.12.2010
Сообщений: 2,121
|
kzz1C,
Сообщение от programmer
|
Это была ошибка (ложная проверка индекса рейса, который никак не относится к обр. полей), она уже исправлена. Так что TripIndex можно не задавать после WaitForFieldsComputing.
|
обновитесь до последней сборки(1960 билд, поставить можно через инсталляторы), там не нужно будет задавать номер рейса
а если выставлять рейсы, то вначале надо их рассчитать функцией WaitForComputing
г. Челябинск
Ахмедьянов Алексей Адлерович
|
|
|
|
18.04.2012, 12:28
|
| »»» |
#10
|
Начинающий
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
|
storm,спасибо, уважаемый, сейчас попробую.
Добавлено через 29 минут
все равно та же фигня.
storm,вы не могли бы, чтобы я лучше понимала, привести полный работающий листинг какогонить модуля с участием процедуры расчета полей? Если не желаете флудить в теме, можно сбросить на nastya@adeptis.ru .
|
|
|
|
18.04.2012, 12:36
|
| »»» |
#11
|
Опытный пользователь
Регистрация: 22.12.2010
Сообщений: 2,121
|
Сообщение от kzz1C
|
все равно та же фигня.
|
какая?
г. Челябинск
Ахмедьянов Алексей Адлерович
|
|
|
|
18.04.2012, 13:25
|
| »»» |
#12
|
ЭКСПЕРТ
Москва, Липецк, Воронеж, Тамбов, Пенза, Орел
Регистрация: 29.06.2011
Сообщений: 6,754
|
фиговая
П.С. сорь не удержался
Консалтинговая Компания ITEGRA (ООО «Айтегра») г. Москва
Мартыненко Сергей Владимирович, эксперт
|
|
|
|
18.04.2012, 13:51
|
| »»» |
#13
|
Начинающий
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
|
В общем, ошибку с индексом рейса я все равно получала, даже обновившись на 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).
|
|
|
|
18.04.2012, 21:15
|
| »»» |
#14
|
Администратор
Регистрация: 27.05.2010
Сообщений: 29,977
|
Пример. Машинки берутся из таблицы ТС.
Код:
|
Процедура ОтчетПоПолям()
ТабТС.ВыбратьСтроки();
ПроцВсе=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);
ЗаполнитьТаблицуТС(); // Заполняем таблицу ТС и групп ТС
КонецПроцедуры //ПриОткрытии |
ООО «ТехноКом», г. Челябинск
Самцов Константин Юрьевич - зам. директора по коммерческой деятельности
|
|
|
|
19.04.2012, 06:17
|
| »»» |
#15
|
Начинающий
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
|
Сообщение от SK
|
AG.WaitForFieldsComputing(ТабТС.ГрФайл, ТабТС.СерНом,ТCПериодНач,ТС ПериодКон,"GSM",Ширина,0);
|
А в документации у вас другой порядок аргументов (не Ширина,Сенсор, а Сенсор,Ширина). Впрочем, сейчас попробую.
Последний раз редактировалось kzz1C; 19.04.2012 в 06:39.
|
|
|
|
04.05.2012, 09:20
|
| »»» |
#16
|
Начинающий
АдептИС - софт для АПК
Регистрация: 15.12.2011
Сообщений: 14
|
нашла еще баг (ну или какую-то мою недоработку) по расчету полей - порядок действий следующий.
На одном и том же экземпляре Автографа по OLE запускаю процедуру расчета по очереди для нескольких ТС - при этом, если результаты по данному ТС отсутствуют (т.е. оно не ездило по полям), а по предыдущему были, то выгружаются результаты по предыдущему ТС. Если запускать перед каждым расчетом новый экземпляр, то выгружается пустой dbf.
|
|
|
|
04.05.2012, 09:43
|
| »»» |
#17
|
ТехноКом
Регистрация: 17.12.2010
Сообщений: 2,865
|
kzz1C, исправим
ООО «ТехноКом», г. Челябинск
Макаров Константин Евгеньевич - Главный Программист ООО «ТехноКом» (диспетчерское ПО «АвтоГРАФ»)
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 07:21. Часовой пояс GMT.
|
|