- Timestamp:
- 01/21/14 17:14:52 (10 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/import/sichten.sql
r303 r305 25 25 -- 2014-01-17 View "exp_csv" fÃŒr den Export von CSV-Daten aus der Auskunft mit Modul alkisexport.php. 26 26 -- 2014-01-20 Erweiterung "exp_csv" fÃŒr alkisexport.php 27 -- 2014-01-21 In "exp_csv": Rechtsgemeinsachaft zu allen Personen statt als eigener Satz. 27 28 28 29 … … 75 76 76 77 77 -- Generelle Export-Struktur FlurstÃŒck - Buchung - Grundbuch - Person78 -- ------------------------------------------------------------------ 78 -- Generelle Export-Struktur "FlurstÃŒck - Buchung - Grundbuch - Person" 79 -- -------------------------------------------------------------------- 79 80 -- Verwendet den gespeicherten View "doppelverbindung". 80 81 -- Wird benötigt im Auskunft-Modul "alkisexport.php": … … 87 88 -- Diese Redundanzen mÃŒssen vom dem Programm gefiltert werden, das die Daten ÃŒber eine Schnittstelle einliest. 88 89 89 -- Durch LEFT-JOIN werden wahlweise Namennummern mit Person und Adresse erzeugt,90 -- oder auch Namensnummern einer einem Beschrieb der Rechtsgemeinschaft oder leere Felder zu einem fiktiven Grundbuch.91 -- Auch mit diesen Zeilen-Varianten muss das weiter verarbeitende Programm klar kommen.92 93 90 -- Anwendungs-Beispiel: Abrechnung von AnliegerbeitrÀgen. 94 91 92 -- 2014-01-21: "Rechtsgemeinschaft" in den Datensatz aller anderen Namen 95 93 -- DROP VIEW exp_csv; 96 94 CREATE OR REPLACE VIEW exp_csv … … 98 96 SELECT 99 97 -- FlurstÃŒck 100 101 102 103 104 105 98 f.gml_id AS fsgml, -- möglicher Filter FlurstÃŒcks-GML-ID 99 f.flurstueckskennzeichen AS fs_kennz, 100 f.gemarkungsnummer, -- Teile des FS-Kennz. noch mal einzeln 101 f.flurnummer, f.zaehler, f.nenner, 102 f.amtlicheflaeche AS fs_flae, 103 g.bezeichnung AS gemarkung, 106 104 107 105 -- Grundbuch 108 109 110 111 106 gb.gml_id AS gbgml, -- möglicher Filter Grundbuch-GML-ID 107 gb.bezirk AS gb_bezirk, 108 gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt, 109 z.bezeichnung AS beznam, -- GB-Bezirks-Name 112 110 113 111 -- Buchungsstelle (GrundstÃŒck) 114 112 s.laufendenummer AS bu_lfd, -- BVNR 115 113 --s.zaehler, s.nenner, -- Anteil des GB am FS, einzelne Felder 116 '=' || s.zaehler || '/' || s.nenner AS bu_ant, -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an') 117 s.buchungsart, -- verschlÃŒsselt 118 b.bezeichner AS bu_art, -- Buchungsart entschlÃŒsselt 119 120 --NamensNummer 121 nn.laufendenummernachdin1421 AS nam_lfd, 122 '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant, -- als Excel-Formel 123 nn.artderrechtsgemeinschaft AS nam_adr, 124 nn.beschriebderrechtsgemeinschaft AS nam_bes, 125 126 -- Person 114 '=' || s.zaehler || '/' || s.nenner AS bu_ant, -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an') 115 s.buchungsart, -- verschlÃŒsselt 116 b.bezeichner AS bu_art, -- Buchungsart entschlÃŒsselt 117 118 -- NamensNummer (Normalfall mit Person) 119 nn.laufendenummernachdin1421 AS nam_lfd, 120 '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant, -- als Excel-Formel 121 122 -- Rechtsgemeinsachaft (Sonderfall von Namensnummer, ohne Person, ohne Nummer) 123 rg.artderrechtsgemeinschaft AS nam_adr, 124 rg.beschriebderrechtsgemeinschaft AS nam_bes, 125 126 -- Person 127 127 p.gml_id AS psgml, -- möglicher Filter Personen-GML-ID 128 128 p.anrede, … … 133 133 --p.geburtsname, p.akademischergrad 134 134 135 136 137 138 139 135 -- Adresse der Person 136 a.postleitzahlpostzustellung AS plz, 137 a.ort_post AS ort, -- Anschreifenzeile 1: PLZ+Ort 138 a.strasse, a.hausnummer, -- Anschriftenzeile 2: StraÃe+HsNr 139 a.bestimmungsland AS land 140 140 141 141 FROM ax_flurstueck f -- FlurstÃŒck … … 151 151 ON s.buchungsart = b.wert 152 152 153 JOIN alkis_beziehungen v3 153 JOIN alkis_beziehungen v3 -- Buchung --> Grundbuchblatt 154 154 ON s.gml_id = v3.beziehung_von AND v3.beziehungsart = 'istBestandteilVon' 155 155 JOIN ax_buchungsblatt gb … … 159 159 ON gb.land=z.land AND gb.bezirk=z.bezirk 160 160 161 JOIN alkis_beziehungen v4 161 JOIN alkis_beziehungen v4 -- Blatt --> NamNum 162 162 ON v4.beziehung_zu = gb.gml_id AND v4.beziehungsart = 'istBestandteilVon' 163 163 JOIN ax_namensnummer nn 164 164 ON v4.beziehung_von = nn.gml_id 165 165 166 LEFT JOIN alkis_beziehungen v5-- NamNum --> Person167 -- 2014-01-20: Mit LEFT ab hier werden auch NumNum-Zeilen mit "Beschrei nbung der Rechtsgemeinschaft" geliefert (ohne Person)166 JOIN alkis_beziehungen v5 -- NamNum --> Person 167 -- 2014-01-20: Mit LEFT ab hier werden auch NumNum-Zeilen mit "Beschreibung der Rechtsgemeinschaft" geliefert (ohne Person) 168 168 ON v5.beziehung_von = nn.gml_id AND v5.beziehungsart = 'benennt' 169 LEFTJOIN ax_person p169 JOIN ax_person p 170 170 ON v5.beziehung_zu = p.gml_id 171 171 … … 174 174 LEFT JOIN ax_anschrift a 175 175 ON v6.beziehung_zu = a.gml_id 176 176 177 -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery: 178 179 -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft". 180 -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person. 181 LEFT JOIN 182 ( SELECT v7.beziehung_zu, 183 rg.artderrechtsgemeinschaft, 184 rg.beschriebderrechtsgemeinschaft 185 FROM ax_namensnummer rg 186 JOIN alkis_beziehungen v7 -- Blatt --> NamNum (Rechtsgemeinschaft) 187 ON v7.beziehung_von = rg.gml_id 188 WHERE v7.beziehungsart = 'istBestandteilVon' 189 AND NOT rg.artderrechtsgemeinschaft IS NULL 190 ) AS rg -- Rechtsgemeinschaft 191 ON rg.beziehung_zu = gb.gml_id -- zum GB 192 177 193 ORDER BY f.flurstueckskennzeichen, 178 194 gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer, … … 182 198 IS 'View fÃŒr einen CSV-Export aus der Buchauskunft mit alkisexport.php. Generelle Struktur. FÃŒr eine bestimmte gml_id noch den Filter setzen.'; 183 199 184 --GRANT SELECT ON TABLE exp_csv TO mb27; -- User fÃŒr Auskunfts-Programme200 GRANT SELECT ON TABLE exp_csv TO mb27; -- User fÃŒr Auskunfts-Programme 185 201 --GRANT SELECT ON TABLE exp_csv TO alkisbuch; -- User fÃŒr Auskunfts-Programme RLP-Demo 202 203 204 -- Analyse: Kann es mehr als 1 "Rechtsgemeinschaft" zu einem GB-Blatt geben? 205 -- (Diese Frage stellte sich beim Design des View "exp_csv".) 206 -- Schritt 1: alle vorhandenen 207 CREATE OR REPLACE VIEW rechtsgemeinschaften_zum_grundbuch 208 AS 209 SELECT 210 gb.gml_id, 211 gb.bezirk, 212 gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt, 213 nn.artderrechtsgemeinschaft, 214 nn.beschriebderrechtsgemeinschaft 215 FROM ax_buchungsblatt gb 216 JOIN alkis_beziehungen v 217 ON v.beziehung_zu = gb.gml_id AND v.beziehungsart = 'istBestandteilVon' 218 JOIN ax_namensnummer nn 219 ON v.beziehung_von = nn.gml_id 220 WHERE NOT nn.artderrechtsgemeinschaft IS NULL 221 ORDER BY gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, 222 nn.laufendenummernachdin1421; 223 224 COMMENT ON VIEW rechtsgemeinschaften_zum_grundbuch 225 IS 'Rechtsgemeinschaften zum Grundbuchblatt.'; 226 227 -- Schritt 2: Wo gibt es mehrere zu einem GB-Blatt 228 CREATE OR REPLACE VIEW rechtsgemeinschaften_zaehlen 229 AS 230 SELECT gml_id, bezirk, gb_blatt, count(artderrechtsgemeinschaft) AS anzahl 231 FROM rechtsgemeinschaften_zum_grundbuch 232 GROUP BY gml_id, bezirk, gb_blatt 233 HAVING count(artderrechtsgemeinschaft) > 1 234 ORDER BY bezirk, gb_blatt; 235 236 COMMENT ON VIEW rechtsgemeinschaften_zaehlen 237 IS 'Rechtsgemeinschaften zum Grundbuchblatt zaehlen. Anzeigen, wenn es mehrere gibt.'; 238 -- Ja, kann es geben 239 240 -- Schritt 3: alle vorhandenen Zeilen anzeigen zu den GB-BlÀttern, bei denen es mehrere gibt. 241 CREATE OR REPLACE VIEW rechtsgemeinschaften_mehrfachzeilen 242 AS 243 SELECT * 244 FROM rechtsgemeinschaften_zum_grundbuch 245 WHERE gml_id IN (SELECT gml_id FROM rechtsgemeinschaften_zaehlen); 246 247 COMMENT ON VIEW rechtsgemeinschaften_mehrfachzeilen 248 IS 'GrundbuchblÀtter mit mehr als einer Zeile Rechtsgemeinschaft.'; 249 -- Fazit: 250 -- Man findet einige wenige identische oder Àhnlich aussehende Zeilen zu einem Grundbuch. 251 -- Das sieht also eher nach einem PostNAS-FortfÃŒhrungsproblem aus, als nach unabhÀngigen Zeilen. 252 -- Wurde hier eine Relation nicht sauber gelöscht? 186 253 187 254 -
trunk/info/info/alkis/alkisexport.php
r304 r305 10 10 2014-01-17 krz f.j. 11 11 2014-01-20 weitere Spalten und verbesserte Formatierung 12 2014-01-21 Der View liefert "Rechtsgemeinschaft" nun als Feld in allen Personen-Sätzen 13 eines GB-Blattes statt als eigenen "Satz ohne Person". 12 14 */ 13 15 … … 51 53 52 54 // CSV-Ausgabe: Kopfzeile mit Feldnamen 53 echo "FS-Kennzeichen;GmkgNr;Gemarkung;Flur;Flurstueck;Flaeche;Adressen;GB-BezNr;GB-Bezirk;GB-Blatt;BVNR;Anteil_am_FS;Buchungsart;Namensnummer;AnteilDerPerson;RechtsGemeinschaft;Person;GebDatum;Anschrift ";55 echo "FS-Kennzeichen;GmkgNr;Gemarkung;Flur;Flurstueck;Flaeche;Adressen;GB-BezNr;GB-Bezirk;GB-Blatt;BVNR;Anteil_am_FS;Buchungsart;Namensnummer;AnteilDerPerson;RechtsGemeinschaft;Person;GebDatum;Anschrift;Anteil(berechnet)"; 54 56 55 57 // Datenbank-Verbindung … … 60 62 pg_set_client_encoding($con, LATIN1); // Für Excel kein UTF8 ausgeben 61 63 62 // Der Parameter "Tabellentyp" bestimmt den Namen des Filter-Feldes aus dem View 63 switch ($tabtyp) { // zulaessige Erte fuer &tabtyp=64 // Der Parameter "Tabellentyp" bestimmt den Namen des Filter-Feldes aus dem View "exp_csv". 65 switch ($tabtyp) { // zulaessige Werte fuer &tabtyp= 64 66 case 'flurstueck': $filter = "fsgml"; break; 65 67 case 'grundbuch': $filter = "gbgml"; break; … … 73 75 $res = pg_prepare("", $sql); 74 76 $res = pg_execute("", $v); 75 if (!$res) { 76 exit("Fehler bei Datenbankabfrage"); 77 } 78 $i=0; 77 if (!$res) {exit("Fehler bei Datenbankabfrage");} 78 $i=1; // Kopfzeile zählt mit 79 79 $fsalt=''; 80 80 81 81 // Datenfelder auslesen 82 82 while($row = pg_fetch_array($res)) { 83 $i++; // Zeile der Tabelle 84 $rechnen=true; // Formel in letzte Spalte? 83 85 84 86 // Flurstueck … … 100 102 // Buchungsstelle (Grundstueck) 101 103 $bu_lfd=$row["bu_lfd"]; // BVNR 102 $bu_ant=$row["bu_ant"]; // '=zaehler/nenner' oder NULL wenn zaehler oder nenner NULL sind103 $bu_key=$row["buchungsart"]; // S xhlüssel104 $bu_ant=$row["bu_ant"]; // '=zaehler/nenner' oder NULL 105 $bu_key=$row["buchungsart"]; // Schlüssel 104 106 $bu_art=$row["bu_art"]; // entschlüsselt (Umlaute in ANSI!) 105 106 // Für Berechnungen in der exportierten Tabelle wäre es nützlich, wenn "voller Anteil" als Faktor 1 107 // statt eines leeren Feldes ausgegeben würde - Ausnahmen? 108 if(($bu_ant == '') and ($bu_key == 1100)) { // Grundstück 109 $bu_ant = '1'; 107 if($bu_ant == '') { // Keine Bruch-Zahl 108 $bu_ant = '1'; // "voller Anteil" (Faktor 1) 109 } else { 110 $bu_ant=str_replace(".", ",", $bu_ant); // Dezimalkomma statt -punkt. 110 111 } 111 112 112 113 // Namensnummer 113 $nam_lfd="'".kurz_namnr($row["nam_lfd"])."'"; // In Hochkomma . Wird sonst alsDatum dargestellt.114 $nam_lfd="'".kurz_namnr($row["nam_lfd"])."'"; // In Hochkomma, sonst wie Datum dargestellt. 114 115 $nam_ant=$row["nam_ant"]; 115 if ($nam_ant == '') {$nam_ant=1;} // Wann darf als Anteil "1" statt leer gesetzt werden?116 // Das ist falsch, wenn z.B. eine Rechtsgemeinschaft verbal beschrieben ist (in anderem Datensatz).117 116 $nam_adr=$row["nam_adr"]; // Art der Rechtsgemeischaft (Schlüssel) 118 $nam_bes=$row["nam_bes"]; // Beschrieb der Rechtsgemeinschaft 119 120 // Rechtsgemeinschaft (in einer eigene Zeile ohne Namen) 121 if ($nam_adr == 9999) { // sonstiges 122 $rechtsg=$nam_bes; // Beschreibung verwenden 117 if ($nam_adr == '') { // keine Rechtsgemeinsachft 118 if ($nam_ant == '') { // und kein Bruch-Anteil 119 $nam_ant=1; // dann ganzer Anteil 120 } 123 121 } else { 124 $rechtsg=rechtsgemeinschaft($nam_adr); // Entschlüsseln 122 $rechnen=false; // bei Rechtsgemeinschaft manuell interpretieren 123 if ($nam_adr == 9999) { // sonstiges 124 $rechtsg=$row["nam_bes"]; // Beschrieb der Rechtsgemeinschaft 125 } else { 126 $rechtsg=rechtsgemeinschaft($nam_adr); // Entschlüsseln 127 } 125 128 } 126 129 … … 162 165 163 166 // Den Ausgabe-Satz montieren aus Flurstücks-, Grundbuch- und Namens-Teil 167 // A B C D E F G 164 168 $fsteil=$fs_kennz.";".$gmkgnr.";".$gemkname.";".$flurnummer.";".$flstnummer.";".$fs_flae.";".$lage.";"; 169 // H I J K L M 165 170 $gbteil=$gb_bezirk.";".$gb_beznam.";".$gb_blatt.";".$bu_lfd.";".$bu_ant.";".$bu_art.";"; 171 // N O P Q R S 166 172 $namteil=$nam_lfd.";".$nam_ant.";".$rechtsg.";".$name.";".$gebdat.";".$adresse; 167 173 174 // Anteile "GB am FS" und "Pers am GB" verrechnen 175 if ($rechnen) { // beide Anteile verwertbar 176 $formelteil=";=L".$i."*O".$i; // Spalte T 177 } else { 178 $formelteil=';'; 179 } 180 168 181 // Ausgabe in CSV-Datei 169 echo "\n".$fsteil.$gbteil.$namteil; 170 $i++; 182 echo "\n".$fsteil.$gbteil.$namteil.$formelteil; 171 183 } 172 184 pg_free_result($res); 173 if ($i == 0) {exit ("Kein Treffer fuer gml_id=".$gmlid);}185 if ($i == 1) {exit ("Kein Treffer fuer gml_id=".$gmlid);} // nur Kopfzeile 174 186 pg_close($con); 175 187 exit(0);
Note: See TracChangeset
for help on using the changeset viewer.