Zeit kanal ändern im Report

Hallo,
ich habe ein Diagramm eingebaut. X achse ist Zeit, Y achse ist Temperatur. Jetzt möchte ich die x-zeit um Strecke ändern, aber Y achse ist beihaltet.Ich habe schon die Funktion Kurven und Achsen Definition versucht, einhiet  und X kanal geändert. Nicht klappt. Kann jemand mir dabei helfen? Vielen Dank!
Gruß
Andreas
Solved!
Go to Solution.

Geht es um die Skalierung der x-Werte? d.h. statt Bereich 3:00 - 3:15 lieber den Bereich 3:25 - 3:50 anzeigen lassen?
Dann hilft ein Doppelklick auf die x-Achse und in der sich öffnenden Dialogbox 'Kurven- und Achsendefinition' im Reiter 'Achsenparameter' die Skalierung von x manuell zu verändern.
War's das, was du meintest?
Gruß
MiC

Similar Messages

  • Zeit-Kanal mit Numerischem-Kanal addieren

    Hallo,
    ich würde gerne einen Zeit-Kanal (Datum und Uhrzeit) mit einem Numerischem-Kanal (Sekunden) addieren. Also die Sekunden zu der Uhrzeit dazu addieren.
    Bzw. eine neue Spalte generieren: Ich habe eine Spalte mit Datum und Uhrzeit mit z.B. 2 Zeilen also zwei Daten mit Uhrzeiten. Und eine Spalte mit z.B. 10 Zeilen, in der die Sekunden von 1 bis 10 stehen.
    z.B.  30.10.2013  10:15:05              1
            30.10.2013  10:15:10              2
                                                        3
                                                       10
    In der neuen Spalte möchte ich dann sagen, dass die ersten 5 Sekunden plus der ersten Zeitangabe (Datum und Uhrzeit) = 1 und dann automatisch Zeitangabe zwei plus die nächsten 5 Sekunden = 2 
    Wie kann ich das am besten Umsetzen? Und wie müssen meine Daten dafür vorliegen auch bzgl. der verschiedenen Formatierungen?
    Würde mich sehr über eure Hilfe und Antworten Freuen
    Viele Grüße
    Sabrina

    Hi Brad,
    im Anhang habe ich einen Bsp-Datensatz mit 3 Zyklen angehängt:
    In der Spalte "Datum/Zeit" steht der Startzeitpunkt der Zyklen. Alle Zyklen haben jeweils eine Dauer von 5 sec. Und pro Zyklus gibt es z.B. 5 Kraft- und Wegmessungen. In der Spalte "dt" steht die Zeit in sec.
    Ich habe eine Graphik erstellt (Raumkurve) mit der Kraft, dem Weg und allen 3 Zyklen hintereinander. Aber anstatt der Zeitachse (dt) möchte ich die Zyklusnummer (1 bis 3) stehen haben.
    Vielen Dank!!!
    Sabrina
    Attachments:
    BspDaten.xls ‏27 KB

  • Anzeigeformat des Kanals ändern

    Hallo,
    ich benutze DIAdem seit kurzem und brauche hilfe bzw. Tipps um weiter zu kommen.
    In einem Kanal (Anzeigeformat: numerisch / Datentyp: Float64 ) möchte ich Werte, die ich in HEX konvertiere, im selben Kanal speichern.
    dazu-----> temp = "AB01"
    Variable1=Mid(temp,1,2)
    Variable2=Mid(temp,3,2)

    Hallo Youssef!
    Jetzt ist es schon fast klar. Ich hab nur noch ein Verständnisproblem damit das deine Konvertierung unabhängig von der Bytezahl zu sein scheint. Ist das so richtig? Erweitert man dein Beispiel noch um eine Zeile mit dem Wert 1 ergibt sich folgende Liste:
    1         -->> HEX(1) = 01           --->> 01       01000000
    33846     -->> HEX(33846) = 8436     --->> 3684     36840000
    5243146   -->> HEX(5243146) = 50010A --->> 0A0150   0A015000
    Die blauen Werte wären die m.E. bei 4 Byte sich ergeben müssen.
    So nun zum Lösungsansatz. Ist erstaunlich umfangreich und ggf. noch nicht perfekt. Es gibt auch mindestens zwei Lösungen. Ich hab mal die etwas einfachere reingestellt, sollte die Performance nicht reichen muss man einen etwas anderen Weg gehen. Die Anzahl der Bytes hol ich mir über die Kanaleigenschaft 'CANNoOfBits'. Die Erklärung des Codes ist in den Kommentaren:
    Option Explicit
    ' Ergebnisgruppe erstellen (wenn vorhanden vorher löschen
    If GroupIndexGet("Ergebnis") > 0 Then
    Call GroupDel( GroupIndexGet("Ergebnis") )
    End If
    Call GroupCreate("Ergebnis")
    Call GroupDefaultSet( GroupIndexGet("Ergebnis") )
    ' Konvertierung der beiden Kanäle
    Call Convert("SWA/Data_SWA")
    Call Convert("SWA/var_SWA")
    ' Konvertierungsfunktion, Übergabeparameter ist der vollqualifierte Kanalname
    Function Convert(ByRef sgSource)
    Dim i
    Dim j
    Dim s
    Dim nChn
    Dim nChnHex
    Dim sgHex
    Dim nBytes
    ' Kanalnummer des Quellkanals bestimmen
    nChn = CNo(sgSource)
    ' Ergebnistexkanal mit gleichem Namen anlegen
    Call ChnAlloc(ChnName(nChn),ChnLength(nChn),1,DataTypeString,"Text")
    ' Kanalnummer des Ergebnistextkanals ermitteln
    nChnHex = CNo("Ergebnis/" & ChnName(nChn))
    ' Anzahl Bytes bestimmen
    nBytes = ChnPropValGet(nChn, "CANNoOfBits") / 8
    ' Umwandlung in einer Schleife über alle Werte (ggf. nicht performant!)
    For i=1 To ChnLength(nChn)
    ' Wert in HEX-String umwandeln
    sgHex = Hex( ChdX(i,nChn) )
    ' ggf. mit führenden Nullen auffüllen
    sgHex = String(nBytes*2-Len(sgHex),"0") & sgHex
    ' Bytereihenfolge umkehren
    s = ""
    For j=0 to nBytes
    s = Mid(sgHex,j*2+1,2) & s
    Next
    ' neu zusammengesetzt in einen Textkanal speichern
    ChT(i,nChnHex) = s
    Next
    End Function
    Sollte was unklar sein bitte nachfragen.
    Matthias
    Message Edited by Twigeater on 09-30-2008 11:01 PM
    Matthias Alleweldt
    Project Engineer / Projektingenieur
    Twigeater?  

  • Media:connect App spielt nicht mehr ab

    Nach update meines ipad3 auf ios6 kann ich über App.  Media:connect keine Videos meiner internen Loewefestplatte mehr abspielen. Videos werden erkannt, sind aber nicht mehr abspielbar. Wer kann helfen? Außerdem trotz diverser Versuche - Zeit/Datum ändern, App.-Store an-/abmelden - immer wieder Fehlermeldungen bei Anmeldung im App.-Store.

    Please post Photoshop Elements related queries over at
    http://forums.adobe.com/community/photoshop_elements

  • Kanal Eigenschaft ändern

    Hallo zusammen,
    ist es möglich, die Kanal Eigenschaft "Status" von "readonly" auf "read" oder "eingelesen" zu ändern? Ich habe einen Zeitkanal, den ich deswegen nicht verarbeiten kann!
    Vielen Dank!
    Sebastian

    Hallo Sebastian,
    kann es sein das es sich bei diesem Kanal um einen "impliziten" Kanal handelt? Ein impliziter Kanal ist nicht wirklich in der Datei abgespeichert, sondern durch einen Startwert, eine Schrittweite und die Anzahl der Werte definiert. Erkennen kann man implizite Dateien an dem kleinen "i" im Symbol "123" im Datenportal ...
    Um einen impliziten Kanal in einen "normalen" Kanal umzewandeln muss man (durch einen Rechtsklick auf den Kanalnamen) im Kontextmenue die Funktion "Kanal expandieren" (oder so aehnlich, meine Oberflaeche ist in Englisch - dort heisst es "Expand channel") benutzen. Danach solltest Du den Kanal beliebig bearbeiten koennen (also auch auf  "read" oder "eingelesen"aendern).
    Ich hoffe das hilf weiter.
    Gruss,
         Otmar
    Otmar D. Foehner
    Business Development Manager
    DIAdem and Test Data Management
    National Instruments
    Austin, TX - USA
    "For an optimist the glass is half full, for a pessimist it's half empty, and for an engineer is twice bigger than necessary."

  • Report - Winkel auf X-Achse - skalieren / Ursprung ändern

    Hallo,
    also mein Anliegen ist eigentlich ganz einfach, aber ich tue mich etwas schwer es in Worte zu fassen.... =)
    Also ich habe 2 Kanäle. Im ersten sind die Y Werte, im zweiten die zugehörigen X Werte. Die X Werte sind Winkel, also theoretisch von 0° bis 360°.
    Nun gibt es Kurven, die z.B. von 300° bis 50° laufen.
    Jetzt möchte ich diese auf einem Diagramm darstellen in der Art, dass die X-Achse bei sagen wir mal 250° (linkes Ende) beginnt und bei 100° endet (rechtes Ende). Also in der Mitte bis 360° geht und dann wieder bei 0° weiter macht.
    Alles was ich hin bekomme ist aber eine X-Achse, die bei 0° anfängt und bis 360° geht. Und meine Kurve ist dann in zwei Teile "zerhackt", der erste Teil von 0° bis 50° ganz links und der Rest zwischen 300° und 360°.
    Hat da jemand eine Idee?
    Ich könnte in dem beschriebenen Beispiel die X Werte für 300° bis 360° in -60° bis 0° umrechnen, dann geht meine Kurve im Diagramm von -60° bis 50° und wäre wenigstens zusammenhängend, aber die X-Achse wäre dann faktisch einfach falsch beschriftet.
    Das muss doch irgendwie korrekt darzustellen sein?

    Hallo NaniB,
    wenn die 0 in der Mitte liegen soll, dann muss links ein negativer Wert stehen.
    Bedeutet hier bei einer Kurve von 300° bis 50°, dass die 300° eigentlich -300° sind.
    Bei der X-Achse sollte also die Wertigkeit entsprechend eingestellt werden. Dann müssten natürlich noch die Gradzahlen von 300 bis 0 eben in negative Zahlen umgekehrt werden.
    Wäre das eine Möglichkeit?
    AE | NI Germany
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions

  • Diadem 11.0, REPORT, Button "aktualisieren": Erzeugt "Geisterkanäle" in der Listenansicht im Datenportal.

    Wenn ich in Diadem 11.0 das Beispiel aus der Beispielgalerie "Beispiel zur Kanaltransformation", welches die "Bit-Extraktion" mittels Kurventransformation beschreibt, lade und in das Gerät "REPORT" wechsele, so wird das ganz normal aufgebaut und in der Listenansicht des Datenportals liegen die beiden Kanäle:
    1 Zeit
    2 Byte_Kanal
    Wenn ich nun den Button "aktualisieren" drücke sieht die Listenansicht so aus:
    1 Zeit
    2 Byte_Kanal
    ausgegraute Zeilen ohne Kanalnummern
    Es gibt nach
    1 x drücken des Buttons "aktualisieren" 16 ausgegraute Zeilen ohne Kanalnummern
    2 x drücken des Buttons "aktualisiern" 32 ausgegraute Zeilen
    usw.
    Interessanter Weise erzeugt der Befehl "picupdate" aus einem Script oder dem Taschenrechner heraus aufgerufen diese Geisterzeilen nicht nur nicht, sondern löscht diese Zeilen auch, falls zuvor vorhanden.
    Das selbe Beispiel führt mit Diadem 10.2 nie zu solchen Geisterzeilen.
    Ich finde die Sache mit den Geisterkanälen unschön. Meine Befürchtung aber ist, daß mir derselbe Mechanismus in einer meiner Anwendungen "angemeldete Kanäle" zerschießt.
    Daher wäre ich sehr an einer Behebung dieses Verhaltens interessiert.
    Meine Fragen:
    - kann jemand das Verhalten so reproduzieren?
    - kann man dieses Verhalten vermeiden?
    - wenn es sich - wie von mir befürchtet - um einen mit 11.0 eingeführten Programmfehler handelt, was ist die Erklärung und wann ist das abgestellt?
    Vielen Dank,
    Clemens 
    Attachments:
    ghostchannels.jpg ‏498 KB

    Hallo Clemens,
    Meine Nachfrage an die Entwicklung traff den neuen CAR Eintrag, der nach Ihrer Nachfrage schon aufgeloest war (CAR #129531).  Die Entwicklung sagt dass es hier um einen rein optischen Fehler geht-- es bleiben KEINE zusaetzliche Kanaele im Portal uebrig.  Mit der Kurventransformation werden neue Kanaele temporaer erzeugt, aber danach sofort geloescht.  Die Leer-Kanal-Erscheinung entspricht also etwa keinen neuen Speicherlast.  Die Entwicklung sagt weiter, dass sie diesen optischen Fehler mit der naechsten DIAdem Version beheben werden, hoffentlich mit dem naechstem Service Pack.
    Gruss,
    Brad Turpin
    DIAdem Product Support Engineer
    National Instruments

  • Datum automtisch im Report

    Hallo,
    ich würde gerne Im Report in einer Kopfzeile das Datum einfügen, möchte das aber nicht manuel machen. Gibt es eine Möglichkeit in ein Textfeld eine Art Formel einzufügen und das Datum aus einer Kanal zu Laden?
    Ausserdem wird mir auf der X-Achse bei der beschriftung zwar die Uhrzeit angezeit, und auch der Tag , aber leider nicht Monat und Jahr, kann man da etwas in den einstellungen ändern?
    Danek schon mal
    Gruß Flens

    Hallo!
    Sie können den Speicherdatum des Datensatzes im Datenportal im Report automatisch auslesen, falls Sie schreiben:
    @RootPropGet("datestring")@
    Sie können das aktuelles Datum auslesen mit @currdate@
    Sonst, wenn Sie einem Datumskanal im Datenportal haben und das erste Wert des Kanals im Report auslesen wollen:
    @str(chd(1,1), "#dd.mm.yyyy")@
    Das "#dd.mm.yyyy" sagt, dass Sie einem Formatierung von Tag, Monat und Jahr haben wollen.
    Das gleiches können Sie für das X-Achse machen. Machen Sie einem
    Doppelclick auf dem X-Achse und geben als Format #dd.mm.yyyy hh:nn:ss
    Schönes Wochenende
    Ken Tobler

  • Aus Script heraus Report bearbeiten

    Hallo,
    ich würde gerne aus einem laufenden Script heraus den Report bearbeiten z.B.
    die Achsenskalierung in einem Diagramm verändern oder bei einem Graph (Kurve)
    die Farbe verändern.
    Es beseht ja die Möglichkeit im Interaktionsmodus " Ineractiv (on)/(off)
    " Modus aus dem Script heraus manuell den Report zu bearbeiten, besteht
    die Möglichkeit?
    Und wenn ja, kann auch hier z.B. zum bearbeiten der Skalierung, oder ändern der
    Graph-Farbe ein Dialog geöffnet werden... Grund der Interaktiv Modus kann ja
    nur aus dem Script heraus gestartet werden?
    MfG
    SAMIOL

    Hallo Samiol,
    wie schon gesagt (siehe weiter oben), der "Schlüssel" zum Manipulieren von REPORT-Objekten ist die Tastenkombination CTRL-A. Wenn der Aufzeichnungsmodus aktiviert ist, werden Syntax und Varialbelzuweisungen in das Script übertragen. Ist der Aufzeichnungsmodus nicht aktiviert werden die Informationen in die Zwischenablage kopiert. Von dort aus können sie in das Script übertragen werden. Die zum gewünschten Ändern nicht notwendigen Zuweisungen können entfernt werden. Beispiel: Ich möchte die darzustellenden Kanäle eintragen und die Y-Skalierung bestimmen. Notwendig ist dazu nur folgendes:
    '------------------- Curve and axis definition ---------------------
    Call GraphObjOpen("2D-Axis1")
      '------------------- Curve list -------------------------------
      Call GraphObjOpen("2DObj5_Curve1")
        D2CChnXName      ="[1]/Zeit"
        D2CChnYName      ="[1]/Geschwindigkeit"
      Call GraphObjClose("2DObj5_Curve1")
      '------------------- Y scala ----------------------------------
      Call GraphObjOpen("2DYAxis8_1")
        D2AxisYScaleType ="manual"
        D2AxisYBegin     =30
        D2AxisYEnd       =50
      Call GraphObjClose("2DYAxis8_1")
    Call GraphObjClose("2D-Axis1")
    Ablaufschema: Objekt öffnen, ggf. Unterobjekt öffnen, Variablen setzen und die Objekte in umgekehrter Reihenfolge wieder schließen.
    Bitte schau dir hierzu auch die Hilfe und die Beispiele in der Hilfe an.
    In deinem Fall müssen die Informationen aus dem SUD-Dialog - die ja in Variablen gespeichert sind - wie oben beschrieben den entsprechenden Variablen zugewiesen werden.
    Wenn mit Exportiern das Layout gemeint ist und z.B. nur die letzte Seite als einzelne Layout-Seite gespeichert werden soll, so ist die Vorgehensweise wie folgt:
    Komplettes Layout speichern, in der Layout-Verwaltung alle nicht gewünschten Layout-Seiten entfernen, übrig gebliebene Layout-Seite unter neuem Namen speichern, altes Layout wieder laden.
    Wenn mit Exportieren das Erstellen eines JPG oder ähnliches gemeint ist, so wird immer nur die aktuelle Seite exportiert.
    Gruß
    Walter

  • Kanalbezüge im REPORT

    Hallo,
    ich habe ein Problem mit dem REPORT in Diadem.
    Ich möchte für eine Serienauswertung eine REPORT-Vorlage erzeugen. Wenn alle Kanalnamen immer an der geleichen Stelle stehen, funktioniert es auch. Lösche ich jedoch eine Kanalgruppe oder auch nur Kanäle vor dem betroffenen Kanal, so verschiebt sich der anzuzeigende Kanal im RPORT.
    Ich habe unter Einstellungen-Optionen-Allgmeines für die "Namensorientierten Kanalbezüge" die Option "Gruppenname/Kanalname" gewählt. Dazu habe ich die unten zitierte Beschreibung gefunden. Nach der Beschreibung bin ich davon ausgegangen, dass sich die Anzeige ausschlißlich am Gruppennamen bzw. Kanalnamen orientiert. Meine Erfahrung ist jedoch, dass sich bei dieser Einstellung die Darstellung an der Kanalnummer orientiert - wie kann ich dies umgehen? Muß ich fr den Report noch eine andere Einstellung vornehmen? (Ich benutze z.Z. Diadem 10.2, das SP ist noch nicht installiert)
    Grüße
    Jonas Rosendahl
    "Gruppenname/Kanalname - Verwenden Sie diese Einstellung, wenn die Kanalgruppen unterschiedliche Namen haben und die Kanäle unterschiedliche Namen haben und der Kanalbezug nur über beide Namen eindeutig ist. Der Kanalindex und der Gruppenindex können dabei unterschiedlich sein. Die Reihenfolge der Kanäle innerhalb einer Gruppe und die Reihenfolge der Gruppen zueinander kann sich dabei ändern. "

    Hallo,
    in den Globalen Einstellungen legen Sie fest, wie genau der namesorientierte Bezug durchgeführt wird. Sie können zwischen Kombinationen aus Gruppen- und Kanal- -Name und -Nummer wählen. Alle einstellungen haben gemeinsam, dass die Kanalreferenz per String gespeichert wird - auch wenn im string wieder Nummern vorkommen.
    Die Wahl zwischen numerischer und namensbezogener Referenz wird dann in den einzelnen Modulen gemacht (VIEW, REPORT, SCRIPT). Die Syntax der Namensauflösung wird dann aus den globalen Einstellungen übernommen.
    Im Report wird diese Einstellung übrigens mit dem Layout gespeichert. Sie können also für jeden Report wählen, welche Referenz Sie benötigen.
    MfG
    Ingo Schumacher
    Systems Engineer Sound&VibrationNational Instruments Germany

  • Datenrate in bestimmten Bereichen ändern

    Hallo,
    ich möchte in bereits vorhandenen Datenaufzeichnungen die Datenrate für bestimmte Bereiche ändern um die Datengröße zu reduzieren aber die Kurve dabei nicht verkürzen.
    Beispiel:
       es werden Daten über eine Zeit von 60 Sekunden erfasst. Zwischen einzelnen Peaks sind längere Pausen wo die Spannung zwischen 0 und x Volt liegt. Diese Bereiche möchte ich gerne kürzen.
    Hatte an ein VBS Script gedacht aber da stoße ich immer wieder auf Probleme, da die Länge des Kanals bis zu 49247232 Werte umfassen kann und mehr.

      smooth
      create_groups
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai0") Then
        find_peak_hv1
        kurve_teilen_hv1
      end if
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai2") Then
        find_peak_hv2
        kurve_teilen_hv2
      end if
    'Kurven glätten
    sub smooth
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai0") Then
        Call ChnSmooth("[1]/PXI1Slot2\ai0","[1]/u_hv1",2,"maxNumber") '... Y,E,SmoothWidth,SmoothType
      End if
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai1") Then
        Call ChnSmooth("[1]/PXI1Slot2\ai1","[1]/i_hv1",2,"maxNumber") '... Y,E,SmoothWidth,SmoothType
      End if
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai2") Then
        Call ChnSmooth("[1]/PXI1Slot2\ai2","[1]/u_hv2",2,"maxNumber") '... Y,E,SmoothWidth,SmoothType
      End if
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai3") Then
        Call ChnSmooth("[1]/PXI1Slot2\ai3","[1]/i_hv2",2,"maxNumber") '... Y,E,SmoothWidth,SmoothType
      End if
    end sub
    'Untergruppen erstellen
    sub create_groups
      Call Data.Root.ChannelGroups.Add("U_HV1")
      Call Data.Root.ChannelGroups.Add("I_HV1")
      Call Data.Root.ChannelGroups.Add("U_HV2")
      Call Data.Root.ChannelGroups.Add("I_HV2")
    end sub
    'Kurven Start- und Stop-Werte finden für HV1
    sub find_peak_hv1
      dim oChn, i, low_hv1, high_hv1
      dim x
      Dim peak, low, st
      x = 1
      st = 1
      Call Data.Root.ChannelGroups(1).Channels.Add("high_hv1",DataTypeFloat64)
      Call Data.Root.ChannelGroups(1).Channels.Add("low_hv1",DataTypeFloat64)
      set oChn = Data.Root.ChannelGroups(1).Channels("u_hv1")
      set high_hv1 = Data.Root.ChannelGroups(1).Channels("high_hv1")
      set low_hv1 = Data.Root.ChannelGroups(1).Channels("low_hv1")
      While low <> 0 or peak <> 0 or x <= 100
        low = Find("Ch(""u_hv1"")>=3",st)
        if low >= 0 then
          peak = Find("Ch(""u_hv1"")<=3",low)
          if low >=0 and peak >= low and peak-low >=10 then
            low_hv1(x) = low
            high_hv1(x) = peak
            st = peak
            x = x + 1
          else st = peak  
          end if
        end if
      Wend
    end sub
    'Kurven Start- und Stop-Werte finden für HV2
    sub find_peak_hv2
      dim oChn, i, low_hv2, high_hv2
      dim x
      Dim peak, low, st
      x = 1
      st = 1
      Call Data.Root.ChannelGroups(1).Channels.Add("high_hv2",DataTypeFloat64)
      Call Data.Root.ChannelGroups(1).Channels.Add("low_hv2",DataTypeFloat64)
      set oChn = Data.Root.ChannelGroups(1).Channels("u_hv2")
      set high_hv2 = Data.Root.ChannelGroups(1).Channels("high_hv2")
      set low_hv2 = Data.Root.ChannelGroups(1).Channels("low_hv2")
      While low <> 0 or peak <> 0 or x <= 100
        low = Find("Ch(""u_hv2"")>=3",st)
        if low >= 0 then
          peak = Find("Ch(""u_hv2"")<=3",low)
          if low >=0 and peak >= low and peak-low >=10 then
            low_hv2(x) = low
            high_hv2(x) = peak
            st = peak
            x = x + 1
          else st = peak  
          end if
        end if
      Wend
    end sub
    'Kurven teilen HV1
    sub kurve_teilen_hv1
      dim u_hv1_ch, i_hv1_ch
      dim x
      Dim low_hv1, high_hv1, st
      x = 1
      set high_hv1 = Data.Root.ChannelGroups(1).Channels("high_hv1")
      set low_hv1 = Data.Root.ChannelGroups(1).Channels("low_hv1")
      for x = 1 to Data.Root.ChannelGroups(1).Channels("high_hv1").Properties("length").Value
        u_hv1_ch = "uhv1_" & x
        i_hv1_ch = "ihv1_" & x
        Call Data.Root.ChannelGroups("U_HV1").Channels.Add(u_hv1_ch,DataTypeFloat64)  'hier entstehen Numerische Channel, diese sollen aber den Zeitstempel übernehmen
        Call Data.Root.ChannelGroups("I_HV1").Channels.Add(i_hv1_ch,DataTypeFloat64)
        Call DataBlCopy(Data.Root.ChannelGroups(1).Channels("u_hv1"),low_hv1(x),high_hv1(x)-low_hv1(x),Data.Root.ChannelGroups("U_HV1").Channels(u_hv1_ch),1)
        Call DataBlCopy(Data.Root.ChannelGroups(1).Channels("i_hv1"),low_hv1(x),high_hv1(x)-low_hv1(x),Data.Root.ChannelGroups("I_HV1").Channels(i_hv1_ch),1)
      next
    end sub
    'Kurven teilen HV2
    sub kurve_teilen_hv2
      dim u_hv1_ch, i_hv1_ch
      dim x
      Dim low_hv2, high_hv2
      x = 1
      set high_hv2 = Data.Root.ChannelGroups(1).Channels("high_hv2")
      set low_hv2 = Data.Root.ChannelGroups(1).Channels("low_hv2")
      for x = 1 to Data.Root.ChannelGroups(1).Channels("high_hv2").Properties("length").Value
        u_hv1_ch = "uhv2_" & x
        i_hv1_ch = "ihv2_" & x
        Call Data.Root.ChannelGroups("U_HV2").Channels.Add(u_hv1_ch,DataTypeFloat64)
        Call Data.Root.ChannelGroups("I_HV2").Channels.Add(i_hv1_ch,DataTypeFloat64)
        Call DataBlCopy(Data.Root.ChannelGroups(1).Channels("u_hv2"),low_hv1(x),high_hv1(x)-low_hv1(x),Data.Root.ChannelGroups("U_HV2").Channels(u_hv2_ch),1)
        Call DataBlCopy(Data.Root.ChannelGroups(1).Channels("i_hv2"),low_hv1(x),high_hv1(x)-low_hv1(x),Data.Root.ChannelGroups("I_HV2").Channels(i_hv2_ch),1)
      next
    end sub
    Hier das Script. Beim erstellen der Channel, in die die Kurven übertragen werden, entstehen Numerische Kanäle. Diese haben allerdings keinen Zeitstempel sondern verwenden als X-Skalierung die Zeilennummern. Wie erstellt man auch dort eine Zeit-Achse?
    Können Sie mir anhand diesem Beispiel sagen wie ich nach dem kopieren Werte verwerfen kann und damit eine dynamische Datenrate erzeugen kann?
    Vielen Dank
    Sven Hermsmeier

  • Store all values from updateable report on clientside for later use

    apex 4.2 , 11xe
    hello,
    it is possible to store all values from an updateable report to something like an cache BEFORE sent it to DB ?
    Background:
    i have an modified updateable report ,look the jpg
    http://www10.pic-upload.de/25.06.13/3zq5wr23awwg.jpg
    updateable report have ever 29 rows. as example i make time entrys for an employee. very often the next employee have the same timeentrys. now iam thinking about to make the entrys for the first employee, then click a button to store the values from ALL cells into somting like a javascript cache or jquery.data() . when i pull another employee from lov i have a fresh empty report( with 29 rows) and now  i want to call the data back from cache to the cells (with another button). the cache shouldnt  be destroyed when refresh the page,cause there is a page refresh when pull another employee from lov.
    is it possible to store all cell values(empty or not) from report all in one?
    what is the best and simplest way ?
    good would be an example for the code or method i should use.
    or is somthing inside apex i could use for that. i looked in apex.api  but didnt found something.
    my report based on a view with iof trigger and apex collection.
    greets/christian

    thx for answer jarola and sorry for my bad english.
    apex collection will not work.
    let me explain why not and i think something like javascript/jquery is better for that.
    there is a table MAZEIT and i have this updateable report. when i select an employee from lov, a collection will be created.  the collection look in MAZEIT ,perhaps there are real timeentrys, in this case the collection will be modified and give me 29 rows,some are filled. or there are no real entrys and the collection give me 29 empty rows.
    here my report sql:
    select
    "HID_SEQ_ID",
    "DATUM",
    "WOTAG",
    "WOTAGNR",
    "KNDABT_ID",
    "ZEIT",
    "BEGINN",
    "ENDE",
    "PAUSE",
    "ZUSCHLAG",
    "BEM",
    "MELDUNG"
    from "#OWNER#"."V_COLL_MAZEIT"
    here the v_coll_mazeit (view) sql
    CREATE OR REPLACE VIEW V_COLL_MAZEIT AS
    SELECT seq_id HID_SEQ_ID        -- APEX_COLLECTIONS.SEQ_ID
            ,C001   HID_MAZEIT_ID     -- MAZEIT.ID
            ,C002   DATUM             -- Datum DD.MM.YYYY
            ,C003   WOTAG             -- Wochentag Mo/Di/...
            ,C004   WOTAGNR           -- Wochentag 1/2/...
            ,C005   KNDABT_ID         -- Abteilung
            ,C006   ZEIT              -- Zeit in HH24:MI
            ,C007   BEGINN            -- Beginn in HH24:MI
            ,C008   ENDE              -- Ende in HH24:MI
            ,C009   PAUSE             -- Pause in HH24:MI
            ,C010   ZUSCHLAG
            ,C011   BEM
            ,C040   HID_MANDANT_ID
            ,C041   HID_KND_ID
            ,C042   HID_MA_ID
            ,C043   HID_KW
            ,C048   HID_HASH4CHECK    -- Hash für Check auf Änderungen MAZEIT
            ,C049   HID_SORTIER       -- für ORDER BY hier Arbeitsbeginn
            ,C050   MELDUNG           -- für FehlerMeldungen
        FROM APEX_COLLECTIONS
       WHERE COLLECTION_NAME='V_COLL_MAZEIT'
       ORDER BY HID_SORTIER;
    here the trigger (iof) from v_coll_mazeit
    CREATE OR REPLACE TRIGGER "V_COLL_MAZEIT_IOF_U_TRG"
      INSTEAD OF UPDATE ON V_COLL_MAZEIT
      FOR EACH ROW
    BEGIN
      --RAISE_APPLICATION_ERROR(-20004,'NIX DA');
      CM_MEAT.V_COLL_MAZEIT_IOF_U_TRG(
             :NEW.HID_SEQ_ID
            ,:NEW.HID_MAZEIT_ID
            ,:NEW.DATUM
            ,:NEW.WOTAG
            ,:NEW.WOTAGNR
            ,:NEW.KNDABT_ID
            ,:NEW.ZEIT
            ,:NEW.BEGINN
            ,:NEW.ENDE
            ,:NEW.PAUSE
            ,:NEW.ZUSCHLAG
            ,:NEW.BEM
            ,:NEW.HID_HASH4CHECK
            ,:NEW.HID_SORTIER
            ,:NEW.MELDUNG
    END V_COLL_MAZEIT_IOF_U_TRG;
    and here a package procedure when i select an employee:
      PROCEDURE V_COLL_MAZEIT_PROC(
                    iAction    IN PLS_INTEGER,
                    iDatum     IN DATE DEFAULT SYSDATE,
                    iMandantId IN MAZEIT.MANDANT_ID%TYPE,
                    iKndId     IN MAZEIT.KND_ID%TYPE,
                    iMaId      IN MAZEIT.MA_ID%TYPE,
                    oCollName OUT VARCHAR2)
      IS
        TK_FUNC_NAME  CONSTANT USER_OBJECTS.OBJECT_NAME%TYPE := 'V_COLL_MAZEIT_PROC';
        TK_COLL_NAME  CONSTANT APEX_COLLECTIONS.COLLECTION_NAME%TYPE := 'V_COLL_MAZEIT';
        TK_MD5        CONSTANT VARCHAR2(2) := 'NO';
        TYPE t_Tage_TAB IS TABLE OF DATE INDEX BY BINARY_INTEGER;
        TYPE t_TageVC_TAB IS TABLE OF VARCHAR2(8) INDEX BY BINARY_INTEGER;
        TYPE t_TageI_TAB IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
        tTage   t_Tage_TAB;
        tTageVC t_TageVC_TAB;
        tTageI  t_TageI_TAB;
        vDatum  DATE;
        vDatumCh  VARCHAR2(8);
        vKW4Db  MAZEIT.KW%TYPE;
        vI      PLS_INTEGER := 0;
        vAnz    PLS_INTEGER := 0;
      BEGIN
        FOR rec IN (SELECT * FROM NLS_SESSION_PARAMETERS)
        LOOP
          InsProto(rec.PARAMETER||'=['||rec.VALUE||']',
                    QK_PACK_NAME,TK_FUNC_NAME);
        END LOOP;
        CMT.InsProto('iAction='||iAction||', iDatum='||iDatum||', iMandantId='||iMandantId||', iKndId='||iKndId||', iMaId'||iMaId,
                  QK_PACK_NAME,TK_FUNC_NAME);
        oCollName := TK_COLL_NAME;
        IF iAction=0 THEN -- löschen
          IF APEX_COLLECTION.COLLECTION_EXISTS(p_collection_name=>TK_COLL_NAME) THEN
            APEX_COLLECTION.TRUNCATE_COLLECTION(TK_COLL_NAME);
            APEX_COLLECTION.DELETE_COLLECTION(TK_COLL_NAME);
          END IF;
        || Säubern und anlegen
        ELSIF iAction=1 THEN
          IF APEX_COLLECTION.COLLECTION_EXISTS(p_collection_name=>TK_COLL_NAME) THEN
            APEX_COLLECTION.TRUNCATE_COLLECTION(p_collection_name=>TK_COLL_NAME);
          ELSE
            APEX_COLLECTION.CREATE_COLLECTION(p_collection_name=>TK_COLL_NAME);
          END IF;
          vDatum := NVL(iDATUM,SYSDATE);
          vDatum := TO_DATE(TO_CHAR(vDatum,'YYYYMMDD')||'000000','YYYYMMDDHH24MISS');
          vKW4Db := GetKW4Db(vDatum);
          tTage(1) := CMT.GetMonday(vDATUM,0);
          SELECT tTage(1) + 1DAY,tTage(1) + 2DAY,tTage(1) + 3DAY,tTage(1) + 4DAY,tTage(1) + 5DAY,tTage(1) + 6DAY
            INTO tTage(2),tTage(3),tTage(4),tTage(5),tTage(6),tTage(7)
            FROM DUAL;
          FOR i IN 1..7 LOOP tTageI(i) := 0; tTageVC(i) := TO_CHAR(tTage(i),'YYYYMMDD'); END LOOP;
          -- erste Zeile enthält Default-Werte
          APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
            ,P_C001 => 0                                                -- MAZEIT.ID
            ,P_C002 => '<b>Vorgabe</b>'                                           -- Datum DD.MM.YYYY
            ,P_C003 => ' '                                              -- Wochentag Mo/Di/...
            ,P_C004 => ' '                                              -- Wochentag 1/2/...
            ,P_C005 => 0                                                -- MAZEIT.KNDABT_ID
            ,P_C006 => NULL                                             -- Zeit in HH24:MI
            ,P_C007 => NULL                                             -- Beginn in HH24:MI
            ,P_C008 => NULL                                             -- Ende in HH24:MI
            ,P_C009 => NULL                                             -- Pause in HH24:MI
            ,P_C010 => NULL                                             -- Zuschlag
            ,P_C011 => NULL                                             -- Bem
            ,P_C040 => iMandantId
            ,P_C041 => iKndId
            ,P_C042 => iMaId
            ,P_C043 => vKW4Db
            ,P_C048 => '-1'                                             -- Hash für Check auf Änderungen MAZEIT
            ,P_C049 => ' '                                             -- für ORDER BY hier Arbeitsbeginn
            ,P_C050 => NULL
          FOR rec IN (SELECT z.*,
                             TO_CHAR(DBMS_UTILITY.get_hash_value(
                                        z.id||'|'||
                                        z.mandant_id||'|'||
                                        z.majob_id||'|'||
                                        z.ma_id||'|'||
                                        z.knd_id||'|'||
                                        z.kndabt_id||'|'||
                                        z.kw||'|'||
                                        z.arb_beg||'|'||
                                        z.arb_end||'|'||
                                        z.zeit||'|'||
                                        z.pause||'|'||
                                        z.zuschlag||'|'||
                                        z.stk_anz||'|'||
                                        z.stk_kg||'|'||
                                        z.stk_gemuur||'|'||
                                        z.stk_bezahlt||'|'||
                                        z.bem||'|'||
                                        z.ART4RECH
                                        ,1,POWER(2,30))) AS HID_HASH4CHECK
                        FROM MAZEIT z
                       WHERE z.MANDANT_ID=iMandantId AND
                             z.KND_ID=iKndId AND
                             z.MA_ID=iMaId AND
                             z.KW = GetKW4Db(tTage(1)) AND
                             z.ART4RECH  IN (CMT.GetTCVNum('MAZEIT_ART4RECH_STD'),CMT.GetTCVNum('MAZEIT_ART4RECH_STK'),CMT.GetTCVNum('MAZEIT_ART4RECH_KG'))
                       ORDER BY z.ARB_BEG)
          LOOP
            IF rec.ZUSCHLAG=0 THEN
              rec.ZUSCHLAG := NULL;
            END IF;
            vI := 0;
            vDatumCh := TO_CHAR(rec.ARB_BEG,'YYYYMMDD');
            FOR i IN 1..7 LOOP
              IF tTageVC(i)=vDatumCh THEN
                tTageI(i) := tTageI(i) + 1;
                vI := i;
                EXIT;
              END IF;
            END LOOP;
            -- Stücklohn kommt an den Anfang der Bemerkung gekennzeichnet mit QK_COLL_MAZEIT_STK_KZ ursprüngliche Bemekuung nach dem :
            rec.BEM := RTRIM(rec.BEM);
            IF rec.ART4RECH = CMT.GetTCVNum('MAZEIT_ART4RECH_STK') THEN
              DECLARE
                vBem  MAZEIT.BEM%TYPE := QK_COLL_MAZEIT_STK_KZ;
              BEGIN
                IF rec.STK_BEZAHLT > 0. THEN
                  vBem := QK_COLL_MAZEIT_STK_KZ||TO_CHAR(rec.stk_bezahlt,'FM9999D00');
                ELSIF rec.STK_ANZ > 0 THEN
                  vBem := QK_COLL_MAZEIT_STA_KZ||TO_CHAR(rec.stk_anz,'FM9999');
                END IF;
                IF rec.BEM IS NULL THEN
                  rec.BEM := vBem;
                ELSE
                  rec.BEM := SUBSTR(vBem||':'||rec.BEM,1,CMT.GetColLen('MAZEIT','BEM'));
                END IF;
              END;
            ELSIF rec.ART4RECH = CMT.GetTCVNum('MAZEIT_ART4RECH_KG') THEN
              DECLARE
                vBem  MAZEIT.BEM%TYPE := QK_COLL_MAZEIT_KG_KZ;
              BEGIN
                IF rec.STK_KG > 0. THEN
                  vBem := QK_COLL_MAZEIT_KG_KZ||TO_CHAR(rec.stk_kg,'FM999999D000');
                END IF;
                IF rec.BEM IS NULL THEN
                  rec.BEM := vBem;
                ELSE
                  rec.BEM := SUBSTR(vBem||':'||rec.BEM,1,CMT.GetColLen('MAZEIT','BEM'));
                END IF;
              END;
            END IF;
            IF vI>0 THEN
              IF tTageI(vI)=1 THEN
                APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
                  ,P_C001 => rec.id                                           -- MAZEIT.ID
                  ,P_C002 => TO_CHAR(rec.ARB_BEG,'DD.MM.YYYY')                -- Datum DD.MM.YYYY
                  ,P_C003 => CMT.WoTag(rec.ARB_BEG)                           -- Wochentag Mo/Di/...
                  ,P_C004 => CMT.WoTagNr(rec.ARB_BEG)                         -- Wochentag 1/2/...
                  ,P_C005 => rec.KNDABT_ID                                    -- MAZEIT.KNDABT_ID
                  ,P_C006 => CMT.Minuten2InduZeit(rec.ZEIT)                   -- Zeit als InduZeit in HH24,MI
                  ,P_C007 => TO_CHAR(rec.ARB_BEG,'HH24:MI')                   -- Beginn in HH24:MI
                  ,P_C008 => TO_CHAR(rec.ARB_END,'HH24:MI')                   -- Ende in HH24:MI
                  ,P_C009 => CMT.Minuten2HHMI(rec.PAUSE,TRUE)                     -- Pause in HH24:MI
                  ,P_C010 => rec.ZUSCHLAG
                  ,P_C011 => rec.BEM
                  ,P_C040 => iMandantId
                  ,P_C041 => iKndId
                  ,P_C042 => iMaId
                  ,P_C043 => vKW4Db
                  ,P_C048 => rec.HID_HASH4CHECK                               -- Hash für Check auf Änderungen MAZEIT
                  ,P_C049 => TO_CHAR(rec.ARB_BEG,'YYYYMMDDHH24MI')            -- für ORDER BY hier Arbeitsbeginn
                  ,P_C050 => NULL                                             -- für FehlerMeldungen
              ELSE
                APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
                  ,P_C001 => rec.id                                           -- MAZEIT.ID
                  ,P_C002 => NULL                                             -- Datum DD.MM.YYYY
                  ,P_C003 => NULL                                             -- Wochentag Mo/Di/...
                  ,P_C004 => NULL                                             -- Wochentag 1/2/...
                  ,P_C005 => rec.KNDABT_ID                                    -- MAZEIT.KNDABT_ID
                  ,P_C006 => CMT.Minuten2InduZeit(rec.ZEIT)                       -- Zeit als InduZeit in HH24,MI
                  ,P_C007 => TO_CHAR(rec.ARB_BEG,'HH24:MI')                   -- Beginn in HH24:MI
                  ,P_C008 => TO_CHAR(rec.ARB_END,'HH24:MI')                   -- Ende in HH24:MI
                  ,P_C009 => CMT.Minuten2HHMI(rec.PAUSE,TRUE)                     -- Pause in HH24:MI
                  ,P_C010 => rec.ZUSCHLAG
                  ,P_C011 => rec.BEM
                  ,P_C040 => iMandantId
                  ,P_C041 => iKndId
                  ,P_C042 => iMaId
                  ,P_C043 => vKW4Db
                  ,P_C048 => rec.HID_HASH4CHECK                               -- Hash für Check auf Änderungen MAZEIT
                  ,P_C049 => TO_CHAR(rec.ARB_BEG,'YYYYMMDDHH24MI')            -- für ORDER BY hier Arbeitsbeginn
                  ,P_C050 => NULL                                             -- für FehlerMeldungen
              END IF;
              vAnz := vAnz + 1;
            END IF;
          END LOOP;
          FOR i IN 1..7 LOOP
            IF tTageI(i)<4 THEN
              FOR j IN tTageI(i)+1..4 LOOP
                IF j=1 THEN
                  APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
                    ,P_C001 => -1                                               -- MAZEIT.ID
                    ,P_C002 => TO_CHAR(tTage(i),'DD.MM.YYYY')                   -- Datum DD.MM.YYYY
                    ,P_C003 => CMT.WoTag(tTage(i))                              -- Wochentag Mo/Di/...
                    ,P_C004 => CMT.WoTagNr(tTage(i))                            -- Wochentag 1/2/...
                    ,P_C005 => 0                                                -- MAZEIT.KNDABT_ID
                    --,P_C006 => Minuten2InduZeit(0)                            -- Zeit als InduZeit in HH24,MI
                    ,P_C006 => NULL                                             -- Zeit als InduZeit in HH24,MI
                    --,P_C007 => '06:30'                                        -- Beginn in HH24:MI
                    ,P_C007 => NULL                                             -- Beginn in HH24:MI
                    ,P_C008 => NULL                                             -- Ende in HH24:MI
                    --,P_C009 => Minuten2HHMI(0)                                -- Pause in HH24:MI
                    ,P_C009 => NULL                                             -- Pause in HH24:MI
                    ,P_C010 => NULL                                             -- Zuschlag
                    ,P_C011 => NULL                                             -- Bem
                    ,P_C040 => iMandantId
                    ,P_C041 => iKndId
                    ,P_C042 => iMaId
                    ,P_C043 => vKW4Db
                     ,P_C048 => '-1'                                             -- Hash für Check auf Änderungen MAZEIT
                    ,P_C049 => TO_CHAR(tTage(i),'YYYYMMDD')||'99'||TO_CHAR(j,'FM09')  -- für ORDER BY hier Arbeitsbeginn
                    ,P_C050 => NULL
                ELSE -- auffüllen
                   APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
                    ,P_C001 => -1                                               -- MAZEIT.ID
                    ,P_C002 => NULL                                             -- Datum DD.MM.YYYY
                    ,P_C003 => NULL                                             -- Wochentag Mo/Di/...
                    ,P_C004 => NULL                                             -- Wochentag 1/2/...
                    ,P_C005 => 0                                                -- MAZEIT.KNDABT_ID
                    --,P_C006 => Minuten2HHMI(0)                                -- Zeit in HH24:MI
                    ,P_C006 => NULL                                             -- Zeit in HH24:MI
                    --,P_C007 => '06:30'                                        -- Beginn in HH24:MI
                    ,P_C007 => NULL                                             -- Beginn in HH24:MI
                    ,P_C008 => NULL                                             -- Ende in HH24:MI
                    --,P_C009 => Minuten2InduZeit(0)                            -- Pause als InduZeit in HH24,MI
                    ,P_C009 => NULL                                             -- Pause als InduZeit in HH24,MI
                    ,P_C010 => NULL                                             -- Zuschlag
                    ,P_C011 => NULL                                             -- Bem
                    ,P_C040 => iMandantId
                    ,P_C041 => iKndId
                    ,P_C042 => iMaId
                    ,P_C043 => vKW4Db
                    ,P_C048 => '-1'                                             -- Hash für Check auf Änderungen MAZEIT
                    ,P_C049 => TO_CHAR(tTage(i),'YYYYMMDD')||'99'||TO_CHAR(j,'FM09')  -- für ORDER BY hier Arbeitsbeginn
                    ,P_C050 => NULL
                END IF;
              END LOOP;
            END IF;
          END LOOP;
          vI := 0;
          FOR rec IN (SELECT * FROM V_COLL_MAZEIT) LOOP
            vI := vI + 1;
            CMT.InsProto('i='||LPAD(TO_CHAR(vI),3,' ')||':'||
                    rec.hid_seq_id||'|'||
                    rec.hid_mazeit_id||'|'||
                    rec.datum||'|'||
                    rec.wotag||'|'||
                    rec.wotagnr||'|'||
                    rec.zeit||'|'||
                    rec.beginn||'|'||
                    rec.ende||'|'||
                    rec.pause||'|'||
                    rec.zuschlag||'|'||
                    rec.bem||'|'||
                    rec.hid_hash4check||'|'||
                    rec.hid_sortier||'|'||
                    rec.meldung
                  ,QK_PACK_NAME,TK_FUNC_NAME);
          END LOOP;
       ELSE
         raise_Application_ERROR(-20100,'kann ich doch nicht Action='||TO_CHAR(iAction));
        END IF;
      END V_COLL_MAZEIT_PROC;
    and here the procedure (look for real entrys in table)
    PROCEDURE V_COLL_MAZEIT_IOF_U_TRG(
             iHID_SEQ_ID      apex_collections.seq_id%TYPE
            ,iHID_MAZEIT_ID   apex_collections.C001%TYPE
            ,iDATUM           apex_collections.C002%TYPE
            ,iWOTAG           apex_collections.C003%TYPE
            ,iWOTAGNR         apex_collections.C004%TYPE
            ,iKNDABT_ID       apex_collections.C005%TYPE
            ,iZEIT            apex_collections.C006%TYPE
            ,iBEGINN          apex_collections.C007%TYPE
            ,iENDE            apex_collections.C008%TYPE
            ,iPAUSE           apex_collections.C009%TYPE
            ,iZUSCHLAG        apex_collections.C010%TYPE
            ,iBEM             apex_collections.C011%TYPE
            ,iHID_HASH4CHECK  apex_collections.C048%TYPE
            ,iHID_SORTIER     apex_collections.C049%TYPE
            ,iMELDUNG         apex_collections.C050%TYPE
      IS
      PRAGMA AUTONOMOUS_TRANSACTION;
        TK_FUNC_NAME  CONSTANT USER_OBJECTS.OBJECT_NAME%TYPE := 'V_COLL_MAZEIT_IOF_U_TRG';
        TK_COLL_NAME  CONSTANT APEX_COLLECTIONS.COLLECTION_NAME%TYPE := 'V_COLL_MAZEIT';
        vRcString VARCHAR2(2000) := NULL;
        rCollMaZeit0  V_COLL_MAZEIT%ROWTYPE;
        rCollMaZeit   V_COLL_MAZEIT%ROWTYPE;
        rMaZeit       MAZEIT%ROWTYPE;
        vHash4Check   PLS_INTEGER;
        vURow         ROWID;
      BEGIN
        CMT.InsProto(
                ihid_seq_id||'|'||
                ihid_mazeit_id||'|'||
                idatum||'|'||
                iwotag||'|'||
                iwotagnr||'|'||
                iKNDABT_ID||'|'||
                izeit||'|'||
                ibeginn||'|'||
                iende||'|'||
                ipause||'|'||
                izuschlag||'|'||
                ibem||'|'||
                ihid_hash4check||'|'||
                ihid_sortier||'|'||
                imeldung
              ,QK_PACK_NAME,TK_FUNC_NAME);
        -- VIEW-ZeitZeile lesen
        SELECT t.* INTO rCollMaZeit
          FROM V_COLL_MAZEIT t
         WHERE t.HID_SEQ_ID = iHID_SEQ_ID;
        IF iHID_MAZEIT_ID!=rCollMaZeit.HID_MAZEIT_ID OR
            iHID_HASH4CHECK!=rCollMaZeit.HID_HASH4CHECK THEN
          vRcString := 'Daten seit Anzeige verändert';
          GOTO MARK_TRANSEND;
        END IF;
        -- VIEW-ZeitDefaultZeile setzen
        IF rCollMaZeit.HID_MAZEIT_ID=0 THEN
            --,P_C005 => 0                                                -- MAZEIT.KNDABT_ID
            --,P_C006 => NULL                                             -- Zeit in HH24,MI
            --,P_C007 => NULL                                             -- Beginn in HH24:MI
            --,P_C008 => NULL                                             -- Ende in HH24:MI
            --,P_C009 => NULL                                             -- Pause in HH24,MI
            --,P_C010 => NULL                                             -- Zuschlag
            --,P_C011 => NULL                                             -- Bem
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>5, p_attr_value=>iKNDABT_ID);
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>6, p_attr_value=>iZEIT);
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>7, p_attr_value=>iBEGINN);
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>8, p_attr_value=>iENDE);
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>9, p_attr_value=>iPAUSE);
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>10, p_attr_value=>iZUSCHLAG);
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>11, p_attr_value=>iBEM);
          IF iBEM LIKE '#%' THEN  -- Verteilen
            -- VIEW-ZeitDefaultZeile lesen
            SELECT t.* INTO rCollMaZeit0
              FROM V_COLL_MAZEIT t
             WHERE t.HID_MAZEIT_ID = 0;
             rCollMaZeit0.BEM := SUBSTR(iBEM,2);
            DECLARE
              vAnz          PLS_INTEGER := 0;
              nVert         MAZEIT.ZEIT%TYPE;
              nZeitMinuten  MAZEIT.ZEIT%TYPE;
              nDiffMinuten  MAZEIT.ZEIT%TYPE;
            BEGIN
              SELECT NVL(COUNT(*),0) INTO vAnz
                FROM V_COLL_MAZEIT t
               WHERE t.HID_MAZEIT_ID = -1 AND
                     t.DATUM IS NOT NULL AND
                     t.WOTAGNR IN ('1','2','3','4','5'); -- nur Mo-Fr
              IF vAnz<=0 THEN
                vRcString := 'Verteilen nicht möglich keine freien Tage gefunden';
              ELSIF TRIM(iZEIT) IS NULL OR TRIM(iZEIT) IN ('00,00','0,00','0',',00',',0','0,','0,0') THEN
                vRcString := 'Verteilen von Null Minuten nicht möglich';
              ELSE
                nDiffMinuten := 0;
                nZeitMinuten := CMT.InduZeit2MinutenNum(TRIM(iZEIT));
                IF nZeitMinuten>(vAnz*1440) THEN
                  vRcString := 'Zu verteilende Zeit zu groß';
                ELSIF vAnz>1 THEN
                  nVert := FLOOR(nZeitMinuten/vAnz);
                  nDiffMinuten := nZeitMinuten - (nVert*vAnz);
                  nZeitMinuten := nVert;
                END IF;
                IF vRcString IS NULL THEN
                  FOR rec IN (SELECT t.* INTO rCollMaZeit
                                FROM V_COLL_MAZEIT t
                               WHERE t.HID_MAZEIT_ID = -1 AND
                                     t.DATUM IS NOT NULL AND
                                     t.WOTAGNR IN ('1','2','3','4','5')) -- nur Mo-Fr)
                  LOOP
                    rCollMaZeit := rec;
                    vRcString := qV_COLL_MAZEIT_Insert(iKNDABT_ID, iZEIT, nZeitMinuten+nDiffMinuten, iBEGINN, iENDE, iPAUSE, iZUSCHLAG, SUBSTR(iBEM,2),
                                                       rCollMaZeit0, rCollMaZeit, rMaZeit);
                    IF vRcString IS NOT NULL THEN
                      EXIT;
                    END IF;
                    nDiffMinuten := 0;
                  END LOOP;
                END IF;
              END IF;
            END;
          END IF;
        -- MAZEIT-Vorhandener Eintrag
        ELSIF rCollMaZeit.HID_MAZEIT_ID>0 THEN
          SELECT z.ROWID, TO_CHAR(DBMS_UTILITY.get_hash_value(
                                      z.id||'|'||
                                      z.mandant_id||'|'||
                                      z.majob_id||'|'||
                                      z.ma_id||'|'||
                                      z.knd_id||'|'||
                                      z.kndabt_id||'|'||
                                      z.kw||'|'||
                                      z.arb_beg||'|'||
                                      z.arb_end||'|'||
                                      z.zeit||'|'||
                                      z.pause||'|'||
                                      z.zuschlag||'|'||
                                      z.stk_anz||'|'||
                                      z.stk_kg||'|'||
                                      z.stk_gemuur||'|'||
                                      z.stk_bezahlt||'|'||
                                      z.bem||'|'||
                                      z.ART4RECH
                                      ,1,POWER(2,30))) AS HID_HASH4CHECK
            INTO vURow, vHash4Check
            FROM MAZEIT z
           WHERE z.ID=rCollMaZeit.HID_MAZEIT_ID
             FOR UPDATE NOWAIT;
          IF vHash4Check!=rCollMaZeit.HID_HASH4CHECK THEN
            vRcString := 'Daten seit Anzeige verändert';
            GOTO MARK_TRANSEND;
          END IF;
          SELECT z.* INTO rMaZeit
            FROM MAZEIT z
           WHERE ROWID=vURow;
          rMaZeit.KNDABT_ID := TO_NUMBER(TRIM(iKNDABT_ID));
          IF TRIM(iBEGINN) IS NULL THEN
             rMaZeit.ARB_BEG := NULL;
          ELSE
             rMaZeit.ARB_BEG := TO_DATE(TO_CHAR(rMaZeit.ARB_BEG,'YYYYMMDD')||TRIM(SUBSTR(iBEGINN,1,5)),'YYYYMMDDHH24:MI');
          END IF;
          IF TRIM(iENDE) IS NULL THEN
             rMaZeit.ARB_END := NULL;
          ELSE
             rMaZeit.ARB_END := TO_DATE(TO_CHAR(rMaZeit.ARB_BEG,'YYYYMMDD')||TRIM(SUBSTR(iENDE,1,5)),'YYYYMMDDHH24:MI');
          END IF;
          IF TRIM(iZEIT) IS NULL THEN
             rMaZeit.ZEIT := NULL;
          ELSE
             rMaZeit.ZEIT := CMT.InduZeit2MinutenNum(TRIM(iZEIT));
          END IF;
          IF TRIM(iPAUSE) IS NULL THEN
             rMaZeit.PAUSE := NULL;
          ELSE
             rMaZeit.PAUSE := CMT.HHMI2Minuten(TRIM(iPAUSE));
          END IF;
          IF iWOTAGNR IN (6,7) AND
             rMaZeit.PAUSE IS NOT NULL AND rMaZeit.PAUSE<>0 THEN
            vRcString := 'Eintrag Pause am Wochenende nicht erlaubt';
            GOTO MARK_TRANSEND;
          END IF;
          IF TRIM(iZUSCHLAG) IS NULL THEN
             rMaZeit.ZUSCHLAG := NULL;
          ELSE
             rMaZeit.ZUSCHLAG := TO_NUMBER(TRIM(iZUSCHLAG));
          END IF;
          IF RTRIM(iBEM) IS NULL THEN
             rMaZeit.BEM := NULL;
          ELSE
             rMaZeit.BEM := RTRIM(iBEM);
          END IF;
          IF (rMaZeit.KNDABT_ID IS NOT NULL AND rMaZeit.KNDABT_ID>0) OR
              rMaZeit.ARB_BEG IS NOT NULL OR rMaZeit.ARB_END IS NOT NULL OR
              (rMaZeit.ZEIT IS NOT NULL AND rMaZeit.ZEIT!=0) OR rMaZeit.PAUSE IS NOT NULL OR
              rMaZeit.ZUSCHLAG IS NOT NULL OR rMaZeit.BEM IS NOT NULL THEN
            DECLARE
              vBem  MAZEIT.BEM%TYPE := rMaZeit.BEM;
            BEGIN
              rMaZeit.ZUSCHLAG := NVL(rMaZeit.ZUSCHLAG,0.0);
              qV_COLL_MAZEIT_BEM_CHK(rMaZeit);  -- Bem prüfen wg. ART4RECH Verschlüsselung mittels QK_COLL_MAZEIT_STK_KZ
              UPDATE MAZEIT z
                 SET z.KNDABT_ID = rMaZeit.KNDABT_ID
                    ,z.ARB_BEG = rMaZeit.ARB_BEG
                    ,z.ARB_END = rMaZeit.ARB_END
                    ,z.ZEIT = rMaZeit.ZEIT
                    ,z.PAUSE = rMaZeit.PAUSE
                    ,z.ZUSCHLAG = rMaZeit.ZUSCHLAG
                    ,z.BEM = rMaZeit.BEM
                    ,z.STK_BEZAHLT = rMaZeit.STK_BEZAHLT
                    ,z.STK_ANZ = rMaZeit.STK_ANZ
                    ,z.STK_KG = rMaZeit.STK_KG
                    ,z.ART4RECH = rMaZeit.ART4RECH
               WHERE ROWID=vURow;
              IF SQL%ROWCOUNT=1 THEN
                NULL;
              ELSIF SQL%ROWCOUNT<1 THEN
                RAISE NO_DATA_FOUND;
              ELSE
                RAISE TOO_MANY_ROWS;
              END IF;
              rMaZeit.BEM := vBem;
            END;
          ELSE
            DELETE FROM MAZEIT z
             WHERE ROWID=vURow;
            IF SQL%ROWCOUNT=1 THEN
              NULL;
            ELSIF SQL%ROWCOUNT<1 THEN
              RAISE NO_DATA_FOUND;
            ELSE
              RAISE TOO_MANY_ROWS;
            END IF;
            APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                  ,p_attr_number=>1, p_attr_value=>-1);
            APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                  ,p_attr_number=>48, p_attr_value=>'-1');
          END IF;
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>5, p_attr_value=>rMaZeit.KNDABT_ID);
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>6, p_attr_value=>CMT.Minuten2InduZeit(rMaZeit.ZEIT));
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>7, p_attr_value=>TO_CHAR(rMaZeit.ARB_BEG,'HH24:MI'));
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>8, p_attr_value=>TO_CHAR(rMaZeit.ARB_END,'HH24:MI'));
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>9, p_attr_value=>CMT.Minuten2InduZeit(rMaZeit.PAUSE,TRUE) );
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>10, p_attr_value=>rMaZeit.ZUSCHLAG);
          APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
                ,p_attr_number=>11, p_attr_value=>RTRIM(rMaZeit.BEM));
        -- MAZEIT neuer Eintrag
        ELSIF rCollMaZeit.HID_MAZEIT_ID=-1 THEN
          -- VIEW-ZeitDefaultZeile lesen
          SELECT t.* INTO rCollMaZeit0
            FROM V_COLL_MAZEIT t
           WHERE t.HID_MAZEIT_ID = 0;
          vRcString := qV_COLL_MAZEIT_Insert(iKNDABT_ID, iZEIT, NULL, iBEGINN, iENDE, iPAUSE, iZUSCHLAG, iBEM,
                                             rCollMaZeit0, rCollMaZeit, rMaZeit);
        ELSE
          vRcString := 'Ungültige HID_MAZEIT_ID '||TO_CHAR(rCollMaZeit.HID_MAZEIT_ID);
        END IF;
        <<MARK_TRANSEND>>
        IF vRcString IS NULL THEN
          COMMIT;
        ELSE
          ROLLBACK;
          RAISE_APPLICATION_ERROR(-20100,vRcString);
        END IF;
      END V_COLL_MAZEIT_IOF_U_TRG;
    and in end there are 3 other procedures, all for table MAZEIT, the collection and and the report.
    in princip its a good idea,to create another collection, but difficult to bind it to the report TOO,cause my "cell-fill- functionality" is to complicated.
    my idea is another: to look with javascript/jquery whatever on clientside the cell-values. and only the editable cells. not the hidden cells.there would be ca. 180 editable cells. i want store the values from this cells all in one in a cache (clientside! ).
    then select next employee (collection will be created with view  ect.) and give me this 29 rows. in this moment i have cells  with ID f02_0001 as example and can use the cache values with that. the ID's ever the same,cause i have ever 29 rows.
    greets/christian

  • Writing commands to get specific data channels in the output report via script or automated script generation..

    In my project I have to make certain calculation and then get the data plotted in the given report template. I am using automated script for this. My script is doing all the calculations and then it not selecting and drag-dropping the selected channels on the report template. Its saving the blank report template.
    I am struggling to get the data for specific channels plotted by using the script. I need the selected channels to be plotted on this report template and then get it saved.
    Any help will be deeply appreciated. Thanks
    Solved!
    Go to Solution.

    Hi LaxG,
    Brad is absolute right. It is possible to create your whole layout via script.
    If you have loaded  the example report layout you can copy these lines to create a new line in your plot. This is the recommended object oriented way.
    call Report.Sheets("Blatt 1").Objects("2D-Axis1").Curves2D.Add(e2DShapeLine, "anyName")
    Report.Sheets("Blatt 1").Objects("2D-Axis1").Curves2D.Item("anyName").Shape.XChannel.Reference               = "[1]/Zeit"
    Report.Sheets("Blatt 1").Objects("2D-Axis1").Curves2D.Item("anyName").Shape.YChannel.Reference               = "[1]/Geschwindigkeit"
    For performance reasons it's recommended to use the it like this.
    dim oLine
    set oLine = Report.Sheets("Blatt 1").Objects("2D-Axis1").Curves2D.Item("anyName").Shape
    oLine.XChannel.Reference               = "[1]/Zeit"
    oLine.YChannel.Reference               = "[1]/Geschwindigkeit"
    Like Brad mentioned it is much easier, that you have a stored template of your report with all setings and customisations already done.
    You open this layout file and have stored the names of your calculated channels. When you are doing this with a script they always have the same name and belong to the same group.
    Now you can customize the references of the line items.
    Kind Regards,
    Philipp K.
    AE | NI Germany

  • Report is executing in background and need data(output) in excel format

    Report is executing in background and need data(output) to get downloaded in excel format in my PC from an internal table;;in any drive i.e. C: or D: .When executing in backround it prompt to user with which location excel file to be saved and the name of file.How to download in background in excel format?
    Edited by: PRASHANT BHATNAGAR on Aug 26, 2008 6:24 AM

    Hi
    Download a report to excel with format (border, color cell, etc)
    Try this program...it may help you to change the font ..etc.
    Code:
    REPORT ZSIRI NO STANDARD PAGE HEADING.
    this report demonstrates how to send some ABAP data to an
    EXCEL sheet using OLE automation.
    INCLUDE OLE2INCL.
    handles for OLE objects
    DATA: H_EXCEL TYPE OLE2_OBJECT,        " Excel object
          H_MAPL TYPE OLE2_OBJECT,         " list of workbooks
          H_MAP TYPE OLE2_OBJECT,          " workbook
          H_ZL TYPE OLE2_OBJECT,           " cell
          H_F TYPE OLE2_OBJECT.            " font
    TABLES: SPFLI.
    DATA  H TYPE I.
    table of flights
    DATA: IT_SPFLI LIKE SPFLI OCCURS 10 WITH HEADER LINE.
    *&   Event START-OF-SELECTION
    START-OF-SELECTION.
    read flights
      SELECT * FROM SPFLI INTO TABLE IT_SPFLI UP TO 10 ROWS.
    display header
      ULINE (61).
      WRITE: /     SY-VLINE NO-GAP,
              (3)  'Flg'(001) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP,
              (4)  'Nr'(002) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP,
              (20) 'Von'(003) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP,
              (20) 'Nach'(004) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP,
              (8)  'Zeit'(005) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP.
      ULINE /(61).
    display flights
      LOOP AT IT_SPFLI.
      WRITE: / SY-VLINE NO-GAP,
               IT_SPFLI-CARRID COLOR COL_KEY NO-GAP, SY-VLINE NO-GAP,
               IT_SPFLI-CONNID COLOR COL_NORMAL NO-GAP, SY-VLINE NO-GAP,
               IT_SPFLI-CITYFROM COLOR COL_NORMAL NO-GAP, SY-VLINE NO-GAP,
               IT_SPFLI-CITYTO COLOR COL_NORMAL NO-GAP, SY-VLINE NO-GAP,
               IT_SPFLI-DEPTIME COLOR COL_NORMAL NO-GAP, SY-VLINE NO-GAP.
      ENDLOOP.
      ULINE /(61).
    tell user what is going on
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
              PERCENTAGE = 0
               TEXT       = TEXT-007
           EXCEPTIONS
                OTHERS     = 1.
    start Excel
      CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
    PERFORM ERR_HDL.
      SET PROPERTY OF H_EXCEL  'Visible' = 1.
    CALL METHOD OF H_EXCEL 'FILESAVEAS' EXPORTING #1 = 'c:\kis_excel.xls'
    PERFORM ERR_HDL.
    tell user what is going on
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
              PERCENTAGE = 0
               TEXT       = TEXT-008
           EXCEPTIONS
                OTHERS     = 1.
    get list of workbooks, initially empty
      CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
      PERFORM ERR_HDL.
    add a new workbook
      CALL METHOD OF H_MAPL 'Add' = H_MAP.
      PERFORM ERR_HDL.
    tell user what is going on
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
              PERCENTAGE = 0
               TEXT       = TEXT-009
           EXCEPTIONS
                OTHERS     = 1.
    output column headings to active Excel sheet
      PERFORM FILL_CELL USING 1 1 1 'Flug'(001).
      PERFORM FILL_CELL USING 1 2 0 'Nr'(002).
      PERFORM FILL_CELL USING 1 3 1 'Von'(003).
      PERFORM FILL_CELL USING 1 4 1 'Nach'(004).
      PERFORM FILL_CELL USING 1 5 1 'Zeit'(005).
      LOOP AT IT_SPFLI.
    copy flights to active EXCEL sheet
        H = SY-TABIX + 1.
        PERFORM FILL_CELL USING H 1 0 IT_SPFLI-CARRID.
        PERFORM FILL_CELL USING H 2 0 IT_SPFLI-CONNID.
        PERFORM FILL_CELL USING H 3 0 IT_SPFLI-CITYFROM.
        PERFORM FILL_CELL USING H 4 0 IT_SPFLI-CITYTO.
        PERFORM FILL_CELL USING H 5 0 IT_SPFLI-DEPTIME.
      ENDLOOP.
    changes by Kishore  - start
    CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
      CALL METHOD OF H_EXCEL 'Worksheets' = H_MAPL." EXPORTING #1 = 2.
      PERFORM ERR_HDL.
    add a new workbook
      CALL METHOD OF H_MAPL 'Add' = H_MAP  EXPORTING #1 = 2.
      PERFORM ERR_HDL.
    tell user what is going on
      SET PROPERTY OF H_MAP 'NAME' = 'COPY'.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
              PERCENTAGE = 0
               TEXT       = TEXT-009
           EXCEPTIONS
                OTHERS     = 1.
    output column headings to active Excel sheet
      PERFORM FILL_CELL USING 1 1 1 'Flug'(001).
      PERFORM FILL_CELL USING 1 2 0 'Nr'(002).
      PERFORM FILL_CELL USING 1 3 1 'Von'(003).
      PERFORM FILL_CELL USING 1 4 1 'Nach'(004).
      PERFORM FILL_CELL USING 1 5 1 'Zeit'(005).
      LOOP AT IT_SPFLI.
    copy flights to active EXCEL sheet
        H = SY-TABIX + 1.
        PERFORM FILL_CELL USING H 1 0 IT_SPFLI-CARRID.
        PERFORM FILL_CELL USING H 2 0 IT_SPFLI-CONNID.
        PERFORM FILL_CELL USING H 3 0 IT_SPFLI-CITYFROM.
        PERFORM FILL_CELL USING H 4 0 IT_SPFLI-CITYTO.
        PERFORM FILL_CELL USING H 5 0 IT_SPFLI-DEPTIME.
      ENDLOOP.
    changes by Kishore  - end
    disconnect from Excel
         CALL METHOD OF H_EXCEL 'FILESAVEAS' EXPORTING  #1 = 'C:\SKV.XLS'.
      FREE OBJECT H_EXCEL.
      PERFORM ERR_HDL.
          FORM FILL_CELL                                                *
          sets cell at coordinates i,j to value val boldtype bold       *
    FORM FILL_CELL USING I J BOLD VAL.
      CALL METHOD OF H_EXCEL 'Cells' = H_ZL EXPORTING #1 = I #2 = J.
      PERFORM ERR_HDL.
      SET PROPERTY OF H_ZL 'Value' = VAL .
      PERFORM ERR_HDL.
      GET PROPERTY OF H_ZL 'Font' = H_F.
      PERFORM ERR_HDL.
      SET PROPERTY OF H_F 'Bold' = BOLD .
      PERFORM ERR_HDL.
    ENDFORM.
    *&      Form  ERR_HDL
          outputs OLE error if any                                       *
    -->  p1        text
    <--  p2        text
    FORM ERR_HDL.
    IF SY-SUBRC <> 0.
      WRITE: / 'Fehler bei OLE-Automation:'(010), SY-SUBRC.
      STOP.
    ENDIF.
    ENDFORM.                    " ERR_HDL
    Regards
    Murali Papana

  • ALV ( How to save the output as Excel file whenever we runs the Report )

    Hi,
          Can any one please let me know , how we can automatically save a ALV Grid Display report in Excel Format in presentation server whenever we execute the Report.
    Regards
    Avi.

    Hi,
    This report demonstrates how to send some ABAP data to an
    EXCEL sheet using OLE automation.
    INCLUDE OLE2INCL.
    handles for OLE objects
    DATA: H_EXCEL TYPE OLE2_OBJECT,        " Excel object
          H_MAPL TYPE OLE2_OBJECT,         " list of workbooks
          H_MAP TYPE OLE2_OBJECT,          " workbook
          H_ZL TYPE OLE2_OBJECT,           " cell
          H_F TYPE OLE2_OBJECT.            " font
    TABLES: SPFLI.
    DATA  H TYPE I.
    table of flights
    DATA: IT_SPFLI LIKE SPFLI OCCURS 10 WITH HEADER LINE.
    *&   Event START-OF-SELECTION
    START-OF-SELECTION.
    read flights
      SELECT * FROM SPFLI INTO TABLE IT_SPFLI UP TO 10 ROWS.
    display header
      ULINE (61).
      WRITE: /     SY-VLINE NO-GAP,
              (3)  'Flg'(001) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP,
              (4)  'Nr'(002) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP,
              (20) 'Von'(003) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP,
              (20) 'Nach'(004) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP,
              (8)  'Zeit'(005) COLOR COL_HEADING NO-GAP, SY-VLINE NO-GAP.
      ULINE /(61).
    display flights
      LOOP AT IT_SPFLI.
      WRITE: / SY-VLINE NO-GAP,
               IT_SPFLI-CARRID COLOR COL_KEY NO-GAP, SY-VLINE NO-GAP,
               IT_SPFLI-CONNID COLOR COL_NORMAL NO-GAP, SY-VLINE NO-GAP,
               IT_SPFLI-CITYFROM COLOR COL_NORMAL NO-GAP, SY-VLINE NO-GAP,
               IT_SPFLI-CITYTO COLOR COL_NORMAL NO-GAP, SY-VLINE NO-GAP,
               IT_SPFLI-DEPTIME COLOR COL_NORMAL NO-GAP, SY-VLINE NO-GAP.
      ENDLOOP.
      ULINE /(61).
    tell user what is going on
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
              PERCENTAGE = 0
               TEXT       = TEXT-007
           EXCEPTIONS
                OTHERS     = 1.
    start Excel
      CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
    PERFORM ERR_HDL.
      SET PROPERTY OF H_EXCEL  'Visible' = 1.
    CALL METHOD OF H_EXCEL 'FILESAVEAS' EXPORTING #1 = 'c:\kis_excel.xls'
    PERFORM ERR_HDL.
    tell user what is going on
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
              PERCENTAGE = 0
               TEXT       = TEXT-008
           EXCEPTIONS
                OTHERS     = 1.
    get list of workbooks, initially empty
      CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
      PERFORM ERR_HDL.
    add a new workbook
      CALL METHOD OF H_MAPL 'Add' = H_MAP.
      PERFORM ERR_HDL.
    tell user what is going on
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
              PERCENTAGE = 0
               TEXT       = TEXT-009
           EXCEPTIONS
                OTHERS     = 1.
    output column headings to active Excel sheet
      PERFORM FILL_CELL USING 1 1 1 'Flug'(001).
      PERFORM FILL_CELL USING 1 2 0 'Nr'(002).
      PERFORM FILL_CELL USING 1 3 1 'Von'(003).
      PERFORM FILL_CELL USING 1 4 1 'Nach'(004).
      PERFORM FILL_CELL USING 1 5 1 'Zeit'(005).
      LOOP AT IT_SPFLI.
    copy flights to active EXCEL sheet
        H = SY-TABIX + 1.
        PERFORM FILL_CELL USING H 1 0 IT_SPFLI-CARRID.
        PERFORM FILL_CELL USING H 2 0 IT_SPFLI-CONNID.
        PERFORM FILL_CELL USING H 3 0 IT_SPFLI-CITYFROM.
        PERFORM FILL_CELL USING H 4 0 IT_SPFLI-CITYTO.
        PERFORM FILL_CELL USING H 5 0 IT_SPFLI-DEPTIME.
      ENDLOOP.
    changes by Kishore  - start
    CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
      CALL METHOD OF H_EXCEL 'Worksheets' = H_MAPL." EXPORTING #1 = 2.
      PERFORM ERR_HDL.
    add a new workbook
      CALL METHOD OF H_MAPL 'Add' = H_MAP  EXPORTING #1 = 2.
      PERFORM ERR_HDL.
    tell user what is going on
      SET PROPERTY OF H_MAP 'NAME' = 'COPY'.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
              PERCENTAGE = 0
               TEXT       = TEXT-009
           EXCEPTIONS
                OTHERS     = 1.
    output column headings to active Excel sheet
      PERFORM FILL_CELL USING 1 1 1 'Flug'(001).
      PERFORM FILL_CELL USING 1 2 0 'Nr'(002).
      PERFORM FILL_CELL USING 1 3 1 'Von'(003).
      PERFORM FILL_CELL USING 1 4 1 'Nach'(004).
      PERFORM FILL_CELL USING 1 5 1 'Zeit'(005).
      LOOP AT IT_SPFLI.
    copy flights to active EXCEL sheet
        H = SY-TABIX + 1.
        PERFORM FILL_CELL USING H 1 0 IT_SPFLI-CARRID.
        PERFORM FILL_CELL USING H 2 0 IT_SPFLI-CONNID.
        PERFORM FILL_CELL USING H 3 0 IT_SPFLI-CITYFROM.
        PERFORM FILL_CELL USING H 4 0 IT_SPFLI-CITYTO.
        PERFORM FILL_CELL USING H 5 0 IT_SPFLI-DEPTIME.
      ENDLOOP.
    changes by Kishore  - end
    disconnect from Excel
         CALL METHOD OF H_EXCEL 'FILESAVEAS' EXPORTING  #1 = 'C:\SKV.XLS'.
      FREE OBJECT H_EXCEL.
      PERFORM ERR_HDL.
          FORM FILL_CELL                                                *
          sets cell at coordinates i,j to value val boldtype bold       *
    FORM FILL_CELL USING I J BOLD VAL.
      CALL METHOD OF H_EXCEL 'Cells' = H_ZL EXPORTING #1 = I #2 = J.
      PERFORM ERR_HDL.
      SET PROPERTY OF H_ZL 'Value' = VAL .
      PERFORM ERR_HDL.
      GET PROPERTY OF H_ZL 'Font' = H_F.
      PERFORM ERR_HDL.
      SET PROPERTY OF H_F 'Bold' = BOLD .
      PERFORM ERR_HDL.
    ENDFORM.
    *&      Form  ERR_HDL
          outputs OLE error if any                                       *
    -->  p1        text
    <--  p2        text
    FORM ERR_HDL.
    IF SY-SUBRC <> 0.
      WRITE: / 'Fehler bei OLE-Automation:'(010), SY-SUBRC.
      STOP.
    ENDIF.
    ENDFORM.                    " ERR_HDL
    Please note that this example maybe slow at filling the excel table
    (perhaps four fields per second on a 900 MHz machine - almost 30 seconds
    for a short example).
    To get the data on properties and methods - there is a bit of smoke and mirrors
    going on here; they are EXCEL properties and methods, not sap ones - so you need
    to look at excel help to determine how a particular function is structured. then
    build the block in sap, as shown in the example.
    If you only want to transfer the data to Excel like when you transfer the data from
    ALV to Excel simply use the Function Modules:
    XXL_SIMPLE_API
    If you want more modifications when you transfer it to Excel use:
    XXL_FULL_API
    Hope this helps.
    Reward if helpful.
    Regards,
    Sipra

Maybe you are looking for

  • No superimposed results in Monitor - Premiere 6.0

    Premiere 6.0 Video Track 2: Image for title superimpose Video Track 1: My video footage Trying to place an image in Video Track 2, adjust its Transparency setting, and see the superimposition in the program monitor. Even if I get the settings just ri

  • Calendar Server crashes in Yosemite 10.10 with Server App 4.0

    I am running an OS X Server (4.0) in Yosemite 10.10 locally on my iMac to provide calendars in our house. Since the combined update of OS and the "Server App" the calendar server crashes frequently. It restarts when I run the server app but crashes a

  • SimpleDateFormat can parse 2009102x

    Hello, If you look to the piece of code below, it seems my users can enter 2009102w. However, when one tries to enter 20091w20, it throws an error. I don't understand why an incorrect character in my date can get my date parsed?! Is this a bug or is

  • Why reports are fast when tables are available in local user

    Dear All, I have one report refering ws1,ws2,t1,t2 which are in user "test". so in my qery of report i will write the query as select a.code,b.edu,c.dept_name,d.desg_desc from test.ws1 a,test.ws2 b,test.t1 c,test.t2 d where a.code = b.code and a.dept

  • Why some controls resizes in an Executable​?

    i've created an 'exe' in which some front panel controls reduces size (differ from LV 8.5.1 development sysetm). especially all with floatingpoint datatypes. what could be the reason? can i avoid this problem? please reply with ur suggestions. thanks