powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Программный доступ к внутренним данным файлов .rpt
10 сообщений из 10, страница 1 из 1
Программный доступ к внутренним данным файлов .rpt
    #35599803
quazatron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть куча rpt-шек (Crystal Reports 8.5). Подскажите, plz, как осуществить сабж. Необходимо извлечь данные, желательно SQL-запросами. Примеры на любом языке приветствуются.
...
Рейтинг: 0 / 0
Программный доступ к внутренним данным файлов .rpt
    #35601260
Alexander Bor.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используя технологии, доступные для CR 8.5: API - CRPE API или COM - RDC, загружаешь в приложение отчет с сохраненными данными (или создаешь объект отчета, если СОМ), а затем выполняешь экспорт в XML, csv или в Access через ODBC. Примеров в сети и книгах достаточно. Да и в поставке CR 8.5 Developer идут примеры.
...
Рейтинг: 0 / 0
Программный доступ к внутренним данным файлов .rpt
    #35613610
Guset
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно пример примера? :) Гуглю второй день по той же теме. Нашел несколько книжек и примеров, но там показано как создавать отчеты, используя различные источники данных.

Мне не нужно создавать отчеты, нужно вытащить данные из 250 штук rpt. Вариант с конвертацией неплох. Вопрос как _конкретно_ это сделать программно автоматически.
...
Рейтинг: 0 / 0
Программный доступ к внутренним данным файлов .rpt
    #35614552
Alexander Bor.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примеры для RDC можно, например, посмотреть здесь:
KB014: Integrating Crystal Reports with Visual FoxPro и здесь:
Exporting Using the Report Designer Component
...
Рейтинг: 0 / 0
Программный доступ к внутренним данным файлов .rpt
    #35614666
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Bor.Примеры для RDC можно, например, посмотреть здесь:
KB014: Integrating Crystal Reports with Visual FoxPro и здесь:
Exporting Using the Report Designer Component
А RDC появилось в 8.5 или в 9?
...
Рейтинг: 0 / 0
Программный доступ к внутренним данным файлов .rpt
    #35614841
Alexander Bor.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RDC появились в 6-й версии CR.
...
Рейтинг: 0 / 0
Программный доступ к внутренним данным файлов .rpt
    #35634883
Guset
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот этот код взят со страницы первой ссылки (спасибо Alex) и он работает. Работает на Visual FoxPro 7.0.
На VFP6 наотрез отказался подключаться компонент, также как и в VB6.

LOCAL oCR AS CRAXDRT.Application
LOCAL oRpt AS CRAXDRT.Report
LOCAL oExp AS CRAXDRT.ExportOptions

oCR = CREATEOBJECT("CrystalRuntime.Application")
oRpt = oCR.OpenReport("C:\rpts\0001.rpt")

oExp = oRpt.ExportOptions()
oExp.DestinationType = 1 && disk
oExp.FormatType = 5 && CSV
oExp.DiskFileName = "C:\rpts\0001.txt"
oRpt.Export(.F.)

Экспортируется без ошибок. Проблема заключается в том, что некоторые текстовые поля отчета 0001.rpt зачем-то помещены в контейнер, и значения этих полей при экспорте в CSV не переносятся.

При попытке экспорта в другие форматы, например в XML, возникает ошибка. OLE IDispatch exception code 0 from Crystal Reports ActiveX Designer: File not found. Непонятно, о каком файле идет речь.

oExp = oRpt.ExportOptions()
oExp.DestinationType = 1 && 1 works
oExp.FormatType = 36 && crEFTXML
oExp.DiskFileName = "C:\rpts\3.xml"
oRpt.Export(.F.)

При экспорте отчетов вручную в CR8.5 Dev (File->Print->Export->Adobe PDF), появляется окно "Exporting Records" и следом за ним окно с заголовком "Select Data Source", где просят указать файл *.ttx или создать новый. Я создал такой файл специальным скриптом. Не помогло. Тоже самое с другими форматами, с XML, HTML и даже с Text.

Может можно как-то на ходу вытащить данные без экспорта?

LOCAL oCR AS CRAXDRT.Application
LOCAL oRpt AS CRAXDRT.Report
LOCAL oDB AS CRAXDRT.Database
LOCAL ocDBT AS CRAXDRT.DatabaseTables
LOCAL oDBT AS CRAXDRT.DatabaseTable
LOCAL ocParm AS CRAXDRT.ParameterFieldDefinitions
LOCAL oParm AS CRAXDRT.ParameterFieldDefinition

oCR = CREATEOBJECT("CrystalRuntime.Application")
oRpt = oCR.OpenReport("C:\rpts\0001.rpt")
* Create the Database object
oDB = oRpt.Database()
* Get a references to the DatabaseTables collection
ocDBT = oDB.Tables()
* Get a reference to the DatabaseTable object for table 1
oDBT = ocDBT.Item(1)

Вот на этом этапе, когда получили ссылку на таблицу, можно вытащить данные из этой таблицы?2
...
Рейтинг: 0 / 0
Программный доступ к внутренним данным файлов .rpt
    #35635426
Alexander Bor.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guset...Работает на Visual FoxPro 7.0.
На VFP6 наотрез отказался подключаться компонент, также как и в VB6.

Не могу сейчас сказать, какие версии VFP, VB поддерживают CR SDK 8.5. Нужно смотреть док-ю. Возможно, в этом дело. В любом случае, как я уже писал, в поставке CR Dev. 8.5 разворачиваются примеры экспорта именно для VB. Нужно их смотреть.

Guset...При попытке экспорта в другие форматы, например в XML, возникает ошибка. OLE IDispatch exception code 0 from Crystal Reports ActiveX Designer: File not found. Непонятно, о каком файле идет речь.

...При экспорте отчетов вручную в CR8.5 Dev (File->Print->Export->Adobe PDF), появляется окно "Exporting Records" и следом за ним окно с заголовком "Select Data Source", где просят указать файл *.ttx или создать новый. Я создал такой файл специальным скриптом. Не помогло. Тоже самое с другими форматами, с XML, HTML и даже с Text.

Отчеты, судя по всему, были созданы на ttx-файле. А в приложении им динамически подсовывались данные. Однако исходный ttx-файл отчет будет запрашивать только в том случае, когда данных в отчете нет. Т.е. снята опция "Save Data with Report" (или когда запустить обновление данных вручную). Посмотри в дизайнере - стоит ли эта опция у проблемного отчета. Иначе, если не стоит, то и вытаскивать из отчета нечего.

Guset...Может можно как-то на ходу вытащить данные без экспорта?
Экспортировать проще. Однако, по идее, можно и динамически: перебрать все поля отчета и подотчетов. Я не пробовал. Опять же, если данные там есть.

Guset...Вот на этом этапе, когда получили ссылку на таблицу, можно вытащить данные из этой таблицы?

Этот объект таблицы представляет собой представление в отчете объекта внешнего источника данных. Т.е. это метаданные, не данные.
...
Рейтинг: 0 / 0
Программный доступ к внутренним данным файлов .rpt
    #35645494
Guset
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалось подключить компонент в VB6. Оказалось, необходимо было указать на компонент в меню Project -> References... А в Project -> Components (как сказано в документации) ничего делать не надо.

Данные, которые необходимо перенести, оказались в подотчете. С помощью кода ниже я пытаюсь экспортировать нужный подотчет в CSV.

Private Sub Form_Load()

Dim Report As CRAXDRT.Report
Dim SubReport As CRAXDRT.Report
Dim App As CRAXDRT.Application
Dim Sections As CRAXDRT.Sections
Dim Section As CRAXDRT.Section
Dim RepObjs As CRAXDRT.ReportObjects
Dim SubReportObj As CRAXDRT.SubreportObject
Dim n As Integer
Dim i As Integer
Dim j As Integer

Dim ExportOptions As CRAXDRT.ExportOptions

Set App = New CRAXDRT.Application
Set Report = App.OpenReport("C:\rpts\659.rpt")

' Set ExportOptions = Report.ExportOptions
' ExportOptions.DestinationType = crEDTDiskFile
' ExportOptions.DiskFileName = "C:\rpts\359.txt"
' ExportOptions.FormatType = crEFTCommaSeparatedValues
' Report.Export False

Set Sections = Report.Sections
For n = 1 To Sections.Count
Set Section = Sections.Item(n)
Set RepObjs = Section.ReportObjects
For i = 1 To RepObjs.Count
If RepObjs.Item(i).Kind = crSubreportObject Then
Set SubReportObj = RepObjs.Item(i)
'MsgBox SubReportObj.SubreportName
'If SubReportObj.SubreportName = "pd4new.rpt" Then
If SubReportObj.SubreportName = "pd4new.rpt" Then
Set SubReport = SubReportObj.OpenSubreport
Set ExportOptions = SubReport.ExportOptions
ExportOptions.DestinationType = crEDTDiskFile
ExportOptions.DiskFileName = "C:\rpts\359.txt"
ExportOptions.FormatType = crEFTCommaSeparatedValues
SubReport.Export False
End If
End If
Next i
Next n

'MsgBox "done"
End Sub

Программа прерывается окном Run-time '-2147192185 (80047287)' "SQL Server Error"

Действительно, отчет был создан на основе выборки данных из MS SQL Server программой с закрытым исходным кодом. Что она еще делала помимо запросов к SQL неизвестно. Флажок "Save data with report" установлен. В IDE CR8.5Dev отчет открывается, все данные всех подотчетов прекрасно отображаются. Один из подотчетов, где данные заданы статически, экспортируется без ошибок.

Данные внутри отчета точно есть. Даже когда я отключил все сетевые соединения, в IDE CR8.5Dev отчет отобразился корректно. А при записи его без флажка "Save data with report" он похудел с 1.2 метра до 700 кило.

Кто-нибудь знает, формат бинарников .rpt документирован? Ситуация такая, что хоть обратно реверсь. Чертова проприетарщина! >:( Свои же данные не могу вернуть назад.

Alexander Bor.Однако, по идее, можно и динамически: перебрать все поля отчета и подотчетов...
Как бы это реализовать... Может у кого-то есть опыт, советы, идеи? Любая помощь.
...
Рейтинг: 0 / 0
Программный доступ к внутренним данным файлов .rpt
    #35649133
Guset
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К счастью эти отчеты прекрасно распечатываются. Скриптиком направил кучу rpt-шек в виртуальный принтер печатающий в pdf. Остальное дело техники и времени. Проблема решена. Судя по количеству просмотров, эта тема многим интересна. Так что, спасибо всем за внимание тоже. :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Программный доступ к внутренним данным файлов .rpt
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]