PDA

Просмотр полной версии : Внешний модуль отчетов (COM-соединение)


kzz1C
15.12.2011, 14:30
Здравствуйте! Пытаюсь получить для отчетов в 1С данные из Автографа. С свойствами самого Автографа, описанными в документе "Описание COM-сервера АвтоГРАФ", проблем никаких нет.
Хотелось бы еще получить данные по обработанной площади для каждого заданного поля и ТС. Есть следующие модули - AGReports и Agricalc. Подскажите, пожалуйста, как с ними работать и есть ли хоть какая-нибудь документация? В особенности хотелось бы вызвать по COM второй модуль, я думаю, что это возможно.

SK
15.12.2011, 15:00
Существует ряд функций для расчета площадей с последующей выгрузкой в списки данных. Обновите свою версию описания COM (OLE) - она идет в комплекте с программой. Можно через интернет-инсталлятор.
С модулями Вы никак не работаете. Они сами получают данные от основной программы по OLE.

kzz1C
16.12.2011, 06:39
Существует ряд функций для расчета площадей с последующей выгрузкой в списки данных. Обновите свою версию описания COM (OLE) - она идет в комплекте с программой. Можно через интернет-инсталлятор.
С модулями Вы никак не работаете. Они сами получают данные от основной программы по OLE.

Да, замечательно, действительно, там есть эти функции. Может быть, вы мне еще подскажете, как называются свойства COM-объекта, в которые записываются результаты вычислений? В описании не хватает этих данных. Заранее большое спасибо.

kzz1C
16.12.2011, 09:02
Вот смотрите, есть код -

ДатаДляАвтографаНачПериод а = Формат(НачПериода,"ДФ='dd.MM.yy H:mm:ss'");
ДатаДляАвтографаКонПериод а = Формат(КонецДня(КонПериода ),"ДФ='dd.MM.yy H:mm:ss");


Для каждого СтрокаТранспортноеСредств о ИЗ ДанныеТС Цикл
Автограф.SetGroupIndexByFileName(Стро аТранспортноеСредство.грФ айл);
Автограф.SetCarIndexByDevice (СтрокаТранспортноеСредст о.СерийныйНомер);
Автограф.WaitForComputing (СтрокаТранспортноеСредст о.грФайл,СтрокаТранспортн еСредство.СерийныйНомер,Д таДляАвтографаНачПериода, ДатаДляАвтографаКонПериод а,"GSM",1);
Автограф.WaitForFieldsComputing (СтрокаТранспортноеСредст о.грФайл,СтрокаТранспортн еСредство.СерийныйНомер,Д таДляАвтографаНачПериода, ДатаДляАвтографаКонПериод а,"GSM",8000,0);


Временный = ПолучитьИмяВременногоФайл а()+".txt";
Автограф.ExportListToFile(Временны й,"trips","",1,1);
Автограф.ExportListToFile(Временны й,"fields","",1,1);
ЗапуститьПриложение("notepad "+Временный);
КонецЦикла;


Процедура Автограф.ExportListToFile(Временны й,"trips","",1,1) отрабатывает как надо, данные экспортируются в файл txt. Если поставить тип выгрузки fields, то возникает "неизвестная ошибка" без каких-либо еще комментариев. Что я делаю не так?

SK
16.12.2011, 11:37
ДатаДляАвтографаНачПериод а = Формат(НачПериода,"ДФ='dd.MM.yy H:mm:ss'");
ДатаДляАвтографаКонПериод а = Формат(КонецДня(КонПериода ),"ДФ='dd.MM.yy H:mm:ss");


Для каждого СтрокаТранспортноеСредств о ИЗ ДанныеТС Цикл

ШиринаОргана = 8; // 8000 метров - это сильно круто...

Автограф.WaitForFieldsComputing (СтрокаТранспортноеСредст о.грФайл,СтрокаТранспортн еСредство.СерийныйНомер,Д таДляАвтографаНачПериода, ДатаДляАвтографаКонПериод а,"GSM",ШиринаОргана,0);

Автограф.TripIndex = 1; //Это важно (!!!), хотя, признаю, что и не прописано в документации... сам получил ошибку без этой строчки и воспользовался помощью главного программера...

Временный = ПолучитьИмяВременногоФайл а()+".dbf"; //экспорт ведется в файлы DBF !!!

Автограф.ExportListToFile(Временны й,"fields","",1,1);

ЗапуститьПриложение("excel "+Временный);

КонецЦикла;

kzz1C
16.12.2011, 11:52
// 8000 метров - это сильно круто...
хм. вроде мелькала единица измерения "мм" для этой величины. впрочем, ладно. огромное спасибо, буду пробовать.

SK
16.12.2011, 11:58
// 8000 метров - это сильно круто...
хм. вроде мелькала единица измерения "мм" для этой величины. впрочем, ладно. огромное спасибо, буду пробовать.
Ну там не только в этом было дело...
Код полностью рабочий - я проверил.

kzz1C
16.12.2011, 13:13
Скажите, а есть какой-нибудь вариант увидеть данные этого списка, помимо выгрузки в файл? Просто у меня продолжает возникать "Неизвестная ошибка" во время исполнения процедуры "ExportListToFile". Процедура теперь следующего вида:

Для каждого СтрокаТранспортноеСредств о ИЗ ДанныеТС Цикл
//Автограф.SetGroupIndexByFileName(Стро аТранспортноеСредство.грФ айл);
//Автограф.SetCarIndexByDevice (СтрокаТранспортноеСредст о.СерийныйНомер);
//с раскомментированными этими двумя строками то же самое

Ширина = 8;
Автограф.WaitForFieldsComputing (СтрокаТранспортноеСредст о.грФайл,СтрокаТранспортн еСредство.СерийныйНомер,Д таДляАвтографаНачПериода, ДатаДляАвтографаКонПериод а,"GSM",Ширина,0);

Если Автограф.TripsNum < 1 Тогда Продолжить; КонецЕсли; //продолжить - это аналог continue;
Автограф.TripIndex = 1;

Временный = "D:\aut.dbf"; //на тот мистический случай, если программа не имеет прав писать во временный файл
Автограф.ExportListToFile(Временны й,"fields","",1,1);
ЗапуститьПриложение("excel "+Временный);
КонецЦикла;


Конечно, для чистоты эксперимента надо попробовать то же самое в какой-нибудь другой среде, но 1с8 вроде всегда корректно работала с внешними приложениями.

Заранее спасибо за внимание.

SK
16.12.2011, 14:16
1. Версия ПО какая ???
2. Другие варианты выгрузки по полям - не предусмотрены, да и не нужны в общем-то. Кому хочется текста - модуль отчетов сохранит хоть в тексте, хоть в картинках, хоть в куче других форматов. А в чем собственно проблема ? Для 1С-ки DBF - это родной формат.
3. На какой строке ошибка-то возникает ? У меня вышеприведенный мной код - работает совершенно нормально.
4. В меню ПО, где обработка полей - поля-то есть в списке, помеченные галочками ?
5. Мож у Вас ошибка на операторе ЗапуститьПриложение ???

kzz1C
16.12.2011, 14:29
1. В вашем обновляторе 2.21, в окне "О программе" - 3.4.10 (сборка 1932)
2. Может, проще было бы отлаживать, если бы было больше информации. Не в формате дело.
3, 5 - ошибка на строке
Автограф.ExportListToFile(Временны й,"fields","",1,1); (проверяю дебаггером, ошибки быть не может).

4. Есть.

В любом случае спасибо за помощь. Будем искать дальше.

Виктор
20.12.2011, 14:26
Вопрос не открывая новую тему .Экспорт в MS Access 2007 не определяет класс при компиляции.В объектах ссылка есть ,а строчку
Set ag = CreateObject("AutoGRAPH.AutoGRAPHAutomation") пишет объект не найден

SK
20.12.2011, 14:34
Вопрос не открывая новую тему .Экспорт в MS Access 2007 не определяет класс при компиляции.В объектах ссылка есть ,а строчку
Set ag = CreateObject("AutoGRAPH.AutoGRAPHAutomation") пишет объект не найден
99%, что COM-объект не зарегистрирован в системном реестре из-за пользовательских прав доступа. Запустите диспетчерскую программу АвтоГРАФ от имени администратора.