Changeset 305 for trunk


Ignore:
Timestamp:
01/21/14 17:14:52 (10 years ago)
Author:
frank.jaeger
Message:

Verbesserung CSV-Export: Rechtsgemeinschaft in Namenszeile.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/import/sichten.sql

    r303 r305  
    2525--  2014-01-17 View "exp_csv" fÃŒr den Export von CSV-Daten aus der Auskunft mit Modul alkisexport.php. 
    2626--  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. 
    2728 
    2829 
     
    7576 
    7677 
    77 -- Generelle Export-Struktur FlurstÃŒck - Buchung - Grundbuch - Person 
    78 -- ------------------------------------------------------------------ 
     78-- Generelle Export-Struktur "FlurstÃŒck - Buchung - Grundbuch - Person" 
     79-- -------------------------------------------------------------------- 
    7980-- Verwendet den gespeicherten View "doppelverbindung". 
    8081-- Wird benötigt im Auskunft-Modul "alkisexport.php": 
     
    8788-- Diese Redundanzen mÃŒssen vom dem Programm gefiltert werden, das die Daten ÃŒber eine Schnittstelle einliest. 
    8889 
    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  
    9390-- Anwendungs-Beispiel: Abrechnung von AnliegerbeitrÀgen. 
    9491 
     92-- 2014-01-21: "Rechtsgemeinschaft" in den Datensatz aller anderen Namen 
    9593--           DROP VIEW exp_csv; 
    9694CREATE OR REPLACE VIEW exp_csv 
     
    9896 SELECT 
    9997  -- FlurstÃŒck 
    100      f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID 
    101      f.flurstueckskennzeichen             AS fs_kennz, 
    102      f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln 
    103      f.flurnummer, f.zaehler, f.nenner,  
    104      f.amtlicheflaeche                    AS fs_flae, 
    105      g.bezeichnung                        AS gemarkung, 
     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, 
    106104 
    107105  -- Grundbuch 
    108      gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID 
    109      gb.bezirk                            AS gb_bezirk, 
    110      gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt, 
    111      z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name 
     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 
    112110 
    113111  -- Buchungsstelle (GrundstÃŒck) 
    114      s.laufendenummer                     AS bu_lfd,      -- BVNR 
     112    s.laufendenummer                     AS bu_lfd,      -- BVNR 
    115113    --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 
    127127     p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID 
    128128     p.anrede, 
     
    133133     --p.geburtsname, p.akademischergrad  
    134134  
    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 
     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 
    140140 
    141141  FROM ax_flurstueck    f               -- FlurstÃŒck 
     
    151151    ON s.buchungsart = b.wert  
    152152 
    153   JOIN alkis_beziehungen v3              -- Buchung --> Grundbuchblatt 
     153  JOIN alkis_beziehungen v3             -- Buchung --> Grundbuchblatt 
    154154    ON s.gml_id = v3.beziehung_von AND v3.beziehungsart = 'istBestandteilVon' 
    155155  JOIN ax_buchungsblatt  gb  
     
    159159    ON gb.land=z.land AND gb.bezirk=z.bezirk  
    160160 
    161   JOIN alkis_beziehungen v4              -- Blatt  --> NamNum 
     161  JOIN alkis_beziehungen v4             -- Blatt  --> NamNum 
    162162    ON v4.beziehung_zu = gb.gml_id AND v4.beziehungsart = 'istBestandteilVon'   
    163163  JOIN ax_namensnummer nn  
    164164    ON v4.beziehung_von = nn.gml_id 
    165165 
    166   LEFT JOIN alkis_beziehungen v5         -- NamNum --> Person  
    167    -- 2014-01-20: Mit LEFT ab hier werden auch NumNum-Zeilen mit "Beschreinbung 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) 
    168168    ON v5.beziehung_von = nn.gml_id AND v5.beziehungsart = 'benennt' 
    169   LEFT JOIN ax_person p 
     169  JOIN ax_person p 
    170170    ON v5.beziehung_zu = p.gml_id 
    171171 
     
    174174  LEFT JOIN ax_anschrift a  
    175175    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 
    177193  ORDER BY f.flurstueckskennzeichen,  
    178194           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer, 
     
    182198 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.'; 
    183199 
    184 --GRANT SELECT ON TABLE exp_csv TO mb27;       -- User fÃŒr Auskunfts-Programme 
     200  GRANT SELECT ON TABLE exp_csv TO mb27;       -- User fÃŒr Auskunfts-Programme 
    185201--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 
     207CREATE OR REPLACE VIEW rechtsgemeinschaften_zum_grundbuch 
     208AS 
     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 
     224COMMENT ON VIEW rechtsgemeinschaften_zum_grundbuch  
     225 IS 'Rechtsgemeinschaften zum Grundbuchblatt.'; 
     226 
     227-- Schritt 2: Wo gibt es mehrere zu einem GB-Blatt 
     228CREATE OR REPLACE VIEW rechtsgemeinschaften_zaehlen 
     229AS 
     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 
     236COMMENT 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. 
     241CREATE OR REPLACE VIEW rechtsgemeinschaften_mehrfachzeilen 
     242AS 
     243 SELECT *  
     244   FROM rechtsgemeinschaften_zum_grundbuch 
     245  WHERE gml_id IN (SELECT gml_id FROM rechtsgemeinschaften_zaehlen); 
     246 
     247COMMENT 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? 
    186253 
    187254 
  • trunk/info/info/alkis/alkisexport.php

    r304 r305  
    1010        2014-01-17 krz f.j. 
    1111        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". 
    1214*/ 
    1315 
     
    5153 
    5254// 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"; 
     55echo "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)"; 
    5456 
    5557// Datenbank-Verbindung 
     
    6062pg_set_client_encoding($con, LATIN1); // Für Excel kein UTF8 ausgeben 
    6163 
    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". 
     65switch ($tabtyp) { // zulaessige Werte fuer &tabtyp= 
    6466        case 'flurstueck': $filter = "fsgml"; break; 
    6567        case 'grundbuch':  $filter = "gbgml"; break; 
     
    7375$res = pg_prepare("", $sql); 
    7476$res = pg_execute("", $v); 
    75 if (!$res) { 
    76         exit("Fehler bei Datenbankabfrage"); 
    77 } 
    78 $i=0; 
     77if (!$res) {exit("Fehler bei Datenbankabfrage");} 
     78$i=1; // Kopfzeile zählt mit 
    7979$fsalt=''; 
    8080 
    8181// Datenfelder auslesen 
    8282while($row = pg_fetch_array($res)) { 
     83        $i++; // Zeile der Tabelle 
     84        $rechnen=true; // Formel in letzte Spalte? 
    8385 
    8486        // Flurstueck 
     
    100102        // Buchungsstelle (Grundstueck) 
    101103        $bu_lfd=$row["bu_lfd"]; // BVNR 
    102         $bu_ant=$row["bu_ant"]; // '=zaehler/nenner' oder NULL wenn zaehler oder nenner NULL sind 
    103         $bu_key=$row["buchungsart"]; // Sxhlüssel 
     104        $bu_ant=$row["bu_ant"]; // '=zaehler/nenner' oder NULL 
     105        $bu_key=$row["buchungsart"]; // Schlüssel 
    104106        $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.            
    110111        } 
    111112 
    112113        // Namensnummer 
    113         $nam_lfd="'".kurz_namnr($row["nam_lfd"])."'"; // In Hochkomma. Wird sonst als Datum dargestellt. 
     114        $nam_lfd="'".kurz_namnr($row["nam_lfd"])."'"; // In Hochkomma, sonst wie Datum dargestellt. 
    114115        $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). 
    117116        $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                } 
    123121        } 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                } 
    125128        } 
    126129 
     
    162165 
    163166        // Den Ausgabe-Satz montieren aus Flurstücks-, Grundbuch- und Namens-Teil 
     167        //      A             B           C             D               E               F            G 
    164168        $fsteil=$fs_kennz.";".$gmkgnr.";".$gemkname.";".$flurnummer.";".$flstnummer.";".$fs_flae.";".$lage.";"; 
     169        //      H              I              J             K           L           M 
    165170        $gbteil=$gb_bezirk.";".$gb_beznam.";".$gb_blatt.";".$bu_lfd.";".$bu_ant.";".$bu_art.";"; 
     171        //       N            O            P            Q         R           S 
    166172        $namteil=$nam_lfd.";".$nam_ant.";".$rechtsg.";".$name.";".$gebdat.";".$adresse; 
    167173 
     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 
    168181        // Ausgabe in CSV-Datei 
    169         echo "\n".$fsteil.$gbteil.$namteil; 
    170         $i++; 
     182        echo "\n".$fsteil.$gbteil.$namteil.$formelteil; 
    171183} 
    172184pg_free_result($res); 
    173 if ($i == 0) {exit ("Kein Treffer fuer gml_id=".$gmlid);} 
     185if ($i == 1) {exit ("Kein Treffer fuer gml_id=".$gmlid);} // nur Kopfzeile 
    174186pg_close($con); 
    175187exit(0); 
Note: See TracChangeset for help on using the changeset viewer.