DCBROWSE und Filter

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

DCBROWSE und Filter

Beitrag von Manfred »

Da ich den Anfang schon hier http://www.xbaseforum.de/viewtopic.php?f=24&t=4400 gemacht habe, baue ich das mal ein.

Ich habe unter express++ im DCBROWSE die Möglichkeit gefunden einen Filterblock einzubauen, der evtl. mein Problem lösen könnte. Leider habe ich aber noch nicht herausgefunden ob und wenn ja wie man den aktualisieren kann. Im Moment forsche ich noch. Wenn jemand eine Idee hat?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und Filter

Beitrag von Manfred »

Das interessante an dem Filterblock ist, wenn ich die Sort Option in DCBROWSECOL nutze, dann klappt der 1.Sort einwandfrei, sobald ich aber nochmals den gleichen SpaltenHeader anklicke für ein Sortieren in die andere Richtung, dann steigt das Programm sofort aus, mit der Fehlermeldung:

Code: Alles auswählen

FATAL ERROR LOG 
Error within the error handling!
SYS Thread-ID: 468 
Module: EXE
Error Codes: EH: 5 Sub: -1073741819(c0000005) OS: 0 XPP: 41
Call Stack of Thread 1 (468):
(B)@XBPBROWSE@I@FORCESTABLE(1165)
@XBPBROWSE@I@FORCESTABLE(1165)
@DC_XBPBROWSE@I@FORCESTABLE(1118)
@DC_XBPCOLUMN@I@SORT(2549)
(B)_HeaderDown(2663)
@DC_GETLIST@I@EVENTLOOP(4327)
@DC_GETLIST@I@READGUI(3622)
DC_READGUI(98)
VODRUCK(112)
(B)main(77)
@DC_GETLIST@I@EVENTLOOP(4327)
@DC_GETLIST@I@READGUI(3622)
DC_READGUI(98)
MAIN(105)
Call Stack of GUI Thread (664):
Call Stack of Thread 3 (1088):
File: y:\video9\programm\shddruck_gui.exe
TimeStamp: 20100702 11:56
End of FATAL ERROR LOG.
Wird eine andere Spalte sortiert als nächstes, passiert das nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: DCBROWSE und Filter

Beitrag von UliTs »

Hallo Manfred,

was hat denn der Filter mit dem Sortieren der Browserzeilen zu tun?
Wird der Browser nach dem Verändern des Filters korrekt aktualisiert?

Uli
Zuletzt geändert von UliTs am Fr, 02. Jul 2010 13:21, insgesamt 1-mal geändert.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und Filter

Beitrag von Manfred »

Das probiere ich ja gerade noch aus.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBROWSE und Filter

Beitrag von Wolfgang Ciriack »

@Manfred,
denke daran, wenn du ein Array benutzt, nach Verändern des Arrays den Pointer mit DC_GetBrowArray() zu aktualisieren.
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und Filter

Beitrag von Manfred »

Hi Wolfgang,

im Moment mache ich ja noch gar nichts. Ich benutze nur den Filter im DCBROWSE und Sort in DCBROWSECOL. Alles andere ist rein express++ intern. Das heißt, der Filter wird bei der Erzeugung des Browse schon gesetzt. Solange ich nur 1x den Header anklicke zum Sortieren, ist es auch ok, aber sobald ich die Spalte in Gegenrichtung sortieren will, klappt es nicht mehr. Also habe ich überhaupt gar keine Chance irgendwas zu aktualisieren. Ich kann nicht mal im Debugger sehen, was da wo und warum passiert, weil der Ausstieg schon VOR dem ASort() passiert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und Filter

Beitrag von Manfred »

Das hier ist alles, was drin ist

Code: Alles auswählen

********************************************************************************
PROCEDURE vodruck()
          LOCAL aVo            := {}
          LOCAL bFilter        := {|a| a[21] >= 'A' }
          LOCAL cVersion       := "30.06.2010"
          LOCAL getlist        := {}
          LOCAL GetOptions
          LOCAL nFensterBreite
          LOCAL nFensterHoehe
          LOCAL nI
          LOCAL nMenge

          LOCAL oBrowse         := NIL
          LOCAL oDialog         := NIL
          LOCAL oDialogBrowse   := NIL
          LOCAL oDialogProgress := NIL
          LOCAL oEan13          := NIL
          LOCAL oGruppeBrowse   := NIL
          LOCAL oGruppeButton   := NIL
          LOCAL oProgress       := NIL
          LOCAL oVo             := NIL
          LOCAL oVostamm        := NIL

          MEMVAR oHauptDialog
          MEMVAR oMessage

          IF ! oMessage:anzeigen("Es wird jetzt eine temporäre Liste ALLER VO erzeugt aus der dann selektiert" + CRLF +;
                                 "und gedruckt werden kann. Dies nimmt etwas Zeit in Anspruch und ist" + CRLF +;
                                 "abhängig von der Menge der VO, die sich im Bestand befinden." + CRLF + CRLF +;
                                 "Soll die Erzeugung gestartet werden?",.T.,"N")
             RETURN
          ENDIF
          nFensterBreite := oHauptDialog:clientsize[1]
          nFensterHoehe  := oHauptDialog:clientsize[2]
//------------------------------------------------------------------------------
          oEan13   := ean13():new()
          oVo      := kassette():new()
          oVostamm := fstamm():new()
          oean13:db_oeffnen(,,,,,,,,,,,,,.F.)
          oVo:db_oeffnen(,,,,.T.,,,,,,,,,.F.)
          oVostamm:db_oeffnen(,,,,,,,,,,,,,.F.)
          (oVo:nArea)->(DbSetRelation(oVostamm:nArea   ,{|| Str((oVo:nArea)->idvostamm,8,0) },"Str((oVo:nArea)->idvostamm,8,0)","id" ) )
          (oVostamm:nArea)->(DbSetRelation(oEan13:nArea,{|| Str((oVostamm:nArea)->id,8,0) }  ,"Str((oVostamm:nArea)->id,8,0)"  ,"idvostamm" ))
//------------------------------------------------------------------------------
          oDialogProgress := DialogFenster():new(AppDesktop(),SetAppWindow(),,{610,60},,,.F.)
          oProgress       := ProgressBar():new(oDialogProgress,,{ oDialogProgress:currentsize()[1]-10,24 },,.F.)
          oDialogProgress:title := "Datenerzeugung VO-Druck..."
          oDialogProgress:create()
          oProgress:create()
          oProgress:minimum := 1
          oProgress:maximum := (oVo:nArea)->(LastRec())
          oProgress:color   := GRA_CLR_GREEN
          (oVo:nArea)->(DbEval( { || fuelleVOArray(aVo,oVo,oVostamm,oEan13),oProgress:increment() },,,1000 ) )
          oProgress:quit()
          oDialogProgress:destroy()
          (oVo:nArea)->(DbClearRelation())
          (oVostamm:nArea)->(DbClearRelation())
          oVo:schliesse_datenbank(.T.)
//------------------------------------------------------------------------------
          @ 5,1 DCSTATIC;
                  OBJECT oDialogBrowse;
                    SIZE DCGUI_PARENTWIDTH,DCGUI_PARENTHEIGHT;
                    TYPE XBPSTATIC_TYPE_RECESSEDRECT
//------------------------------------------------------------------------------
          @ 10,5 DCGROUP oGruppeBrowse;
                 CAPTION "VO-Auswahl";
                  PARENT oDialogBrowse;
                    SIZE DCGUI_PARENTWIDTH-10,DCGUI_PARENTHEIGHT -60
          @  0,0 DCGROUP oGruppeButton;
                    EVAL {|| oGruppeButton:setPos( {5,5} ) };
                  PARENT oDialogBrowse;
                    SIZE DCGUI_PARENTWIDTH-10,40
//------------------------------------------------------------------------------
          @ 15,5 DCBROWSE oBrowse;
                     DATA aVo;
                   FILTER bFilter;
                 OPTIMIZE;
                   PARENT oGruppeBrowse;
                     SIZE DCGUI_PARENTWIDTH-10,DCGUI_PARENTHEIGHT - 20

          nMenge := Len(aVo[1])
          FOR nI := 1 TO nMenge
              DCBROWSECOL ELEMENT nI;
                   HEADER "Spalte" + Alltrim(Str(nI));
                   PARENT oBrowse;
                     SORT {|aPos,nColPos,self| Spaltensortierung(aVo,nColPos,@bFilter) }
          NEXT
//------------------------------------------------------------------------------
          DCGETOPTIONS;
                BORDER XBPDLG_SIZEBORDER;
            HILITEGETS GRA_CLR_CYAN;
           NOMAXBUTTON;
           NOMINBUTTON;
                 PIXEL;
            SAYOPTIONS XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT;
          TOOLTIPCOLOR GRA_CLR_BLACK, GRA_CLR_YELLOW;
           WINDOWWIDTH nFensterBreite;
          WINDOWHEIGHT nFensterHoehe

          DCREAD GUI;
           APPWINDOW oHauptDialog:drawingArea;
             OPTIONS GetOptions;
              PARENT @oDialog;
               TITLE "VO-Druck " + cVersion

          RETURN
********************************************************************************
FUNCTION fuelleVOArray(aVo,oVo,oVostamm,oEan13)
         LOCAL cDarsteller := oVo:indexohneartikel((oVostamm:nArea)->v_darstell)
         LOCAL cTitel      := oVo:indexohneartikel((oVostamm:nArea)->v_titel)

         AAdd(aVo, {;
                     (oVo:nArea)->datumein,;
                     (oVo:nArea)->ean,;
                     (oVo:nArea)->hapbeivk,;
                     (oVo:nArea)->internetno,;
                     (oVo:nArea)->lagerbs,;
                     (oVo:nArea)->lagernr,;
                     (oVo:nArea)->preisinet,;
                     (oVo:nArea)->preisist,;
                     (oVo:nArea)->preissoll,;
                     (oVo:nArea)->preisek,;
                     (oVo:nArea)->reserve,;
                     (oVostamm:nArea)->datumgestr,;
                     (oVostamm:nArea)->datumvoe,;
                     (oVostamm:nArea)->fsk,;
                     (oVostamm:nArea)->hap,;
                     (oVostamm:nArea)->indiziert,;
                     (oVostamm:nArea)->internetno,;
                     (oVostamm:nArea)->vkgbr,;
                     (oVostamm:nArea)->vkinet,;
                     (oVostamm:nArea)->vkneu,;
                     TokenUpper(cTitel,,1),;
                     TokenUpper(cDarsteller,,1),;
                     (oEan13:nArea)->ean,;
                     (oEan13:nArea)->internetno;
                   };
             )
         RETURN(.T.)
********************************************************************************
FUNCTION spaltenSortierung(aVo,nCol,bFilter)

         ASort(aVo,,,{|x,y|x[nCol] < y[nCol] } )
         RETURN(.T.)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: DCBROWSE und Filter

Beitrag von Bertram Hansen »

Hallo Manfred,

ich mache so etwas auch häufiger. Versuche mal folgendes:

Code: Alles auswählen

FUNCTION spaltenSortierung(aVo,nCol,bFilter)

         aVo := ASort(aVo,,,{|x,y|x[nCol] < y[nCol] } )
         RETURN aVo
Alternativ setz doch mal einen Breakpoint in die Funktion spaltenSortierung vor und nach dem ASort()
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBROWSE und Filter

Beitrag von Wolfgang Ciriack »

Ändere mal den Sortblock

Code: Alles auswählen

SORT {|aPos,nColPos,self| DC_GetBrowArray(oBrowse, Spaltensortierung(aVo,nColPos,@bFilter)), dc_getrefresh(oBrowse) }
und ändere die Funktion so wie Bertram es gemacht hat.

Eventuell geht es auch, wenn du das Array mit @aVo an Spaltensortierung übergibst.
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und Filter

Beitrag von Manfred »

Hi,

tut mir echt Leid, aber nichts davon hat den Fehler behoben.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und Filter

Beitrag von Manfred »

@Bertram,

ein Breakpoint nutzt da nichts, sobald ich den Header anklicke, ist es vorbei.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und Filter

Beitrag von Manfred »

jetzt habe ich es doch geschafft eine Fehlermeldung auf den Bildschirm zu kriegen.

Code: Alles auswählen

Beschreibung:Interne Datenstrukturen beschädigt
Operation: <DC_XbpColumn>
aufgerufen von DC_XBPCOLUMN:SORT(2579)

usw.
mal schauen, ob ich weiter komme damit.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: DCBROWSE und Filter

Beitrag von AUGE_OHR »

Manfred hat geschrieben:

Code: Alles auswählen

Beschreibung:Interne Datenstrukturen beschädigt
Operation: <DC_XbpColumn>
aufgerufen von DC_XBPCOLUMN:SORT(2579)
das ist aus _DCXBROW.PRG die METHOD DC_XbpColumn:Sort() ?
ist es die Zeile

Code: Alles auswählen

::parentBrowse:forceStable()
versuche doch mal ein

Code: Alles auswählen

::parentBrowse:Hilite()
davor ...
gruss by OHR
Jimmy
Antworten