Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Cognos Impromptu - Berichtsaufruf über Macro

Frage Entwicklung Datenbanken

Mitglied: MeisterB

MeisterB (Level 1) - Jetzt verbinden

18.01.2011, aktualisiert 19.01.2011, 5702 Aufrufe, 8 Kommentare

Hallo zusammen,

ich habe ein kleines Problem und hoffe auf eure Hilfe.
Meine Lösungsversuche waren alle nicht erfolgreich...

Es geht um Folgendes:

ich rufe einen bestimmten Cognos Impromptu-Bericht über einen Macro-Befehl auf, welcher den Bericht nacheinander mit wechselnden Variablen aufruft, "auswertet" & abspeichert:

Set objImpApp = CreateObject("CognosImpromptu.Application")
objImpApp.OpenCatalog "Pfad der Datenquelle und Anmeldung an Bericht",1
strReportPath = "Pfad des Berichtes"
strExportPath = "Pfad der ausgegebenen Excel-Datei"
strReport = strReportPath & "Berichtsname.imr"
strPromptValues = "212"
strExportFilename = strExportPath & "Berichtsname" & strPromptValues & ".xls"
Set objImpRep = objImpApp.OpenReport (strReport, strPromptValues)
Set objImpRep = objImpApp.ActiveDocument
objImpRep.ExportExcelWithFormat strExportFilename
objImpRep.CloseReport
strPromptValues = "213"
strExportFilename = strExportPath & "Berichtsname" & strPromptValues & ".xls"
Set objImpRep = objImpApp.OpenReport (strReport, strPromptValues)
Set objImpRep = objImpApp.ActiveDocument
objImpRep.ExportExcelWithFormat strExportFilename
objImpRep.CloseReport
...
(diverse weitere Variablen)
...
objImpApp.Quit
Set objImpApp = Nothing
Set objImpRep = Nothing
'
endmac:

Soweit funktioniert das auch ohne Probleme. Ich bekomme also jeweils eine Exceldatei mit Daten zu der Variable 212, 213, 214,...

Nun will ich am Ende einen Summenabruf erzeugen, der alle Variablen gleichzeitig abfragt.
Wenn der Bericht manuell gestartet wird, ist die Eingabe 212,213,214 und funktioniert auch.
Dies macht er über das Macro allerdings nicht - es kommen immer nur die Daten zu der Variable 212!

Wie kann ich dem Macro klarmachen, dass er die Eingabe 212,213,214 "versteht" und ausführt?
Welches Trennzeichen ist in diesem Fall zu verwenden?

Systeminfo: Cognos Series 7 Version 4
Impromptu-Version 7.4.774.0

Vielen Dank im Voraus!
MeisterB
Mitglied: 76109
18.01.2011 um 10:51 Uhr
Hallo MeisterB!

Zitat von MeisterB:
Wie kann ich dem Macro klarmachen, dass er die Eingabe 212,213,214 "versteht" und ausführt?
Sollte in etwa so gehen:
01.
Const strExportPath = "X:\..\Excel\" 
02.
 
03.
Const strImportPath = "X:\..\Datenquelle" 
04.
Const strReportFile = "X:\..\Berichte\Berichtsname.imr" 
05.
 
06.
Const intPromptVon = 212 
07.
Const intPromptBis = 214 
08.
 
09.
Sub BerichtExport() 
10.
    '..... 
11.
    Set objImpApp = CreateObject("CognosImpromptu.Application") 
12.
    Set objFso = CreateObject("Scripting.FileSystemObject") 
13.
     
14.
    objImpApp.OpenCatalog strImportPath, 1 
15.
     
16.
    For i = intPromptVon To intPromptBis 
17.
        Set objImpRep = objImpApp.OpenReport(strReportFile, i).ActiveDocument 
18.
         
19.
        strExportFile = strExportPath & objFso.GetBaseName(strReportFile) & i & ".xls" 
20.
         
21.
        objImpRep.ExportExcelWithFormat strExportFile:  objImpRep.CloseReport 
22.
    Next 
23.
    '..... 
24.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: MeisterB
19.01.2011 um 09:36 Uhr
Hallo Dieter,

herzlichen Dank für deinen Vorschlag. Der ist um einiges eleganter, wie meine Lösung, allerdings bitte ich dich, ob du vielleicht noch eine Lösung zu meinem Problem hast.

Ich habe hier ein Bild eingefügt, das das Problem veranschaulichen soll.

a37ecebad0ce28fac8c3b39434b31afe - Klicke auf das Bild, um es zu vergrößern

Impromptu gibt mir - wenn ich es manuell eingebe, wie im obigen Bild - die Summen der eingegebenen Werte in EINER!! Ergebnisdatei aus. Der Bericht ist so programmiert, dass er Werte, die mit Komma getrennt sind, akzeptiert und summiert. Eine von - bis Möglichkeit ist nicht programmiert.

Das gleiche möchte ich mit dem Makro erreichen. Wenn ich im Makro aber die Werte wie in der Eingabemaske eingebe, kommen als Ergebnis nur die Werte der ersten Variablen (im Beispiel die 212) raus. Den Rest "verschluckt" das Makro.

......
strReport = strReportPath & "Berichtsname.imr"
strPromptValues = "212,213,214,215,260,262,265,270,278"
......

Ich habe schon versucht im Makro die Variablen so einzugeben wie in der obigen Zeile in strPromptValues, aber mit dem Ergebnis, dass nur der erste Wert ausgewertet wird.
Ein Versuch die Werte mit Semikolon zu trennen, oder statt dem " ein ' verwenden, brachte als Ergebnis leider auch nur die Ausgabe des ersten Wertes



Hast du hierzu noch eine Idee?? Oder jemand anderes??
MeisterB
Bitte warten ..
Mitglied: 76109
19.01.2011 um 10:10 Uhr
Hallo MeisterB!

In etwa so:
01.
Const strExportPath = "X:\..\Excel\" 
02.
 
03.
Const strImportPath = "X:\..\Datenquelle" 
04.
Const strReportFile = "X:\..\Berichte\Berichtsname.imr" 
05.
 
06.
Const strPrompt = "212,214,215,260,262,265,270,278" 
07.
 
08.
Sub BerichtExport()   'alternativ per Übergabeparameter: Sub BerichtExport(ByRef strPrompt) 
09.
    '..... 
10.
    Set objImpApp = CreateObject("CognosImpromptu.Application") 
11.
    Set objFso = CreateObject("Scripting.FileSystemObject") 
12.
     
13.
    objImpApp.OpenCatalog strImportPath, 1 
14.
     
15.
    arrRep = Split(strPrompt, ",")    'Array erzeugen arrRep(0) = 212, arrRep(1) = 214, .... 
16.
     
17.
    For Each strRep In arrRep  'Array von arrRep(0) bis arrRep(x) einzeln durchlaufen 
18.
        If IsNumeric(Trim(strRep)) Then 
19.
            Set objImpRep = objImpApp.OpenReport(strReportFile, Trim(strRep)).ActiveDocument 
20.
         
21.
            strExportFile = strExportPath & objFso.GetBaseName(strReportFile) & Trim(strRep) & ".xls" 
22.
            objImpRep.ExportExcelWithFormat strExportFile:  objImpRep.CloseReport 
23.
        End If 
24.
    Next 
25.
    '..... 
26.
End Sub
Wie möchtest Du den strPrompt erzeugen? Per Konstante oder InputBox-Abfrage?

Gruß Dieter
Bitte warten ..
Mitglied: MeisterB
19.01.2011 um 10:53 Uhr
Hallo Dieter,

vielen Dank für Deine schnelle Antwort!

Zu Deiner Frage: der strPrompt soll im Macro über eine feste Konstante erzeugt werden!
(die Variablen sind bei den unterschiedlichen Summenabfragen eigentlich immer gleich...)

Gruß
MeisterB
Bitte warten ..
Mitglied: 76109
19.01.2011 um 11:31 Uhr
Hallo MeisterB!

Zitat von MeisterB:
Zu Deiner Frage: der strPrompt soll im Macro über eine feste Konstante erzeugt werden!
(die Variablen sind bei den unterschiedlichen Summenabfragen eigentlich immer gleich...)
Ja, wäre Dein Problem damit jetzt gelöst? Wenn ja, dann bitte Beitrag als Gelöst markieren

Gruß Dieter
Bitte warten ..
Mitglied: MeisterB
20.01.2011 um 10:09 Uhr
Hallo Dieter,

erstmal vielen Dank für Deine schnellen Antworten und damit auch Deine Hilfe.
Allerdings ist es leider so, dass wir knapp aneinander vobei reden...

Ich versuche mein Problem nochmal etwas anders zu erklären, um eine Lösung zu finden.

Zuerst nochmal die manuelle Variante, die so auch ohne Probleme funktioniert:
Ich habe bei meinem Cognos-Impromptu-Bericht die Möglichkeit, sowohl eine einzelne Variable (Beispiel 212) einzugeben und abzufragen, als auch eine ganze "Variablenkette" (hier ist unser Bsp. 212,213,214,215,260,262,265,270,278 - welche auch exakt in dieser Form eingegeben werden muss, da der Bericht so programmiert ist) auswerten zu lassen. Das Ergebnis ist bei beiden Varianten EINE! Exceldatei, die auch beide Male den gleichen Aufbau und Umfang hat - lediglich die in ihr befindlichen Daten unterscheiden sich. Einmal werden nur die Daten der Variablen 212 ausgegeben, im anderen Fall bekomme ich einmal die summierten! Werte aller Variablen der eingegeben "Kette". Soweit ist das ja auch alles in Ordnung.

Wenn ich diese Abfragen nun aber über das Macro laufen lasse, kommt mein Problem ins Spiel.
Wenn ich einzelne Variablen abfragen will (Bsp. 212), funktioniert mein Macro auch ohne Probleme (zugegeben, Deine in der ersten Antwort beschriebene Variante ist da wesentlich eleganter - aber letztendlich zählt ja das Ergebnis...)
Das Macro ruft also den Bericht auf, "schreibt" die erste Variable (z.B. 212) in die Eingabeaufforderung, ruft die Daten ab, speichert die Exceldatei unter den definierten Namen ab, "schreibt die nächste Variable (z.B. 219), ruft ab, speichert,... Geht ohne Probleme.

Nun will ich aber auch Dateien abrufen, die summierte Werte in jeweils EINE! Excel-Datei schreiben. Ich will also den Bericht aufrufen, die "Variablenkette" 212,213,214,215,260,262,265,270,278 (und die muss wie gesagt exakt in dieser Form in Bericht eingegeben werden, da sonst der Impromptu-Bericht nicht funktioniert) eingeben, und die summierten Werte in einer! Datei ausgeben und unter einen beliebigen Namen abspeichern lassen. Und da hat das Macro in Verbindung mit Impromptu das Problem, dass es mir zur Zeit lediglich die Werte für die erste Variable 212 ausgibt. Es "versteht" also die Kette von mehreren Variablen nicht - andere gängige Trennzeichen habe ich schon ausprobiert - ohne Erfolg!

Die Frage ist also: wie kann ich dem Macro klarmachen, dass es EINE! Datei erzeugt, in der die summierten Werte für eine beliebige Zeichenkette ( unser Bsp. 212,213,214,215,260,262,265,270,278) auswertet und abspeichert?
Die Summierung der einzelnen Werte findet komplett im Bericht statt - lediglich die Eingabe muss vom Macro korrekt an den Bericht weitergegeben werden, da er sonst ja nicht versteht, dass er eine Summenabfrage machen soll.

Ich hoffe, ich konnte das Problem nochmal deutlicher erklären und bin gespannt, ob Du mir helfen kannst!

Vielen Dank & Grüße
MeisterB
Bitte warten ..
Mitglied: 76109
20.01.2011 um 11:03 Uhr
Hallo MeisterB!

Puh, dass hast Du jetzt aber ausführlich und verständlich erklärt

Sorry, da haben wir ja tatsächlich aneinander vorbei geredet

Aber zu diesem Problem, kann ich nicht viel sagen, da mir die Application "CognosImpromptu.Application" leider nicht zur Verfügung steht und von daher keinen blassen Dunst habe, wie die Parameter an die Application übergeben werden müssen

Was ich noch gefunden habe:
01.
    With objImpApp.OpenReport(strReportFile) 
02.
        .RetrieveAll 
03.
        .ExportExcelWithFormat strExportFile ', sind eventuell noch Parameter ala strPrompt zulässig? 
04.
        .CloseReport 
05.
        .Quit 
06.
    End With
Ansonsten, habe ich leider keinen Plan

Gruß Dieter
Bitte warten ..
Mitglied: MeisterB
20.01.2011 um 14:16 Uhr
Hallo Dieter,

danke für Deine Mühen.
Ich bin trotzdem froh, dass Du Dich mit dem Problem beschäftigt hast und mir Lösungsvorschläge unterbreitet hast.
Ich werde mal schauen, ob ich evtl. noch über andere Wege Hilfe bekomme.

Nochmal vielen Dank & Grüße
MeisterB

P.S. Meine Erklärung war aber auf alle Fälle nicht "böse" gemeint - das Problem ist halt nicht so einfach zu verstehen...
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
Excel 2007 - Macro (4)

Frage von Everest zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (29)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...