From c5ae0bd76920df4ba74962805f41671fe7286a2e Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Mon, 14 Sep 2026 14:55:30 +0200 Subject: [PATCH] fix: Geruest-Sivas-Export erzeugt eine Zeile je Artikelnummer statt Sammelzeile Sivas kennt nur eine Sivasnr je Zeile - ARTINR (kommagetrennte Liste) wird daher aufgesplittet. Gleiche Artikelnummern innerhalb derselben Baugruppe werden zu einer Zeile mit Anzahl>1 zusammengefasst (wie bei Boegen/Weichen). Jede resultierende Zeile traegt die volle LAENGE der Baugruppe. --- lib/export_sivas.py | 46 ++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/lib/export_sivas.py b/lib/export_sivas.py index 37dc0a9..def93f4 100644 --- a/lib/export_sivas.py +++ b/lib/export_sivas.py @@ -731,25 +731,37 @@ def process_blocks(blocks, lookup): # Geruest-Baugruppen (GR__) - je Block eine eigene Zeile # (siehe Kommentar bei geruest_list oben). Sivasnr kommt direkt aus dem - # ARTINR-Attribut - kann bereits mehrere, kommagetrennte Sivas-IDs - # enthalten (Baugruppe aus mehreren Einzelteilen, siehe ssg-join in - # GeruestInsert.lsp), anders als bei den uebrigen Teilearten also KEIN - # fester Eintrag aus ILS_SIVASNR. + # ARTINR-Attribut - kann mehrere, kommagetrennte Sivas-IDs enthalten + # (Baugruppe aus mehreren Einzelteilen, siehe ssg-join in + # GeruestInsert.lsp) und dieselbe ID mehrfach (menge>1 je Einzelteil). + # Anders als bei den uebrigen Teilearten also KEIN fester Eintrag aus + # ILS_SIVASNR - JEDE Artikelnummer bekommt ihre EIGENE Sivas-Zeile (Sivas + # kennt nur eine Sivasnr je Zeile), gleiche Artikelnummern INNERHALB + # derselben Baugruppe werden dabei zu einer Zeile mit anzahl>1 + # zusammengefasst (wie bogen_groups/weiche_groups oben). Die volle + # LAENGE der Baugruppe steht auf JEDER so entstandenen Zeile - Sivas hat + # kein Konzept einer "gemeinsamen" Laenge ueber mehrere Zeilen hinweg. for block in geruest_list: attribs = block.get("attribs", {}) - items.append({ - "nr": nr, - "teileart": attribs.get("TEILEART", "Geruest"), - "sivasnr": attribs.get("ARTINR", ""), - "sivasnr_quoted": True, - "bezeichnung": attribs.get("BEZEICHNUNG", ""), - "dispgruppe": 20, - "anzahl": 1, - "laenge_mm": attribs.get("LAENGE", ""), - "ids": [get_id(block)], - "details": build_geruest_details(block), - }) - nr += 1 + artinr_list = [a.strip() for a in attribs.get("ARTINR", "").split(",") if a.strip()] + artinr_groups = {} + for artinr in artinr_list: + artinr_groups.setdefault(artinr, 0) + artinr_groups[artinr] += 1 + for artinr, anzahl in artinr_groups.items(): + items.append({ + "nr": nr, + "teileart": attribs.get("TEILEART", "Geruest"), + "sivasnr": artinr, + "sivasnr_quoted": True, + "bezeichnung": attribs.get("BEZEICHNUNG", ""), + "dispgruppe": 20, + "anzahl": anzahl, + "laenge_mm": attribs.get("LAENGE", ""), + "ids": [get_id(block)], + "details": build_geruest_details(block), + }) + nr += 1 # VarioFoerderer-Compound-Bloecke (VF_N) - je Block eine eigene Zeile mit # vollstaendigen Gefaelle-/Angetrieben-Teilgruppen (immer TYP "Streckengruppe").