Работа с отчетами и OCReportObject

classic Classic list List threaded Threaded
4 messages Options
Svetlana Svetlana
Reply | Threaded
Open this post in threaded view
|

Работа с отчетами и OCReportObject

Здравствуйте, есть ли где-нибудь пример работы с отчетами через OCReportObject или как-то еще?
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Работа с отчетами и OCReportObject

Официального примера нет, так как на данный момент не все функции репортинга 1С поддерживаются.
Я дам Вам черновики, на которых я все это делал.
JUReport01.java
Фактически там есть три части: набор данных, шаблон и рендеринг. С последними двумя все хорошо, а вот с наборами данных не очень, точнее не все варианты поддерживаются.
Набор данных из таблицы (ValueTable) работает нормально (собственно в файле это он и есть). Но это обязывает copy-past-ить запросы из модуля 1С. Селяви...
Будут вопросы, обращайтесь.
OCTitbit developer.
Svetlana Svetlana
Reply | Threaded
Open this post in threaded view
|

Re: Работа с отчетами и OCReportObject

Здравствуйте, Игорь. Попробовала пример. При записи на диск C все отлично, но при попытке записи на sdcard в строке
spreadsheetDocument.writeXLS("/mnt/sdcard/rep.xls");
вылетает следующая ошибка:
org.jinterop.dcom.impls.automation.JIAutomationException: Exception occurred.  [0x80020009]
Разрешения для записи на sdcard есть. Можете подсказать в чем проблема?
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Работа с отчетами и OCReportObject

Могу, подскажу.
Ошибка в физике процесса. OCTitbit это что-то наподобие "тонкого клиента", он не содержит в себе DCOM объектов, он только манипулирует ими - создает, вызывает методы, устанавливает свойства. OCTitbit в java на вашем мобильном устройстве, а DCOM объект удаленный - на сервере.
writeXLS - это "нативный" метод DCOM, и исполняется он на сервере DCOM. Я понимаю откуда неразбериха - нет примеров и нет javadoc-ов в модуле репортинга. Так вот writeXLS и прочие write этого объекта пишут именно на сервер, файл создается по указанному пути на сервере.

Как с этим жить?
1) Выгрузите с помощью writeXXX файл на сервере в какой-нибудь temp директории.
2a) Для бинарных файлов: с помощью OCApp и метода  OCBinaryData newBinaryData(String fileName)  вы получаете на клиента (да-да теперь уже на клиента) строку в кодировке base64. А под ней уже ваши байтики.
2b) Для текстовых файлов подойдет и OCTextReader
3) При необходимости удалите временный файл с сервера с помощью OCApp.deleteFiles
OCTitbit developer.