zu> ax_buchungsstelle (des gleichen Blattes) // ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an) // - "zu" kommt in der Praxis (NRW) nicht vor, wird hier nicht berücksichtigt if ($ebene > 5) {echo "\n

Ungewöhnlich tiefe Schachtelung ".$ebene." der Buchungs-Stellen.

";} $sql ="SELECT sd.gml_id, sd.buchungsart, sd.zaehler, sd.nenner, sd.laufendenummer AS lfd, sd.beschreibungdesumfangsderbuchung AS udb, " ."sd.nummerimaufteilungsplan AS nrap, sd.beschreibungdessondereigentums AS sond, " ."wb.beschreibung AS bart, wb.dokumentation, " ."b.gml_id as gbgml, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, b.blattart, " ."bb.beschreibung AS blattartv, z.bezeichnung AS beznam " ."FROM ax_buchungsstelle sh " ."JOIN ax_buchungsstelle sd ON sd.gml_id=ANY(sh.an) " ."JOIN ax_buchungsblatt b ON b.gml_id=sd.istbestandteilvon " ."LEFT JOIN ax_buchungsart_buchungsstelle wb ON sd.buchungsart = wb.wert " ."LEFT JOIN ax_buchungsblattbezirk z ON b.land=z.land AND b.bezirk=z.bezirk ".UnqKatAmt("b","z") ."LEFT JOIN ax_blattart_buchungsblatt bb ON b.blattart = bb.wert " ."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL AND b.endet IS NULL AND z.endet IS NULL " ."ORDER BY sd.laufendenummer;"; $v=array($gml_h); // gml_id "herrschende" B-Stelle $resan=pg_prepare($con, "", $sql); $resan=pg_execute($con, "", $v); if (!$resan) { echo "\n

Fehler bei 'dienende Buchungsstelle'.

"; if ($dbg > 2) {echo "\n

SQL=
".htmlentities(str_replace("$1", "'".$gml_bs."'", $sql), ENT_QUOTES, "UTF-8")."

";} } $zeianz=pg_num_rows($resan); // Zeilen-Anzahl = Returnwert $und = false; // mehrfaches "Recht an" auf gleicher Ebene while($row= pg_fetch_assoc($resan)) { $gml_bsan=$row["gml_id"]; // id der dien. BS $blatt=ltrim($row["blatt"], "0"); // als Global-Var zur Sub-Function: $bartkey=$row["buchungsart"]; $bart=$row["bart"]; // Buchungsart, entschlüsselt $bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8"); if ($row["zaehler"] == "") {$anteil = "";} else {$anteil = $row["zaehler"]."/".$row["nenner"];} // Zeile ausgeben Buchungsstelle dienend bnw_bszeile_d($row["bezirk"], $row["beznam"], $blatt, $row["blattart"], $row["blattartv"], $row["lfd"], $row["gbgml"], $gml_bsan, $ebene, $und); $und = true; if ($row["nrap"] != "") { // Nr im Auft.Plan echo "\n\n\tNummer ".$row["nrap"]." im Aufteilungsplan.\n"; } if ($row["sond"] != "") { // Sondereigentumsbeschreibung echo "\n\n\tVerbunden mit dem Sondereigentum an: ".$row["sond"]."\n"; } // Rekursiver Aufruf der gleichen Function, weitere Ebene dienend? $tiefer = bnw_bsdaten($gml_bsan, ($ebene + 1)); If ($tiefer == 0) { // Wenn nicht, dann kann es Flurstücke dazu geben $fscnt= bnw_fsdaten($gml_bsan, false); // Flurstücksdaten } } pg_free_result($resan); return $zeianz; } function bnw_fsdaten($gml_bs, $mit_buchung_link) { /* Bestandsnachweis - Flurstücksdaten Die Tabellenzeilen mit den Flurstücksdaten zu EINER Buchungsstelle im Bestandsnachweis ausgeben. Die Funktion wird entweder aufgerufen für die Buchungen direkt auf dem GB (Normalfall) oder bei Erbbaurecht für die mit "an" verknüpften Buchungsstellen der untersten Ebene (dienende Buchung). Der Tabellenkopf wird im aufrufenden Programm ausgegeben. Return: Anzahl der ausgegebenen Flurstücke */ global $dbg, $gkz, $showkey, $filtkreis, $filtgem, $trclass, $katAmtMix, $lfdnr, $altlfdnr, $bartkey, $bart, $bartstory, $anteil, $con; $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 ".UnqKatAmt("f","g") ."WHERE f.endet IS NULL AND g.endet IS NULL AND f.istgebucht = $1 "; if ($filtgem === '') { // ungefiltert $v=array($gml_bs); } else { $sql.="AND f.gemeindezugehoerigkeit_kreis = $2 AND f.gemeindezugehoerigkeit_gemeinde = $3 "; // Zuständiges Gebiet $v=array($gml_bs, $filtkreis, $filtgem); } $sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;"; $resf = pg_prepare($con, "", $sql); $resf = pg_execute($con, "", $v); if (!$resf) {echo "\n

Fehler bei Flurstück

";} $zeianz=pg_num_rows($resf); while($rowf = pg_fetch_assoc($resf)) { $fskenn=$rowf["zaehler"]; if ($rowf["nenner"] != "") { // Bruch $fskenn.="/".$rowf["nenner"]; } $flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m²"; echo "\n"; // eine Zeile je Flurstueck // Sp. 1-3 der Tab. Daten aus Buchungsstelle, nicht aus FS if($lfdnr === $altlfdnr) { // gleiches Grundstück, leer lassen echo "\n\t " ."\n\t " ."\n\t "; } else { // Sprungmarke, BVNR $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT); echo "\n\t".$bvnr."\n\t" ."\n\t".DsKy($bartkey, 'Buchungsart-*').$bart."" ."\n\t "; $altlfdnr=$lfdnr; } // Sp. 4-7 aus Flurstück echo "\n\t".DsKy($rowf["gemarkungsnummer"], 'Gemarkungsnummer').$rowf["bezeichnung"]."" ."\n\t".$rowf["flurnummer"]."\n\t".$fskenn."" ."\n\t".$flae."" ."\n\t\n\t\t\n\t\n"; } pg_free_result($resf); return $zeianz; } function bnw_bszeile_h() { /* Bestandsnachweis - Buchungs-Stellen-Zeile ausgeben - herrschend. Die GB-Daten hierzu stehen bereits im Kopf und bleiben in der Tab. leer */ global $dbg, $gkz, $trclass, $lfdnr, $bartkey, $bart, $bartstory, $anteil; $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT); echo "\n" ."\n\t".$bvnr."" // Sprungmarke=BVNR auf dem GB-Blatt ."\n\t".DsKy($bartkey, 'Buchungsart-*').$bart."" ."\n\t".$anteil."" ."\n\t \n"; } function bnw_bszeile_d($bezkey, $beznam, $blatt, $blattartkey, $blattart, $lfdnran, $gbgml, $gml_bsan, $ebene, $und) { /* Bestandsnachweis - Buchungsstellen-Zeile ausgeben - dienend Eine Folge-Zeile für eine dienende Buchung ausgeben. */ global $gkz, $trclass, $bartkey, $bart, $bartstory, $anteil; $bvnr=str_pad($lfdnran, 4, "0", STR_PAD_LEFT); $filler=str_repeat(" ", $ebene - 2); // 3 und 4 Einrücken if ($und){$filler.="und ";}; // Unterscheidung Hierarchie (Ebene wechselt) von Liste (gleiche Ebene) echo "\n" ."\n\t".$filler."an" ."\n\t".DsKy($bartkey, 'Buchungsart-*').$bart."" ."\n\t".$anteil.""; // Sp.4 GB-Bezirk echo "\n\t".DsKy($bezkey, 'Grundbuch-Bezirk-*').htmlentities($beznam, ENT_QUOTES, "UTF-8")."" ."\n\t".$blatt."" ."\n\t".$bvnr."" ."\n\t"; echo "\n\t\n\t\t" ."\n\t\n"; } // Start ini_set("session.cookie_httponly", 1); session_start(); $showkey="n"; $nodebug=""; // Var. initalisieren $cntget = extract($_GET); // Parameter in Variable umwandeln // strikte Validierung aller Parameter if (isset($gmlid)) { if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");} } else { die("Fehlender Parameter"); } if (isset($gkz)) { if (!preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");} } else { die("Fehlender Parameter"); } 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");} include "alkis_conf_location.php"; include "alkisfkt.php"; ?> ALKIS Bestandsnachweis Abbruch

'); } $dbg=$debug; if ($nodebug === "j") {$dbg=0;} $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbestnw.php'"); if (!$con) echo "\n

Fehler beim Verbinden der DB

"; // G R U N D B U C H $sql="SELECT g.gml_id, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung AS blatt, g.blattart, wb.beschreibung AS blattartv, wb.dokumentation AS blattartd, b.gml_id, b.bezirk, b.bezeichnung AS beznam, d.gml_id, d.land, d.bezeichnung, d.stelle, d.stellenart, wd.beschreibung AS stellev FROM ax_buchungsblatt g LEFT JOIN ax_buchungsblattbezirk b ON g.land=b.land AND g.bezirk=b.bezirk ".UnqKatAmt("g","b") ."LEFT JOIN ax_dienststelle d ON b.land=d.land AND b.gehoertzu_stelle=d.stelle ".UnqKatAmt("b","d") ."LEFT JOIN ax_blattart_buchungsblatt wb ON g.blattart = wb.wert LEFT JOIN ax_behoerde wd ON d.stellenart = wd.wert WHERE g.gml_id= $1 AND g.endet IS NULL AND b.endet IS NULL AND d.endet IS NULL;"; // .. AND d.stellenart=1000 $v = array($gmlid); $res = pg_prepare($con, "", $sql); $res = pg_execute($con, "", $v); if (!$res) { echo "\n

Fehler bei Grundbuchdaten.

"; if ($dbg > 2) {echo "\n

SQL=
".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."

";} } $zeianz=pg_num_rows($res); if ($dbg > 0) { if ($zeianz > 1){ echo "\n

Die Abfrage liefert mehr als ein (".$zeianz.") Grundbuch-Objekt!

"; if ($dbg > 2) {echo "\n

SQL=
".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."

";} } } if ($zeianz == 0){ echo "\n

Fehler! Kein Treffer für ein Grundbuch-Blatt mit gml_id=".$gmlid."

"; if ($dbg > 2) {echo "\n

SQL=
".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."

";} echo "\n\n"; return; } if ($row = pg_fetch_assoc($res)) { $blattkey=$row["blattart"]; $blattart=$row["blattartv"]; $blatt=ltrim($row["blatt"], "0"); echo "

ALKIS Bestand ".$row["bezirk"]." - ".$blatt." 

"; // Balken echo "\n

Grundbuch

"; echo "\n" // Blatt UND Eigent. ."\n\t\n\t\t" ."\n\t\t\n\t\t\n\t"; } pg_free_result($res); if ($blattkey === "5000") { // fikt. Blatt echo "\n

Keine Angaben zum Eigentum bei fiktivem Blatt.

"; } else { // E I G E N T Ü M E R $n = eigentuemer($gmlid, true, false); // MIT Adressen. if ($n === 0) { // keine NamensNr, kein Eigentuemer echo "\n

Keine Namensnummer gefunden.

" ."\n

Bezirk: ".$row["bezirk"].", Blatt: ".$blatt.", Blattart ".$blattkey." (".$blattart.")

"; } } echo "\n
Blatt:"; // Outer Mitte, Kennz. im Rahmen if ($blattkey === "1000") { echo "\n\t\t\t"; } else { echo "\n\t\t\t
"; // dotted } echo "\n\t\t\t" ."\n\t\t\t\t" ."\n\t\t\t\t" ."\n\t\t\t\t" ."\n\t\t\t\n\t\t\t" ."\n\t\t\t\t" ."\n\t\t\t\t" ."\n\t\t\t\t" ."\n\t\t\t" ."\n\t\t\t
".DsKy($row["stellenart"], 'Stellenart-*').$row["stellev"]."Bezirk".DsKy($blattkey, 'Blattart-*').$blattart."
".DsKy($row["stelle"], 'Stelle-*').htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8")."".DsKy($row["bezirk"], 'Grundbuchbezirk-*').htmlentities($row["beznam"], ENT_QUOTES, "UTF-8")."".$blatt."
" ."\n\t\t
 
"; // Vorab eine Tiefbohrung zur Sondierung von (potentiell) herrschend bis dienend über max. 4 Buchungs-Stellen. // Diese Zählung sagt nur aus, ob es "generell" solche Fälle auf diesem Grundbuch gibt (ist selten). // In jedem einzelnen Zweig der Buchungen muss aber individuell danach gesucht werden. // Die Relation "zu" ist hier einbezogen, wird aber später nicht ausgewertet. Hier könnte man die Differenz erkennen falls "zu" doch mal auftaucht. $sql ="SELECT count(s2.laufendenummer) AS anz2"; if ($dbg > 1) {$sql.=", count(s3.laufendenummer) AS anz3, count(s4.laufendenummer) AS anz4";} $sql.=" FROM ax_buchungsstelle sh " // herrschend ."LEFT JOIN ax_buchungsstelle s2 ON (s2.gml_id=ANY(sh.an) OR s2.gml_id=ANY(sh.zu)) "; if ($dbg > 1) { $sql.="LEFT JOIN ax_buchungsstelle s3 ON (s3.gml_id=ANY(s2.an) OR s3.gml_id=ANY(s2.zu)) " ."LEFT JOIN ax_buchungsstelle s4 ON (s4.gml_id=ANY(s3.an) OR s4.gml_id=ANY(s3.zu)) "; } $sql.="WHERE sh.istbestandteilvon= $1 AND sh.endet IS NULL AND s2.endet IS NULL "; if ($dbg > 1) {$sql.="AND s3.endet IS NULL AND s4.endet IS NULL";} $v=array($gmlid); // GB-Blatt $res=pg_prepare($con, "", $sql); $res=pg_execute($con, "", $v); if (!$res) { echo "\n

Fehler bei tiefer Suche nach Buchungen.

"; if ($dbg > 2) {echo "\n

SQL=
".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."

";} } $row=pg_fetch_assoc($res); $anz2=$row["anz2"]; // steuert Tabellenform und Überschrift if ($dbg > 1) { $anz3=$row["anz3"]; $anz4=$row["anz4"]; echo "\n

Anzahl dienende Buchungen Ebene 2: '".$anz2."', Ebene 3: '".$anz3."', Ebene 4: '".$anz4."'

"; } echo "\n
\n\n

"; if ($anz2 > 0) { // auch "Rechte an", also dienende B. echo " Rechte und Flurstücke

\n"; echo "\n" // zus. Kopfz. "Rechte" vor FS ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n"; } else { // keine Rechte an, nur FS echo " Flurstücke\n
\n\t\tBVNR" ."\n\t\t\n\tBuchungsartAnteilBezirkBlattBVNR  
"; } echo "\n"; // Kopfzeile "Flurstück" if ($anz2 > 0) { // BS und FS echo "\n\t" ."\n\t"; } else { // nur FS echo "\n\t" ."\n\t"; } echo "\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n"; // Blatt -> B u c h u n g s s t e l l e (oberste Ebene 1, Grundstück oder herrschend). Relation istBestandteilVon // aktuelles ax_buchungsblatt Fehler bei Buchung.

"; if ($dbg > 2) {echo "\n

SQL=
".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."

";} } $i=0; // Zähler Buchungs-Stellen auf oberer Ebene $zpaar=false; $altlfdnr=''; // GW while($row = pg_fetch_assoc($res)) { // Loop Buchungsstellen der 1. Ebene (herrschend oder nur FS) $i++; $gml_bs=$row["gml_id"]; // gml der Buchungsstelle $lfdnr=$row["lfd"]; $bartkey=$row["buchungsart"]; // Key $bart=$row["bart"]; // BuchungsART Text dazu $bartstory=htmlentities($row["dokumentation"], ENT_QUOTES, "UTF-8"); // .. für Anzeige aufbereitet if ($row["zaehler"] == "") {$anteil = "";} else {$anteil = $row["zaehler"]."/".$row["nenner"];} if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je Buchung auf Ebene 1 $zpaar=!$zpaar; if ($bartkey <= 1102) { // (aufgeteiltes) Grundstück $zeianz = bnw_fsdaten($gml_bs, true); // Flurstücksdaten zur direkten Buchungsstelle if ($zeianz === 0) { echo "\n
\n\t" ."\n\t\n\t\n"; } } else { // herrschende Buchung bnw_bszeile_h(); // Die herrschende Buchung, aus Global $altlfdnr=$lfdnr; if ($row["nrap"] != "") { // Nr im Auft.Plan echo "\n\n\t\n"; } if ($row["sond"] != "") { // Sondereigentumsbeschreibung echo "\n\n\t\n"; } $tiefer = bnw_bsdaten($gml_bs, 2); // dienend, recursiv Ebenen 2,3,4 } } echo "\n
  \n\t\tBVNR" ."\n\t\t" ."\n\tBuchungsart GemarkungFlurFlurst.Fläche
".$lfdnr."

Keine Flurstücke im berechtigten Bereich.

Nummer ".$row["nrap"]." im Aufteilungsplan.
Verbunden mit dem Sondereigentum an: ".$row["sond"]."
"; if ($i === 0) {echo "\n

Keine Buchung gefunden.

";} pg_free_result($res); // B e r e c h t i g t e Buchungsblätter mit Recht an dem aktuellen (fiktiven?) Blatt // bf sf sb bb // Blatt istBestandteilVon> Blatt // Fiktiv Fiktiv Fehler bei 'Berechtigte Blätter.

"; if ($dbg > 2) {echo "\n

SQL=
".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."

";} } $b=0; // count: Buchungen / Blätter $zpaar=false; while($rowb = pg_fetch_assoc($resb)) { if ($b === 0) { // Überschrift und Tabelle nur ausgeben, wenn etwas gefunden wurde echo "\n\n

Berechtigte Grundbücher

" ."\n\n" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t\n"; } $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 $blart=$rowb["blattart"]; $buch=$rowb["buchungsart"]; // Buchungsart Stelle berechtigt $bart=$rowb["bart"]; // BA entschl. $lfdnr=$rowb["lfdnr"]; // BVNR ber. $blatt=ltrim($rowb["blatt"], "0"); $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT); if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je Zeile = Grundstück $zpaar=!$zpaar; echo "\n"; // Der Teil "berechtigte Grundbücher" ist nach BVNR sortiert wie oberer Teil "Flurstücke" echo "\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n\t" ."\n"; $b++; } if ($b === 0) { if ($blattkey > 2000 ) { // Warnung nicht bei Grundbuchblatt 1000 und Katasterblatt 2000 echo "\n

Keine berechtigten Blätter zu ".$blattart." (".$blattkey.") gefunden.

"; } } else { echo "\n
an BVNRDienststelleBezirkBlattBVNRBuchungsart
".$anlfdnr0.""; // Amtsgericht,Grundbuchamt echo htmlentities($rowb["stellev"], ENT_QUOTES, "UTF-8")." "; echo DsKy($rowb["stelle"], 'Stelle-*').htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8") ."".DsKy($rowb["bezirk"], 'Grundbuch-Bezirk-*').htmlentities($rowb["beznam"], ENT_QUOTES, "UTF-8")."".$blatt."".$bvnr."".DsKy($buch, 'Buchungsart-*').$bart."" ."\n\t\t" ."
"; if ($i > 1) { echo "\n

Rechte anderer Buchungsstellen an ".$b." der ".$i." Buchungen

"; } } pg_free_result($resb); echo "\n
\n
" ."\n\tzurück "; if ($PrntBtn==true){echo "\n\tDrucken ";} if ($blattkey == 5000) { // Nicht bei "fiktives Blatt" echo "\n\tExport"; } else { echo "\n\tExport"; } echo " \n
"; footer($gmlid, selbstverlinkung()."?", ""); ?>