meisterb
Goto Top

Cognos Impromptu - Berichtsaufruf über Macro

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

Content-Key: 158854

Url: https://administrator.de/contentid/158854

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: 76109
76109 18.01.2011 um 10:51:17 Uhr
Goto Top
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:
Const strExportPath = "X:\..\Excel\"  

Const strImportPath = "X:\..\Datenquelle"  
Const strReportFile = "X:\..\Berichte\Berichtsname.imr"  

Const intPromptVon = 212
Const intPromptBis = 214

Sub BerichtExport()
    '.....  
    Set objImpApp = CreateObject("CognosImpromptu.Application")  
    Set objFso = CreateObject("Scripting.FileSystemObject")  
    
    objImpApp.OpenCatalog strImportPath, 1
    
    For i = intPromptVon To intPromptBis
        Set objImpRep = objImpApp.OpenReport(strReportFile, i).ActiveDocument
        
        strExportFile = strExportPath & objFso.GetBaseName(strReportFile) & i & ".xls"  
        
        objImpRep.ExportExcelWithFormat strExportFile:  objImpRep.CloseReport
    Next
    '.....  
End Sub

Gruß Dieter
Mitglied: MeisterB
MeisterB 19.01.2011 um 09:36:05 Uhr
Goto Top
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

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
Mitglied: 76109
76109 19.01.2011 um 10:10:01 Uhr
Goto Top
Hallo MeisterB!

In etwa so:
Const strExportPath = "X:\..\Excel\"  

Const strImportPath = "X:\..\Datenquelle"  
Const strReportFile = "X:\..\Berichte\Berichtsname.imr"  

Const strPrompt = "212,214,215,260,262,265,270,278"  

Sub BerichtExport()   'alternativ per Übergabeparameter: Sub BerichtExport(ByRef strPrompt)  
    '.....  
    Set objImpApp = CreateObject("CognosImpromptu.Application")  
    Set objFso = CreateObject("Scripting.FileSystemObject")  
    
    objImpApp.OpenCatalog strImportPath, 1
    
    arrRep = Split(strPrompt, ",")    'Array erzeugen arrRep(0) = 212, arrRep(1) = 214, ....  
    
    For Each strRep In arrRep  'Array von arrRep(0) bis arrRep(x) einzeln durchlaufen  
        If IsNumeric(Trim(strRep)) Then
            Set objImpRep = objImpApp.OpenReport(strReportFile, Trim(strRep)).ActiveDocument
        
            strExportFile = strExportPath & objFso.GetBaseName(strReportFile) & Trim(strRep) & ".xls"  
            objImpRep.ExportExcelWithFormat strExportFile:  objImpRep.CloseReport
        End If
    Next
    '.....  
End Sub

Wie möchtest Du den strPrompt erzeugen? Per Konstante oder InputBox-Abfrage?

Gruß Dieter
Mitglied: MeisterB
MeisterB 19.01.2011 um 10:53:25 Uhr
Goto Top
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
Mitglied: 76109
76109 19.01.2011 um 11:31:31 Uhr
Goto Top
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 markierenface-wink

Gruß Dieter
Mitglied: MeisterB
MeisterB 20.01.2011 um 10:09:34 Uhr
Goto Top
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
Mitglied: 76109
76109 20.01.2011 um 11:03:37 Uhr
Goto Top
Hallo MeisterB!

Puh, dass hast Du jetzt aber ausführlich und verständlich erklärtface-wink

Sorry, da haben wir ja tatsächlich aneinander vorbei geredetface-sad

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üssenface-wink

Was ich noch gefunden habe:
    With objImpApp.OpenReport(strReportFile)
        .RetrieveAll
        .ExportExcelWithFormat strExportFile ', sind eventuell noch Parameter ala strPrompt zulässig?  
        .CloseReport
        .Quit
    End With
Ansonsten, habe ich leider keinen Planface-sad

Gruß Dieter
Mitglied: MeisterB
MeisterB 20.01.2011 um 14:16:08 Uhr
Goto Top
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...