Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Objekte mit Formular wählen und filtern (QGIS 3.22/3.28) #112

Open
ackmar opened this issue Dec 15, 2022 · 19 comments
Open

Objekte mit Formular wählen und filtern (QGIS 3.22/3.28) #112

ackmar opened this issue Dec 15, 2022 · 19 comments
Assignees

Comments

@ackmar
Copy link

ackmar commented Dec 15, 2022

Das Filtern zwischen zwei Datümer (Typ QDate) ergibt falsches Ergebnis.
("Ausstellungsdatum">='01.01.2022' AND "Ausstellungsdatum"<='31.12.2022')

Wird wahrscheinlich nicht als Datum erkannt und funktioniert leider nur per Korrektur mit folgendem Ausdruck.
("Ausstellungsdatum">=to_date('2022-01-01') AND "Ausstellungsdatum"<=to_date('2022-12-31'))

image

@signedav
Copy link
Member

signedav commented Dec 15, 2022

Ja, ich denke das ist so. Ich glaube zwar, dass dies gehen würde:
("Ausstellungsdatum">='2022-01-01' AND "Ausstellungsdatum"<='2022-12-31')

Dennoch ist das to:date stabiler. Dort kannst du auch das Format angeben so:

("Ausstellungsdatum">=to_date('01.01.2022','dd.MM.yyyy') AND "Ausstellungsdatum"<=to_date('31.12.2022','dd.MM.yyyy')

@ackmar
Copy link
Author

ackmar commented Dec 16, 2022

Leider filtert diese Formel keine Daten und gibt wieder den gesamten Inhalt aus :
("Ausstellungsdatum">='2022-01-01' AND "Ausstellungsdatum"<='2022-06-30')

image

Kann man dies nicht als Bug deklarieren? Der User erwartet natürlich aus dem oben definierten Filter eine korrekte Auswertung und nicht erst bei der nachträglichen Modifizierung in der unteren Ausdruckszeile.

@signedav
Copy link
Member

Du übergibst halt einen String. Ich dachte das "amerikanische" Format wird irgendwie erkannt aber offenbar nicht. Ein Bug ist es meiner Meinung nach nicht. Aber natürlich schon etwas umständlich so.

@signedav
Copy link
Member

Du benutzt die Filterfunktion im GUI und die generiert eine "falsche" Expression.

Sorry, jetzt begreif ichs. Habs am Handy nicht gesehen (Nachteil, wenn man beim Frühstück am Handy Issue trackt. Response time top - Qualität flop. Wenigstens gratis ;-))

Ja, das scheint mir schon ein Bug zu sein.

@ackmar
Copy link
Author

ackmar commented Dec 16, 2022

Ich hätte es auch klarer formulieren können. Das tut Eurer super Qualität nichts ab.

Könntest Du bitte an Romedi eine Aufwandschätzung für das Bug Fixing mitteilen. Je nach Grösse des Aufwandes würden wir den Bug gerne beheben lassen.

Vorab besten Dank.

@signedav
Copy link
Member

Also das hier würde ja gehen "Ausstellungsdatum">='2021-09-19' AND "Ausstellungsdatum"<='2022-12-19'.

Das heisst irgendwo hier https://github.com/qgis/QGIS/blob/master/src/gui/editorwidgets/qgsdatetimesearchwidgetwrapper.cpp#L86-L97 müssten wir das DateFormat mitgeben. Etwa so:

return fieldName + "='" + v.toString(Qt::ISODate) + '\'';

Vielleicht ist es das schon. Allerdings wird hier von QVariant konvertiert. Ist das immer QDateTime? 🤔 Ich mach mal eine Schätzung.

@signedav
Copy link
Member

Btw. hier der Issue auf QGIS qgis/QGIS#43177

@ackmar
Copy link
Author

ackmar commented Dec 20, 2022

Gegenüber dem QDate wird es mit QDateTime etwas komplexer. Die Zeit oder und Zeitzone ist im nachstehenden Filter nicht unterstützt.

Bsp. ("test">='2022-12-19 05:00:00' AND "test"<='2022-12-21 20:00:00')

@signedav
Copy link
Member

Kannst du das testen: ("test">='2022-12-19T05:00:00' AND "test"<='2022-12-21T20:00:00')

@ackmar
Copy link
Author

ackmar commented Dec 20, 2022

So würde es klappen.

@signedav signedav self-assigned this Feb 7, 2023
@signedav
Copy link
Member

signedav commented Mar 1, 2023

Hab mir das gerade codemässig angeschaut und etwas bemerkt, dass mir vorhin noch nicht aufgefallen ist. Der Wert wird immer in das Feldformat konvertiert. Was hast du dort eingetragen?

image

Sofern das Feld ein QDate ist, sollte dort eigentlich immer yyyy-MM-dd drin stehen. Kannst du das mal prüfen @ackmar ?

@signedav
Copy link
Member

signedav commented Mar 1, 2023

Zu meiner Info:

Das Format wird bereits ermittelt. Und zwar hier https://github.com/qgis/QGIS/blob/master/src/gui/editorwidgets/qgsdatetimesearchwidgetwrapper.cpp#L49-L59 Anhand des genannten Settings. Ich werd mal noch in die Implementierung dieses Settings schauen. Eventuell ist es eher für den Fall, dass das Feld kein spezifischer Datumstyp hat...

@signedav
Copy link
Member

signedav commented Mar 1, 2023

Dieses Setting ist aber wahrlich verwirrend. Ein PR sollte diese Verwirrung lösen und Fehlkonfigurationen vermeiden.

qgis/QGIS#52063

@ackmar
Copy link
Author

ackmar commented Mar 2, 2023

Jetzt bin ich total verwirrt. In meinem Beispiel sieht das Setting folgendermassen aus:

image

image

Das Feldformat und die Customanzeige sind hier identisch und wurden aus einem SQL mit folgender Umformung definiert:
to_char(e.erstellt_am :: DATE, 'dd.MM.yyyy') as "Erstellungsdatum"

Als User würde ich in diesem Beispiel mindestens das Format erwarten, in dem es ursprünglich definiert ist, aber hier muss trotzdem das amerikanische Format für den Filter angewendet werden.

Wird die angebliche Lösung für 3.30 auch auf 3.28 backported?

@signedav
Copy link
Member

signedav commented Mar 2, 2023

Ich denke nicht dass es gebackportet wird, da es nur hilft Fehlkonfigurationen zu vermeiden.

Aber dein Fall hier scheint noch etwas anderes zu benötigen. Ich schau mal weiter und melde mich.

@signedav
Copy link
Member

signedav commented Mar 2, 2023

Habn noch was gefunden

Habe ich ein date column in der SQL Tabelle, lädt mir QGIS 3.28 das schweizer Format in die Settings (anhand meiner Systemsprache):
image

Dies ist gefixt worden (vor zwei Wochen) für 3.30 qgis/QGIS#51471

Hier wird das technische Datumsformat beibehalten und die Anzeige gemäss Systemsprache angepasst:
image

Ich denke, das würde auch dein Problem lösen. Dennoch schau ich noch dein SQL Case an...

@signedav
Copy link
Member

signedav commented Mar 2, 2023

Dein SQL Case kann ich hingegen nicht reproduzieren:
image

Ich denke aber dass wir folgendermassen weiterfahren können:

  1. Konfiguriere dein Field Format zu "yyyy-MM-dd" die Anzeige kannst du auf dem schweizer Format lassen. Filter sollten nun funktionieren.
  2. Zukünftig (ab 3.30) wird nun auch das korrekte Field Format beim erstellen des Layers genommen.

Falls euch ein Backport wichtig ist, könnte ich das mal anfragen. Allerdings würde ich gerne darauf verzichten, da der Bug nicht zu grossen Problemen führt. Ausserdem wäre die Config deines aktuellen Projektes ja falsch gesetzt. Die müsste man auch mit dem Fix noch umkonfigurieren...

@ackmar
Copy link
Author

ackmar commented Mar 2, 2023

@signedav
Es funktioniert wie Du im Abschnitt 1 beschrieben hast. Wir verzichten auf die Anfrage mit dem Backport und schauen dann mit der künftigen LTR-Version im nächsten Jahr. Die Sache muss daher nicht mehr weiterverfolgt werden.

Herzlichen Dank für deine Abklärungen und deinen Service.

@ZsanettMed
Copy link

kein ZOHO ticket, warten auf die Version 3.30

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants