Index: /trunk/info/info/alkisn/alkisfkt.php
===================================================================
--- /trunk/info/info/alkisn/alkisfkt.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisfkt.php	(revision 389)
@@ -363,5 +363,5 @@
 		echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
 		// kein Fehler bei Blattarten > 1000
-		//if ($debug > 2) {echo "\n<p class='err'>SQL=<br>".$sqln."<br>$1=gml= '".$gmlid."'</p>";}
+		//if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqln."<br>$1=gml= '".$gmlid."'</p>";}
 	}
 
Index: /trunk/info/info/alkisn/alkisstrasse.php
===================================================================
--- /trunk/info/info/alkisn/alkisstrasse.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisstrasse.php	(revision 389)
@@ -11,4 +11,5 @@
 	2017-02-23 Neuer Parameter &haus=m/o zum alkisexport.php
 	2017-06-08 Validierung Eingabeparameter, gestreifte Tabelle, Feinkorrekturen
+	2017-10-09 Sauber filtern auf endet IS NULL
 */
 session_start();
@@ -49,10 +50,11 @@
 $sql ="SELECT s.land, s.regierungsbezirk, s.kreis, s.gemeinde, s.lage, s.bezeichnung AS snam, 
 b.bezeichnung AS bnam, r.bezeichnung AS rnam, k.bezeichnung AS knam, g.bezeichnung AS gnam, o.gml_id AS ogml 
-FROM ax_lagebezeichnungkatalogeintrag s JOIN ax_bundesland b ON s.land=b.land 
+FROM ax_lagebezeichnungkatalogeintrag s 
+JOIN ax_bundesland b ON s.land=b.land 
 JOIN ax_regierungsbezirk r ON s.land=r.land AND s.regierungsbezirk=r.regierungsbezirk 
 JOIN ax_kreisregion k ON s.land=k.land AND s.regierungsbezirk=k.regierungsbezirk AND s.kreis=k.kreis 
 JOIN ax_gemeinde g ON s.land=g.land AND s.regierungsbezirk=g.regierungsbezirk AND s.kreis=g.kreis AND s.gemeinde=g.gemeinde 
 LEFT JOIN ax_lagebezeichnungohnehausnummer o ON s.land=o.land AND s.regierungsbezirk=o.regierungsbezirk AND s.kreis=o.kreis AND s.gemeinde=o.gemeinde AND s.lage=o.lage 
-WHERE s.gml_id= $1 AND s.endet IS NULL AND o.endet IS NULL ;"; 
+WHERE s.gml_id= $1 AND s.endet IS NULL AND b.endet IS NULL AND r.endet IS NULL AND k.endet IS NULL AND g.endet IS NULL AND o.endet IS NULL ;"; 
 
 $v=array($gmlid);
@@ -126,17 +128,19 @@
 ."\n<p>Zusammenfassung von 'Lage mit Hausnummer' und 'Lage ohne Hausnummer' an dieser StraÃe</p>";
 
-// ax_Flurstueck >weistAuf> ax_LagebezeichnungMitHausnummer  > = Hauptgebaeude 
-// ax_Flurstueck >zeigtAuf> ax_LagebezeichnungOhneHausnummer > = Strasse
+// ax_Flurstueck >weistAuf> ax_LagebezeichnungMitHausnummer  > = h = Hauptgebaeude 
+// ax_Flurstueck >zeigtAuf> ax_LagebezeichnungOhneHausnummer > = s = Strasse
 // Suchkriterium: gml_id aus Katalog
-$sql="SELECT f.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, l.gml_id AS lgml, l.hausnummer, 'm' AS ltyp
- FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistAuf) 
- JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
- JOIN ax_lagebezeichnungkatalogeintrag s ON l.land=s.land  AND l.regierungsbezirk=s.regierungsbezirk AND l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
- WHERE s.gml_id = $1 AND f.endet IS NULL AND s.endet IS NULL AND l.endet IS NULL
-UNION SELECT f.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, l.gml_id AS lgml, '' AS hausnummer, 'o' AS ltyp
- FROM ax_flurstueck f JOIN ax_lagebezeichnungohnehausnummer l ON l.gml_id=ANY(f.zeigtauf) 
- JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
- JOIN ax_lagebezeichnungkatalogeintrag s ON l.land=s.land AND l.regierungsbezirk=s.regierungsbezirk AND l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
- WHERE s.gml_id = $1 AND f.endet IS NULL AND s.endet IS NULL AND l.endet IS NULL
+$sql="SELECT fh.gemarkungsnummer, gh.bezeichnung, fh.gml_id, fh.flurnummer, fh.zaehler, fh.nenner, fh.amtlicheflaeche, lh.gml_id AS lgml, lh.hausnummer, 'm' AS ltyp
+ FROM ax_flurstueck fh 
+ JOIN ax_lagebezeichnungmithausnummer lh ON lh.gml_id=ANY(fh.weistAuf) 
+ JOIN ax_gemarkung gh ON fh.land=gh.land AND fh.gemarkungsnummer=gh.gemarkungsnummer 
+ JOIN ax_lagebezeichnungkatalogeintrag sh ON lh.land=sh.land AND lh.regierungsbezirk=sh.regierungsbezirk AND lh.kreis=sh.kreis AND lh.gemeinde=sh.gemeinde AND lh.lage=sh.lage 
+ WHERE sh.gml_id = $1 AND fh.endet IS NULL AND lh.endet IS NULL AND gh.endet IS NULL AND sh.endet IS NULL
+UNION SELECT fs.gemarkungsnummer, gs.bezeichnung, fs.gml_id, fs.flurnummer, fs.zaehler, fs.nenner, fs.amtlicheflaeche, ls.gml_id AS lgml, '' AS hausnummer, 'o' AS ltyp
+ FROM ax_flurstueck fs 
+ JOIN ax_lagebezeichnungohnehausnummer ls ON ls.gml_id=ANY(fs.zeigtauf) 
+ JOIN ax_gemarkung gs ON fs.land=gs.land AND fs.gemarkungsnummer=gs.gemarkungsnummer 
+ JOIN ax_lagebezeichnungkatalogeintrag ss ON ls.land=ss.land AND ls.regierungsbezirk=ss.regierungsbezirk AND ls.kreis=ss.kreis AND ls.gemeinde=ss.gemeinde AND ls.lage=ss.lage 
+ WHERE ss.gml_id = $1 AND fs.endet IS NULL AND ls.endet IS NULL AND gs.endet IS NULL AND ss.endet IS NULL
 ORDER BY gemarkungsnummer, flurnummer, zaehler, nenner;";
 
Index: /trunk/info/info/alkisn/alkisinlaybaurecht.php
===================================================================
--- /trunk/info/info/alkisn/alkisinlaybaurecht.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisinlaybaurecht.php	(revision 389)
@@ -8,4 +8,5 @@
 	2016-11-29 HTML5, Gemeinsam genutzte Datenbanken ermöglichen
 	2017-06-08 Validierung Eingabeparameter, Feinkorrekturen
+	2017-10-09 Sauber filtern auf endet IS NULL
 */
 session_start();
@@ -46,5 +47,6 @@
 FROM ax_bauraumoderbodenordnungsrecht r 
 LEFT JOIN alkis_wertearten a ON cast(r.artderfestlegung AS character varying)=a.k AND a.element='ax_bauraumoderbodenordnungsrecht' AND a.bezeichnung='artderfestlegung'
-LEFT JOIN ax_dienststelle d ON r.land=d.land AND r.stelle=d.stelle WHERE r.gml_id= $1 ;";
+LEFT JOIN ax_dienststelle d ON r.land=d.land AND r.stelle=d.stelle 
+WHERE r.gml_id= $1 AND r.endet IS NULL AND d.endet IS NULL;";
 
 $v = array($gmlid);
Index: /trunk/info/info/alkisn/alkisbaurecht.php
===================================================================
--- /trunk/info/info/alkisn/alkisbaurecht.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisbaurecht.php	(revision 389)
@@ -7,4 +7,5 @@
 	2016-11-29 HTML5, Gemeinsam genutzte Datenbanken ermöglichen
 	2017-06-08 Validierung Eingabeparameter, Feinkorrekturen
+	2017-10-09 Sauber filtern auf endet IS NULL
 */
 session_start();
@@ -34,5 +35,4 @@
 <body>
 END;
-
 
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbaurecht.php'");
Index: /trunk/info/info/alkisn/alkisfshist.php
===================================================================
--- /trunk/info/info/alkisn/alkisfshist.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisfshist.php	(revision 389)
@@ -8,4 +8,5 @@
 	2016-11-29 HTML5, Gemeinsam genutzte Datenbanken ermÃ¶glichen (Filter Gemeinde)
 	2017-06-06 Validierung Eingabeparameter, Feinkorrekturen
+	2017-10-09 Sauber filtern auf NOT endet IS NULL
 */
 
@@ -68,7 +69,5 @@
 	global $gkz, $con, $debug, $showkey, $filtkreis, $filtgem;
 
-	$wherecl="WHERE $1 = ANY (nachfolgerflurstueckskennzeichen) ";
-
-	// Bei kleinere Datenbanken keine spÃŒrbare VerzÃ¶gerung bei Suche mit " = ANY(Array)"
+	// Bei kleineren Datenbanken keine spÃŒrbare VerzÃ¶gerung bei Suche mit " = ANY(Array)"
 	// FÃŒr grosse BestÃ€nde zusÃ€tzlich filtern ÃŒber indizierte Felder Gemarkung + Flur?
 	// Dazu die nÃ€chsten 2 Zeilen aktivieren.	
@@ -77,6 +76,8 @@
 	// Frage: kann das bei Historisierung wechseln? (Umflurung, Umgemarkung). Dann ggf. Fehler (nicht gefunden)
 
-	$sqlv="SELECT 'h' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueck h ".$wherecl
-	."UNION SELECT 'o' AS ftyp, gml_id, flurstueckskennzeichen FROM ax_historischesflurstueckohneraumbezug o ".$wherecl
+	$sqlv="SELECT  'h' AS ftyp, h.gml_id, h.flurstueckskennzeichen FROM ax_historischesflurstueck h "
+	."WHERE $1 = ANY (h.nachfolgerflurstueckskennzeichen) AND NOT h.endet IS NULL "
+	."UNION SELECT 'o' AS ftyp, o.gml_id, o.flurstueckskennzeichen FROM ax_historischesflurstueckohneraumbezug o "
+	."WHERE $1 = ANY (o.nachfolgerflurstueckskennzeichen) AND NOT o.endet IS NULL "
 	."ORDER BY flurstueckskennzeichen";
 
@@ -98,5 +99,7 @@
 		$zv++;
 	}
-	if ($zv == 0) {echo "(keine)";}
+	if ($zv == 0) {
+		echo "(keine)";
+	} // else {if ($debug > 2) {echo "\n<p class='dbg'>Treffer=".$zv."</p>";} }
 	return;
 }
@@ -158,10 +161,9 @@
 } else { // Pfui!
 		$parmtyp="";
-		echo "<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>";
+		die("<p class='err'>Parameter 'gmlid' oder 'fskennz' fehlt.</p>"); // Weitermachen sinnlos
 }
 
 if ($parmtyp != "") { // einer der beiden erlaubten FÃ€lle
 	// UNION-Abfrage auf 3Ã€hnliche Tabellen, darin aber immer nur 1 Treffer.
-	// norGIS: unterschiedliche Formate der gleichen Spalten, Typumwandlung "cast" verwenden.
 
 	$felder="gml_id, flurnummer, cast(zaehler AS character varying), cast(nenner AS character varying), flurstueckskennzeichen, amtlicheflaeche, zeitpunktderentstehung, gemarkungsnummer, ";
Index: /trunk/info/info/alkisn/alkishaus.php
===================================================================
--- /trunk/info/info/alkisn/alkishaus.php	(revision 388)
+++ /trunk/info/info/alkisn/alkishaus.php	(revision 389)
@@ -9,4 +9,5 @@
 	2017-06-08 Validierung Eingabeparameter, Feinkorrekturen
 	2017-06-09 Tool-Tip GebÃ€udefunktion, ErklÃ€rung 2 getrennte p.Styles
+	2017-10-09 Sauber filtern auf endet IS NULL
 
 	ToDo:
@@ -160,15 +161,15 @@
 
 	// HAUPTgebÃ€ude
-	$sqll ="SELECT 'm' AS ltyp, l.gml_id AS gmllag, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer FROM ax_gebaeude g
-	JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(g.zeigtauf)
-	JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
-	WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL";
+	$sqll ="SELECT 'm' AS ltyp, lh.gml_id AS gmllag, sh.lage, sh.bezeichnung, lh.hausnummer, '' AS laufendenummer FROM ax_gebaeude gh
+	JOIN ax_lagebezeichnungmithausnummer lh ON lh.gml_id=ANY(gh.zeigtauf)
+	JOIN ax_lagebezeichnungkatalogeintrag sh ON lh.kreis=sh.kreis AND lh.gemeinde=sh.gemeinde AND lh.lage=sh.lage
+	WHERE gh.gml_id= $1 AND gh.endet IS NULL AND lh.endet IS NULL AND sh.endet IS NULL";
 	// oder NEBENgebÃ€ude
 	$sqll.=" UNION 
-	SELECT 'p' AS ltyp, l.gml_id AS gmllag, s.lage, s.bezeichnung, l.pseudonummer AS hausnummer, l.laufendenummer
-	FROM ax_gebaeude g
-	JOIN ax_lagebezeichnungmitpseudonummer l ON l.gml_id=g.hat
-	JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage
-	WHERE g.gml_id= $1 AND g.endet IS NULL AND l.endet IS NULL ";
+	SELECT 'p' AS ltyp, ln.gml_id AS gmllag, sn.lage, sn.bezeichnung, ln.pseudonummer AS hausnummer, ln.laufendenummer
+	FROM ax_gebaeude gn
+	JOIN ax_lagebezeichnungmitpseudonummer ln ON ln.gml_id=gn.hat
+	JOIN ax_lagebezeichnungkatalogeintrag sn ON ln.kreis=sn.kreis AND ln.gemeinde=sn.gemeinde AND ln.lage=sn.lage
+	WHERE gn.gml_id= $1 AND gn.endet IS NULL AND ln.endet IS NULL AND sn.endet IS NULL ";
 
 	$sqll.="ORDER BY bezeichnung, hausnummer ;";
Index: /trunk/info/info/alkisn/alkisinlayausk.php
===================================================================
--- /trunk/info/info/alkisn/alkisinlayausk.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisinlayausk.php	(revision 389)
@@ -14,4 +14,5 @@
 	2017-06-01 Function "eigentuemer" ohne Parameter $con
 	2017-06-08 Validierung Eingabeparameter, Feinkorrekturen
+	2017-10-09 Sauber filtern auf endet IS NULL
 */
 session_start();
@@ -51,5 +52,5 @@
 $sql ="SELECT f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, g.gemarkungsnummer, g.bezeichnung, f.regierungsbezirk, f.kreis, f.gemeinde
 FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-WHERE f.gml_id= $1 AND f.endet IS NULL ;";
+WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL ;";
 // Weiter joinen: g.stelle -> ax_dienststelle "Katasteramt"
 $v = array($gmlid);
Index: /trunk/info/info/alkisn/alkisbestnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisbestnw.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisbestnw.php	(revision 389)
@@ -10,4 +10,5 @@
 	2017-06-01 Function "eigentuemer" ohne Parameter $con
 	2017-06-08 Validierung Eingabeparameter, Farbwechsel der Tabelle je GrundstÃŒck, Feinschliff und HTML-Profilierung
+	2017-10-09 SchlÃŒssel der Blattart bei berechtigten BlÃ€ttern, sauber filtern auf endet IS NULL
 */
 session_start();
@@ -53,5 +54,5 @@
 LEFT JOIN alkis_wertearten wb ON cast(g.blattart AS character varying)=wb.k AND wb.element='ax_buchungsblatt' AND wb.bezeichnung='blattart'
 LEFT JOIN alkis_wertearten wd ON cast(d.stellenart AS character varying)=wd.k AND wd.element='ax_dienststelle' AND wd.bezeichnung='stellenart'
-WHERE g.gml_id= $1 AND g.endet IS NULL AND d.endet IS NULL;";
+WHERE g.gml_id= $1 AND g.endet IS NULL AND b.endet IS NULL AND d.endet IS NULL;";
 // .. AND d.stellenart=1000 
 
@@ -198,10 +199,4 @@
 		//  ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an)
 
-/* alte Version	
-		$sql="SELECT sd.gml_id, sd.buchungsart, sd.laufendenummer AS lfd, sd.beschreibungdesumfangsderbuchung AS udb, sd.nummerimaufteilungsplan AS nrap, sd.beschreibungdessondereigentums AS sond, wb.v AS bart "
-		."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON (sd.gml_id=ANY(sh.an) OR sd.gml_id=ANY(sh.zu)) "
-		."LEFT JOIN alkis_wertearten wb ON cast(sd.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart' "
-		."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL ORDER BY sd.laufendenummer;"; */
-
 		// Mit "UNION" um die FÃ€lle mit JOIN ÃŒber die Arrays "an" und "zu" unterscheiden zu kÃ¶nnen
 		$sql="SELECT uni.*, wb.v AS bart FROM "
@@ -239,5 +234,5 @@
 			."LEFT JOIN ax_buchungsblattbezirk z ON b.land=z.land AND b.bezirk=z.bezirk "
 			."LEFT JOIN alkis_wertearten wb ON cast(b.blattart AS character varying)=wb.k AND wb.element='ax_buchungsblatt' AND wb.bezeichnung='blattart' "
-			."WHERE s.gml_id= $1 AND b.endet IS NULL ORDER BY b.land, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung;";
+			."WHERE s.gml_id= $1 AND b.endet IS NULL AND s.endet IS NULL AND z.endet IS NULL ORDER BY b.land, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung;";
 			$v=array($gml_bsan);
 			$fbres=pg_prepare("", $sql);
@@ -360,5 +355,5 @@
 LEFT JOIN alkis_wertearten wb ON cast(sb.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart'
 LEFT JOIN alkis_wertearten wd ON cast(d.stellenart AS character varying)=wd.k AND wd.element='ax_dienststelle' AND wd.bezeichnung='stellenart'
-WHERE sf.istbestandteilvon = $1 AND sf.endet IS NULL AND sb.endet IS NULL AND bb.endet IS NULL 
+WHERE sf.istbestandteilvon = $1 AND sf.endet IS NULL AND sb.endet IS NULL AND bb.endet IS NULL AND bz.endet IS NULL AND d.endet IS NULL 
 ORDER BY cast(sf.laufendenummer AS integer), bz.bezeichnung, bb.buchungsblattnummermitbuchstabenerweiterung, cast(sb.laufendenummer AS integer);";
 
@@ -387,13 +382,13 @@
 	}
 
-	$anlfdnr=$rowb["anlfdnr"]; // an BVNR
+	$anlfdnr=$rowb["anlfdnr"];	// an BVNR
 	$anlfdnr0=str_pad($anlfdnr, 4, "0", STR_PAD_LEFT); // mit fÃŒhr.0
-	$gml_b=$rowb["gml_id"]; // id des ber. Blattes
-	$gml_s=$rowb["gml_s"]; // id der ber. B-Stelle
+	$gml_b=$rowb["gml_id"];		// id des ber. Blattes
+	$gml_s=$rowb["gml_s"];		// id der ber. B-Stelle
 	$blart=$rowb["blattart"];
 
-	$buch=$rowb["buchungsart"]; // Buchungsart Stelle berechtigt
-	$bart=$rowb["bart"]; // BA entschl.
-	$lfdnr=$rowb["lfdnr"]; // BVNR ber.
+	$buch=$rowb["buchungsart"];	// Buchungsart Stelle berechtigt
+	$bart=$rowb["bart"];		// BA entschl.
+	$lfdnr=$rowb["lfdnr"];		// BVNR ber.
 	$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
 
@@ -420,5 +415,5 @@
 		."\n\t<td>"
 			."\n\t\t<p class='nwlink noprint'>";
-// +++ SchlÃŒssel der Blatt-Art wenn showkey +++
+			if ($showkey) {echo "<span class='key'>".$blart."</span> ";} // NEU!
 			echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b;
 				if ($showkey) {echo "&amp;showkey=j";}
Index: /trunk/info/info/alkisn/alkisausk.php
===================================================================
--- /trunk/info/info/alkisn/alkisausk.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisausk.php	(revision 389)
@@ -12,4 +12,5 @@
 	2016-02-24 Version fuer norGIS-ALKIS-Import
 	2016-11-29 HTML5, Gemeinsam genutzte Datenbanken ermÃ¶glichen (Berechtigung fÃŒr Gemeinde prÃŒfen)
+	2017-10-11 Sauber filtern auf endet IS NULL
 
 	H i n w e i s :  Dies Modul wird beim Entwickler nicht mehr produktiv eingesetzt.
@@ -42,5 +43,5 @@
 $sql ="SELECT f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, g.gemarkungsnummer, g.bezeichnung, f.regierungsbezirk, f.kreis, f.gemeinde
 FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
-WHERE f.gml_id= $1 AND f.endet IS NULL;";
+WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL;";
 
 $v = array($gmlid);
@@ -176,7 +177,7 @@
 JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id 
 LEFT JOIN ax_buchungsblattbezirk z ON z.land=b.land AND z.bezirk=b.bezirk 
-LEFT JOIN alkis_wertearten wa ON cast(b.blattart AS character varying)=wa.k AND wa.element='ax_buchungsblatt' AND wa.bezeichnung='blattart'
-LEFT JOIN alkis_wertearten wb ON cast(s.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart'
-WHERE f.gml_id= $1 AND f.endet IS NULL AND s.endet IS NULL AND b.endet IS NULL 
+LEFT JOIN alkis_wertearten wa ON cast(b.blattart AS character varying)=wa.k AND wa.element='ax_buchungsblatt' AND wa.bezeichnung='blattart' 
+LEFT JOIN alkis_wertearten wb ON cast(s.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart' 
+WHERE f.gml_id= $1 AND f.endet IS NULL AND s.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL 
 ORDER BY b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer;";
 
@@ -236,6 +237,4 @@
 		."\n<p>Siehe weitere Grundbuchbl&auml;tter mit Rechten an dem fiktiven Blatt.</p>";
 	} else { // kein Eigent. bei fiktiv. Blatt
-		echo "\n<h3><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Angaben zum Eigentum</h3>";
-
 		// Ausgabe Name in Function
 		$n = eigentuemer($rowg["gml_id"], false, "imFenster"); // ohne Adressen
Index: /trunk/info/info/alkisn/alkisnamstruk.php
===================================================================
--- /trunk/info/info/alkisn/alkisnamstruk.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisnamstruk.php	(revision 389)
@@ -9,4 +9,5 @@
 	2016-11-29 HTML5, Gemeinsam genutzte Datenbanken ermÃ¶glichen
 	2017-06-02 Validierung Eingabeparameter, Feinkorrekturen
+	2017-10-09 Sauber filtern auf endet IS NULL
 */
 session_start();
@@ -53,5 +54,5 @@
 $sql="SELECT p.nachnameoderfirma, p.anrede, p.vorname, p.geburtsname, p.geburtsdatum, p.namensbestandteil, p.akademischergrad, a.v AS anrv
 FROM ax_person p LEFT JOIN alkis_wertearten a ON cast(p.anrede AS character varying)=a.k AND a.element='ax_person' AND a.bezeichnung='anrede' 
-WHERE gml_id= $1;";
+WHERE gml_id= $1 AND p.endet IS NULL;";
 
 $v = array($gmlid);
@@ -89,5 +90,5 @@
 
 	$sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland 
-	FROM ax_anschrift a JOIN ax_person p ON a.gml_id=ANY(p.hat) WHERE p.gml_id= $1 ORDER BY a.gml_id DESC ;";
+	FROM ax_anschrift a JOIN ax_person p ON a.gml_id=ANY(p.hat) WHERE p.gml_id= $1 AND a.endet IS NULL AND p.endet IS NULL ORDER BY a.gml_id DESC ;";
 
 	$v = array($gmlid);
@@ -151,5 +152,5 @@
 	."LEFT JOIN ax_buchungsblattbezirk b ON g.land=b.land AND g.bezirk=b.bezirk "
 	."LEFT JOIN alkis_wertearten wb ON cast(g.blattart AS character varying)=wb.k AND wb.element='ax_buchungsblatt' AND wb.bezeichnung='blattart' "
-	."WHERE p.gml_id= $1 "
+	."WHERE p.gml_id= $1 AND p.endet IS NULL AND n.endet IS NULL AND b.endet IS NULL "
 	."ORDER BY b.bezeichnung, g.buchungsblattnummermitbuchstabenerweiterung, n.laufendenummernachdin1421;";
 	// buchungsblatt... mal mit und mal ohne fuehrende Nullen, bringt die Sortierung durcheinander
Index: /trunk/info/info/alkisn/alkisgebaeudenw.php
===================================================================
--- /trunk/info/info/alkisn/alkisgebaeudenw.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisgebaeudenw.php	(revision 389)
@@ -42,5 +42,5 @@
 $sqlf ="SELECT f.name, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche, f.zeitpunktderentstehung, g.gemarkungsnummer, g.bezeichnung 
 FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-WHERE f.gml_id= $1 AND f.endet IS NULL;";
+WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL;";
 $v=array($gmlid);
 $resf=pg_prepare("", $sqlf);
Index: /trunk/info/info/alkisn/alkislage.php
===================================================================
--- /trunk/info/info/alkisn/alkislage.php	(revision 388)
+++ /trunk/info/info/alkisn/alkislage.php	(revision 389)
@@ -10,4 +10,5 @@
 	2016-11-29 HTML5, Gemeinsam genutzte Datenbanken ermÃ¶glichen
 	2017-06-08 Validierung Eingabeparameter, gestreifte Tabelle, Feinkorrekturen
+	2017-10-09 Sauber filtern auf endet IS NULL
 
 	ToDo:
@@ -77,7 +78,8 @@
 LEFT JOIN ax_kreisregion k ON l.land=k.land AND l.regierungsbezirk=k.regierungsbezirk AND l.kreis=k.kreis 
 LEFT JOIN ax_regierungsbezirk r ON l.land=r.land AND l.regierungsbezirk=r.regierungsbezirk 
-LEFT JOIN ax_bundesland b ON l.land=b.land LEFT JOIN ax_lagebezeichnungkatalogeintrag s 
+LEFT JOIN ax_bundesland b ON l.land=b.land 
+LEFT JOIN ax_lagebezeichnungkatalogeintrag s 
 ON l.land=s.land AND l.regierungsbezirk=s.regierungsbezirk AND l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
-WHERE l.gml_id= $1 AND l.endet IS NULL AND s.endet IS NULL AND g.endet IS NULL;";
+WHERE l.gml_id= $1 AND l.endet IS NULL AND g.endet IS NULL AND k.endet IS NULL AND r.endet IS NULL AND b.endet IS NULL AND s.endet IS NULL;";
 
 $v = array($gmlid);
Index: /trunk/info/info/alkisn/alkisfsnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisfsnw.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisfsnw.php	(revision 389)
@@ -12,8 +12,9 @@
 	2017-06-08 optional "berechtigte Buchungen" anzeigen, Function "eigentuemer" ohne Parameter $con,
 				Validierung Eingabeparameter, Feinkorrekturen
+	2017-10-11 Sauber filtern auf 'endet IS NULL', Ausgabe der BodenschÃ€tzung
 
 	ToDo:
-	- BodenschÃ€tzung anzeigen (siehe Mail Frau Weyand ITEBO vom 15.05.17)
-	- Bessere Differenzierung bei den Nutzungsarten (Tabelle dafÃŒr aufbauen)
+	- Parameter zum Umschalten mit/ohne BodenschÃ€tzung?
+	- Bessere Differenzierung bei den Nutzungsarten (Tabelle dafÃŒr aufbauen) 
 */
 session_start();
@@ -123,5 +124,5 @@
 $sql ="SELECT f.name, f.flurnummer, f.zaehler, f.nenner, f.regierungsbezirk, f.kreis, f.gemeinde, f.amtlicheflaeche, st_area(f.wkb_geometry) AS fsgeomflae, f.zeitpunktderentstehung, g.gemarkungsnummer, g.bezeichnung 
 FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-WHERE f.gml_id= $1 AND f.endet IS NULL;";
+WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL;";
 
 $v = array($gmlid); // mit gml_id suchen
@@ -146,4 +147,5 @@
 	$fsbuchflae=$row["amtlicheflaeche"]; // amtliche Fl. aus DB-Feld
 	$fsgeomflae=$row["fsgeomflae"]; // aus Geometrie ermittelte FlÃ€che
+	$the_Xfactor = $fsbuchflae / $fsgeomflae; // Multiplikator zur Umrechnung geometrische AbschnittsflÃ€chen in BuchflÃ€che
 	$fsbuchflaed=number_format($fsbuchflae,0,",",".") . " m&#178;"; // Display-Format dazu
 	$fsgeomflaed=number_format($fsgeomflae,0,",",".") . " m&#178;";
@@ -518,9 +520,5 @@
 WHERE n.flsnr = $1 ORDER BY cast(n.fl AS integer) DESC;";
 // Flurstueckskennzeichen mit Trennzeichen im ALB-Format wie 'llgggg-fff-zzzzz/nnn'
-// Alternativ kÃ¶nnte auch der VIEW "ax_tatsaechlichenutzungsschluessel" fÃŒr den Text zur Nutzungsart verwendet werden.
-
 $fskennzalb=$defland.$gmkgnr."-".str_pad($flurnummer,3,"0",STR_PAD_LEFT)."-".str_pad($zaehler,5,"0",STR_PAD_LEFT)."/".str_pad($nenner,3,"0",STR_PAD_LEFT);
-// echo "\n<p class='err'>Kennz ALB='".$fskennzalb."'</p>";
-
 $v = array($fskennzalb);
 $res = pg_prepare("", $sql);
@@ -553,5 +551,5 @@
 		."</td>"
 		."\n\t<td>";
-/*		//	Derzeit ist keine Gruppe zugeordnet
+/*		// Derzeit ist keine Gruppe zugeordnet
 			switch ($grupp) { // Icon nach 4 Objektartengruppen
 				case "Siedlung":   $ico = "Abschnitt.png"; break;
@@ -569,5 +567,4 @@
 }
 pg_free_result($res);
-// ENDE  N U T Z U N G
 
 echo "\n<tr>" // Summenzeile
@@ -590,8 +587,132 @@
 	."\n\t</td>"
 ."\n</tr>";
+// ENDE  N U T Z U N G
+
+
+// K L A S S I F I Z I E R U N G
+
+// Klassifizierung nach  W a s s e rrecht
+/* 
+	// Tabelle immer leer?
+$sql="SELECT h.v, w.artderfestlegung, st_area(st_intersection(w.wkb_geometry, f.wkb_geometry)) AS schnittflae, f.amtlicheflaeche, st_area(f.wkb_geometry) as fsgeomflae 
+FROM ax_flurstueck f
+JOIN ax_klassifizierungnachwasserrecht w
+ ON st_intersects(w.wkb_geometry, f.wkb_geometry) AND st_area(st_intersection(w.wkb_geometry, f.wkb_geometry)) > 0.05
+LEFT JOIN alkis_wertearten h
+ ON cast(w.artderfestlegung AS character varying) = h.k AND h.element='ax_klassifizierungnachwasserrecht' AND h.bezeichnung='artderfestlegung'
+WHERE f.gml_id = $1 AND f.endet IS NULL AND w.endet IS NULL ORDER BY schnittflae DESC";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {echo "\n<p class='err'>Fehler bei DB-Abfrage zur Klassifizierung Wasser</p>\n";}
+
+if(!empty($res) && pg_num_rows($res) > 0) {
+	echo "\n<table>";
+	while($row = pg_fetch_array($res)) {
+		$fsbuchflae=$row["amtlicheflaeche"];
+		$fsgeomflae=$row["fsgeomflae"];
+		$the_Xfactor=$fsbuchflae / $fsgeomflae; // ++ nicht in Loop, ist konst. je FS
+		$absflaebuch = $row['schnittflae'] * $the_Xfactor;
+		echo"\n<tr><td></td><td></td></tr>"
+		."\n<tr><td><b>FlÃ€che</b></td><td class='klassifizerung'><span class=''>".number_format(intval($absflaebuch),0,",",".")." mÂ²</span></td></tr>"	
+		."\n<tr><td><b>Bezeichnung</b></td><td class='klassifizerung'><span class=''>".$row['v']."</span></td></tr>"
+		."\n<tr><td></td><td></td></tr>";	
+	}
+	echo "</table>";
+}
+// Klassifizierung nach  S t r a Ã e n recht
+	// Tabelle immer leer?
+*/
+
+// B o d e n s c h Ã€ t z u n g
+// ---------------------------
+// Tabelle "klas_3x" (norbit-ALB): Dort fehlen Bodenart und Zustandsstufe, es ist aber bereits auf BuchflÃ€che umgerechnet.
+
+$sql="SELECT 
+ kulturart.k as kulturartk, kulturart.v as kulturartv, bodenart.k as bodenartk, bodenart.v as bodenartv, zustbod.v AS zustbodv,
+ b.bodenzahlodergruenlandgrundzahl as bodenzahl, b.ackerzahlodergruenlandzahl AS ackerzahl, 
+ b.jahreszahl, st_area(st_intersection(b.wkb_geometry, f.wkb_geometry)) AS schnittflae 
+FROM ax_flurstueck f
+JOIN ax_bodenschaetzung b ON st_intersects(b.wkb_geometry, f.wkb_geometry) AND st_area(st_intersection(b.wkb_geometry, f.wkb_geometry)) > 0.05
+LEFT JOIN alkis_wertearten AS bodenart  ON cast(b.bodenart  AS character varying) = bodenart.k  AND bodenart.element='ax_bodenschaetzung'  AND bodenart.bezeichnung='bodenart'
+LEFT JOIN alkis_wertearten AS kulturart ON cast(b.kulturart AS character varying) = kulturart.k AND kulturart.element='ax_bodenschaetzung' AND kulturart.bezeichnung='kulturart'
+LEFT JOIN alkis_wertearten AS zustbod   ON cast(b.zustandsstufeoderbodenstufe AS character varying) = zustbod.k AND zustbod.element='ax_bodenschaetzung' AND zustbod.bezeichnung='zustandsstufeoderbodenstufe'
+WHERE f.gml_id = $1 AND f.endet IS NULL AND b.endet IS NULL ORDER BY schnittflae DESC";
+
+$v = array($gmlid);
+$res = pg_prepare("", $sql);
+$res = pg_execute("", $v);
+if (!$res) {echo "\n<p class='err'>Fehler bei DB-Abfrage zur Klassifizierung Boden</p>\n";}
+
+$gesertragsmz = 0; // Gesamt-ErtragsMesszahl
+$klasflae = 0; // Summe klassifizierte FlÃ€che
+$j=0;
+if(!empty($res) && pg_num_rows($res) > 0) {
+	while ($row = pg_fetch_array($res)) {
+		$kulturartk=$row['kulturartk']; // Key	-
+		$kulturartv=$row['kulturartv']; //		- Value
+		// 1000="Ackerland (A)", 2000="Acker-GrÃŒnland (AGr)", 3000="GrÃŒnland (Gr)", 4000="GrÃŒnland-Acker (GrA)" 		
+		if (substr($kulturartv, 0, 3) == 'Ack') { // A
+			$kbez1="Bodenzahl";
+			$kbez2="Ackerzahl";
+		} else { // Gr
+			$kbez1="Gr&uuml;nlandgrundzahl";
+			$kbez2="Gr&uuml;nlandzahl";
+		}
+		$absflae = $row['schnittflae'];
+		$absbuchflae = $absflae * $the_Xfactor;
+		$klasflae+=$absbuchflae;
+		$ertragszahl = intval($absbuchflae * $row['ackerzahl'] / 100);
+		$gesertragsmz+=$ertragszahl;
+	//	$absflaedis = number_format($absflae,0,",",".")." m&#178;";  // als Tool-Tip ?
+		$absbuchflaedis = number_format($absbuchflae,0,",",".")." m&#178;";
+		$boedenzahl=ltrim($row['bodenzahl'], '0');
+		$ackerzahl=ltrim($row['ackerzahl'], '0');
+
+		// Sp. 1/4
+		if ($j == 0) {
+			echo "\n<tr>\n\t<td class='ll' title='Abschnitt Bodensch&auml;tzung'><img src='ico/Landwirt.png' width='16' height='16' alt=''> Bodensch&auml;tzung:</td>";
+		} else {
+			echo "\n<tr>\n\t<td>&nbsp;</td>";
+		}
+
+		// Sp. 2/4
+		echo "\n\t<td class='fla' title='Ertragsmesszahl = Produkt von ".$kbez2."/100 und Fl&auml;che.'>EMZ ".$ertragszahl."</td>";
+
+		// Sp. 3/4 - darin mehrere Infos
+		echo "\n\t<td class='ls'>";
+
+		echo "\n\t\t<span class='absfla' title='Fl&auml;che des Sch&auml;tzungsabschnitts'>".$absbuchflaedis."</span> "; 
+
+		echo "\n\t\t<span class='absbew'>"
+			."<span title='".$kbez1."'>".$boedenzahl."</span>/<span title='".$kbez2."'>".$ackerzahl."</span>"
+		."</span> ";
+
+		echo "\n\t\t<span class='absart'>";
+			if ($showkey) {echo "\n\t\t\t<span class='key'>(".$kulturartk.")</span> ";}
+			echo "\n\t\t\t<span title='Kulturart'>".$kulturartv."</span> ";
+			if ($showkey) {echo "\n\t\t\t<span class='key'>(".$row['bodenartk'].")</span> ";}
+			echo "\n\t\t\t<span title='Bodenart'>".$row['bodenartv']."</span> ";
+			echo "\n\t\t\t<span title='Zustandsstufe'>".$row['zustbodv']."</span>";
+			if (isset($row['jahreszahl'])) {echo "\n\t\t <span title='Jahreszahl'>".$row['jahreszahl']."</span>";}
+		//	++ Entstehungsart (Array) derzeit leer. 1:N entschlÃŒsseln. entstehungsartoderklimastufewasserverhaeltnisse
+		// $ent = explode(",", trim($entsteh, "{}") ); // [] --> PHP-Array
+		//	if (isset($row['sonstiges'])) {echo "\n\t\t, <span title='Sonstige Angaben'>".$row['sonstiges']."</span>";} -- immer leer (Konverter-Fehler?)
+		echo "\n\t\t</span>";
+
+		// Sp. 4/4 - leer, keine Links
+		echo "\n\t</td>\n\t<td>&nbsp;</td>\n</tr>";
+		$j++;
+	}
+	// Summenzeile
+	$klasflaedis = number_format($klasflae,0,",",".")." m&#178;";
+	echo "\n<tr>\n\t<td class='ll'>Ertragsmesszahl:</td>"
+	."\n\t<td class='fla sum'>EMZ <span title='Summe der Ertragsmesszahlen f&uuml;r dies Flurst&uuml;ck'>".$gesertragsmz."</span></td>"
+	."\n\t<td><span class='absfla'>".$klasflaedis."</span></td>\n\t<td>&nbsp;</td>\n</tr>";
+}
 
 // H i n w e i s  auf Bodenneuordnung oder eine strittige Grenze
 // b.name, b.artderfestlegung, 
-
 $sql_boden ="SELECT a.k AS wert, a.v AS art_verf, b.gml_id AS verf_gml, b.bezeichnung AS verf_bez, 
 b.name AS verf_name, d.bezeichnung AS stelle_bez, d.stelle AS stelle_key 
@@ -823,5 +944,5 @@
 		// Person <-benennt< AX_Namensnummer  >istBestandteilVon-> AX_Buchungsblatt
 		if ($eig=="j") { // Wahlweise mit/ohne EigentÃŒmer
-			$n = eigentuemer($gmlg, false, ""); // ohne Adresse
+			$n = eigentuemer($gmlg, false, ""); // hier ohne Adresse
  			if ($n == 0) {
 				if ($blattkeyg == 1000) {
Index: /trunk/info/info/alkisn/alkisauszug.css
===================================================================
--- /trunk/info/info/alkisn/alkisauszug.css	(revision 388)
+++ /trunk/info/info/alkisn/alkisauszug.css	(revision 389)
@@ -17,4 +17,5 @@
 	2017-06-08	Tab-Zeilen-Farbe wechseln, Spaltenbreite td.flag, media screen
 	2017-06-09	ErlÃ€rung zu Haus: 2 Arten
+	2017-10-11	span.absfla
 */
 body	{background-color: #FEFFFE;}
@@ -68,7 +69,11 @@
 	overflow: auto; padding: 6px; background: #e4f7dd;}
 
-span.key 	{color: gray; font-style: italic;} /* Schluesselwert vor Text, Wert zurueck nehmen */
+span.key 	{color: gray; font-style: italic;} /* Schluesselwert vor Text */
 span.wichtig{color: #BB0000; font-weight: bold;} /* Wert hervorheben */
 span.flae	{font-weight: bold;} /* FlÃ€chensumme Flurst. */
+/* SchÃ€tzg.-Abschnitt */
+span.absfla	{position: absolute; min-width: 90px; text-align: right; background: #fbfbfb;} /* -FlÃ€che */
+span.absbew	{position: absolute; left: 100px; min-width: 45px;} /* -Bewertung */
+span.absart	{position: absolute; left: 145px;} /* -Bodenart usw. */
 
 /* ** T a b e l l e n ** */
@@ -91,6 +96,7 @@
 /* border: 1px dotted gray;  Variante fuer TEST */
 
-td.ll	{width: 130px;}	/* Liste Links */
+td.ll	{width: 140px;}	/* Liste Links */
 td.lr	{color: black;}	/* Liste Rechts */
+td.ls	{color: #005500; position: relative;}	/* Liste SchÃ€tzung */
 td.ph	{color: gray;}	/* Platzhalter, vorlaeufig, spaeter loschen */
 td.fla	{width: 110px; padding-right: 4px; text-align: right;} /* Flaechen rechtsbuendig (stellengerecht) */
Index: /trunk/info/info/alkisn/alkisexport.php
===================================================================
--- /trunk/info/info/alkisn/alkisexport.php	(revision 388)
+++ /trunk/info/info/alkisn/alkisexport.php	(revision 389)
@@ -27,4 +27,5 @@
 				Sonderfall: Auch Export zu *allen* StraÃen der Stadt ohne Filter "gmlid".
 	2017-06-08 Validierung Eingabeparameter
+	2017-10-11 Sauber filtern auf endet IS NULL
 
 ToDo:
@@ -40,5 +41,5 @@
 	."FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf) "
 	."JOIN ax_lagebezeichnungkatalogeintrag s ON l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage "
-	."WHERE f.gml_id= $1 ORDER BY s.bezeichnung, l.hausnummer;";
+	."WHERE f.gml_id= $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ORDER BY s.bezeichnung, l.hausnummer;";
 
 	$v=array($gmlid);
