Index: /trunk/info/info/alkisn/alkisinlayausk.php
===================================================================
--- /trunk/info/info/alkisn/alkisinlayausk.php	(revision 404)
+++ /trunk/info/info/alkisn/alkisinlayausk.php	(revision 405)
@@ -16,7 +16,7 @@
 	2017-10-09 Sauber filtern auf endet IS NULL
 	2017-12-20 Fehlerkorrektur: Link StraÃe ohne gml_id, Bessere Title fÃŒr Links, Icon an Lage.
-	2018-04-23 FÃŒr GB-Teil Function benutzen.
-++ ToDo: 
-	- bei mehreren Adressen die Spalte 1 nicht wiederholen
+	2018-04-23 FÃŒr GB-Teil Function benutzen
+	2018-04-24 Feinschliff
+	2018-05-03 neuer GrundstÃŒcksnachweis
 */
 session_start();
@@ -95,5 +95,5 @@
 }
 
-//echo "\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck - &Uuml;bersicht</h2>";
+// Ãberschrift ist im umgebenden HTML vorhanden
 echo "\n<table class='outer'>"
 ."\n\t<tr>"
@@ -101,5 +101,5 @@
 		."\n\t\t<td>"
 		."\n\t\t\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>\n\t\t\t\t<tr>"
-			."\n\t\t\t\t\t<td class='head'>Gmkg</td>\n\t\t\t\t\t<td class='head'>Flur</td>\n\t\t\t\t\t<td class='head'>Flurst-Nr.</td>\n\t\t\t\t</tr>"
+			."\n\t\t\t\t\t<td class='head'>Gemarkung</td>\n\t\t\t\t\t<td class='head'>Flur</td>\n\t\t\t\t\t<td class='head'>Flurst-Nr.</td>\n\t\t\t\t</tr>"
 			."\n\t\t\t\t<tr>\n\t\t\t\t\t<td title='Gemarkung'>".$gemkname."</td>"
 			."\n\t\t\t\t\t<td title='Flurnummer'>".$flurnummer."</td>"
@@ -107,5 +107,5 @@
 		."\n\t\t\t</table>"
 	."\n\t\t</td>\n\t\t<td>"
-	."\n\t\t\t<p class='nwlink'>weitere Auskunft:<br>";
+	."\n\t\t\t<p class='nwlink noprint'>weitere Auskunft:<br>";
 // FlurstÃŒcksnachweis (mit EigentÃŒmer)
 echo "\n\t\t\t\t<a href='javascript:imFenster(\"alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;eig=j\")' "
@@ -150,5 +150,7 @@
 	$hsnr=$row["hausnummer"];
 	echo "\n\t<tr>"
-		."\n\t\t<td class='ll'><img src='ico/Lage_mit_Haus.png' width='16' height='16' alt='MIT'> Lage:</td>"
+		."\n\t\t<td class='ll'>";
+		if ($j == 0) {echo "<img src='ico/Lage_mit_Haus.png' width='16' height='16' alt='MIT'> Lage:";}
+		echo "</td>"
 		."\n\t\t<td class='lr'>".$sname."&nbsp;".$hsnr."</td>"
 		."\n\t\t<td>\n\t\t\t<p class='nwlink noprint'>";
@@ -230,11 +232,11 @@
 if ($gml_buchungsstelle == '') {echo "\n<p class='err'>Keine Buchungstelle zum Flurst&uuml;ck gefunden.</p>";}
 echo "\n\n<table class='outer'>";
-	$gezeigt = buchung_anzg($gml_buchungsstelle, 'j', true, ""); // direkte Buchung anzeigen wenn nicht fiktiv, Eigent. ja, mit JS "imFenster"
-	$anzber = ber_bs_zaehl($gml_buchungsstelle); // Berechtigte Buchungen, nur Anzahl
+	$gezeigt=buchung_anzg($gml_buchungsstelle, 'j', true, "", 1); // direkte Buchung anzeigen wenn nicht fiktiv, Eigent. ja, mit JS "imFenster"
+	$anzber=ber_bs_zaehl($gml_buchungsstelle); // Ber. Buchg., nur Anzahl
 	if ($anzber > 0 ) {
 		if ($gezeigt) {
-			echo "\n\t<tr>\n\t\t<td colspan='4'><span class='wichtig'>Berechtigte Buchungen siehe Flurst&uuml;cksnachweis.</span></td>\n\t</tr>";
+			echo "\n\t<tr>\n\t\t<td colspan='4' title='Komplexe Situationen werden in dieser Vorschau nicht vollst&auml;ndig dargestellt.'><span class='wichtig'>Berechtigte Buchungen siehe Flurst&uuml;ck oder Buchung.</span></td>\n\t</tr>";
 		} else {
-			$nochmehr = ber_bs_anzg($gml_buchungsstelle, "j", true, ""); // wenigstens eine Buchg. zeigen
+			$nochmehr=ber_bs_anzg($gml_buchungsstelle, "j", true, "", 1); // wenigstens EINE Buchg. zeigen
 			if (count($nochmehr) > 0) { // liefert array, hier nicht weiter verfolgen
 				echo "\n\t<tr>\n\t\t<td colspan='4'><span class='wichtig'>Weitere berechtigte Buchungen siehe Flurst&uuml;cksnachweis.</span></td>\n\t</tr>";
Index: /trunk/info/info/alkisn/alkisbestnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisbestnw.php	(revision 404)
+++ /trunk/info/info/alkisn/alkisbestnw.php	(revision 405)
@@ -12,4 +12,5 @@
 	2017-10-09 SchlÃŒssel der Blattart bei berechtigten BlÃ€ttern, sauber filtern auf endet IS NULL
 	2018-04-23 Blatt und EigentÃŒmer in eine Tabelle.
+	2018-05-03 Anpassung an GrundstÃŒcksnachweis, kein Export fÃŒr fiktives Blatt
 */
 session_start();
@@ -37,6 +38,6 @@
 	<link rel="shortcut icon" type="image/x-icon" href="ico/Grundbuch.ico">
 	<script type="text/javascript">
-		function ALKISexport() {
-			window.open(<?php echo "'alkisexport.php?gkz=".$gkz."&tabtyp=grundbuch&gmlid=".$gmlid."'"; ?>);
+		function ALKISexport(gmlid) {
+			window.open('alkisexport.php?gkz=<?php echo $gkz;?>&tabtyp=grundbuch&gmlid=' + gmlid);
 		}
 	</script>
@@ -107,6 +108,5 @@
 if ($blattkey == 5000) { // fikt. Blatt
 	echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt.</p>";
-} else {
-	// E I G E N T U E M E R
+} else { // E I G E N T U E M E R
 	$n = eigentuemer($gmlid, true, ""); // MIT Adressen.
 	if ($n == 0) { // keine NamensNr, kein Eigentuemer
@@ -171,9 +171,7 @@
 FROM ax_buchungsstelle s LEFT JOIN alkis_wertearten b ON cast(s.buchungsart AS character varying)=b.k AND b.element='ax_buchungsstelle' and b.bezeichnung='buchungsart'
 WHERE s.istbestandteilvon= $1 AND s.endet IS NULL ORDER BY cast(s.laufendenummer AS integer);";
-
 $v=array($gmlid); // Rel. istBestandteilVon
 $res=pg_prepare("", $sql);
 $res=pg_execute("", $v);
-
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Buchung.</p>";
@@ -190,5 +188,4 @@
 	$bart=$row["bart"]; // BuchungsART Text dazu
 	$bartstory=htmlentities($row["d"], ENT_QUOTES, "UTF-8"); // .. fÃŒr Anzeige aufbereitet
-
 	if ($row["zaehler"] == "") {
 		$anteil = "";
@@ -196,14 +193,13 @@
 		$anteil = $row["zaehler"]."/".$row["nenner"];
 	}
-
 	if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je GrundstÃŒck
 	$zpaar=!$zpaar;
 
 	// F l u r s t u e c k s d a t e n  zur direkten Buchungsstelle
-	$j = bnw_fsdaten($con, $lfdnr, $gml_bs, $bart, $anteil, true, $bartkey, $bartstory); // return=Anzahl der FS
+	$j = bnw_fsdaten($lfdnr, $gml_bs, $bart, $anteil, true, $bartkey, $bartstory); // return=Anzahl der FS
 	$fscnt=$fscnt + $j;
 	if ($j == 0) { //  k e i n e  Flurstuecke gefunden (Miteigentumsnteil usw.)
-		// Bei "normalen" Grundstuecken wurden Flurstuecksdaten gefunden und ausgegeben.
-		// Bei Miteigentumsanteil, Erbbaurecht usw. muss nach weiteren Buchungsstellen gesucht werden:
+		// Bei "normalen" Grundstuecken wurden hier Flurstuecksdaten gefunden und ausgegeben.
+		// Bei Miteigentumsanteil, Erbbaurecht usw. muss nach den "dienenden" Buchungsstellen gesucht werden, darauf sind die FS gebucht.
 		//  Buchungsstelle >an/zu> (andere)Buchungsstelle >istBestandTeilVon> "FiktivesBlatt (ohne) Eigentuemer"
 
@@ -224,5 +220,5 @@
 		."ORDER BY uni.lfd;";
 	//	Testfall suchen: SELECT gml_id, zu, durch FROM ax_buchungsstelle WHERE NOT zu IS NULL OR NOT durch IS NULL;
-	//	Die Relationen "an" und "durch" kommen in der Praxis nicht vor.
+	//	Die Relationen "zu" und "durch" kommen in der Praxis nicht vor.
 
 		$v=array($gml_bs); // gml_id der "herrschenden" Buchungs-Stelle
@@ -242,6 +238,5 @@
 			$anzu=$rowan["anzu"];	// Welche Relation? Recht an oder Recht zu ?
 
-			// a n d e r e s   B l a t t  (an dem das aktuelle Blatt Rechte hat)
-			// dienendes Grundbuch
+			// dienende Buchungsstelle
 			$sql ="SELECT b.gml_id, b.land, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, b.blattart, wb.v AS blattartv, z.bezeichnung AS beznam "
 			."FROM ax_buchungsblatt b JOIN ax_buchungsstelle s ON b.gml_id=s.istbestandteilvon "
@@ -270,6 +265,5 @@
 				echo "\n<p class='err'>Anzahl fiktive Bl&auml;tter zu anderer Buchungstelle = ".$b."</p>";
 			}
-
-			// G r u n d b u c h d a t e n  zur  a n d e r e n  Buchungsstelle
+			// Grundbuchdaten zur dienenden Buchungsstelle
 			echo "\n<tr class='".$trclass."'>"
 				."\n\t<td id='bvnr".$lfdnr."'>"; // Sp.1 Erbbau BVNR, Sprungmarke
@@ -298,4 +292,9 @@
 				."\n\t<td>" // Sp.8 Link ("an" oder "zu"?)
 					."\n\t\t<p class='nwlink noprint'>".$anzu; // Recht "an" oder "zu"
+
+					// Buchung
+					// +++ <a  gsnachw 
+
+					// Bestand
 					if ($showkey) {echo " <span class='key'>".$fbbartkey."</span>";} // Blatt-Art SchlÃŒssel
 					echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$fbgml;
@@ -304,12 +303,13 @@
 						."' title='Zum Grundbuchnachweis des dienenden Blattes'>";
 						echo $fbbart // Blatt-Art entschlÃŒsselt
-					." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>\n\t\t</p>"
+					." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
+
+					echo "\n\t\t</p>"
 				."\n\t</td>"
 			."\n</tr>"; 
 
-			// F l u r s t u e c k s d a t e n  zur  a n d e r e n  Buchungsstelle
+			// Flurstuecksdaten zur dienenden Buchungsstelle
 			// Buchungsart wird nur in erster Zeile ausgegeben, hier leer
-
-			$aj = bnw_fsdaten($con, $lfdnran, $gml_bsan, "", $anteil, false, "", ""); // return=Anz.FS
+			$aj = bnw_fsdaten($lfdnran, $gml_bsan, "", $anteil, false, "", ""); // return=Anz.FS
 			$fscnt=$fscnt + $aj;
 			if ($rowan["nrap"] != "") {
@@ -429,10 +429,11 @@
 		."\n\t<td>"
 			."\n\t\t<p class='nwlink noprint'>";
-			if ($showkey) {echo "<span class='key'>".$blart."</span> ";} // NEU!
+			// Bestand
+			if ($showkey) {echo "<span class='key'>".$blart."</span> ";}
 			echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b;
 				if ($showkey) {echo "&amp;showkey=j";}
 				echo "#bvnr".$lfdnr."' title='Nachweis des berechtigten Blattes an einer Buchung auf ".$blattart."'>".$rowb["blattartv"]; // "an" ggf. durch "zu" ersetzen?
-				echo " \n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>"
-			."\n\t\t</p>"
+				echo " \n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>";
+			echo "\n\t\t</p>"
 		."</td>"
 	."\n</tr>";
@@ -449,13 +450,16 @@
 	}
 }
+
+echo "\n<div class='buttonbereich noprint'><hr>"
+	."\n\t<a title='zur&uuml;ck' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zur&uuml;ck'></a>&nbsp;"
+	."\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;";
+if ($blattkey == 5000) { // Nicht bei "fiktives Blatt"
+	echo "\n\t<img src='ico/download_gb_no.png' width='32' height='16' alt='Export' title='F&uuml;r ein fiktives Blatt ohne Eigent&uuml;mer ist ein CSV-Export nicht sinnvoll.'>"; 
+} else {
+	echo "\n\t<a title='Export als CSV' href='javascript:ALKISexport(\"".$gmlid."\")'><img src='ico/download_gb.png' width='32' height='16' alt='Export'></a>";
+}
+echo "&nbsp;\n</div>";
+footer($gmlid, $_SERVER['PHP_SELF']."?", "");
 ?>
-
-<div class='buttonbereich noprint'>
-	<hr>
-	<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
-	<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
-	<a title="Export als CSV" href='javascript:ALKISexport()'><img src="ico/download_gb.png" width="32" height="16" alt="Export"></a>&nbsp;
-</div>
-<?php footer($gmlid, $_SERVER['PHP_SELF']."?", ""); ?>
 </body>
 </html>
Index: /trunk/info/info/alkisn/alkisfsnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisfsnw.php	(revision 404)
+++ /trunk/info/info/alkisn/alkisfsnw.php	(revision 405)
@@ -20,4 +20,5 @@
 	2018-04-11 Variable "gmlid" an Function "ALKISexport" ÃŒbergeben. Ist beim Schreiben des Headers noch unbekannt, wenn mit "&fskennz=" aufgerufen.
 	2018-04-23 Umfangreiche Ãberarbeitung der "Buchungsstellen"
+	2018-05-03 Anpassung fÃŒr GrundstÃŒcksnachweis
 
 ++ToDo:
@@ -647,5 +648,5 @@
 echo "\n<table class='outer'>"; // ALLE Buchungen und EigentÃŒmer in 4 Spalten EINER Tabelle ausgeben
 	$stufe=1; // SchleifenzÃ€hler Tiefe
-	$gezeigt=buchung_anzg($gml_buchungsstelle, $eig, false, $gmlid); // die ("dienende") Buchung anzeigen, wenn nicht fiktiv. Liefert true/false
+	$gezeigt=buchung_anzg($gml_buchungsstelle, $eig, false, $gmlid, 1); // die ("dienende") Buchung anzeigen, wenn nicht fiktiv. Liefert true/false
 
 	$anzber=ber_bs_zaehl($gml_buchungsstelle); // Anzahl berechtigte Buchungen (nÃ€chste Stufe) zu dieser Buchung ermitteln
@@ -661,5 +662,5 @@
 			$i++;
 			if (ber_bs_zaehl($gml_ber_bs) > 0) {
-				$verf_neu=ber_bs_anzg($gml_ber_bs, $eig, false, $gmlid); // Anzeige ber. Buchungst., ggf. mit EigentÃŒmer.
+				$verf_neu=ber_bs_anzg($gml_ber_bs, $eig, false, $gmlid, ""); // Anzeige ber. Buchungst., ggf. mit EigentÃŒmer.
 				$anz_neu=count($verf_neu); // Das Ergebnis zÃ€hlen
 			//	if ($debug > 2) {echo "<p class='dbg'>Weiter zu verfolgen: Stufe ".$stufe.", Element ".$i.", Anzahl: ".$anz_neu."</p>";}
@@ -672,17 +673,4 @@
 		//if ($debug > 2) {echo "<p class='dbg'>Nach Stufe ".$stufe.", Anzahl: ". $anzber ."</p>";}
 	} // Ende Stufe
-// Diese aufwÃ€ndige Analyse mit Arrays geht davon aus, dass es Verzweigungen auf oberen Stufen geben kÃ¶nnte,
-// so dass mehrere Zweige parallel weiter zu verfolgen sind. In der Praxis ist eine Verzweigung bisher nur in der letzten Stufe vorgekommen.
-// Eine weniger aufwÃ€ndige LÃ¶sung (ohne Arrays) wÃŒrde reichen, wenn das immer so wÃ€re:
-/*  Alte Version (einfacher):
-	$gezeigt = buchung_anzg($gml_buchungsstelle, $eig, false, $gmlid);
-	$anzber = ber_bs_zaehl($gml_buchungsstelle);
-	if ($anzber > 0 ) {
-		$verfolg = ber_bs_anzg($gml_buchungsstelle, $eig, $gmlid);
-		while ($verfolg != "") {
-			$valt=$verfolg;
-			$verfolg = ber_bs_anzg($valt, $eig, $gmlid);
-		}
-	} */
 echo "\n</table>\n\n";
 
Index: /trunk/info/info/alkisn/alkisgsnw.php
===================================================================
--- /trunk/info/info/alkisn/alkisgsnw.php	(revision 405)
+++ /trunk/info/info/alkisn/alkisgsnw.php	(revision 405)
@@ -0,0 +1,276 @@
+<?php
+/*	Modul: alkisgsnw.php
+
+	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
+	GrundstÃŒcksnachweis fuer ein GrundstÃŒck aus ALKIS PostNAS
+
+	Version:
+	2018-05-03 Neues Modul "gsnw" abgeleitet aus "fsnw"
+*/
+
+function get_GS_Daten($gmlid, $gskennz) {
+// Daten zur Buchungsstelle (GS = GrundstÃŒck) aus der DB lesen.
+// Suche wahlweise ÃŒber die GML-ID oder ÃŒber das GrundstÃŒcks-Kennzeichen (Bezirk-Blatt-LfdNr) aus der URL.
+	global $gkz, $showkey, $debug, $defland, $gsbez, $gsblatt, $gslfdnr, $gsbart;
+
+	$sqlgs="SELECT s.gml_id, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, s.laufendenummer, s.buchungsart "
+		."FROM ax_buchungsstelle s JOIN ax_buchungsblatt b ON s.istbestandteilvon=b.gml_id ";
+	if ($gskennz == '') { // normaler Link ÃŒber gmlid
+		$sqlgs.="WHERE s.gml_id= $1 ";
+		$v=array($gmlid);
+	} else { // Kennzeichen "Bezirk-Blatt-BVNR" alternativ zur gml_id
+		$arr=explode("-", $gskennz, 4); // zerlegen
+		$zbez=trim($arr[0]); // Bezirk
+		if (strlen($zbez) == 6) {
+			$land=substr($zbez, 0, 2);
+			$zbez=substr($zbez, 2, 4);
+		} else { // kein schÃ¶ner Land ..
+			$land=$defland; // Default aus config
+		}
+		$zblatt=$arr[1];
+		if (preg_match('#^[0-9]{1,6}$#', $zblatt)) { // Nur numerisch
+			$zblatt=str_pad($zblatt, 6, "0", STR_PAD_LEFT)." "; // 6 Nr + 1 blank
+		} elseif (preg_match('#^[0-9A-Z]{1,7}$#', $zblatt)) { // +++ A nur in LETZTER Stelle prÃŒfen
+			$zblatt=str_pad($zblatt, 7, "0", STR_PAD_LEFT); // 6 Nr + 1 "A", gesamt 7
+		} else {
+			die("Fehler in Buchungsblatt im Parameter 'gskennz'.");
+		}
+		$zlfdnr=str_pad($arr[2], 4, "0", STR_PAD_LEFT); // Lfd.-Nr./BVNR
+		$sqlgs.="WHERE b.land= $1 AND b.bezirk= $2 AND b.buchungsblattnummermitbuchstabenerweiterung= $3 AND s.laufendenummer= $4 ";
+		$v=array($land, $zbez, $zblatt, $zlfdnr);
+	}
+	// egal ob Suche mit gmlid ODER Kennzeichen
+	$sqlgs.="AND b.endet IS NULL AND s.endet IS NULL;";
+	$resgs=pg_prepare("", $sqlgs);
+	$resgs=pg_execute("", $v);
+	if ($rowgs=pg_fetch_assoc($resgs)) {
+		$gmlid=$rowgs["gml_id"];
+		$gsbez=$rowgs["bezirk"];
+		$gsblatt=$rowgs["blatt"];
+		$gslfdnr=$rowgs["laufendenummer"];
+		$gsbart=$rowgs["buchungsart"];
+	} else {
+		echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Grundst&uuml;ckskennzeichen='".$gskennz."'</p>\n</body>\n</html>";
+		return "";
+	}
+	pg_free_result($resgs);
+	return $gmlid;
+}
+
+function bs_dienend($gmlid_h) {
+// Eine ggf. vorhandene dienende Buchungsstelle suchen und dessen GML_ID liefern.
+	global $debug, $gerooted;
+	// BS-herrschend (bekannt)  >an[]>  BS-dienend (gesucht)
+	$sqld="SELECT d.gml_id FROM ax_buchungsstelle d JOIN ax_buchungsstelle h ON d.gml_id=any(h.an) "
+		."WHERE h.gml_id = $1 and d.endet IS NULL AND h.endet IS NULL";
+	$v=array($gmlid_h);
+	$resd=pg_prepare("", $sqld);
+	$resd=pg_execute("", $v);
+	$cntd=0;
+	while($rowd=pg_fetch_assoc($resd)) {
+		$cntd++;
+		$gmlid_d=$rowd["gml_id"];
+	}
+	if ($cntd == 0) { // KEINE dienende BS
+		$gmlid_d="";
+	} elseif ($cntd > 1) { // Problem: mehrere dienende BS
+		$gmlid_d=""; // wennn mehrere (.an=Array[]), dann nicht eindeutig rÃŒckfÃŒhrbar.
+		$gerooted=false; // Root nicht erreicht
+		if ($debug > 2 ) { // Meldung? Auswahl?
+			echo "\n<p class='err'>Mehrere 'diendende' Buchungen zur Buchung '".$gmlid_h."'</p>";
+		}
+	}
+	pg_free_result($resd);
+	return $gmlid_d;
+}
+
+function Back2theRoots($gmlid_h) {
+// Eine Buchungsstelle (aus dem Aufruf-Parameter) zurÃŒck fÃŒhren auf die Basis-Buchungsstelle
+// Suchen bis Buchungsart="GrundstÃŒck" oder ggf. Blattart="fiktives Blatt"
+	global $debug;
+	$gh=$gmlid_h; // herrschend
+	$gd=$gh; // dienend
+	$gr=$gd; // root
+	//$steps=0; // wie oft?
+	while($gd != "") {
+		//$steps++;
+		$gr=$gd; // sichern
+		$gd=bs_dienend($gh); // an?
+		$gh=$gd; // fuer weitere Loop
+	}
+	//$steps=$steps -1; // erfolgreiche Suchen
+	return $gr;
+}
+
+session_start();
+$showkey="n"; $nodebug="";
+$cntget=extract($_GET); // Parameter in Variable
+
+// Validierung
+if (isset($gmlid)) { // gml der Buchungsstelle (Aufruf)
+	if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
+	$gskennz='';
+} else { // Alternativ
+	$gmlid='';
+	if (isset($gskennz)) { // llgggg-bbbbbz-nnnn 
+		if (!preg_match('#^[0-9\-_/]{8,18}$#', $gskennz)) {die ("Eingabefehler gskennz");}
+	} else {
+		$gskennz='';
+	}
+}
+if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
+if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
+if ($showkey == "j") {$showkey=true;} else {$showkey=false;}
+if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
+
+require_once("alkis_conf_location.php");
+if ($auth == "mapbender") {require_once($mapbender);}
+include("alkisfkt.php");
+?>
+<!doctype html>
+<html lang="de">
+<head>
+	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0">
+	<title>ALKIS Grundst&uuml;cksnachweis</title>
+	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
+	<link rel="shortcut icon" type="image/x-icon" href="ico/Grundstueck.ico">
+	<script>
+		function ALKISexport(gmlid) {
+			window.open('alkisexport.php?gkz=<?php echo $gkz;?>&tabtyp=buchung&gmlid=' + gmlid);
+		}
+	</script>
+</head>
+<body>
+<?php
+if ($nodebug == "j") {$debug=0;} 
+$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisgsnw.php'");
+if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
+
+$gmlid_p=$gmlid; // Wert aus Parameter merken
+$gerooted=true; // Auskunft beginnt mit dienendem GrundstÃŒck
+$gmlid=get_GS_Daten($gmlid, $gskennz); // nachschauen
+$gml_anfrd=$gmlid; // ursprÃŒngliche Anforderung aus URL merken
+if ($gmlid == "") { // nix gefunden
+	die("Kein Treffer");
+} else { // Treffer
+	if ($gsbart != "1100") { // Buchungsart "GrundstÃŒck"
+		$gmlid_r=Back2theRoots($gmlid);
+		if ($gmlid_r != $gmlid) { // wurde hoch gerÃŒckt
+			$gmlid=get_GS_Daten($gmlid_r, ""); // damit weiter arbeiten
+		}
+	}
+}
+echo "<p class='gskennz'>ALKIS Grundst&uuml;ck ".$gsbez."-".rtrim($gsblatt)."-".$gslfdnr."&nbsp;</p>\n\n<h2>Grundst&uuml;ck</h2>"; // Balken
+
+if ($gerooted) {
+	// F l u r s t u e c k e
+	echo "\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;cke</h3>"
+		."\n<table class='fs'>";
+	echo "\n<tr>" // Kopfzeile
+		."\n\t<td class='heads'>Gemarkung</td>"
+		."\n\t<td class='heads'>Flur</td>"
+		."\n\t<td class='heads fsnr' title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>Flurst.</span></td>"
+		."\n\t<td class='head flag'>Fl&auml;che</td>"
+		."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>"
+	."\n</tr>";
+	//+++ Lage oder Nutzung zum FS in eine zus. Spalte oder Zeile?
+	//+++ Tabelle hat noch Platz, SQL in der Loop oder Subquery wÃ€re mÃ¶glich, weil i.d.R. nur wenige FS je GS gebucht sind.
+
+	$sqlfs="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche 
+	FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+	WHERE f.istgebucht = $1 AND f.endet IS NULL AND g.endet IS NULL ";
+	if ($filtgem == '' ) { // ungefiltert
+		$v=array($gmlid);
+	} else {
+		$sqlfs.="AND f.kreis = $2 AND f.gemeinde = $3 "; // ZustÃ€ndiges Gebiet
+		$v=array($gmlid, $filtkreis, $filtgem);
+	}
+	$sqlfs.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+	$resfs = pg_prepare("", $sqlfs);
+	$resfs = pg_execute("", $v);
+	if (!$resfs) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
+
+	$j=0;
+	$zpaar=false;
+	while($rowfs = pg_fetch_assoc($resfs)) {
+		$flur= $rowfs["flurnummer"];
+		$fskenn=$rowfs["zaehler"];
+		if ($rowfs["nenner"] != "") {$fskenn.="/".$rowfs["nenner"];}
+		$flae=number_format($rowfs["amtlicheflaeche"],0,",",".") . " m&#178;";
+
+		if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel
+		$zpaar=!$zpaar;
+		echo "\n<tr class='".$trclass."'>"; // eine Zeile je Flurstueck
+			echo "\n\t<td>";
+				if ($showkey) {echo "<span class='key'>".$rowfs["gemarkungsnummer"]."</span> ";}
+				echo $rowfs["bezeichnung"]
+			."</td>"
+			."\n\t<td>".$flur."</td>"
+			."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span></td>"
+			."\n\t<td class='fla'>".$flae."</td>"
+			."\n\t<td>\n\t\t<p class='nwlink noprint'>"
+				."\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowfs["gml_id"]."&amp;eig=n";
+					if ($showkey) {echo "&amp;showkey=j";}
+					echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
+					."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
+				."</a>\n\t\t</p>"
+			."\n\t</td>"
+		."\n</tr>";
+		$j++;
+	}
+	pg_free_result($resfs);
+	if ($j == 0) {echo "\n<tr class='unp'>\n\t<td colspan='5'><p class='warn'>Keine Flurst&uuml;cke im berechtigten Bereich.</p></td>\n</tr>";}
+	echo "\n</table>";
+} else { // konnte nicht bis zur Basis aufsteigen
+	echo "<p>Die angeforderte Buchung hat Rechte an mehreren anderen Buchungen."
+	."<br>F&uuml;r die Anzeige der Flurst&uuml;cke muss eine dieser Buchungen (Grundst&uuml;ck) gew&auml;hlt werden.</p>";
+	// Auswahl anbieten? Sonst ÃŒber den Link "Bestand" recherchieren. 
+}
+
+// Rechte anderer GS an diesem GS
+// Dieser Teil ist fast identisch mit "FlurstÃŒcksnachweis", Kommentare siehe dort.
+$bartgrp="";
+$barttypgrp="";
+echo "\n<table class='outer'>";
+	$stufe=1;
+	$gezeigt=buchung_anzg($gmlid, "j", false, "", 2);
+	$anzber=ber_bs_zaehl($gmlid);
+	$verf_next = array($gmlid);
+	while ($anzber > 0 ) {
+		$verf_akt=$verf_next;
+		$verf_next=array();
+ 		$stufe++;
+		$i=0;
+		foreach($verf_akt as $gml_ber_bs) {
+			$i++;
+			if (ber_bs_zaehl($gml_ber_bs) > 0) {
+				$verf_neu=ber_bs_anzg($gml_ber_bs, "j", false, "", $gml_anfrd);
+				$anz_neu=count($verf_neu);
+				if ($anz_neu > 0) {
+					$verf_next=array_merge($verf_next, $verf_neu);
+				}
+			}
+		}
+		$anzber=count($verf_next);
+	}
+echo "\n</table>\n\n";
+
+pg_close($con);
+echo <<<END
+<div class='buttonbereich noprint'>
+<hr>
+	<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
+	<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
+END;
+if ($stufe < 3) {
+	echo "\n\t<a title='Export als CSV' href='javascript:ALKISexport(\"".$gmlid."\")'><img src='ico/download_gs.png' width='32' height='16' alt='Export'></a>";
+} else { // Export CSV wÃ€re unvollstÃ€ndig bei Buchungen auf mehr als 2 Ebenen. 2 Ebenen werden im View ÃŒber UNION und einem Zweig mit 2x "an"-Relation abgefangen.
+	echo "\n\t<img src='ico/download_gs_no.png' width='32' height='16' alt='Export' title='Komplexe Buchungen ÃŒber ".$stufe." Ebenen sind nicht als lineare CSV-Datei exportierbar'>";
+}
+echo "&nbsp;\n</div>";
+
+footer($gmlid, $_SERVER['PHP_SELF']."?", "");
+?>
+</body>
+</html>
Index: /trunk/info/info/alkisn/alkisauszug.css
===================================================================
--- /trunk/info/info/alkisn/alkisauszug.css	(revision 404)
+++ /trunk/info/info/alkisn/alkisauszug.css	(revision 405)
@@ -21,4 +21,7 @@
 	2017-12-20	td.dbg
 	2018-04-23	Spaltenbreiten
+	2018-05-03	GS-Nachweis
+
+https://wiki.selfhtml.org/wiki/Grafik/Farbpaletten#Farbnamen
 */
 body	{background-color: #FEFFFE;}
@@ -27,10 +30,11 @@
 
 /* Banner im Kopf (farbiger Balken), Farbcode fuer Nachweis-Art (gleiche Farbe wie Rahmen um das Kennzeichen) */
-p.fsausk,p.fskennz,p.fsei,p.fshis,p.gbkennz,p.nakennz,p.geb,p.lage,p.strasse,p.recht {text-align: right; padding-top: 4px; padding-bottom: 4px; padding-right: 24px;}
-
+p.fsausk,p.fskennz,p.fsei,p.fshis,p.gbkennz,p.gskennz,p.nakennz,p.geb,p.lage,p.strasse,p.recht {text-align: right; padding-top: 4px; padding-bottom: 4px; padding-right: 24px;}
+/* Balken-Farben individuell */
 p.fsausk	{background-color: teal; color: silver;}	/* Uebersichts-Seite Flurstuecks-Auskunft */
 p.fskennz,p.fsei{background-color: navy; color: silver;} /* Flurstuecks-Nachweis */
 p.fshis		{background-color: gray; color: white;}		/* Flurstuecks-Historie */
 p.gbkennz	{background-color: green; color: silver;}	/* Bestandsnachweis */
+p.gskennz	{background-color: LightGreen ; color: DimGray ;}	/* GrundstÃŒcksnachweis */
 p.nakennz	{background-color: maroon; color: silver;}	/* Personen- und Adressdaten */
 p.geb		{background-color: yellow; color: gray;}	/* Gebaeude zum FS */
@@ -163,5 +167,5 @@
 @media screen {
 	/* gefÃŒllten farbiger Balken abrunden */
-	p.fsausk,p.fskennz,p.fsei,p.fshis,p.gbkennz,p.nakennz,p.geb,p.lage,p.strasse,p.recht { border-radius: 8px; }
+	p.fsausk,p.fskennz,p.fsei,p.fshis,p.gbkennz,p.gskennz,p.nakennz,p.geb,p.lage,p.strasse,p.recht { border-radius: 8px; }
 	.onlyprint {visibility: hidden;}
 }
Index: /trunk/info/info/alkisn/alkisexport.php
===================================================================
--- /trunk/info/info/alkisn/alkisexport.php	(revision 404)
+++ /trunk/info/info/alkisn/alkisexport.php	(revision 405)
@@ -7,5 +7,5 @@
 	Die Lagebezeichnung des FlurstÃŒcks wird in ein Feld komprimiert.
 	Parameter Beispiele: 
-		?gkz=mandant&tabtyp=flurstueck/grundbuch/person/strasse&gmlid=DE...  Standard
+		?gkz=mandant&tabtyp=flurstueck/grundbuch/buchung/person/strasse&gmlid=DE...  Standard
 		?gkz=270&tabtyp=gemarkung&gemarkung=2662         Sonderfall ganze Gemarkung
 		?gkz=270&gemarkung=2662
@@ -28,4 +28,5 @@
 	2017-10-11 Sauber filtern auf endet IS NULL
 	2017-12-20 Nur eine Adresse zur Person (Siehe Views in "views_exp_csv.sql")
+	2018-05-03 Aufruf aus neuem GrundstÃŒcksnachweis: tabtyp='buchung', angepasster View "exp_csv" notwendig
 
 	ToDo:
@@ -161,4 +162,7 @@
 		$filter = "gbgml";
 		break;
+	case 'buchung': // ax_buchungsstelle.gml_id
+		$filter = "gsgml";
+		break;
 	case 'person': // ax_person.gml_id
 		$filter = "psgml";
Index: /trunk/info/info/alkisn/alkisfkt.php
===================================================================
--- /trunk/info/info/alkisn/alkisfkt.php	(revision 404)
+++ /trunk/info/info/alkisn/alkisfkt.php	(revision 405)
@@ -15,7 +15,6 @@
 	2017-12-20 Default Anzeigewert "EigentÃŒmer" im Link fÃŒr leere EigentÃŒmerart, JÃŒngste Adresse zur Person verwenden.
 	2018-04-23 Berechtigte Buchungen im FS-Nachw. verbessern. Neue Spalte statt Ãberschriften fÃŒr "EigentÃŒmer" und "Berechtigte Buchungen".
-
-++ ToDo:
- ++ Parameter $lnkclass in eigentuemer() und $jfenster in buchung_anzg() vereinheitlichen
+	2018-05-03 GrundstÃŒcksnachweis
+++ ToDo: Parameter $lnkclass in eigentuemer() und $jfenster in buchung_anzg() vereinheitlichen
 */
 
@@ -83,5 +82,5 @@
 }
 
-function buchung_anzg($gmlbs, $eig, $jsfenster, $gml_fs) {
+function buchung_anzg($gmlbs, $eig, $jsfenster, $gml_fs, $trtyp) {
 	// In einem FS-Nachw. EINE Buchungsstelle anzeigen.
 	// Parameter:
@@ -90,4 +89,5 @@
 	//  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
 	//  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
+	//	$trtyp: Tabellen-Zeilen-Typ. Werte: 1="mit GS-Link", 2="ohne GS-Link", 3="ohne GS-Link +Zeile einfÃ€rben"
 	global $gkz, $debug, $showkey, $bartgrp, $barttypgrp, $stufe;
 
@@ -115,4 +115,5 @@
 			$hgml=$rowbs["hgml"]; // GML-ID der (herrschenden) BuchungsStelle
 			$bartkey=$rowbs["buchungsart"]; // Buchungsart SchlÃŒssel
+			$bart=$rowbs["bart"]; // Buchungsart Text
 			$beznam=$rowbs["bezeichnung"]; // Bezirk
 			$blattartber=$rowbs["blattartv"]; // Wert von Blatt-Art des GB
@@ -123,5 +124,4 @@
 			$lfd=ltrim($rowbs["lfd"], "0");
 			if ($bartkey != $bartgrp) { // Wechsel der Buchungsart
-				$bart=$rowbs["bart"]; // Buchungsart Text
 				$barttitle=$rowbs["barttitle"]; // Buchungsart ErklÃ€rung
 				switch (true) { // Die Buchungsart einem Typ (Gruppierung) zuweisen
@@ -169,5 +169,5 @@
 			} // Ende Wechsel der Buchungsart
 
-			echo "\n\t<tr>" // Tabelle mit 4 Spalten fÃŒr Buchung und EigentÃŒmer
+			echo "\n\t<tr>" // Zeile mit 4 Spalten fÃŒr Buchung und EigentÃŒmer
 				."\n\t\t<td class='ll'><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Buchung:"; // 1
 			if ($showkey and $debug > 2) {echo "<br><span class='key'>Stufe ".$stufe."<br>".$hgml."</span> ";}
@@ -187,6 +187,11 @@
 						."\n\t\t\t\t<td class='head'>Lfd-Nr</td>"
 					."\n\t\t\t</tr>";
-					echo "\n\t\t\t<tr>"
-						."\n\t\t\t\t<td title='Grundbuchbezirk'>";
+
+					if ($trtyp == 3) { // Treffer-Grundst. einfÃ€rben
+						echo "\n\t\t\t<tr class='paa'>";
+					} else {
+						echo "\n\t\t\t<tr>";
+					}
+					echo "\n\t\t\t\t<td title='Grundbuchbezirk'>";
 						if ($showkey) {echo "<span class='key'>".$rowbs["bezirk"]."</span><br>";}
 						echo $beznam."</td>"
@@ -209,12 +214,23 @@
 				echo "\n\t\t<td>"; // 4
 					echo "\n\t\t\t<p class='nwlink noprint'>";
+					// Bestand
 						if ($showkey) {echo "<span class='key'>".$blattkeyber."</span> ";}
 						$url="alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gbgml;
 						if ($showkey) {$url.="&amp;showkey=j";}
 						if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";} // Sonderfall "Inlay" aus Feature-Info
-						echo "\n\t\t\t\t<a href='".$url."' title='Grundbuchnachweis mit Eigent&uuml;merangabe'>".$blattartber
+						echo "\n\t\t\t\t<a href='".$url."' title='Grundbuchnachweis'>".$blattartber
 							." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
 						."</a>";
-					//	if ($showkey and $debug > 2) {echo "<br><span class='key'>GML-ID = ".$gbgml."</span> ";}
+					// Buchung
+						if ($trtyp == 1) {
+							echo "<br>";
+							if ($showkey) {echo "<span class='key'>".$bartkey."</span> ";}
+							$url="alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$hgml;
+							if ($showkey) {$url.="&amp;showkey=j";}
+							if ($jsfenster) {$url="javascript:imFenster(\"".$url."\")";}
+							echo "\n\t\t\t\t<a href='".$url."' title='GrundstÃŒcksnachweis: ".$bart."'>Buchung"
+								." <img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''>"
+							."</a>";
+						}
 					echo "\n\t\t\t</p>"
 				."\n\t\t</td>" // 4
@@ -230,5 +246,5 @@
 }
 
-function ber_bs_anzg($gmls, $eig, $jsfenster, $gml_fs) {
+function ber_bs_anzg($gmls, $eig, $jsfenster, $gml_fs, $gsanfrd) {
 	// In einem FS-Nachw. die berechtigten (herrschenden) Buchungsstellen anzeigen z.B. "Wohnungs-/Teileigentum".
 	// Parameter: 
@@ -237,5 +253,6 @@
 	//  $jsfenster: Javascript-Funktion zum Verlassen des Feature-Info-Fensters verwenden (bool)
 	//  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
-	global $debug, $stufe;
+	//	$gsanfrd: In einem GS-Nachw. die GML-ID der in de URL angeforderten Buchungsstelle (-> Hervorhebung)
+	global $debug, $gezeigt;
 
 	// sh=Buchungstelle herrschend >(Recht)an> sd=Buchungstelle dienend >istBestandteilVon> BLATT -> Bezirk
@@ -257,5 +274,15 @@
 	while($rowan = pg_fetch_assoc($resber)) { // Loop durch Result von berechtigte BS
 		$hgml=$rowan["hgml"]; // GML-ID der berechtigten Buchungs-Stelle
-		$gezeigt = buchung_anzg($hgml, $eig, $jsfenster, $gml_fs); // Die herrschende Buchung anzeigen wenn nicht fiktiv
+
+		if ($hgml == $gsanfrd) {
+			$trtyp=3; // einfÃ€rben, o. Lnk.
+		} else {
+			if ($gezeigt) {
+				$trtyp=2; // ohne Link auf GS
+			} else { // Wenn Stufe 1 "Fiktives Blatt" war, welches ausgeblendet wurde, dann auf Stufe 2 einen GS-Link ausgeben
+				$trtyp=1; // mit Link auf GS
+			}
+		}
+		$gezeigt2=buchung_anzg($hgml, $eig, $jsfenster, $gml_fs, $trtyp); // Die herrschende Buchung anzeigen wenn nicht fiktiv
 		$an++;
 		$weitere=ber_bs_zaehl($hgml); 
@@ -279,17 +306,16 @@
 }
 
-function bnw_fsdaten($con, $lfdnr, $gml_bs, $ba, $anteil, $bvnraus, $bartkey, $bartstory) {
+function bnw_fsdaten($lfdnr, $gml_bs, $ba, $anteil, $bvnraus, $bartkey, $bartstory) {
 /*	Bestandsnachweis - Flurstuecksdaten
-	Die Tabellenzeilen mit den Flurstuecksdaten zu einer Buchungsstelle im Bestandsnachweis ausgeben.
+	Die Tabellenzeilen mit den Flurstuecksdaten zu EINER Buchungsstelle im Bestandsnachweis ausgeben.
 	Die Funktion wird je einmal aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall).
 	Weiterere Aufrufe ggf. bei Erbbaurecht fÃŒr die mit "an" verknuepften Buchungsstellen.
-	Table-Tag und Tabellenkopf werden im aufrufenden Programm ausgegeben. */
-	global $debug, $gkz, $showkey, $filtkreis, $filtgem, $trclass; // $zpaar
+	Tabellenkopf wird im aufrufenden Programm ausgegeben. */
+	global $debug, $gkz, $showkey, $filtkreis, $filtgem, $trclass;
 
 	// F L U R S T U E C K
-	$sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.regierungsbezirk, f.kreis, f.gemeinde, f.amtlicheflaeche 
-	FROM ax_flurstueck f JOIN ax_buchungsstelle s ON f.istgebucht=s.gml_id 
-	LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-	WHERE f.endet IS NULL AND s.endet IS NULL AND g.endet IS NULL AND s.gml_id= $1 ";
+	$sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche "
+	."FROM ax_flurstueck f LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer "
+	."WHERE f.endet IS NULL AND g.endet IS NULL AND f.istgebucht = $1 ";
 	if ($filtgem == '' ) { // ungefiltert
 		$v=array($gml_bs);
@@ -308,8 +334,7 @@
 		$bvnr="";
 	}
-	$altbvnr="";
+	$altbvnr=""; // ++ besser mit "$j == 0" steuern?
 	$j=0;
 	while($rowf = pg_fetch_assoc($resf)) {
-	//	$flur=str_pad($rowf["flurnummer"], 3, "0", STR_PAD_LEFT);
 		$flur= $rowf["flurnummer"];
 		$fskenn=$rowf["zaehler"];
@@ -336,5 +361,4 @@
 				echo "</td>"
 				."\n\t<td>&nbsp;</td>"; // Anteil
-				$altbvnr=$bvnr;
 			}
 
@@ -347,15 +371,22 @@
 			."</td>"
 			."\n\t<td class='flag'>".$flae."</td>"; // "width" hier (flaG) erweiterbar, weil in andere Zeile die Buchungsart steht 
-
-			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>"
-				."\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
+			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
+		//	if($bvnr != $altbvnr) {
+			if($j == 0) {
+				echo "\n\t\t\t<a href='alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$gml_bs;
+					if ($showkey) {echo "&amp;showkey=j";}
+					echo "' title='Grundst&uuml;cksnachweis'>Buchung "
+					."<img src='ico/Grundstueck_Link.png' width='16' height='16' alt=''>"
+				."</a>";
+
+			}
+				echo "\n\t\t\t<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
 					if ($showkey)   {echo "&amp;showkey=j";}
 					echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
 					."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
 				."</a>"
-			."\n\t\t</p>"
-		."\n\t</td>"
+			."\n\t\t</p>\n\t</td>"
 		."\n</tr>";
-
+		$altbvnr=$bvnr;
 		$j++;
 	} // Ende Loop Flurstueck
Index: /trunk/mapbender/http/nav/alkisnav_eig.php
===================================================================
--- /trunk/mapbender/http/nav/alkisnav_eig.php	(revision 404)
+++ /trunk/mapbender/http/nav/alkisnav_eig.php	(revision 405)
@@ -8,4 +8,5 @@
 	2016-11-28 Gemeinsam genutzte Datenbanken ermÃ¶glichen
 	2018-02-15 Strikte Input-Validation der Parameter
+	2018-04-24 Geburtsdatum formatieren
 */
 
@@ -93,5 +94,4 @@
 	// Einen Link generieren, um nach anderen Personen mit gleichem Familiennamen (Nachnamen) zu suchen.
 	// Bei versehendlich falschem Vornamen muss somit nicht von vorn begonnen werden.
-
 	global $gkz, $gemeinde, $epsg, $name;
 	$lnknam=urlencode(substr($name,0,50));
@@ -109,6 +109,5 @@
 	// Adresse und Geburtsdatum der aktuellen Person ausgeben
 	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath; // $debug
-
-	$sql ="SELECT p.nachnameoderfirma, p.vorname, p.geburtsdatum, p.namensbestandteil, "
+	$sql ="SELECT p.nachnameoderfirma, p.vorname, to_char(cast(p.geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, p.namensbestandteil, "
 	."a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer "
 	."FROM ax_person p LEFT JOIN ax_anschrift a ON a.gml_id=ANY(p.hat) "
@@ -128,11 +127,8 @@
 	if ($best != "") {$zeil1.= ", ".$best;}
 	$zeil1=htmlentities($zeil1, ENT_QUOTES, "UTF-8");
-
-	// 2016-07-18: Zeile 2 mit 3 getauscht. Wie Brief-Anschrift
 	$zeil2= trim($row["strasse"]." ".$row["hausnummer"]);
 	if ($zeil2 != "") {
 		$zeil2= "\n\t<br>".htmlentities($zeil2, ENT_QUOTES, "UTF-8");
 	}
-
 	$zeil3=trim($row["plz"]." ".$row["ort_post"]);
 	if ($zeil3 != "") {
Index: /trunk/mapbender/http/nav/alkisnav_fkt.php
===================================================================
--- /trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 404)
+++ /trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 405)
@@ -7,4 +7,5 @@
 	2016-11-28 Gemeinsam genutzte Datenbanken ermÃ¶glichen
 	2018-02-15 Ãberarbeitung des Code
+	2018-05-02 Link "Buchung" zum neuen GrundstÃŒcks-Nachweis
 */
 
@@ -176,6 +177,15 @@
 	}
 	if ($aktuell) {$cls=" aktuell";} else {$cls="";}
-	echo "\n<div class='gs".$cls."' title='".$ti."Grundst&uuml;ck'>"
-	."\n\t<img class='nwlink' src='ico/Grundstueck.png' width='16' height='16' alt='GS'  title='".$ti."Grundst&uuml;ck'> ".$re;
+	echo "\n<div class='gs".$cls."' title='".$ti."Grundst&uuml;ck'>";
+
+	// Icon / Nachweis
+	if ($buchunggml == "") { // Link zum Nachweis nur wenn GML bekannt
+		echo "\n\t<img class='nwlink' src='ico/Grundstueck.png' width='16' height='16' alt='GS'  title='".$ti."Grundst&uuml;ck'> ".$re;
+	} else {
+		echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisgsnw.php?gkz=".$gkz."&amp;gmlid=".$buchunggml."\")'>"
+			."\n\t\t<img class='nwlink' src='ico/Grundstueck_Link.png' width='16' height='16' alt='Buchung' title='".$ti."Grundst&uuml;ck'> ".$re
+		."\n\t</a> ";
+	}
+
 	if ($blattkennz == "") { // ohne Link
 		echo "Buchung ".$bvnra;
