Report: Mindestanzahl unterschritten
-
Hallo zusammen,
ich habe einen Report erstellt, der mir zu verschiedenen Gebäuden die gelagerte Ware anzeigt.Der Report soll mir ausgeben, wenn es zu einer Mengenunterschreitung kommt.
Beispiel: Soll -> 2 Clients, 1 Client wurde entnommen, Bericht gibt aus: Lager xxx 1x Client nachbestellen
Habt ihr eine Idee?
Vielen Dank
Gruß
Chris
-
Hallo Chris,
Ich hab' kurz mal was zusammengebaut was glaube ich ca. tut was du willst.
SELECT obj_main.isys_obj__id AS '__id__', obj_main.isys_obj__title AS 'LC__UNIVERSAL__TITLE###1', 2 - COUNT(*) as 'zu wenig' FROM isys_obj AS obj_main INNER JOIN isys_cmdb_status AS obj_main_status ON obj_main_status.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__id LEFT JOIN isys_person_2_group AS j2 ON obj_main.isys_obj__id = j2.isys_person_2_group__isys_obj__id__group LEFT JOIN isys_cats_person_list AS j4 ON j2.isys_person_2_group__isys_obj__id__person = j4.isys_cats_person_list__isys_obj__id LEFT JOIN isys_obj AS j7 ON j7.isys_obj__id = j4.isys_cats_person_list__isys_obj__id LEFT JOIN isys_obj AS j9 ON j9.isys_obj__id = j4.isys_cats_person_list__isys_obj__id LEFT JOIN isys_obj_type AS j10 ON j10.isys_obj_type__id = obj_main.isys_obj__isys_obj_type__id WHERE ( (j10.isys_obj_type__id != '60' ) AND (j10.isys_obj_type__id != '60' ) AND (j10.isys_obj_type__id != '63' ) ) AND ( (j10.isys_obj_type__id = '54' ) ) GROUP BY obj_main.isys_obj__id HAVING COUNT(*) < 2 ORDER BY obj_main.isys_obj__title DESC
Das gibt mir von allen Personengruppen mit weniger als 2 Mitgliedern aus wieviele Mitglieder es weniger sind als 2.
Dazu habe ich zuerst über den Abfrageeditor einen Report erstellt der mir zu allen Gruppen alle Personen ausgibt (müsstest du entsprechend auf Lager und Clients anpassen).
Dann habe ich in den SQL-Editor gewechselt und folgende Zeilen hinzugefügt bzw. bearbeitet:Zeile 4: "2 - COUNT()" gibt an wieviele fehlen. Das kannst du bei deinem Beispiel z.B. so anpassen: "CONCAT('Lager ', obj_main.isys_obj__title, ' ', 2 - COUNT(), ' Client nachbestellen') AS 'zu wenig'"
Zeile 16 - "GROUP BY": Die einfach so lassen. Wichtig ist dass in deinem Fall das Lager das obj_main ist, das erreichst du indem du beim Abfrageeditor unter Bedingung auf Objekttyp "Lager" filterst.
Zeile 17- "HAVING": Die Zeile gibt's damit nur die ausgegeben werden wo auch was fehlt.
Wenn sich die gewünschte Zahl ändert muss die in Zeile 4 und Zeile 17 geändert werden. Ein bisschen schwieriger wird es wenn die gewünschte Zahl nicht immer gleich sein soll.
Probier mal ob du damit was anfangen kannst, ansonsten sag nochmal Bescheid.LG, Tobias
-
Hallo Tobi,
erst einmal vielen Dank für deine Hilfe.Ich habe jedoch das Problem, dass es dieser Bericht über mehrere Lager funktionieren muss.
Also zeige mir aus allen RMA Lagern die unterschrittenen Bestände an.
Mit dem Abfrage-Editor habe ich folgendes Script erstellt:
SELECT
obj_main.isys_obj__id AS 'id',
j9.isys_cmdb_status__title AS 'LC__UNIVERSAL__CMDB_STATUS###1',
obj_main.isys_obj__title AS 'LC__UNIVERSAL__TITLE###1',
j5.isys_model_manufacturer__title AS 'LC__CATG__STORAGE_MANUFACTURER###2',
j8.isys_model_title__title AS 'LC__CMDB__CATG__MODEL###2',
j6.isys_catg_model_list__serial AS 'LC__CMDB__CATG__SERIAL###2',
j3.isys_catg_location_list__parentid AS 'isys_cmdb_dao_category_g_location::dynamic_property_callback_location_path::isys_catg_location_list__parentid::LC__CMDB__CATG__LOCATION_PATH'FROM isys_obj AS obj_main
INNER JOIN isys_cmdb_status AS obj_main_status ON obj_main_status.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__id
LEFT JOIN isys_cmdb_status AS j9 ON j9.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__id
LEFT JOIN isys_catg_location_list AS j3 ON obj_main.isys_obj__id = j3.isys_catg_location_list__isys_obj__id
LEFT JOIN isys_obj AS j4 ON j3.isys_catg_location_list__parentid = j4.isys_obj__id
LEFT JOIN isys_catg_model_list AS j6 ON j6.isys_catg_model_list__isys_obj__id = obj_main.isys_obj__id
LEFT JOIN isys_model_manufacturer AS j5 ON j5.isys_model_manufacturer__id = j6.isys_catg_model_list__isys_model_manufacturer__id
LEFT JOIN isys_model_title AS j8 ON j8.isys_model_title__id = j6.isys_catg_model_list__isys_model_title__id
LEFT JOIN isys_obj_type AS j10 ON j10.isys_obj_type__id = obj_main.isys_obj__isys_obj_type__idWHERE TRUE
AND ( (j10.isys_obj_type__id != '60' ) AND (j10.isys_obj_type__id != '60' ) ) AND ( (j10.isys_obj_type__id = '10' ) OR (j10.isys_obj_type__id = '22' ) ) AND ( (j4.isys_obj__id = '7454' ) ) OR ( (j4.isys_obj__id = '7460' ) OR (j4.isys_obj__id = '7462' ) OR (j4.isys_obj__id = '7464' ) OR (j4.isys_obj__id = '7466' ) OR (j4.isys_obj__id = '7468' ) ) ORDER BY j9.isys_cmdb_status__title ASC ;
Wie kann ich dein Beispiel am besten integrieren?
LG
Chris
-
Hallo Chris,
du kannst das SQL von tPrimus (Danke @tPrimus) in einem Report nutzen.
Bei "Neu" gibt es einen Pfeil, bei Klick klappt ein Menü aus, dort auf SQL-Editor klicken.Nun kopierst du das SQL von tPrimus einfach in SQL-Abfrage und klickst auf Vorschau vorerst, ist das dein gewolltes Ergebnis ?