Showing
35 changed files
with
6712 additions
and
0 deletions
c_funcs/plpgsql_support.c
0 → 100755
1 | +#include <postgres.h> | |
2 | +#include <string.h> | |
3 | +#include <fmgr.h> | |
4 | +#include <executor/executor.h> | |
5 | + | |
6 | +PG_FUNCTION_INFO_V1(get_int4_record_val); | |
7 | + | |
8 | +Datum get_int4_record_val(PG_FUNCTION_ARGS) { | |
9 | + TupleTableSlot* t=(TupleTableSlot*)PG_GETARG_POINTER(0); | |
10 | + text* valName=(text*)PG_GETARG_POINTER(1); | |
11 | + int32 val; | |
12 | + bool isnull; | |
13 | + | |
14 | + val=DatumGetInt32(GetAttributeByName(t, VARDATA(valName), &isnull)); | |
15 | + if(isnull) | |
16 | + PG_RETURN_NULL(); | |
17 | + | |
18 | + PG_RETURN_INT32(val); | |
19 | +} | ... | ... |
chk_superuser
0 → 100755
cr_tables-log
0 → 100755
1 | +psql:cr_tables.sql:93: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »land__id__seq« für die »serial«-Spalte »land._id_« | |
2 | +psql:cr_tables.sql:93: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »land_pkey« für Tabelle »land« | |
3 | +psql:cr_tables.sql:121: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »ort__id__seq« für die »serial«-Spalte »ort._id_« | |
4 | +psql:cr_tables.sql:121: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »ort_pkey« für Tabelle »ort« | |
5 | +psql:cr_tables.sql:158: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »adresse__id__seq« für die »serial«-Spalte »adresse._id_« | |
6 | +psql:cr_tables.sql:158: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »adresse_pkey« für Tabelle »adresse« | |
7 | +psql:cr_tables.sql:213: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »person__id__seq« für die »serial«-Spalte »person._id_« | |
8 | +psql:cr_tables.sql:213: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »person_pkey« für Tabelle »person« | |
9 | +psql:cr_tables.sql:248: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »wohnt_pkey« für Tabelle »wohnt« | |
10 | +psql:cr_tables.sql:271: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »firma__id__seq« für die »serial«-Spalte »firma._id_« | |
11 | +psql:cr_tables.sql:271: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »firma_pkey« für Tabelle »firma« | |
12 | +psql:cr_tables.sql:307: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »abteilung__id__seq« für die »serial«-Spalte »abteilung._id_« | |
13 | +psql:cr_tables.sql:307: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »abteilung_pkey« für Tabelle »abteilung« | |
14 | +psql:cr_tables.sql:355: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »arbeit_pkey« für Tabelle »arbeit« | |
15 | +psql:cr_tables.sql:394: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »konten_typen_pkey« für Tabelle »konten_typen« | |
16 | +psql:cr_tables.sql:414: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »used_konten_pkey« für Tabelle »used_konten« | |
17 | +psql:cr_tables.sql:440: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »kontenplan__id__seq« für die »serial«-Spalte »kontenplan._id_« | |
18 | +psql:cr_tables.sql:440: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »kontenplan_pkey« für Tabelle »kontenplan« | |
19 | +psql:cr_tables.sql:493: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »konto_pkey« für Tabelle »konto« | |
20 | +psql:cr_tables.sql:522: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »buchung_pkey« für Tabelle »buchung« | |
21 | +psql:cr_tables.sql:720: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »benutzer__id__seq« für die »serial«-Spalte »benutzer._id_« | |
22 | +psql:cr_tables.sql:720: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »benutzer_pkey« für Tabelle »benutzer« | |
23 | +psql:cr_tables.sql:758: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »rechte_pkey« für Tabelle »rechte« | |
24 | +psql:cr_tables.sql:835: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »admin_pkey« für Tabelle »admin« | |
25 | +psql:cr_tables.sql:874: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »effektive_rechte_pkey« für Tabelle »effektive_rechte« | |
26 | +psql:cr_tables.sql:914: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »session_pkey« für Tabelle »session« | |
27 | +psql:cr_tables.sql:937: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »kunde__id__seq« für die »serial«-Spalte »kunde._id_« | |
28 | +psql:cr_tables.sql:937: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »kunde_pkey« für Tabelle »kunde« | |
29 | +psql:cr_tables.sql:1038: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »anbieter__id__seq« für die »serial«-Spalte »anbieter._id_« | |
30 | +psql:cr_tables.sql:1038: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »anbieter_pkey« für Tabelle »anbieter« | |
31 | +psql:cr_tables.sql:1110: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »verkaeufer__id__seq« für die »serial«-Spalte »verkaeufer._id_« | |
32 | +psql:cr_tables.sql:1110: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »verkaeufer_pkey« für Tabelle »verkaeufer« | |
33 | +psql:cr_tables.sql:1193: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »warengruppe__id__seq« für die »serial«-Spalte »warengruppe._id_« | |
34 | +psql:cr_tables.sql:1193: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »warengruppe_pkey« für Tabelle »warengruppe« | |
35 | +psql:cr_tables.sql:1284: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »produkt_typen_pkey« für Tabelle »produkt_typen« | |
36 | +psql:cr_tables.sql:1311: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »typ_table_columns_pkey« für Tabelle »typ_table_columns« | |
37 | +psql:cr_tables.sql:1344: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »produkt__id__seq« für die »serial«-Spalte »produkt._id_« | |
38 | +psql:cr_tables.sql:1344: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »produkt_pkey« für Tabelle »produkt« | ... | ... |
cr_tables.sql
0 → 100755
1 | +begin; | |
2 | + | |
3 | +\i plpgsql_funcs/cr_func_generic.sql | |
4 | + | |
5 | +COMMENT ON DATABASE shop IS | |
6 | + '<H3><U>Allgemeine Kommentare:</U></H3>' | |
7 | + 'die Vergabe der Triggernamen folgt einem bestimmten Schema:<BR><BR>' | |
8 | + | |
9 | + ' <TABLE>_trigger<NR>_on_' | |
10 | + '[change|insert|update|delete]_<DESCR><BR><BR>' | |
11 | + | |
12 | + 'wobei <TABLE> der Tabellenname ist, fuer den der Trigger definiert ' | |
13 | + 'wurde <NR> eine fortlaufende Nummer (1,2,...,n) fuer die zu der ' | |
14 | + 'Tabelle definierten Trigger, "change" steht fuer "insert und update" und ' | |
15 | + '<DESCR> ist eine frei vergebbare Beschreibung dessen was der ' | |
16 | + 'Trigger tut. Dieses Schema dient hauptsaechlich dem Zweck eine ' | |
17 | + 'Reihenfolge fuer die Ausfuehrung der Trigger definieren zu koennen. ' | |
18 | + 'Da postgreSQL die Trigger zu einer Aktion in alphabetisch aufsteigender ' | |
19 | + 'Reihenfolge ausfuehrt laesst sich uber <NR> bestimmen in welcher ' | |
20 | + 'Reihenfolge die Trigger ausgefuehrt werden, <BR><BR>' | |
21 | + | |
22 | + ' ..._trigger1_... => ..._trigger2_... => ...<BR><BR>' | |
23 | + | |
24 | + '<HR><BR>' | |
25 | + 'ich muss zumindest ganz am schluss aber besser noch frueher Transaktionen ' | |
26 | + 'in meine Funktionen einbauen. Ich glaube das diese idealerweise in den ' | |
27 | + 'plpgsql Funktionen eingebaut werden, dann kann man spaeter in PHP oder ' | |
28 | + 'womit auch immer diese Funktionen nutzen und hat automatisch bessere ' | |
29 | + 'Performance....aus demselben Grund ist es im Moment noch nicht unbedingt ' | |
30 | + 'notwendig transaktionen einzubauen, wenn konsequent hauptsaechlich die ' | |
31 | + 'Funktionen genutzt werden.<BR>' | |
32 | + 'OK, ich revidiere meine Meinung, Transaktionen sollten im hoeheren Level ' | |
33 | + 'implementiert werden, alleine schon deshalb weil BEGIN WORK nicht ' | |
34 | + 'innerhalb einer plpgsql Funktion nicht funtioniert, wenn krasse Feler in ' | |
35 | + 'plpgsql Funktionen auftreten (solche die sich nicht beheben lassen) ' | |
36 | + 'sollte man konsequent RAISE EXCEPTION nutzen um den ganzen Funktionsblock ' | |
37 | + 'abzubrechen, dadurch werden auch alle aenderungen die die Funktion ' | |
38 | + 'gemacht hat wieder zurueckgesetzt.<BR><BR>' | |
39 | + | |
40 | + '<HR><BR>' | |
41 | + | |
42 | + 'alle Kommentare in der Datenbank muessen zu HTML konvertiert werden.' | |
43 | + '<BR><BR><HR>'; | |
44 | + | |
45 | +-- generic Users | |
46 | +-- [ | |
47 | +-- create group guest; | |
48 | +-- create group customer; | |
49 | +-- create group admin; | |
50 | + | |
51 | +-- create user guest ENCRYPTED PASSWORD 'guest' | |
52 | +-- NOCREATEDB NOCREATEUSER in group guest; | |
53 | +-- ] | |
54 | + | |
55 | +-- Schemas | |
56 | +-- [ | |
57 | +create schema trigger_func; -- Schema fuer Triggerfunktionen | |
58 | +COMMENT ON SCHEMA trigger_func IS 'Schema fuer Triggerfunktionen'; | |
59 | +create schema adresse; -- alles zu Adressdaten | |
60 | +COMMENT ON SCHEMA adresse IS 'alles zu Adressdaten'; | |
61 | +create schema person; -- alles zu Personen | |
62 | +COMMENT ON SCHEMA person IS 'alles zu Personen'; | |
63 | +-- nur zum testen [ -- | |
64 | +grant USAGE ON SCHEMA person TO GROUP guest; | |
65 | +-- ] -- | |
66 | +create schema firma; -- alles zu Firmen | |
67 | +COMMENT ON SCHEMA firma IS 'alles zu Firmen'; | |
68 | +create schema fibu; -- alles zu Konten etc. | |
69 | +COMMENT ON SCHEMA fibu IS 'alles zu Konten etc.'; | |
70 | +create schema waren; -- alles zu Warengruppen und Produkten | |
71 | +COMMENT ON SCHEMA waren IS 'alles zu Warengruppen und Produkten'; | |
72 | +grant USAGE ON SCHEMA waren TO GROUP guest; | |
73 | +create schema benutzer; -- alles zur Benutzerverwltung | |
74 | +COMMENT ON SCHEMA benutzer IS 'alles zur Benutzerverwltung'; | |
75 | +-- ] | |
76 | +-- ende Schemas -- | |
77 | + | |
78 | +-- meine Aktionshistory | |
79 | +-- [ | |
80 | +CREATE TABLE history ( | |
81 | + "username" text NOT NULL, -- der User der die Aktion ausgeloest hat. | |
82 | + "time" timestamp NOT NULL, -- wann wurde die Aktion ausgeloest. | |
83 | + "tab" text NOT NULL, -- der betroffene Table. | |
84 | + "row_oid" int4 NOT NULL, -- die OID der betroffenen Zeile. | |
85 | + "at_time" text NOT NULL, -- BEFORE, AFTER. | |
86 | + "operation" text NOT NULL, -- INSERT, UPDATE, DELETE. | |
87 | + "col_names" text[] NOT NULL, -- zur uebersicht die column-namen | |
88 | + "col_types" text[] NOT NULL, -- zur uebersicht die column-typen | |
89 | + "col_vals" text[] NOT NULL); -- aktuelle Feldwerte | |
90 | + | |
91 | +set search_path to trigger_func; | |
92 | + | |
93 | +\i trigger_funcs/cr_trigger_func_generic.sql | |
94 | + | |
95 | +set search_path to public; | |
96 | +-- ] | |
97 | +-- ende History | |
98 | + | |
99 | +-- Table zu Länder -- | |
100 | +-- [ | |
101 | +set search_path to adresse; | |
102 | + | |
103 | +create table land ( | |
104 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
105 | + "land" text NOT NULL, -- Name(Bezeichnung) des Landes | |
106 | + "lnd_kz" varchar(3) NOT NULL, -- intern. Post-Kennzeichen | |
107 | + "vorwahl_l" varchar(4) NOT NULL); -- intern. Laendervorwahl | |
108 | + | |
109 | +COMMENT ON TABLE land IS 'Tabelle zu Laender'; | |
110 | + | |
111 | +COMMENT ON COLUMN land._id_ IS 'interne id'; | |
112 | +COMMENT ON COLUMN land.land IS 'Name (Bezeichnung) des Landes'; | |
113 | +COMMENT ON COLUMN land.lnd_kz IS 'internationales Post-Kennzeichen'; | |
114 | +COMMENT ON COLUMN land.vorwahl_l IS 'internationale Telefonvorwahl des Landes'; | |
115 | + | |
116 | +create unique index "land_ukey1" on land (land); | |
117 | +create unique index "land_ukey2" on land (lnd_kz); | |
118 | +create unique index "land_ukey3" on land (vorwahl_l); | |
119 | + | |
120 | +\i plpgsql_funcs/cr_func_land.sql | |
121 | + | |
122 | +select public.start_logging('land', 'ALL'); | |
123 | +-- ] | |
124 | +-- Ende Länder -- | |
125 | + | |
126 | +-- Table zu Orte -- | |
127 | +-- [ | |
128 | +create table "ort" ( | |
129 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
130 | + "ort" text NOT NULL, -- Name (Bezeichnung) des Orts | |
131 | + "vorwahl_o" varchar(10) NOT NULL, -- Ortsvorwahl | |
132 | + "id_land" int4 NOT NULL, -- Land, in dem der Ort liegt | |
133 | + CONSTRAINT fk_ort1 FOREIGN KEY (id_land) REFERENCES land (_id_) | |
134 | + ON DELETE CASCADE | |
135 | + ON UPDATE CASCADE); | |
136 | + | |
137 | +COMMENT ON TABLE ort IS 'Tabelle zu Orten'; | |
138 | + | |
139 | +COMMENT ON COLUMN ort._id_ IS 'interne id'; | |
140 | +COMMENT ON COLUMN ort.ort IS 'Name (Bezeichnung) des Ortes'; | |
141 | +COMMENT ON COLUMN ort.vorwahl_o IS 'Ortsvorwahl'; | |
142 | +COMMENT ON COLUMN ort.id_land IS 'FOREIGN KEY: Land in dem der Ort liegt'; | |
143 | + | |
144 | +COMMENT ON CONSTRAINT fk_ort1 ON ort IS ' | |
145 | +wird ein Land geloescht so muessen auch alle dazu gehörenden Orte | |
146 | +geloescht werden da moeglicherweise Orte mit gleichen Namen und | |
147 | +gleicher Vorwahl zu verschiedenen Laendern gehoeren und dadurch | |
148 | +Inkonsistenzen entstehen koennen.'; | |
149 | + | |
150 | +create unique index "ort_ukey1" on ort (vorwahl_o,id_land); | |
151 | + | |
152 | +\i plpgsql_funcs/cr_func_ort.sql | |
153 | + | |
154 | +select public.start_logging('ort', 'ALL'); | |
155 | +-- ] | |
156 | +-- ende Orte -- | |
157 | + | |
158 | +-- Table zu Adressen -- | |
159 | +-- [ | |
160 | +create table "adresse" ( | |
161 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
162 | + "strasse" text NOT NULL, -- Strassenname | |
163 | + "h_nr" varchar(5) NOT NULL, -- Hausnummer | |
164 | + "plz_a" varchar(10) NOT NULL, -- Postleitzahl | |
165 | + "id_ort" int4 NULL, -- Ort | |
166 | + "id_land" int4 NOT NULL, -- Land | |
167 | + CONSTRAINT fk_adresse1 FOREIGN KEY (id_ort) REFERENCES ort (_id_) | |
168 | + ON DELETE SET NULL | |
169 | + ON UPDATE CASCADE, | |
170 | + CONSTRAINT fk_adresse2 FOREIGN KEY (id_land) REFERENCES land (_id_) | |
171 | + ON DELETE CASCADE | |
172 | + ON UPDATE CASCADE); | |
173 | + | |
174 | +COMMENT ON TABLE adresse IS 'Tabelle zu Adressen: | |
175 | +------------------ | |
176 | +id_land habe ich mit aufgenommen, da es sein kann das ich den Ort zu | |
177 | +einer Adresse nicht kenne, aber weiß in welchem Land sie liegt, dann | |
178 | +kann ich nicht über den Ort das Land ermitteln, was man nach einer | |
179 | +ersten Ueberlegung fuer den logischeren Weg halten koennte. | |
180 | +Das Land zu einer Adresse muss bekannt sein, damit das passenden | |
181 | +Laenderkennzeichen zur Postleitzahl ergaenzt werden kann.'; | |
182 | + | |
183 | +COMMENT ON COLUMN adresse._id_ IS 'interne id'; | |
184 | +COMMENT ON COLUMN adresse.strasse IS 'Strassenname'; | |
185 | +COMMENT ON COLUMN adresse.h_nr IS 'Hausnummer'; | |
186 | +COMMENT ON COLUMN adresse.plz_a IS 'Postleitzahl'; | |
187 | +COMMENT ON COLUMN adresse.id_ort IS 'FOREIGN KEY: Ort'; | |
188 | +COMMENT ON COLUMN adresse.id_land IS 'FOREIGN KEY: Land'; | |
189 | + | |
190 | +COMMENT ON CONSTRAINT fk_adresse1 ON adresse IS ' | |
191 | +auch wenn ich den Ort zu einer Adresse nicht kennen so reicht doch | |
192 | +in der Regel auch die Postleitzahl, daher behalte ich erstmal alle | |
193 | +Adressen wenn der dazugehoerige Ort geloescht wird, setze aber | |
194 | +ort_id auf NULL. Dann kann allerdings die ort_id nicht zum | |
195 | +Schluessel dieser Tabelle gehoeren. Stattdessen nehme ich die plz.'; | |
196 | +COMMENT ON CONSTRAINT fk_adresse2 ON adresse IS ' | |
197 | +wird ein Land geloescht, so muß ich um inkonsistenzen zu vermeiden | |
198 | +auch alle dazu gespeicherten Adressen entfernen, da sonst genau wie | |
199 | +bei den Orten zwei gleiche Adressen in der DB stehen koennten.'; | |
200 | + | |
201 | +create unique index "adresse_ukey1" on adresse (strasse,h_nr,plz_a,id_land); | |
202 | + | |
203 | +\i plpgsql_funcs/cr_func_adresse.sql | |
204 | + | |
205 | +select public.start_logging('adresse', 'ALL'); | |
206 | + | |
207 | +set search_path to public; | |
208 | +-- ] | |
209 | +-- ende Adressen -- | |
210 | + | |
211 | +-- Tabellen für Personendaten | |
212 | +-- [ | |
213 | +set search_path to person; | |
214 | + | |
215 | +create table "person" ( | |
216 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
217 | + "anrede" varchar(10) NULL, -- Herr, Frau, Firma | |
218 | + "titel" text NULL, -- Dr., Prof., Dipl. Ing... | |
219 | + "nachname" text NOT NULL, -- Nachname | |
220 | + "vorname" text NOT NULL, -- Vorname | |
221 | + "geb_dat" date NOT NULL, -- Geburtsdatum | |
222 | + "postfach" varchar(10) NULL, -- Postfach | |
223 | + "telefon" varchar(10) NULL, -- Telefon persönlich | |
224 | + "fax" varchar(10) NULL, -- Fax persoenlich | |
225 | + "handy" varchar(50) NULL, -- Handy persoenlich | |
226 | + "email" varchar(50) NULL, -- E-Mail persoenlich | |
227 | + "webpage" varchar(100) NULL); -- Webseite persoenlich | |
228 | + | |
229 | +COMMENT ON TABLE person IS 'Tabelle für Personendaten'; | |
230 | + | |
231 | +COMMENT ON COLUMN person._id_ IS 'interne id'; | |
232 | +COMMENT ON COLUMN person.anrede IS 'Herr, Frau, Firma'; | |
233 | +COMMENT ON COLUMN person.titel IS 'Dr., Prof., Dipl. Ing...'; | |
234 | +COMMENT ON COLUMN person.nachname IS 'Nachname'; | |
235 | +COMMENT ON COLUMN person.vorname IS 'Vorname'; | |
236 | +COMMENT ON COLUMN person.geb_dat IS 'Geburtsdatum'; | |
237 | +COMMENT ON COLUMN person.postfach IS 'Postfach'; | |
238 | +COMMENT ON COLUMN person.telefon IS 'Telefon persönlich'; | |
239 | +COMMENT ON COLUMN person.fax IS 'Fax persoenlich'; | |
240 | +COMMENT ON COLUMN person.handy IS 'Handy persoenlich'; | |
241 | +COMMENT ON COLUMN person.email IS 'E-Mail persoenlich'; | |
242 | +COMMENT ON COLUMN person.webpage IS 'Webseite persoenlich'; | |
243 | + | |
244 | +create unique index "person_ukey1" on person (nachname, vorname, geb_dat); | |
245 | + | |
246 | +select public.start_logging('person', 'ALL'); | |
247 | + | |
248 | +-- wohnt -- | |
249 | +create table "wohnt" ( | |
250 | + id_person int4 NOT NULL, -- Person | |
251 | + id_adresse int4 NOT NULL, -- Adresse | |
252 | + PRIMARY KEY (id_person, id_adresse), | |
253 | + FOREIGN KEY (id_person) REFERENCES person (_id_) | |
254 | + -- hier wird immer die ganze zuordnung geloescht, das ist ok, da | |
255 | + -- dadurch keinerlei weitere Daten verlohren gehen koennen. | |
256 | + ON DELETE CASCADE | |
257 | + ON UPDATE CASCADE, | |
258 | + FOREIGN KEY (id_adresse) REFERENCES adresse.adresse (_id_) | |
259 | + -- hier wird immer die ganze zuordnung geloescht, das ist ok, da | |
260 | + -- dadurch keinerlei weitere Daten verlohren gehen koennen. | |
261 | + ON DELETE CASCADE | |
262 | + ON UPDATE CASCADE); | |
263 | + | |
264 | +COMMENT ON TABLE wohnt IS 'Adresse zu Person'; | |
265 | + | |
266 | +COMMENT ON COLUMN wohnt.id_person IS 'Person'; | |
267 | +COMMENT ON COLUMN wohnt.id_adresse IS 'Adresse'; | |
268 | + | |
269 | +\i plpgsql_funcs/cr_func_person.sql | |
270 | + | |
271 | +select public.start_logging('wohnt', 'ALL'); | |
272 | + | |
273 | +set search_path to public; | |
274 | +-- ] | |
275 | +-- ende Personendaten | |
276 | + | |
277 | +-- Arbeitsplatz -- | |
278 | +-- [ | |
279 | +set search_path to firma; | |
280 | + | |
281 | +create table "firma" ( | |
282 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
283 | + "name" text NOT NULL, -- Name (Bezeichnung) der Firma | |
284 | + "beschreibung" text NULL, -- Was fuer eine Firma ist das | |
285 | + "plz_f" varchar(10) NULL); -- Postleitzahl (große Firme) | |
286 | + | |
287 | +COMMENT ON TABLE firma IS 'Firmengrundinformation: | |
288 | +------------------------------- | |
289 | +meine Konzeption sieht vor das jede Firma mindestens eine Abteilung hat, | |
290 | +die alle Mitarbeiter umfasst wenn es keine weiteren Abteilungen gibt, gibt | |
291 | +es weitere Abteilungen koennen alle, einige oder keine Mitarbeiter zu dieser | |
292 | +Abteilung erfasst sein. Diese Abteilung heisst Firma. | |
293 | +Die Adresse zu dieser Abteilung ist immer die Adresse des Hauptsitzes der | |
294 | +Firma.'; | |
295 | + | |
296 | +COMMENT ON COLUMN firma._id_ IS 'interne id'; | |
297 | +COMMENT ON COLUMN firma.name IS 'Name (Bezeichnung) der Firma'; | |
298 | +COMMENT ON COLUMN firma.beschreibung IS 'Was fuer eine Firma ist das'; | |
299 | +COMMENT ON COLUMN firma.plz_f IS 'Postleitzahl (große Firme)'; | |
300 | + | |
301 | +create unique index "firma_ukey1" on firma (name,plz_f); | |
302 | + | |
303 | +select public.start_logging('firma', 'ALL'); | |
304 | + | |
305 | +create table "abteilung" ( | |
306 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
307 | + "bezeichnung" text NOT NULL, -- Name (Bezeichnung) der Abt. | |
308 | + "beschreibung" text NULL, -- was macht diese Abteilung | |
309 | + "telefon" varchar(10) NULL, -- Telefon (Zentrale) | |
310 | + "fax" varchar(10) NULL, -- Fax Abteilung | |
311 | + "email" varchar(50) NULL, -- E-Mail (gemeins. fuer Abtl.) | |
312 | + "postfach" varchar(10) NULL, -- Postfach | |
313 | + "id_firma" int4 NOT NULL, -- zu welcher Firma gehört sie | |
314 | + "id_adresse" int4 NULL, -- wo liegt sie. | |
315 | + CONSTRAINT fk_abteilung1 | |
316 | + FOREIGN KEY (id_adresse) REFERENCES adresse.adresse (_id_) | |
317 | + ON DELETE SET NULL | |
318 | + ON UPDATE CASCADE, | |
319 | + CONSTRAINT fk_abteilung2 FOREIGN KEY (id_firma) REFERENCES firma (_id_) | |
320 | + ON DELETE CASCADE | |
321 | + ON UPDATE CASCADE); | |
322 | + | |
323 | +COMMENT ON TABLE abteilung IS 'Abteilungen zu Firmen | |
324 | +(siehe auch Kommentar zu table firma) | |
325 | +------------------------------------- | |
326 | +Bislang wird die Abteilung beim anlegen einer Firma in der function | |
327 | +ins_firma mit angelegt, besser waehre jedoch ein Trigger der bei jedem | |
328 | +insert in firma eine passende abteilung anlegt.'; | |
329 | + | |
330 | +COMMENT ON COLUMN abteilung._id_ IS 'interne id'; | |
331 | +COMMENT ON COLUMN abteilung.bezeichnung IS 'Name (Bezeichnung) der Abt.'; | |
332 | +COMMENT ON COLUMN abteilung.beschreibung IS 'was macht diese Abteilung'; | |
333 | +COMMENT ON COLUMN abteilung.telefon IS 'Telefon (Zentrale)'; | |
334 | +COMMENT ON COLUMN abteilung.fax IS 'Fax Abteilung'; | |
335 | +COMMENT ON COLUMN abteilung.email IS 'E-Mail (gemeins. fuer Abtl.)'; | |
336 | +COMMENT ON COLUMN abteilung.postfach IS 'Postfach'; | |
337 | +COMMENT ON COLUMN abteilung.id_firma IS | |
338 | + 'FOREIGN KEY: zu welcher Firma gehört sie'; | |
339 | +COMMENT ON COLUMN abteilung.id_adresse IS 'FOREIGN KEY: wo liegt sie'; | |
340 | + | |
341 | +COMMENT ON CONSTRAINT fk_abteilung1 ON abteilung IS ' | |
342 | +wird eine Adresse geloescht, so moechte ich unter umständen trotzdem | |
343 | +gerne alle weiteren Firmendaten halten. Daher setze ich in diesem | |
344 | +Fall id_adresse auf NULL.'; | |
345 | +COMMENT ON CONSTRAINT fk_abteilung2 ON abteilung IS ' | |
346 | +wird eine Firma gelöscht, so werden auch alle zu ihr gehoerenden | |
347 | +Abteilungen geloescht.'; | |
348 | + | |
349 | +create unique index "abteilung_ukey1" on abteilung (bezeichnung, id_firma); | |
350 | + | |
351 | +select public.start_logging('abteilung', 'ALL'); | |
352 | + | |
353 | +create table "arbeit" ( | |
354 | + "id_person" int4 NOT NULL, -- Person die arbeitet | |
355 | + "id_abteilung" int4 NOT NULL, -- Abteilung in der sie arbeitet | |
356 | + "position" text NOT NULL, -- Position innerhalb der Abt. o. Firma | |
357 | + "beschreibung" text NULL, -- Beschreibung der Taetigkeit | |
358 | + "telefon" varchar(10) NULL, -- Telefon beruflich | |
359 | + "fax" varchar(10) NULL, -- Fax beruflich | |
360 | + "email" varchar(50) NULL, -- E-Mail beruflich | |
361 | + "gehalt" numeric(10,2) NULL, -- Gehalt | |
362 | + PRIMARY KEY (id_person, id_abteilung), | |
363 | + CONSTRAINT fk_arbeit1 | |
364 | + FOREIGN KEY (id_person) REFERENCES person.person (_id_) | |
365 | + ON DELETE CASCADE | |
366 | + ON UPDATE CASCADE, | |
367 | + CONSTRAINT fk_arbeit2 FOREIGN KEY (id_abteilung) REFERENCES abteilung (_id_) | |
368 | + ON DELETE CASCADE | |
369 | + ON UPDATE CASCADE); | |
370 | + | |
371 | +COMMENT ON TABLE arbeit IS 'Person arbeitet in Abteilung'; | |
372 | + | |
373 | +COMMENT ON COLUMN arbeit.id_person IS 'FOREIGN KEY: Person die arbeitet'; | |
374 | +COMMENT ON COLUMN arbeit.id_abteilung IS | |
375 | + 'FOREIGN KEY: Abteilung in der sie arbeitet'; | |
376 | +COMMENT ON COLUMN arbeit.position IS 'Position innerhalb der Abt. o. Firma'; | |
377 | +COMMENT ON COLUMN arbeit.beschreibung IS 'Beschreibung der Taetigkeit'; | |
378 | +COMMENT ON COLUMN arbeit.telefon IS 'Telefon beruflich'; | |
379 | +COMMENT ON COLUMN arbeit.fax IS 'Fax beruflich'; | |
380 | +COMMENT ON COLUMN arbeit.email IS 'E-Mail beruflich'; | |
381 | +COMMENT ON COLUMN arbeit.gehalt IS 'Gehalt'; | |
382 | + | |
383 | +COMMENT ON CONSTRAINT fk_arbeit1 ON arbeit IS ' | |
384 | +da es sich hier nur um eine Relation mit Zusatzinformationen | |
385 | +handelt ist ein loeschen ok, denn wenn die Person geloescht wird | |
386 | +sind auch die Zusatzinfos uninteressant.'; | |
387 | +COMMENT ON CONSTRAINT fk_arbeit2 ON arbeit IS ' | |
388 | +da es sich hier nur um eine Relation mit Zusatzinformationen | |
389 | +handelt ist ein loeschen ok, denn wenn die Abteilung geloescht wird | |
390 | +sind auch die Zusatzinfos uninteressant. Die Person ist dann | |
391 | +quasi arbeitslos in meiner DB.'; | |
392 | + | |
393 | +\i plpgsql_funcs/cr_func_arbeit.sql | |
394 | + | |
395 | +select public.start_logging('arbeit', 'ALL'); | |
396 | + | |
397 | +set search_path to public; | |
398 | +-- ] | |
399 | +-- ende Arbeitsplatz -- | |
400 | + | |
401 | +-- Konto -- | |
402 | +-- [ | |
403 | +set search_path to fibu; | |
404 | + | |
405 | +create table "konten_typen" ( | |
406 | + "mask" bit varying NOT NULL PRIMARY KEY, -- interne id | |
407 | + "name" text NOT NULL, -- Bezeichnung des Kontentyps (AKTIVA) | |
408 | + "beschreibung" text NULL); -- eine Beschreibung wofuer der Typ ist | |
409 | + | |
410 | +COMMENT ON TABLE konten_typen IS 'z.B. AKTIVA,AUWAND,EIGENKAPITAL etc.'; | |
411 | + | |
412 | +COMMENT ON COLUMN konten_typen.mask IS 'interne id'; | |
413 | +COMMENT ON COLUMN konten_typen.name IS 'Bezeichnung des Kontentyps (AKTIVA)'; | |
414 | +COMMENT ON COLUMN konten_typen.beschreibung IS | |
415 | + 'eine Beschreibung wofuer der Typ ist'; | |
416 | + | |
417 | +create unique index "konten_typen_ukey1" on konten_typen (name); | |
418 | + | |
419 | +select public.start_logging('konten_typen', 'ALL'); | |
420 | + | |
421 | +create table "used_konten" ( | |
422 | + "kto_nr" int4 NOT NULL PRIMARY KEY, -- interne id | |
423 | + "used" int4 NOT NULL, -- von wievielen genutzt | |
424 | + "konto_typ" bit varying NOT NULL, -- kontentyp | |
425 | + CONSTRAINT fk_used_konten1 | |
426 | + FOREIGN KEY (konto_typ) REFERENCES konten_typen (mask) | |
427 | + ON DELETE CASCADE | |
428 | + ON UPDATE CASCADE); | |
429 | + | |
430 | +COMMENT ON TABLE used_konten IS ' | |
431 | +Tabelle enthaelt alle zur verfuegung stehenden Kontonummern mit einem | |
432 | +Flag das anzeigt wie oft auf das Konto referenziert wird.'; | |
433 | + | |
434 | +COMMENT ON COLUMN used_konten.kto_nr IS 'interne id'; | |
435 | +COMMENT ON COLUMN used_konten.used IS 'von wievielen genutzt'; | |
436 | +COMMENT ON COLUMN used_konten.konto_typ IS 'FOREIGN KEY: kontentyp'; | |
437 | + | |
438 | +-- hier schenk ich mir das beim insert zugunsten einer besseren | |
439 | +-- laufzeit....spaeter bau cih moeglichkeiten ein, das logging seperat | |
440 | +-- fuer jedem table an und abzustellen und zwar separat fuer INSERT,UPDATE | |
441 | +-- und DELETE... | |
442 | +select public.start_logging('used_konten', 'UDPATE'); | |
443 | +select public.start_logging('used_konten', 'DELETE'); | |
444 | + | |
445 | +create table "kontenplan" ( | |
446 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
447 | + "konto_typ" bit varying NOT NULL, -- Bestands-, Erfolgs- etc | |
448 | + "name" text NOT NULL, -- Bezeichnung des Kontenbereichs | |
449 | + "nr_von" int4 NOT NULL, -- Startwert der Kontonummern | |
450 | + "nr_bis" int4 NOT NULL, -- Wert von letzter gueltiger Nummer | |
451 | + CONSTRAINT fk_kontenplan1 | |
452 | + FOREIGN KEY (konto_typ) REFERENCES konten_typen (mask) | |
453 | + ON DELETE CASCADE | |
454 | + ON UPDATE CASCADE); | |
455 | + | |
456 | +COMMENT ON TABLE kontenplan IS 'Kontonummernbereiche zu Kontotypen: | |
457 | +------------------------------------ | |
458 | +Hier gibt es ein wenig zu beachten damit die Tabelle konsistent bleibt | |
459 | +a) zu jedem Kontentyp darf nur ein Eintrag existieren. | |
460 | + (Das scheint mir schwachsinnig zu sein.....konto_typ,name muss unique | |
461 | + sein.) | |
462 | +b) Die Nummernbereiche duerfen sich nicht ueberschneiden | |
463 | +c) Zu jedem neuen Eintrag in kontenplan muessen entsprechende Eintraege | |
464 | + in used_konten gemacht werden. Und schliesslich | |
465 | +d) wird ein Eintrag in kontenplan erfolgreich geaender (d.h. es gibt | |
466 | + (keine Ueberschneidungen mit anderen Eintraegen, dann muessen die | |
467 | + entsprechenden Eintraege in used Konten angepasst werde, der Status darf | |
468 | + sich dort nicht aendern, wenn im neuen Bereich weniger Nummern existieren | |
469 | + muessen ueberzaehlige Eintraege entfernt werden (ACHTUNG: hierbei kann | |
470 | + es dann dazu kommen das auch Eintraege in Tabellen die Kontonummern | |
471 | + als Fremdschluessel enthalten geloescht werden.) oder wenn der neue | |
472 | + Bereich mehr Kontonummern enthaelt weitere Eintraege in used_konten | |
473 | + eingefuegt werden. | |
474 | +e) wird ein Eintrag geloescht so muessen auch alle dazu gehoerenden Eintraege | |
475 | + in used_konten geloescht werden (ACHTUNG: hierbei kann es dazu kommen, | |
476 | + dass auch Eintraege in Tabellen die Kontonummern als Fremdschluessel | |
477 | + enthalten geloescht werden. Dies betrifft insbesondete Debitoren, | |
478 | + Kreditoren und Warengruppen.)'; | |
479 | + | |
480 | +COMMENT ON COLUMN kontenplan._id_ IS 'interne id'; | |
481 | +COMMENT ON COLUMN kontenplan.konto_typ IS | |
482 | + 'FOREIGN KEY: Bestands-, Erfolgs- etc'; | |
483 | +COMMENT ON COLUMN kontenplan.name IS 'Bezeichnung des Kontenbereichs'; | |
484 | +COMMENT ON COLUMN kontenplan.nr_von IS 'Startwert der Kontonummern'; | |
485 | +COMMENT ON COLUMN kontenplan.nr_bis IS 'Wert von letzter gueltiger Nummer'; | |
486 | + | |
487 | +-- zu kontenplan a) | |
488 | +create unique index "kontenplan_ukey1" on kontenplan (konto_typ, name); | |
489 | + | |
490 | +COMMENT ON INDEX kontenplan_ukey1 IS 'siehe COMMENT zu TABLE koentenplan a)'; | |
491 | + | |
492 | +select public.start_logging('kontenplan', 'ALL'); | |
493 | + | |
494 | +create table "konto" ( | |
495 | + "kto_nr" int4 NOT NULL PRIMARY KEY, -- Kontonummer, intern | |
496 | + "name" text NULL, -- Kontobezeichnung (Kasse etc.) | |
497 | + "konto_typ" bit varying NOT NULL, -- Typ (AKTIVA, DEBITOR...) | |
498 | + "saldo_soll" numeric(10,2) DEFAULT 0.0 NOT NULL, -- Saldo im soll | |
499 | + "saldo_haben" numeric(10,2) DEFAULT 0.0 NOT NULL, -- Saldo im haben | |
500 | + "summe" numeric(10,2) DEFAULT 0.0 NOT NULL, -- Gesamtsumme des Kontos | |
501 | + "blz" varchar(8) NULL, -- Bankleitzahl (falls vorhanden) | |
502 | + "b_kto_nr" text NULL, -- Bank-Kontonummer (falls vorhanden) | |
503 | + "b_name" text NULL, -- Name der Bank | |
504 | + CONSTRAINT fk_konto1 | |
505 | + FOREIGN KEY (konto_typ) REFERENCES konten_typen (mask) | |
506 | + ON DELETE CASCADE | |
507 | + ON UPDATE CASCADE); | |
508 | + | |
509 | +COMMENT ON TABLE konto IS 'Repraesentation eines Kontos fuer die Buchfuehrung'; | |
510 | + | |
511 | +COMMENT ON COLUMN konto.kto_nr IS 'Kontonummer, intern'; | |
512 | +COMMENT ON COLUMN konto.name IS 'Kontobezeichnung (Kasse etc.)'; | |
513 | +COMMENT ON COLUMN konto.konto_typ IS 'FOREIGN KEY: Typ (AKTIVA, DEBITOR...)'; | |
514 | +COMMENT ON COLUMN konto.saldo_soll IS 'Saldo im soll'; | |
515 | +COMMENT ON COLUMN konto.saldo_haben IS 'Saldo im haben'; | |
516 | +COMMENT ON COLUMN konto.summe IS 'Gesamtsumme des Kontos'; | |
517 | +COMMENT ON COLUMN konto.blz IS 'Bankleitzahl (falls vorhanden)'; | |
518 | +COMMENT ON COLUMN konto.b_kto_nr IS 'Bank-Kontonummer (falls vorhanden)'; | |
519 | +COMMENT ON COLUMN konto.b_name IS 'Name der Bank'; | |
520 | + | |
521 | +select public.start_logging('konto', 'ALL'); | |
522 | + | |
523 | +create table "buchung" ( | |
524 | + "kto_soll" int4 NOT NULL, -- Buchung von Konto | |
525 | + "kto_haben" int4 NOT NULL, -- nach Konto | |
526 | + "be_nr" varchar(10) NOT NULL, -- Belegnummer | |
527 | + "bu_date" date NOT NULL, -- Buchungsdatum | |
528 | + "buchungstext" text NULL, -- Zusatzinformationen | |
529 | + "betrag" numeric(10,2) NOT NULL, -- Betrag der Buchung | |
530 | + PRIMARY KEY (be_nr, bu_date), | |
531 | + CONSTRAINT fk_buchung1 FOREIGN KEY (kto_soll) REFERENCES konto (kto_nr) | |
532 | + ON UPDATE CASCADE | |
533 | + ON DELETE CASCADE, | |
534 | + CONSTRAINT fk_buchung2 FOREIGN KEY (kto_haben) REFERENCES konto (kto_nr) | |
535 | + ON UPDATE CASCADE | |
536 | + ON DELETE CASCADE); | |
537 | + | |
538 | +COMMENT ON TABLE buchung IS 'alle Buchungsaetze zwischen Konten: | |
539 | +------------------------------------ | |
540 | +mehrteilige Buchungen werden als mehrere Buchungen zur gleichen Belegnummer | |
541 | +und dem gleichen Datum erfasst. Es soll auch moeglich sein einen Beleg an | |
542 | +mehreren Tagen zu Buchen. Daher die wahl des Primaerschluessels als | |
543 | +kombination von kto_soll, kto_haben, be_nr, bu_date.'; | |
544 | + | |
545 | +COMMENT ON COLUMN buchung.kto_soll IS 'FOREIGN KEY: Buchung von Konto'; | |
546 | +COMMENT ON COLUMN buchung.kto_haben IS 'FOREIGN KEY: nach Konto'; | |
547 | +COMMENT ON COLUMN buchung.be_nr IS 'Belegnummer'; | |
548 | +COMMENT ON COLUMN buchung.bu_date IS 'Buchungsdatum'; | |
549 | +COMMENT ON COLUMN buchung.buchungstext IS 'Zusatzinformationen'; | |
550 | +COMMENT ON COLUMN buchung.betrag IS 'Betrag der Buchung'; | |
551 | + | |
552 | +-- alle Funktionen zu Konten | |
553 | +\i plpgsql_funcs/cr_func_konto.sql | |
554 | + | |
555 | +select public.start_logging('buchung', 'ALL'); | |
556 | + | |
557 | +-- Rules um die Bitmasken einheitlich zu halten. | |
558 | +-- Dafuer hatte ich vorher einen Trigger, aber ich denke das ist sinnvoller | |
559 | +-- in Rules zu implementiern. | |
560 | +-- Das kann ich leider nicht machen, fuer inserts funktioniert das noch, | |
561 | +-- aber leider muessten updates-rules nach den rewrite entweder eine andere | |
562 | +-- action oder eine andere Zielrelation haben, beides kann ich nicht machne, | |
563 | +-- da ich nur den Wert veraendern will. | |
564 | +-- Daher bleibt mir nichts anderes uebrig als trigger zu nehmen. | |
565 | + | |
566 | +set search_path to trigger_func; | |
567 | + | |
568 | +\i trigger_funcs/cr_trigger_func_konto.sql | |
569 | + | |
570 | +-- Trigger | |
571 | +-- Dieser Trigger hat bevor ich obige Rules hatte die Bitmasken in ordnung | |
572 | +-- gehalten, jetzt wird er nicht mehr gebraucht! | |
573 | +create trigger valid_mask_trigger_before | |
574 | + BEFORE INSERT OR UPDATE ON fibu.konten_typen FOR EACH ROW | |
575 | + EXECUTE PROCEDURE create_valid_mask_before('fibu.konten_typen'); | |
576 | +create trigger valid_mask_trigger_after | |
577 | + AFTER INSERT OR UPDATE ON fibu.konten_typen FOR EACH ROW | |
578 | + EXECUTE PROCEDURE create_valid_mask_after('fibu.konten_typen'); | |
579 | +COMMENT ON TRIGGER valid_mask_trigger_before ON fibu.konten_typen IS | |
580 | +'wird ein neuer Kontentyp eingefuegt oder aber ein Kontentyp geaendert ' | |
581 | +'so muss sicher gestellt sein, das alle Typen die gleiche laenge haben, ' | |
582 | +'da sich sonst keine logischen Operationen mit ihnen ausfuehren lassen.'; | |
583 | +COMMENT ON TRIGGER valid_mask_trigger_after ON fibu.konten_typen IS | |
584 | +'wird ein neuer Kontentyp eingefuegt oder aber ein Kontentyp geaendert ' | |
585 | +'so muss sicher gestellt sein, das alle Typen die gleiche laenge haben, ' | |
586 | +'da sich sonst keine logischen Operationen mit ihnen ausfuehren lassen.'; | |
587 | + | |
588 | +create trigger fibu_trigger1_on_ref_count_null_del_konto | |
589 | + AFTER UPDATE ON fibu.used_konten FOR EACH ROW | |
590 | + EXECUTE PROCEDURE on_ref_count_null_del_konto(); | |
591 | +COMMENT ON TRIGGER fibu_trigger1_on_ref_count_null_del_konto | |
592 | + ON fibu.used_konten IS | |
593 | +'Wenn niemand mehr auf das konto referenziert kann der entsprechende | |
594 | +Eintrag in der Tabelle konto geloescht werden.'; | |
595 | + | |
596 | +-- zu kontenplan b) | |
597 | +create trigger fibu_trigger1_on_change_check_ranges | |
598 | + BEFORE INSERT OR UPDATE ON fibu.kontenplan FOR EACH ROW | |
599 | + EXECUTE PROCEDURE on_change_kontenplan_check_ranges(); | |
600 | +COMMENT ON TRIGGER fibu_trigger1_on_change_check_ranges | |
601 | + ON fibu.kontenplan IS 'siehe COMMENT zu TABLE koentenplan b)'; | |
602 | + | |
603 | +-- zu kontenplan c) | |
604 | +create trigger fibu_trigger2_on_insert_create_used_konten | |
605 | + AFTER INSERT ON fibu.kontenplan FOR EACH ROW | |
606 | + EXECUTE PROCEDURE on_insert_kontenplan_create_used_konten(); | |
607 | +COMMENT ON TRIGGER fibu_trigger2_on_insert_create_used_konten | |
608 | + ON fibu.kontenplan IS 'siehe COMMENT zu TABLE koentenplan c)'; | |
609 | + | |
610 | +-- zu kontenplan d) | |
611 | +create trigger fibu_trigger3_on_update_update_used_konten | |
612 | + AFTER UPDATE ON fibu.kontenplan FOR EACH ROW | |
613 | + EXECUTE PROCEDURE on_update_kontenplan_upd_used_konten(); | |
614 | +COMMENT ON TRIGGER fibu_trigger3_on_update_update_used_konten | |
615 | + ON fibu.kontenplan IS 'siehe COMMENT zu TABLE koentenplan c)'; | |
616 | + | |
617 | +-- zu kontenplan e) | |
618 | +create trigger fibu_trigger4_on_delete_del_used_konten | |
619 | + AFTER DELETE ON fibu.kontenplan FOR EACH ROW | |
620 | + EXECUTE PROCEDURE on_delete_kontenplan_del_used_konten(); | |
621 | +COMMENT ON TRIGGER fibu_trigger4_on_delete_del_used_konten | |
622 | + ON fibu.kontenplan IS 'siehe COMMENT zu TABLE koentenplan e)'; | |
623 | +-- Trigger ende | |
624 | + | |
625 | +set search_path to fibu; | |
626 | + | |
627 | +insert into konten_typen (mask, name) values (B'1','BESTAND'); | |
628 | +insert into konten_typen (mask, name) values (konto_typ('BESTAND',2)| | |
629 | + B'10', 'AKTIVA'); | |
630 | +insert into konten_typen (mask, name) values (konto_typ('AKTIVA',3)| | |
631 | + B'100', 'ANLAGE'); | |
632 | +insert into konten_typen (mask, name) values (konto_typ('AKTIVA',4)| | |
633 | + B'1000', 'UMLAUF'); | |
634 | +insert into konten_typen (mask, name) values (konto_typ('UMLAUF',5)| | |
635 | + B'10000','DEBITOR'); | |
636 | +insert into konten_typen (mask, name) values (konto_typ('BESTAND',6)| | |
637 | + B'100000','PASSIVA'); | |
638 | +insert into konten_typen (mask, name) values (konto_typ('PASSIVA',7)| | |
639 | + B'1000000','EIGEN'); | |
640 | +insert into konten_typen (mask, name) values (konto_typ('PASSIVA',8)| | |
641 | + B'10000000','FREMD'); | |
642 | +insert into konten_typen (mask, name) values (konto_typ('FREMD',9)| | |
643 | + B'100000000','KREDITOR'); | |
644 | +insert into konten_typen (mask, name) values (B'1000000000','ERFOLG'); | |
645 | +insert into konten_typen (mask, name) values (konto_typ('ERFOLG',11)| | |
646 | + B'10000000000','ERTRAG'); | |
647 | +insert into konten_typen (mask, name) values (konto_typ('ERFOLG',12)| | |
648 | + B'100000000000','AUFWAND'); | |
649 | + | |
650 | +insert into kontenplan (konto_typ, name, nr_von, nr_bis) values | |
651 | + (konto_typ('ANLAGE',konto_typ_min_len()), 'Anlagevermögen', 100, 109); | |
652 | + | |
653 | +insert into kontenplan (konto_typ, name, nr_von, nr_bis) values | |
654 | + (konto_typ('UMLAUF',konto_typ_min_len()), | |
655 | + 'Umlaufvermögen ohne Forderungen LL', 110, 119); | |
656 | + | |
657 | +insert into kontenplan (konto_typ, name, nr_von, nr_bis) values | |
658 | + (konto_typ('DEBITOR',konto_typ_min_len()), 'Forderungen LL', 1000, 1999); | |
659 | + | |
660 | +insert into kontenplan (konto_typ, name, nr_von, nr_bis) values | |
661 | + (konto_typ('EIGEN',konto_typ_min_len()), 'Eigenkapital', 200, 209); | |
662 | + | |
663 | +insert into kontenplan (konto_typ, name, nr_von, nr_bis) values | |
664 | + (konto_typ('FREMD',konto_typ_min_len()), | |
665 | + 'Fremdkapital ohne Verbindlichkeiten LL', 210, 219); | |
666 | + | |
667 | +insert into kontenplan (konto_typ, name, nr_von, nr_bis) values | |
668 | + (konto_typ('KREDITOR',konto_typ_min_len()), | |
669 | + 'Verbindlichkeiten LL', 2000, 2999); | |
670 | + | |
671 | +insert into kontenplan (konto_typ, name, nr_von, nr_bis) values | |
672 | + (konto_typ('ERTRAG',konto_typ_min_len()), 'Erträge', 3000, 3999); | |
673 | + | |
674 | +insert into kontenplan (konto_typ, name, nr_von, nr_bis) values | |
675 | + (konto_typ('AUFWAND',konto_typ_min_len()), 'Aufwendungen', 4000, 4999); | |
676 | + | |
677 | +select inc_konto_ref_count( | |
678 | + ins_konto(NULL, 'Hardware', konto_typ('ANLAGE',konto_typ_min_len()), | |
679 | + NULL, NULL, NULL)); | |
680 | +select inc_konto_ref_count( | |
681 | + ins_konto(NULL, 'Software', konto_typ('ANLAGE',konto_typ_min_len()), | |
682 | + NULL, NULL, NULL)); | |
683 | +select inc_konto_ref_count( | |
684 | + ins_konto(NULL, 'Kasse', konto_typ('UMLAUF',konto_typ_min_len()), | |
685 | + NULL, NULL, NULL)); | |
686 | +select inc_konto_ref_count( | |
687 | + ins_konto(NULL, 'Bankkonto', konto_typ('UMLAUF',konto_typ_min_len()), | |
688 | + '20110022', '3 003 938 178', 'Postbank (Spar) Hamburg')); | |
689 | +select inc_konto_ref_count( | |
690 | + ins_konto(NULL, 'Forderungen sonstige', | |
691 | + konto_typ('UMLAUF',konto_typ_min_len()), | |
692 | + NULL, NULL, NULL)); | |
693 | +select inc_konto_ref_count( | |
694 | + ins_konto(NULL, 'Eigenkapital', konto_typ('EIGEN',konto_typ_min_len()), | |
695 | + NULL, NULL, NULL)); | |
696 | +select inc_konto_ref_count( | |
697 | + ins_konto(NULL, 'Privatkonto', konto_typ('EIGEN',konto_typ_min_len()), | |
698 | + NULL, NULL, NULL)); | |
699 | +select inc_konto_ref_count( | |
700 | + ins_konto(NULL, 'Kredite', konto_typ('FREMD',konto_typ_min_len()), | |
701 | + NULL, NULL, NULL)); | |
702 | +select inc_konto_ref_count( | |
703 | + ins_konto(NULL, 'Verbindlichkeiten wiedekehrend', | |
704 | + konto_typ('FREMD',konto_typ_min_len()), | |
705 | + NULL, NULL, NULL)); | |
706 | +select inc_konto_ref_count( | |
707 | + ins_konto(NULL, 'Verbindlichkeiten sonstige', | |
708 | + konto_typ('FREMD',konto_typ_min_len()), | |
709 | + NULL, NULL, NULL)); | |
710 | + | |
711 | +set search_path to public; | |
712 | +-- ] | |
713 | +-- ende Konto -- | |
714 | + | |
715 | +-- Benutzerdaten | |
716 | +-- [ | |
717 | +set search_path to benutzer; | |
718 | + | |
719 | +create table benutzer ( | |
720 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
721 | + "user_name" text NOT NULL, -- Shop- und DB-Benutzername | |
722 | + -- Passwort brauchen wir nicht, wir werden ueber die DB authentifiziert. | |
723 | + --"password" text NOT NULL, -- Shop- und DB-Passwort | |
724 | + "id_person" int4 NULL, -- falls Person, sonst NULL | |
725 | + "id_firma" int4 NULL, -- falls Firma, sonst NULL | |
726 | + "u_typ" bit(3) NOT NULL DEFAULT B'001',-- 001-Kunde, 010-Anbieter, 100-Admin | |
727 | + CONSTRAINT fk_benutzer1 | |
728 | + FOREIGN KEY (id_person) REFERENCES person.person (_id_) | |
729 | + ON DELETE CASCADE | |
730 | + ON UPDATE CASCADE, | |
731 | + CONSTRAINT fk_benutzer2 | |
732 | + FOREIGN KEY (id_firma) REFERENCES firma.firma (_id_) | |
733 | + ON DELETE CASCADE | |
734 | + ON UPDATE CASCADE); | |
735 | + | |
736 | +COMMENT ON TABLE benutzer IS '<U>username, passwort usw.:</U><BR>' | |
737 | + 'bei id_kunde, id_admin, id_lieferant gilt dasselbe wie schon bei' | |
738 | + 'den Kunden oder den Anbietern in etwas abgewandelter form. <BR>' | |
739 | + 'Hier muss mindestens eines der Attribute NOT NULL sei, aber es duerfen ' | |
740 | + 'auch alle not NULL sein.<BR>' | |
741 | + 'Zur Erinnerung, bei Kunden durfte immer nur entweder id_person oder ' | |
742 | + 'id_firma einen Wert haben, das jeweils andere Attribut musste NULL sein.'; | |
743 | + | |
744 | +COMMENT ON COLUMN benutzer._id_ IS 'interne id'; | |
745 | +COMMENT ON COLUMN benutzer.user_name IS 'Shop- und DB-Benutzername'; | |
746 | +--COMMENT ON COLUMN benutzer.password IS 'Shop- und DB-Passwort'; | |
747 | +COMMENT ON COLUMN benutzer.id_person IS 'FOREIGN KEY: falls Person, sonst NULL'; | |
748 | +COMMENT ON COLUMN benutzer.id_firma IS 'FOREIGN KEY: falls Firma, sonst NULL'; | |
749 | +COMMENT ON COLUMN benutzer.u_typ IS '001-Kunde, 010-Anbieter, 100-Admin'; | |
750 | + | |
751 | +select public.start_logging('benutzer', 'ALL'); | |
752 | + | |
753 | +set search_path to trigger_func,benutzer; | |
754 | +\i trigger_funcs/cr_trigger_func_benutzer.sql | |
755 | + | |
756 | +CREATE trigger benutzer_trigger1_on_change_one_null | |
757 | + BEFORE INSERT OR UPDATE ON benutzer.benutzer FOR EACH ROW | |
758 | + EXECUTE PROCEDURE on_change_one_null(); | |
759 | +COMMENT ON TRIGGER benutzer_trigger1_on_change_one_null ON | |
760 | + benutzer.benutzer IS 'stellt sicher das immer nur entweder eine Firma ' | |
761 | + 'oder eine Person der Benutzer ist.'; | |
762 | + | |
763 | +-- OK, man koennte fragen warum eine Firma ein Benutzer sein sollte, aber | |
764 | +-- so kann ich zwischen Privat und fuer Firmen genutzten Benutzeraccounts | |
765 | +-- unterscheiden. | |
766 | + | |
767 | +set search_path to benutzer; | |
768 | + | |
769 | +create table rechte ( | |
770 | + "mask" bit varying NOT NULL PRIMARY KEY, -- rechte-Maske | |
771 | + "name" text NOT NULL, -- Rechte-Name | |
772 | + "beschreibung" text NULL); -- Beschreibung | |
773 | + | |
774 | +COMMENT ON TABLE rechte IS | |
775 | + 'Alle Rechte die ein Admin haben kann mit den entsprechenden Masken\n' | |
776 | + 'Hier werden nur grundlegende Rechtegebiete gespeichert. Diese sind\n' | |
777 | + 'zur Zeit:<BR>\n' | |
778 | + '<UL>\n' | |
779 | + '<LI><B>benutzer</B> = 1 <I>Zugang zur Benutzerverwaltung</I></LI>\n' | |
780 | + '<LI><B>person</B> = 10 <I>Zugang zur Personendaten</I></LI>\n' | |
781 | + '<LI><B>firma</B> = 100 <I>Zugang zur Firmendaten</I></LI>\n' | |
782 | + '<LI><B>fibu</B> = 1000 <I>Zugang zur Shop-Fibu</I></LI>\n' | |
783 | + '<LI><B>warengruppe</B> = 10000 <I>Zugang zu WGs aller Anbieter</I></LI>\n' | |
784 | + '<LI><B>produkte</B> = 100000 <I>Zugang zu Prod aller Anbieter</I></LI>\n' | |
785 | + '<LI><B>rechte</B> = 1000000 <I>Zugang zu Rechtesystem</I></LI>\n' | |
786 | + '</UL>\n' | |
787 | + '<BR>Um zu sehen welche Rechte ein admin in einem bestimmten Bereich hat\n' | |
788 | + 'gibt es die Tabelle effektive_rechte. (siehe Beschreibung dort)<BR>\n' | |
789 | + 'Gehoeren mehrere Tabellen zu den Gebiete, so hat der Admin die gesetzten\n' | |
790 | + 'Rechte an allen Tabellen dieses Gebites.<BR>\n' | |
791 | + 'Die im Moment eingetragenen Rechte betreffen hauptsaechlich\n' | |
792 | + 'Datenbankzugriffe, man koennte sich vorstellen weiter Rechte wie z.B.\n' | |
793 | + 'Newsletteradmin einzutragen. Bei diesen wuerde dann entweder gar kein\n' | |
794 | + 'Eintrag in effektive Rechte noetig sein, oder aber nur das feld spicial\n' | |
795 | + 'ist wichtig.'; | |
796 | + | |
797 | +COMMENT ON COLUMN rechte.mask IS 'rechte-Maske'; | |
798 | +COMMENT ON COLUMN rechte.name IS 'Rechte-Name'; | |
799 | +COMMENT ON COLUMN rechte.beschreibung IS 'Beschreibung'; | |
800 | + | |
801 | +select public.start_logging('rechte', 'ALL'); | |
802 | + | |
803 | +set search_path to trigger_func,benutzer; | |
804 | +\i trigger_funcs/cr_trigger_func_rechte.sql | |
805 | + | |
806 | +-- Hier muss genau wie bei den Kontentypen darauf geachtet werden das die | |
807 | +-- Bitmasken immer eine einheitlich laenge haben. | |
808 | +create trigger valid_mask_trigger_before | |
809 | + BEFORE INSERT OR UPDATE ON benutzer.rechte FOR EACH ROW | |
810 | + EXECUTE PROCEDURE create_valid_mask_before('benutzer.rechte'); | |
811 | +create trigger valid_mask_trigger_after | |
812 | + AFTER INSERT OR UPDATE ON benutzer.rechte FOR EACH ROW | |
813 | + EXECUTE PROCEDURE create_valid_mask_after('benutzer.rechte'); | |
814 | + | |
815 | +set search_path to benutzer; | |
816 | + | |
817 | +insert into rechte (mask, name, beschreibung) values | |
818 | + (B'1', 'user', 'Zugang zur Benutzerverwaltung'); | |
819 | +insert into rechte (mask, name, beschreibung) values | |
820 | + (B'10', 'person', 'Zugang zur Personendaten'); | |
821 | +insert into rechte (mask, name, beschreibung) values | |
822 | + (B'100', 'firma' , 'Zugang zur Firmendaten'); | |
823 | +insert into rechte (mask, name, beschreibung) values | |
824 | + (B'1000', 'fibu' , 'Zugang zur Shop-Fibu'); | |
825 | +insert into rechte (mask, name, beschreibung) values | |
826 | + (B'10000', 'warengruppe', 'Zugang zu WGs aller Anbieter'); | |
827 | +insert into rechte (mask, name, beschreibung) values | |
828 | + (B'100000', 'produkt', 'Zugang zu Prod aller Anbieter'); | |
829 | +insert into rechte (mask, name, beschreibung) values | |
830 | + (B'1000000', 'rules', 'Zugang zu Rechtesystem'); | |
831 | + | |
832 | +--CREATE trigger rechte_trigger2_on_chg_or_del_clean_effektive_rechte | |
833 | +-- BEFORE UPDATE OR DELETE ON benutzer.rechte FOR EACH ROW | |
834 | +-- EXECUTE PROCEDURE clean_effektive_rechte(); | |
835 | + | |
836 | +-- Stattdessen bietet sich eine rule an, da ich nicht viel Logic brauche | |
837 | +-- sondern einfach nur nen update auf effektive rechte mache. Etwa so... | |
838 | +-- erstmal ne Rule um die Breite der mask konsistent zu halten.... | |
839 | +--CREATE RULE clean_effektive_rechte_1 AS | |
840 | +-- ON UPDATE OR DELETE TO rechte | |
841 | +-- DO ( UPDATE effektive_rechte SET | |
842 | + | |
843 | +create table admin ( | |
844 | + "id_benutzer" int4 NOT NULL PRIMARY KEY, -- Benutzer des Admin | |
845 | + "rechte" bit varying DEFAULT B'0' NOT NULL, -- kombination von RechteMasken | |
846 | + CONSTRAINT fk_admin1 | |
847 | + FOREIGN KEY (id_benutzer) REFERENCES benutzer (_id_) | |
848 | + ON DELETE CASCADE | |
849 | + ON UPDATE CASCADE); | |
850 | + | |
851 | +COMMENT ON TABLE admin IS | |
852 | +'<U>Hier werden alle Benutzer die Admins sind mit den passenden Attributen ' | |
853 | +' gespeichert:</U><BR><BR>' | |
854 | +'zwar ist rechte kein FOREIGN KEY auf rechte, aber trotzdem muss' | |
855 | +'ueber einen Trigger sichergestellt werden das wenn Rechte geloescht' | |
856 | +'oder geandert werden die Masken hier angepasst werden.' | |
857 | +'Beim loeschen ist das recht einfach, man loescht einfach bei allen' | |
858 | +'Admins das entsprechende bit in ihrer Maske, schwere ist das wenn' | |
859 | +'ein Recht in rechte geaendert wird, dann habe ich quasi keine chance' | |
860 | +'noch zu checke ob Admins die das entsprechende Bit gesetzt haben immer' | |
861 | +'noch die passenden rechte haben. Die Loesung hier ist ueber einen' | |
862 | +'Trigger alle UPDATES auf Rechte abzuschmettern.'; | |
863 | + | |
864 | +COMMENT ON COLUMN admin.rechte IS 'kombination von RechteMasken'; | |
865 | +COMMENT ON COLUMN admin.id_benutzer IS 'FOREIGN KEY: Benutzerdaten des Admin'; | |
866 | + | |
867 | +select public.start_logging('admin', 'ALL'); | |
868 | + | |
869 | +create table effektive_rechte ( | |
870 | + id_admin int4 NOT NULL, -- Id des Admin zu dem die Rechte gehoeren. | |
871 | + mask bit varying NOT NULL, -- Maske ueber die Rechte fuer die diese | |
872 | + -- Enstellung gelten soll, diese darf sich | |
873 | + -- nicht mit anderen recht_masken zu einer | |
874 | + -- id_admin ueberschneiden, (Trigger). | |
875 | + -- ausserdem muss zu allen Bits dieser Maske | |
876 | + -- auch ein Eintrag in rechte vorhanden sein, | |
877 | + -- (ein weitere Trigger, oder sogar mehrere, | |
878 | + -- einer beim update, einfuegen hier und einer | |
879 | + -- beim update, loeschen in rechte) | |
880 | + r_add boolean NOT NULL DEFAULT 'f', -- eintraege hinzufuegen | |
881 | + r_delete boolean NOT NULL DEFAULT 'f', -- eintraege loeschen | |
882 | + r_update boolean NOT NULL DEFAULT 'f', -- eintraege aktualisieren | |
883 | + special bit varying NULL, -- spezielle Rechte | |
884 | + PRIMARY KEY (id_admin, mask), | |
885 | + CONSTRAINT fk_effektive_rechte | |
886 | + FOREIGN KEY (id_admin) REFERENCES admin (id_benutzer) | |
887 | + ON DELETE CASCADE | |
888 | + ON UPDATE CASCADE); | |
889 | + | |
890 | +COMMENT ON TABLE effektive_rechte IS | |
891 | + 'Diese Tablle dient dazu genau zu beschreiben was ein admin in einem\n' | |
892 | + 'der Gebiete (aus rechte) fuer die er Eingetragen ist fuer Rechte hat.\n' | |
893 | + 'insbesondere, ob er adden, deleten und/oder updaten darf.<BR>\n' | |
894 | + 'Die hier eingetragene recht_maske kann mehrere Rechte umfassen (im\n' | |
895 | + 'folgenden Text Rechtegruppe genannt), dann gelten die Einstellungen\n' | |
896 | + 'fuer alle Rechte dieser Rechtegruppe. Wird die Einstellung fuer ein\n' | |
897 | + 'Recht oder eine Rechtegruppe nachtraeglich geaendert, so wird zuerst\n' | |
898 | + 'nachgesehen ob bereits Eintraege zu diesen Rechten vorhanden sind.\n' | |
899 | + 'Diese werden aus den Rechtegruppen in denen sie waren ausgekoppelt und\n' | |
900 | + 'als Einzeleintraege neu eingetragen. Dabei werden dann auch gleich die\n' | |
901 | + 'zu aendernden Attribute neu gesetzt.<BR>\n' | |
902 | + 'Das Feld special dient zum speichern etwaiger besonderer Rechte, z.B.\n' | |
903 | + 'Wenn eine Tabelle des Gebiets nur von bestimmten Admins geandert werden\n' | |
904 | + 'darf kann hier nochmal ein Bit gesetzt werden das eine solche\n' | |
905 | + 'Unterscheidung moeglich macht.'; | |
906 | + | |
907 | +COMMENT ON COLUMN effektive_rechte.id_admin IS | |
908 | + 'Id des Admin zu dem die Rechte gehoeren.'; | |
909 | +COMMENT ON COLUMN effektive_rechte.mask IS | |
910 | + 'Maske ueber die Rechte fuer die diese Enstellung gelten soll, diese\n' | |
911 | + 'darf sich nicht mit anderen recht_masken zu einer id_admin\n' | |
912 | + 'ueberschneiden, (Trigger).<BR>\n' | |
913 | + 'ausserdem muss zu allen Bits dieser Maske auch ein Eintrag in rechte\n' | |
914 | + 'vorhanden sein, (ein weitere Trigger, oder sogar mehrere, einer beim\n' | |
915 | + 'update, einfuegen hier und einer beim update, loeschen in rechte)'; | |
916 | +COMMENT ON COLUMN effektive_rechte.r_add IS 'eintraege hinzufuegen'; | |
917 | +COMMENT ON COLUMN effektive_rechte.r_delete IS 'eintraege loeschen'; | |
918 | +COMMENT ON COLUMN effektive_rechte.r_update IS 'eintraege aktualisieren'; | |
919 | +COMMENT ON COLUMN effektive_rechte.special IS 'spezielle Rechte'; | |
920 | + | |
921 | +select public.start_logging('effektive_rechte', 'ALL'); | |
922 | + | |
923 | +-- hier fehlt noch fast alles...is nur schon mal da das ichs nich vergesse :-) | |
924 | +-- is die frage ob ich das ueberhaupt brauch wenn ich das session management | |
925 | +-- von JSP/struts oder PHP nutze....sprich das SessionManagement programmatisch | |
926 | +-- umsetze... | |
927 | +create table session ( | |
928 | + sess_id text NOT NULL PRIMARY KEY); | |
929 | + | |
930 | +COMMENT ON TABLE session IS | |
931 | + 'Hier werden alle Information zu Sitzungen am Shop gespeichert...' | |
932 | + 'es fehlt aber quasi noch alles!'; | |
933 | + | |
934 | +create table "kunde" ( | |
935 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
936 | + "kd_nr" text NOT NULL, -- Kundennummer | |
937 | + "konto1" int4 NOT NULL, -- Debitor-Konto (Rechnung) | |
938 | + "konto2" int4 NOT NULL, -- Kreditor-Konto (Vorkasse) | |
939 | + "id_benutzer" int4 NOT NULL, -- Benutzerdaten des Kunden | |
940 | + CONSTRAINT fk_kunde1 | |
941 | + FOREIGN KEY (konto1) REFERENCES fibu.used_konten (kto_nr) | |
942 | + ON DELETE CASCADE | |
943 | + ON UPDATE CASCADE, | |
944 | + CONSTRAINT fk_kunde2 | |
945 | + FOREIGN KEY (konto2) REFERENCES fibu.used_konten (kto_nr) | |
946 | + ON DELETE CASCADE | |
947 | + ON UPDATE CASCADE, | |
948 | + CONSTRAINT fk_kunde3 | |
949 | + FOREIGN KEY (id_benutzer) REFERENCES benutzer.benutzer (_id_) | |
950 | + ON DELETE CASCADE | |
951 | + ON UPDATE CASCADE); | |
952 | + | |
953 | +COMMENT ON TABLE kunde IS 'Kundeninformationen: | |
954 | +---------------------------- | |
955 | +Hier gibt es wieder was zu beachten und zu automatisieren. | |
956 | +a) beim einfuegen eines kunden muss, | |
957 | + a.a) wenn kontonummern mit angegeben werden, geprueft werden ob diese | |
958 | + wirklich den richtigen Typ haben, ob sie ueberhaupt schon in Konto | |
959 | + engetragen sind, wenn nicht muß dies passieren vorausgesetzt der Typ | |
960 | + stimmt, und in used_konten muss used auf true gesetzt werden, dies | |
961 | + kann ruhig auch gemacht werden wenn die Konten bereits genutzt | |
962 | + wurden. | |
963 | + a.b) wenn keine kontonummern mit angegeben werden muessen automatisch | |
964 | + passende Konten angelegt werden und die Nummern eingesetzt werden. | |
965 | + Auch hier muss natuerlich used_konten angepasst werden. | |
966 | +b) beim aendern eines kunden muss, | |
967 | + b.a) wenn kontonummern mit angegeben werden, muessen diese wie beim | |
968 | + einfuegen kontrolliert werden bevor sie eingefuegt werden. | |
969 | + ausserdem muß der ref_count bei den alten konten runter und bei | |
970 | + den neuen rauf gesetzt werden. (Das laeuft darauf hinaus das ich | |
971 | + einmal ins_konto mache, das gibt mir die Kontonummer zurueck wenn | |
972 | + das Konto schon existierte oder wenn es angelegt wurde und ich | |
973 | + mich dann um die ref_counts kuemmere.) | |
974 | + b.b) wenn keine kontonummern mit angegeben werden, die alten beibehalten, | |
975 | + also in der Triggerfunc wieder auf die neuen uebertragen werden. | |
976 | +c) beim loeschen eines kunden, sofern keine anderer Kunde oder Anbieter | |
977 | + mehr das Konto nutzt kann es geloescht werden und used in used_konten | |
978 | + wieder auf false gesetzt werden. (OK, hier kommt gleich eine Schwaeche | |
979 | + des aktuellen System zum vorschein, naemlich das man nicht leicht | |
980 | + feststellen kann ob das Konto noch genutzt wird....abhilfe schaffe ich | |
981 | + indem ich used in used_konten von boolean auf int4 umstelle und definiere | |
982 | + 0 ist ungenutzt und sobald einer das konto nutzt wird used um 1 | |
983 | + hochgezaehlt, nutzt einer es nicht mehr wird used um 1 runtergezaehlt. | |
984 | + (ist gemacht, Kommentar loeschen sobald es getestet ist!)'; | |
985 | + | |
986 | +COMMENT ON COLUMN kunde._id_ IS 'interne id'; | |
987 | +COMMENT ON COLUMN kunde.kd_nr IS 'Kundennummer'; | |
988 | +COMMENT ON COLUMN kunde.konto1 IS 'FOREIGN KEY: Debitor-Konto (Rechnung)'; | |
989 | +COMMENT ON COLUMN kunde.konto2 IS 'FOREIGN KEY: Kreditor-Konto (Vorkasse)'; | |
990 | +COMMENT ON COLUMN kunde.id_benutzer IS 'FOREIGN KEY: Benutzerdaten'; | |
991 | + | |
992 | +COMMENT ON CONSTRAINT fk_kunde1 ON kunde IS | |
993 | +'wird ein Konto aus used_konten geloescht oder dessen _id_ veraendert, | |
994 | +so soll eine entsprechende anpassung hier stattfinden, das gilt auch | |
995 | +fuer alle weiteren Tabellen die Konten nutzen. | |
996 | +ob es sinnvoll ist einen Kunden zu loeschen wenn ein entsprechnder | |
997 | +Eintrag in used_konten geloescht wird muss nochmal ueberdacht werden.'; | |
998 | +COMMENT ON CONSTRAINT fk_kunde2 ON kunde IS | |
999 | +'wird ein Konto aus used_konten geloescht oder dessen _id_ veraendert, | |
1000 | +so soll eine entsprechende anpassung hier stattfinden, das gilt auch | |
1001 | +fuer alle weiteren Tabellen die Konten nutzen. | |
1002 | +ob es sinnvoll ist einen Kunden zu loeschen wenn ein entsprechnder | |
1003 | +Eintrag in used_konten geloescht wird muss nochmal ueberdacht werden.'; | |
1004 | + | |
1005 | +create unique index "kunde_ukey" on kunde (kd_nr); | |
1006 | + | |
1007 | +\i plpgsql_funcs/cr_func_kunde.sql | |
1008 | + | |
1009 | +select public.start_logging('kunde', 'ALL'); | |
1010 | + | |
1011 | +set search_path to trigger_func,benutzer; | |
1012 | + | |
1013 | +-- Trigger | |
1014 | +CREATE trigger kunde_trigger2_on_insert_create_konten | |
1015 | + BEFORE INSERT ON benutzer.kunde FOR EACH ROW | |
1016 | + EXECUTE PROCEDURE on_insert_create_konten('DEBITOR','KREDITOR'); | |
1017 | +COMMENT ON TRIGGER kunde_trigger2_on_insert_create_konten | |
1018 | + ON benutzer.kunde IS 'siehe COMMENT zu TABLE kunde a)'; | |
1019 | + | |
1020 | +CREATE trigger kunde_trigger3_on_update_update_konten | |
1021 | + BEFORE UPDATE ON benutzer.kunde FOR EACH ROW | |
1022 | + EXECUTE PROCEDURE on_update_update_konten('DEBITOR','KREDITOR'); | |
1023 | +COMMENT ON TRIGGER kunde_trigger3_on_update_update_konten | |
1024 | + ON benutzer.kunde IS 'siehe COMMENT zu TABLE kunde b)'; | |
1025 | + | |
1026 | +CREATE trigger kunde_trigger4_on_delete_dec_konto_ref_count | |
1027 | + AFTER DELETE ON benutzer.kunde FOR EACH ROW | |
1028 | + EXECUTE PROCEDURE on_delete_dec_konto_ref_count(); | |
1029 | +COMMENT ON TRIGGER kunde_trigger4_on_delete_dec_konto_ref_count | |
1030 | + ON benutzer.kunde IS 'siehe COMMENT zu TABLE kunde c)'; | |
1031 | +-- Ende Trigger | |
1032 | + | |
1033 | +set search_path to benutzer; | |
1034 | + | |
1035 | +create table "anbieter" ( | |
1036 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
1037 | + "an_nr" text NOT NULL, -- Anbieternummer | |
1038 | + "konto1" int4 NOT NULL, -- Debitor-Konto (Vorkasse) | |
1039 | + "konto2" int4 NOT NULL, -- Kreditor-Konto (Rechnung) | |
1040 | + "id_benutzer" int4 NOT NULL, -- Benutzerdaten oder NULL | |
1041 | + CONSTRAINT fk_anbieter1 | |
1042 | + FOREIGN KEY (konto1) REFERENCES fibu.used_konten (kto_nr) | |
1043 | + ON DELETE CASCADE | |
1044 | + ON UPDATE CASCADE, | |
1045 | + CONSTRAINT fk_anbieter2 | |
1046 | + FOREIGN KEY (konto2) REFERENCES fibu.used_konten (kto_nr) | |
1047 | + ON DELETE CASCADE | |
1048 | + ON UPDATE CASCADE, | |
1049 | + CONSTRAINT fk_anbieter3 | |
1050 | + FOREIGN KEY (id_benutzer) REFERENCES benutzer.benutzer (_id_) | |
1051 | + ON DELETE CASCADE | |
1052 | + ON UPDATE CASCADE); | |
1053 | + | |
1054 | +COMMENT ON TABLE anbieter IS | |
1055 | +'Leute die Waren in meinem Shop anbieten:<BR>'; | |
1056 | + | |
1057 | +COMMENT ON COLUMN anbieter._id_ IS 'interne id'; | |
1058 | +COMMENT ON COLUMN anbieter.an_nr IS 'Anbieternummer'; | |
1059 | +COMMENT ON COLUMN anbieter.konto1 IS 'FOREIGN KEY: Debitor-Konto (Vorkasse)'; | |
1060 | +COMMENT ON COLUMN anbieter.konto2 IS 'FOREIGN KEY: Kreditor-Konto (Rechnung)'; | |
1061 | +COMMENT ON COLUMN anbieter.id_benutzer IS 'FOREIGN KEY: Benutzerdaten:'; | |
1062 | + | |
1063 | +COMMENT ON CONSTRAINT fk_anbieter1 ON anbieter IS | |
1064 | + 'siehe COMMENT zu CONSTRAINT fk_kunde1'; | |
1065 | +COMMENT ON CONSTRAINT fk_anbieter2 ON anbieter IS | |
1066 | + 'siehe COMMENT zu CONSTRAINT fk_kunde2'; | |
1067 | + | |
1068 | +create unique index "anbieter_ukey" on anbieter (an_nr); | |
1069 | + | |
1070 | +select public.start_logging('anbieter', 'ALL'); | |
1071 | + | |
1072 | +set search_path to trigger_func,benutzer; | |
1073 | + | |
1074 | +-- Trigger | |
1075 | +CREATE trigger anbieter_trigger2_on_insert_create_konten | |
1076 | + BEFORE INSERT ON benutzer.anbieter FOR EACH ROW | |
1077 | + EXECUTE PROCEDURE on_insert_create_konten('DEBITOR','KREDITOR'); | |
1078 | +COMMENT ON TRIGGER anbieter_trigger2_on_insert_create_konten | |
1079 | + ON benutzer.anbieter IS 'siehe COMMENT zu TABLE kunde a)'; | |
1080 | + | |
1081 | +CREATE trigger anbieter_trigger3_on_update_update_konten | |
1082 | + BEFORE UPDATE ON benutzer.anbieter FOR EACH ROW | |
1083 | + EXECUTE PROCEDURE on_update_update_konten('DEBITOR','KREDITOR'); | |
1084 | +COMMENT ON TRIGGER anbieter_trigger2_on_insert_create_konten | |
1085 | + ON benutzer.anbieter IS 'siehe COMMENT zu TABLE kunde b)'; | |
1086 | + | |
1087 | +CREATE trigger anbieter_trigger4_on_delete_dec_konto_ref_count | |
1088 | + AFTER DELETE ON benutzer.anbieter FOR EACH ROW | |
1089 | + EXECUTE PROCEDURE on_delete_dec_konto_ref_count(); | |
1090 | +COMMENT ON TRIGGER anbieter_trigger2_on_insert_create_konten | |
1091 | + ON benutzer.anbieter IS 'siehe COMMENT zu TABLE kunde c)'; | |
1092 | +-- Ende Trigger | |
1093 | + | |
1094 | +set search_path to public; | |
1095 | +-- ] | |
1096 | +-- ende Benutzerdaten | |
1097 | + | |
1098 | +-- Verkaueferdaten, Leute bei denen ich einkaufe, gehoert zu fibu. | |
1099 | +-- [ | |
1100 | +set search_path to fibu; | |
1101 | + | |
1102 | +create table "verkaeufer" ( | |
1103 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
1104 | + "vk_nr" text NOT NULL, -- Anbieternummer | |
1105 | + "konto1" int4 NOT NULL, -- Debitor-Konto (Vorkasse) | |
1106 | + "konto2" int4 NOT NULL, -- Kreditor-Konto (Rechnung) | |
1107 | + "id_person" int4 NULL, -- falls Person, sonst NULL | |
1108 | + "id_firma" int4 NULL, -- falls Firma, sonst NULL | |
1109 | + CONSTRAINT fk_verkaeufer1 | |
1110 | + FOREIGN KEY (konto1) REFERENCES fibu.used_konten (kto_nr) | |
1111 | + ON DELETE CASCADE | |
1112 | + ON UPDATE CASCADE, | |
1113 | + CONSTRAINT fk_verkaeufer2 | |
1114 | + FOREIGN KEY (konto2) REFERENCES fibu.used_konten (kto_nr) | |
1115 | + ON DELETE CASCADE | |
1116 | + ON UPDATE CASCADE, | |
1117 | + CONSTRAINT fk_verkaeufer3 | |
1118 | + FOREIGN KEY (id_person) REFERENCES person.person (_id_) | |
1119 | + ON DELETE CASCADE | |
1120 | + ON UPDATE CASCADE, | |
1121 | + CONSTRAINT fk_verkaeufer4 | |
1122 | + FOREIGN KEY (id_firma) REFERENCES firma.firma (_id_) | |
1123 | + ON DELETE CASCADE | |
1124 | + ON UPDATE CASCADE); | |
1125 | + | |
1126 | +COMMENT ON TABLE verkaeufer IS 'Leute oder Firmen bei denen ich einkaufe.'; | |
1127 | + | |
1128 | +COMMENT ON COLUMN verkaeufer._id_ IS 'interne id'; | |
1129 | +COMMENT ON COLUMN verkaeufer.vk_nr IS 'Verkaeufernummer'; | |
1130 | +COMMENT ON COLUMN verkaeufer.konto1 IS 'FOREIGN KEY: Debitor-Konto (Vorkasse)'; | |
1131 | +COMMENT ON COLUMN verkaeufer.konto2 IS 'FOREIGN KEY: Kreditor-Konto (Rechnung)'; | |
1132 | +COMMENT ON COLUMN verkaeufer.id_person IS | |
1133 | + 'FOREIGN KEY: falls Person, sonst NULL'; | |
1134 | +COMMENT ON COLUMN verkaeufer.id_firma IS 'FOREIGN KEY: falls Firma, sonst NULL'; | |
1135 | + | |
1136 | +COMMENT ON CONSTRAINT fk_verkaeufer1 ON verkaeufer IS | |
1137 | + 'siehe COMMENT zu CONSTRAINT fk_kunde1'; | |
1138 | +COMMENT ON CONSTRAINT fk_verkaeufer1 ON verkaeufer IS | |
1139 | + 'siehe COMMENT zu CONSTRAINT fk_kunde2'; | |
1140 | + | |
1141 | +create unique index "verkaufer_ukey" on verkaeufer (vk_nr); | |
1142 | + | |
1143 | +select public.start_logging('verkaeufer', 'ALL'); | |
1144 | + | |
1145 | +set search_path to trigger_func,fibu; | |
1146 | + | |
1147 | +-- Trigger | |
1148 | +CREATE trigger verkaeufer_trigger1_on_change_one_null | |
1149 | + BEFORE INSERT OR UPDATE ON fibu.verkaeufer FOR EACH ROW | |
1150 | + EXECUTE PROCEDURE on_change_one_null(); | |
1151 | +COMMENT ON TRIGGER verkaeufer_trigger1_on_change_one_null ON | |
1152 | + fibu.verkaeufer IS 'stellt sicher das immer nur entweder eine Firma ' | |
1153 | + 'oder eine Person der Varkaeufer ist.'; | |
1154 | + | |
1155 | +CREATE trigger verkaeufer_trigger2_on_insert_create_konten | |
1156 | + BEFORE INSERT ON fibu.verkaeufer FOR EACH ROW | |
1157 | + EXECUTE PROCEDURE on_insert_create_konten('DEBITOR','KREDITOR'); | |
1158 | +COMMENT ON TRIGGER verkaeufer_trigger2_on_insert_create_konten | |
1159 | + ON fibu.verkaeufer IS 'siehe COMMENT zu TABLE kunde a)'; | |
1160 | + | |
1161 | +CREATE trigger verkaeufer_trigger3_on_update_update_konten | |
1162 | + BEFORE UPDATE ON fibu.verkaeufer FOR EACH ROW | |
1163 | + EXECUTE PROCEDURE on_update_update_konten('DEBITOR','KREDITOR'); | |
1164 | +COMMENT ON TRIGGER verkaeufer_trigger2_on_insert_create_konten | |
1165 | + ON fibu.verkaeufer IS 'siehe COMMENT zu TABLE kunde b)'; | |
1166 | + | |
1167 | +CREATE trigger verkaeufer_trigger4_on_delete_dec_konto_ref_count | |
1168 | + AFTER DELETE ON fibu.verkaeufer FOR EACH ROW | |
1169 | + EXECUTE PROCEDURE on_delete_dec_konto_ref_count(); | |
1170 | +COMMENT ON TRIGGER verkaeufer_trigger2_on_insert_create_konten | |
1171 | + ON fibu.verkaeufer IS 'siehe COMMENT zu TABLE kunde c)'; | |
1172 | +-- Ende Trigger | |
1173 | + | |
1174 | +set search_path to public; | |
1175 | +-- ] | |
1176 | +-- ende Benutzerdaten | |
1177 | +-- Table zu Waren, Warengruppen u. Lager -- | |
1178 | +-- [ | |
1179 | +set search_path to waren; | |
1180 | + | |
1181 | +create table warengruppe ( | |
1182 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
1183 | + "name" text NOT NULL, -- Bezeichnung der Warengruppe | |
1184 | + "steuerkl" int4 NOT NULL, -- Steuern zu dieser Produktgruppe | |
1185 | + "kurzbeschreibung" text NULL, -- Kurzbeschreibung | |
1186 | + "beschreibung" text NULL, -- Beschreibung | |
1187 | + "produkt_typen" bit varying NOT NULL, -- Maske der anzuzeigenden Produkte. | |
1188 | + "pic_path" text NULL, -- optionaler Pfad zu einem Bild | |
1189 | + "tiefe" int4 DEFAULT 0 NOT NULL, -- die wievielte Untergruppe | |
1190 | + "parent" int4 NULL, -- uebergeordnete Warengruppe | |
1191 | + "is_parent" boolean DEFAULT false NOT NULL, -- ist WG ein Parent?? | |
1192 | + "konto1" int4 NOT NULL, -- Wareneingangskonto | |
1193 | + "konto2" int4 NOT NULL, -- Warenausgangskonto | |
1194 | + -- produkt_typen ist kein FOREIGN KEY, da es sich hierbei um eine | |
1195 | + -- Kombination von mehreren Typen aus der Tabelle produkt_typen handeln | |
1196 | + -- kann. | |
1197 | + CONSTRAINT fk_warengruppe1 | |
1198 | + FOREIGN KEY (konto1) REFERENCES fibu.konto (kto_nr) | |
1199 | + ON DELETE CASCADE | |
1200 | + ON UPDATE CASCADE, | |
1201 | + CONSTRAINT fk_warengruppe2 | |
1202 | + FOREIGN KEY (konto2) REFERENCES fibu.konto (kto_nr) | |
1203 | + ON DELETE CASCADE | |
1204 | + ON UPDATE CASCADE, | |
1205 | + CONSTRAINT fk_warengruppe3 | |
1206 | + FOREIGN KEY (parent) REFERENCES warengruppe (_id_) | |
1207 | + ON UPDATE CASCADE); | |
1208 | + | |
1209 | +COMMENT ON TABLE warengruppe IS | |
1210 | + '<U>Warengruppen unter denen Produkte oder weitere Warengruppen ' | |
1211 | + 'organisiert werden:</U><BR><BR>' | |
1212 | + 'Enthaelt eine Warengruppe weitere Warengruppen, so sind die zu den ' | |
1213 | + 'Untergruppen gehoerenden Eingangs und Ausgangskonten auch Unterkonten ' | |
1214 | + 'zu den in der Obergruppe existierenden Konten, d.h. der Saldo der ' | |
1215 | + 'Unterkonten muss immer auf das Oberkonto uebertragen werden. ' | |
1216 | + 'Ich glaube dafuer sollte ich trigger bauen....<BR>' | |
1217 | + 'Die Konten sind natuerlich wie bei kunden automatisch anzulegen.'; | |
1218 | + | |
1219 | +COMMENT ON COLUMN warengruppe._id_ IS 'interne id'; | |
1220 | +COMMENT ON COLUMN warengruppe.name IS 'Bezeichnung der Warengruppe'; | |
1221 | +COMMENT ON COLUMN warengruppe.steuerkl IS 'Steuern zu dieser Produktgruppe'; | |
1222 | +COMMENT ON COLUMN warengruppe.kurzbeschreibung IS 'Kurzbeschreibung'; | |
1223 | +COMMENT ON COLUMN warengruppe.beschreibung IS 'Beschreibung'; | |
1224 | +COMMENT ON COLUMN warengruppe.produkt_typen IS | |
1225 | + 'Maske der anzuzeigenden Produkte.'; | |
1226 | +COMMENT ON COLUMN warengruppe.pic_path IS 'optionaler Pfad zu einem Bild'; | |
1227 | +COMMENT ON COLUMN warengruppe.tiefe IS 'die wievielte Untergruppe'; | |
1228 | +COMMENT ON COLUMN warengruppe.parent IS 'uebergeordnete Warengruppe'; | |
1229 | +COMMENT ON COLUMN warengruppe.is_parent IS 'ist WG ein Parent??'; | |
1230 | +COMMENT ON COLUMN warengruppe.konto1 IS 'Wareneingangskonto'; | |
1231 | +COMMENT ON COLUMN warengruppe.konto2 IS 'Warenausgangskonto'; | |
1232 | + | |
1233 | +create unique index "warengruppe_ukey1" on warengruppe(name); | |
1234 | + | |
1235 | +\i plpgsql_funcs/cr_func_waren.sql | |
1236 | + | |
1237 | +select public.start_logging('warengruppe', 'ALL'); | |
1238 | + | |
1239 | +set search_path to trigger_func,waren; | |
1240 | +\i trigger_funcs/cr_trigger_func_waren.sql | |
1241 | + | |
1242 | +-- Trigger | |
1243 | +create trigger waren_trigger1_on_insert_create_konten | |
1244 | + BEFORE INSERT ON waren.warengruppe FOR EACH ROW | |
1245 | + EXECUTE PROCEDURE on_insert_create_konten('AUFWAND','ERTRAG'); | |
1246 | +COMMENT ON TRIGGER waren_trigger1_on_insert_create_konten | |
1247 | + ON waren.warengruppe IS 'siehe COMMENT zu TABLE kunde c)'; | |
1248 | + | |
1249 | +CREATE trigger waren_trigger2_on_update_update_konten | |
1250 | + BEFORE UPDATE ON waren.warengruppe FOR EACH ROW | |
1251 | + EXECUTE PROCEDURE on_update_update_konten('AUFWAND','ERTRAG'); | |
1252 | +COMMENT ON TRIGGER waren_trigger2_on_update_update_konten | |
1253 | + ON waren.warengruppe IS 'siehe COMMENT zu TABLE kunde c)'; | |
1254 | + | |
1255 | +CREATE trigger waren_trigger3_on_delete_dec_konto_ref_count | |
1256 | + AFTER DELETE ON waren.warengruppe FOR EACH ROW | |
1257 | + EXECUTE PROCEDURE on_delete_dec_konto_ref_count(); | |
1258 | +COMMENT ON TRIGGER waren_trigger3_on_delete_dec_konto_ref_count | |
1259 | + ON waren.warengruppe IS 'siehe COMMENT zu TABLE kunde c)'; | |
1260 | + | |
1261 | + | |
1262 | +create trigger waren_trigger4_on_insert_set_tiefe | |
1263 | + BEFORE INSERT ON waren.warengruppe FOR EACH ROW | |
1264 | + EXECUTE PROCEDURE set_tiefe(); | |
1265 | +COMMENT ON TRIGGER waren_trigger4_on_insert_set_tiefe | |
1266 | + ON waren.warengruppe IS 'setze tiefe auf parent.tiefe+1 oder 0 ' | |
1267 | + 'wenn es eine Rootgruppe ist'; | |
1268 | + | |
1269 | +create trigger waren_trigger5_on_update_check_tiefe | |
1270 | + BEFORE UPDATE ON waren.warengruppe FOR EACH ROW | |
1271 | + EXECUTE PROCEDURE on_update_check_tiefe(); | |
1272 | +COMMENT ON TRIGGER waren_trigger5_on_update_check_tiefe | |
1273 | + ON waren.warengruppe IS 'wenn sich parent aendert setze tiefe=neuer ' | |
1274 | + 'parent.tiefe+1 oder 0 wenn der neue parent ' | |
1275 | + 'NULL ist (Rootgruppe)'; | |
1276 | + | |
1277 | +create trigger waren_trigger6_on_delete_new_parent | |
1278 | + BEFORE DELETE ON waren.warengruppe FOR EACH ROW | |
1279 | + EXECUTE PROCEDURE on_delete_new_parent(); | |
1280 | +COMMENT ON TRIGGER waren_trigger6_on_delete_new_parent | |
1281 | + ON waren.warengruppe IS 'wenn eine Warengruppe geloescht wird muss parent ' | |
1282 | + 'bei allen untergeordneten Gruppen auf parent der ' | |
1283 | + 'geloeschten Obergruppe gesetzt werden.'; | |
1284 | + | |
1285 | +create trigger waren_trigger7_on_update_delete_check_is_parent | |
1286 | + AFTER UPDATE OR DELETE ON waren.warengruppe FOR EACH ROW | |
1287 | + EXECUTE PROCEDURE on_update_delete_check_is_parent(); | |
1288 | +COMMENT ON TRIGGER waren_trigger7_on_update_delete_check_is_parent | |
1289 | + ON waren.warengruppe IS 'nach update oder delete muss gecheckt werden ob ' | |
1290 | + 'is_parent noch bei allen Eintraegen stimmt.'; | |
1291 | +-- Ende Trigger | |
1292 | + | |
1293 | +set search_path to waren; | |
1294 | + | |
1295 | +create table produkt_typen ( | |
1296 | + "produkt_typ" bit varying NOT NULL PRIMARY KEY, -- interne id | |
1297 | + "bezeichnung" text NOT NULL, -- Bezeichnung, z.B. Kleidung, Uhren | |
1298 | + "typ_table" text NULL); -- Tabellenname fuer Typinfos | |
1299 | + | |
1300 | +COMMENT ON TABLE produkt_typen IS | |
1301 | + '<U>Enthaelt Bitmasken zu verschiedenen Produkttypen:</u></br>' | |
1302 | + 'Eine Auswahl dieser Masken wird und-Verknuepft zu jedem Produkt und ' | |
1303 | + 'zu jeder Warengruppe gespeichert. Ergibt eine oder-Verknuepfung der ' | |
1304 | + 'Warengruppen-Maske und der Produkt-Maske einen Wert <> 0, so wird das ' | |
1305 | + 'Produkt in der Warengruppe angezeigt.'; | |
1306 | + | |
1307 | +select public.start_logging('produkt_typen', 'ALL'); | |
1308 | + | |
1309 | +set search_path to trigger_func,waren; | |
1310 | + | |
1311 | +CREATE TRIGGER waren_trigger1_create_valid_typ_mask | |
1312 | + BEFORE INSERT OR UPDATE ON waren.produkt_typen FOR EACH ROW | |
1313 | + EXECUTE PROCEDURE create_valid_produkt_typ_mask(); | |
1314 | + | |
1315 | +set search_path to waren; | |
1316 | + | |
1317 | +CREATE TABLE typ_table_columns ( | |
1318 | + "produkt_typ" bit varying NOT NULL, -- produkt-typ | |
1319 | + "col_name" text NOT NULL, -- Name der Zusatzcolumn | |
1320 | + "col_type" text NOT NULL, -- Typ der Zusatzcolumn | |
1321 | + PRIMARY KEY (produkt_typ, col_name), | |
1322 | + CONSTRAINT fk_typ_table_columns | |
1323 | + FOREIGN KEY (produkt_typ) REFERENCES produkt_typen (produkt_typ) | |
1324 | + ON UPDATE CASCADE | |
1325 | + ON DELETE CASCADE); | |
1326 | + | |
1327 | +COMMENT ON TABLE typ_table_columns IS | |
1328 | + 'In dieser Tabelle findet man die definition der Zusatzdatenfelder zu ' | |
1329 | + 'einem typ_table in produkt_typen.'; | |
1330 | + | |
1331 | +COMMENT ON COLUMN typ_table_columns.produkt_typ IS 'produkt-typ'; | |
1332 | +COMMENT ON COLUMN typ_table_columns.col_name IS 'Name der Zusatzcolumn'; | |
1333 | +COMMENT ON COLUMN typ_table_columns.col_type IS 'Typ der Zusatzcolumn'; | |
1334 | + | |
1335 | +select public.start_logging('typ_table_columns', 'ALL'); | |
1336 | + | |
1337 | +-- produkt ist eine allgemeine Oberklassifizierung von Produkten. Es enthaelt | |
1338 | +-- alle Atribute, die alle Produkte gemeinsam haben. | |
1339 | +-- Ausserdem enthaelt es eine Verknuepfung in die Tabelle produkt_typen, in | |
1340 | +-- der etwaige Tabellen mit Zusatzinformationen zu bestimmten Produkten | |
1341 | +-- aufgelistet sind. Effektiv bedeutet das auch das der Admin und auch | |
1342 | +-- der Anzeigenbereich verschiedenen Anzeige und Eingabemasken fuer die | |
1343 | +-- verschiedenen Produkte zur verfuegung stellen muss. | |
1344 | +-- Das Backend liefert eine kombinierte Tabelle aus Produkt und der Speziellen | |
1345 | +-- Produktabelle, aus der auch hervorgeht um welchen Produktyp es sich handelt. | |
1346 | +create table produkt ( | |
1347 | + "_id_" SERIAL NOT NULL PRIMARY KEY, -- interne id | |
1348 | + "name" text NOT NULL, -- Bezeichnung des Produktes | |
1349 | + "kurzbeschreibung" text NULL, -- Kruzbeschreibung | |
1350 | + "beschreibung" text NULL, -- Beschreibung | |
1351 | + "small_pic_path" text NULL, -- optionaler Pfad zu einem kleinen Bild | |
1352 | + "big_pic_path" text NULL, -- optionaler Pfad zu einem grossen Bild | |
1353 | + "preis" numeric(10,2) NOT NULL, -- Produktpreis (netto) | |
1354 | + "stueck" int4 DEFAULT 0 NOT NULL, -- verfuegbare Stueckmenge | |
1355 | + -- ACHTUNG: Das produkt wird in allen Warengruppen angezeigt, bei denen | |
1356 | + -- midestens ein Bit der Typ-Maske der Warengruppe mit einem Bit der | |
1357 | + -- Typ-Maske des Produkts uebereinstimmt. | |
1358 | + "produkt_typen" bit varying NULL); -- Produkttyp | |
1359 | + | |
1360 | +select public.start_logging('produkt', 'ALL'); | |
1361 | + | |
1362 | +set search_path to public; | |
1363 | +-- ] | |
1364 | +-- Ende Waren, Warengruppen u. Lager -- | |
1365 | + | |
1366 | +-- View auf Adressdaten -- | |
1367 | +-- [ | |
1368 | +set search_path to adresse; | |
1369 | + | |
1370 | +create view "adresse_v" (strasse,h_nr,plz_a,ort,vorwahl_o, | |
1371 | + land,lnd_kz,vorwahl_l) as | |
1372 | + select a.strasse, a.h_nr, a.plz_a, b.ort, b.vorwahl_o, | |
1373 | + c.land, c.lnd_kz, c.vorwahl_l from | |
1374 | + adresse.adresse a, adresse.ort b, adresse.land c where | |
1375 | + a.id_ort = b._id_ and | |
1376 | + b.id_land = c._id_; | |
1377 | + | |
1378 | +set search_path to public; | |
1379 | +-- ] | |
1380 | +-- ende view -- | |
1381 | + | |
1382 | +-- View auf Personendaten -- | |
1383 | +-- [ | |
1384 | +set search_path to person; | |
1385 | + | |
1386 | +create view "person_v" (anrede,titel,nachname,vorname,geb_dat,age, | |
1387 | + postfach, telefon,fax,handy,email,webpage, | |
1388 | + strasse,h_nr,plz_a,ort,vorwahl_o, | |
1389 | + land,lnd_kz,vorwahl_l) as | |
1390 | + select a.anrede, a.titel, a. nachname, a.vorname, a.geb_dat, | |
1391 | + age(a.geb_dat), a.postfach, a.telefon, a.fax, a.handy, | |
1392 | + a.email, a.webpage, b.strasse, b.h_nr, b.plz_a, c.ort, | |
1393 | + c.vorwahl_o, d.land, d.lnd_kz, d.vorwahl_l from | |
1394 | + person.person a, person.wohnt ab, | |
1395 | + adresse.adresse b, adresse.ort c, adresse.land d where | |
1396 | + a._id_ = ab.id_person and | |
1397 | + b._id_ = ab.id_adresse and | |
1398 | + b.id_ort = c._id_ and | |
1399 | + c.id_land = d._id_; | |
1400 | + | |
1401 | +grant SELECT on person.person_v TO GROUP guest; | |
1402 | + | |
1403 | +set search_path to public; | |
1404 | +-- ] | |
1405 | +-- ende view -- | |
1406 | + | |
1407 | +commit; | ... | ... |
doc/er/shop.dia
0 → 100755
No preview for this file type
doc/er/shop.dxf
0 → 100755
This diff could not be displayed because it is too large.
doc/er/shop.eps
0 → 100755
This diff could not be displayed because it is too large.
doc/er/shop.fig
0 → 100755
1 | +#FIG 3.2 | |
2 | +Portrait | |
3 | +Center | |
4 | +Metric | |
5 | +A4 | |
6 | +34.299999 | |
7 | +Single | |
8 | +-2 | |
9 | +1200 2 | |
10 | +0 32 #ffffff | |
11 | +6 0 0 0 0 | |
12 | +2 3 0 0 32 32 0 0 20 0.000000 0 0 0 0 0 5 | |
13 | + -14500 3201 -13555 2634 -12610 3201 -13555 3768 -14500 3201 | |
14 | +2 3 0 1 0 0 0 0 -1 0.000000 0 0 0 0 0 5 | |
15 | + -14500 3201 -13555 2634 -12610 3201 -13555 3768 -14500 3201 | |
16 | +4 2 0 0 0 16 22.762205 0.0 6 0.0 0.0 -14642 3059 n\001 | |
17 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -12469 3059 1\001 | |
18 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -13555 3319 liegt in\001 | |
19 | +-6 | |
20 | +6 0 0 0 0 | |
21 | +2 3 0 0 32 32 0 0 20 0.000000 0 0 0 0 0 5 | |
22 | + -7924 5354 -7121 4872 -6317 5354 -7121 5835 -7924 5354 | |
23 | +2 3 0 1 0 0 0 0 -1 0.000000 0 0 0 0 0 5 | |
24 | + -7924 5354 -7121 4872 -6317 5354 -7121 5835 -7924 5354 | |
25 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7026 4730 1\001 | |
26 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7026 6355 n\001 | |
27 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7121 5472 ist in\001 | |
28 | +-6 | |
29 | +6 0 0 0 0 | |
30 | +2 3 0 0 32 32 0 0 20 0.000000 0 0 0 0 0 5 | |
31 | + -20297 5354 -19494 4872 -18691 5354 -19494 5835 -20297 5354 | |
32 | +2 3 0 1 0 0 0 0 -1 0.000000 0 0 0 0 0 5 | |
33 | + -20297 5354 -19494 4872 -18691 5354 -19494 5835 -20297 5354 | |
34 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -19399 4730 1\001 | |
35 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -19399 6355 n\001 | |
36 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -19494 5472 ist in\001 | |
37 | +-6 | |
38 | +6 0 0 0 0 | |
39 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
40 | + -12610 3201 -7876 3201 | |
41 | +-6 | |
42 | +6 0 0 0 0 | |
43 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
44 | + -7876 2728 -6365 2728 -6365 3673 -7876 3673 -7876 2728 | |
45 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
46 | + -7876 2728 -6365 2728 -6365 3673 -7876 3673 -7876 2728 | |
47 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -7121 3319 land\001 | |
48 | +-6 | |
49 | +6 0 0 0 0 | |
50 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
51 | + -20143 2728 -18844 2728 -18844 3673 -20143 3673 -20143 2728 | |
52 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
53 | + -20143 2728 -18844 2728 -18844 3673 -20143 3673 -20143 2728 | |
54 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -19494 3319 ort\001 | |
55 | +-6 | |
56 | +6 0 0 0 0 | |
57 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
58 | + -14500 3201 -18844 3201 | |
59 | +-6 | |
60 | +6 0 0 0 0 | |
61 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
62 | + -19494 3673 -19494 4872 | |
63 | +-6 | |
64 | +6 0 0 0 0 | |
65 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
66 | + -7121 3673 -7121 4872 | |
67 | +-6 | |
68 | +6 0 0 0 0 | |
69 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
70 | + -19494 5835 -19494 6911 -14160 6911 -14160 8332 -14630 8332 | |
71 | +-6 | |
72 | +6 0 0 0 0 | |
73 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
74 | + -7121 5835 -7121 6895 -12943 6895 -12943 8332 -12480 8332 | |
75 | +-6 | |
76 | +6 0 0 0 0 | |
77 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -19235 1787 732 425 0 0 0 0 | |
78 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -19235 1787 732 425 0 0 0 0 | |
79 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -19235 1905 _id_\001 | |
80 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
81 | + -19495 1976 -18975 1976 | |
82 | +-6 | |
83 | +6 0 0 0 0 | |
84 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -21294 1663 944 425 0 0 0 0 | |
85 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -21294 1663 944 425 0 0 0 0 | |
86 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -21294 1781 id_land\001 | |
87 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
88 | + -21767 1852 -20822 1852 | |
89 | +-6 | |
90 | +6 0 0 0 0 | |
91 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -21640 4242 1181 425 0 0 0 0 | |
92 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -21640 4242 1181 425 0 0 0 0 | |
93 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -21640 4360 vorwahl_o\001 | |
94 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
95 | + -22349 4431 -20932 4431 | |
96 | +-6 | |
97 | +6 0 0 0 0 | |
98 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -21310 2995 673 425 0 0 0 0 | |
99 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -21310 2995 673 425 0 0 0 0 | |
100 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -21310 3114 ort\001 | |
101 | +-6 | |
102 | +6 0 0 0 0 | |
103 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -7741 1966 732 425 0 0 0 0 | |
104 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -7741 1966 732 425 0 0 0 0 | |
105 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -7741 2084 _id_\001 | |
106 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
107 | + -8001 2155 -7481 2155 | |
108 | +-6 | |
109 | +6 0 0 0 0 | |
110 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -5851 1683 755 425 0 0 0 0 | |
111 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -5851 1683 755 425 0 0 0 0 | |
112 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -5851 1801 land\001 | |
113 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
114 | + -6135 1872 -5568 1872 | |
115 | +-6 | |
116 | +6 0 0 0 0 | |
117 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -5426 3005 897 425 0 0 0 0 | |
118 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -5426 3005 897 425 0 0 0 0 | |
119 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -5426 3124 lnd_kz\001 | |
120 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
121 | + -5851 3194 -5001 3194 | |
122 | +-6 | |
123 | +6 0 0 0 0 | |
124 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -5414 4234 1122 425 0 0 0 0 | |
125 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -5414 4234 1122 425 0 0 0 0 | |
126 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -5414 4352 vorwahl_l\001 | |
127 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
128 | + -6064 4423 -4765 4423 | |
129 | +-6 | |
130 | +6 0 0 0 0 | |
131 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -15619 7612 767 425 0 0 0 0 | |
132 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -15619 7612 767 425 0 0 0 0 | |
133 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15619 7730 h_nr\001 | |
134 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
135 | + -15914 7801 -15324 7801 | |
136 | +-6 | |
137 | +6 0 0 0 0 | |
138 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -16056 8651 826 425 0 0 0 0 | |
139 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -16056 8651 826 425 0 0 0 0 | |
140 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -16056 8769 plz_a\001 | |
141 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
142 | + -16410 8840 -15702 8840 | |
143 | +-6 | |
144 | +6 0 0 0 0 | |
145 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -15714 9809 1003 425 0 0 0 0 | |
146 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -15714 9809 1003 425 0 0 0 0 | |
147 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15714 9927 strasse\001 | |
148 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
149 | + -16245 9998 -15182 9998 | |
150 | +-6 | |
151 | +6 0 0 0 0 | |
152 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -11308 7565 944 425 0 0 0 0 | |
153 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -11308 7565 944 425 0 0 0 0 | |
154 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -11308 7683 id_land\001 | |
155 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
156 | + -11781 7754 -10836 7754 | |
157 | +-6 | |
158 | +6 0 0 0 0 | |
159 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -10777 8675 862 425 0 0 0 0 | |
160 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -10777 8675 862 425 0 0 0 0 | |
161 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -10777 8793 id_ort\001 | |
162 | +-6 | |
163 | +6 0 0 0 0 | |
164 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -11344 9738 1240 425 0 0 0 0 | |
165 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -11344 9738 1240 425 0 0 0 0 | |
166 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -11344 9856 id_adresse\001 | |
167 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
168 | + -12111 9927 -10576 9927 | |
169 | +-6 | |
170 | +6 0 0 0 0 | |
171 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
172 | + -20805 3941 -20143 3673 | |
173 | +-6 | |
174 | +6 0 0 0 0 | |
175 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
176 | + -20637 2995 -20143 3201 | |
177 | +-6 | |
178 | +6 0 0 0 0 | |
179 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
180 | + -20626 1964 -20143 2728 | |
181 | +-6 | |
182 | +6 0 0 0 0 | |
183 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
184 | + -19235 2212 -19494 2728 | |
185 | +-6 | |
186 | +6 0 0 0 0 | |
187 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
188 | + -7741 2391 -7121 2728 | |
189 | +-6 | |
190 | +6 0 0 0 0 | |
191 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
192 | + -6386 1983 -6365 2728 | |
193 | +-6 | |
194 | +6 0 0 0 0 | |
195 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
196 | + -6324 3005 -6365 3201 | |
197 | +-6 | |
198 | +6 0 0 0 0 | |
199 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
200 | + -6208 3933 -6365 3673 | |
201 | +-6 | |
202 | +6 0 0 0 0 | |
203 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
204 | + -12480 7859 -12253 7565 | |
205 | +-6 | |
206 | +6 0 0 0 0 | |
207 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
208 | + -12480 8332 -11639 8675 | |
209 | +-6 | |
210 | +6 0 0 0 0 | |
211 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
212 | + -12480 8804 -12227 9437 | |
213 | +-6 | |
214 | +6 0 0 0 0 | |
215 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
216 | + -15064 9508 -14630 8804 | |
217 | +-6 | |
218 | +6 0 0 0 0 | |
219 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
220 | + -15206 8651 -14630 8332 | |
221 | +-6 | |
222 | +6 0 0 0 0 | |
223 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
224 | + -14851 7612 -14630 7859 | |
225 | +-6 | |
226 | +6 0 0 0 0 | |
227 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
228 | + -20788 12768 -19891 12230 -18993 12768 -19891 13307 -20788 12768 | |
229 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
230 | + -20788 12768 -19891 12230 -18993 12768 -19891 13307 -20788 12768 | |
231 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -19796 12088 1,n\001 | |
232 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -19796 13827 1,m\001 | |
233 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -19891 12887 wohnt\001 | |
234 | +-6 | |
235 | +6 0 0 0 0 | |
236 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
237 | + -7841 12768 -7121 12336 -6400 12768 -7121 13201 -7841 12768 | |
238 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
239 | + -7841 12768 -7121 12336 -6400 12768 -7121 13201 -7841 12768 | |
240 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7026 12194 1\001 | |
241 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7026 13720 1,n\001 | |
242 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7121 12887 sitz\001 | |
243 | +-6 | |
244 | +6 0 0 0 0 | |
245 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
246 | + -8278 18605 -7121 17911 -5963 18605 -7121 19300 -8278 18605 | |
247 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
248 | + -8278 18605 -7121 17911 -5963 18605 -7121 19300 -8278 18605 | |
249 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7026 17769 1,n\001 | |
250 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7026 19820 1\001 | |
251 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7121 18724 geh\303\266rt zu\001 | |
252 | +-6 | |
253 | +6 0 0 0 0 | |
254 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
255 | + -19891 12230 -19891 10872 -14152 10872 -14152 8332 -14630 8332 | |
256 | +-6 | |
257 | +6 0 0 0 0 | |
258 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
259 | + -7121 12336 -7121 10872 -12971 10872 -12971 8332 -12480 8332 | |
260 | +-6 | |
261 | +6 0 0 0 0 | |
262 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
263 | + -14630 7859 -12480 7859 -12480 8804 -14630 8804 -14630 7859 | |
264 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
265 | + -14630 7859 -12480 7859 -12480 8804 -14630 8804 -14630 7859 | |
266 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -13555 8450 adresse\001 | |
267 | +-6 | |
268 | +6 0 0 0 0 | |
269 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 3 | |
270 | + -19891 13307 -19891 21265 -20599 21265 | |
271 | +-6 | |
272 | +6 0 0 0 0 | |
273 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 4 | |
274 | + -18662 21265 -19427 21265 -19427 15776 -15261 15776 | |
275 | +-6 | |
276 | +6 0 0 0 0 | |
277 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -21510 11864 1240 425 0 0 0 0 | |
278 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -21510 11864 1240 425 0 0 0 0 | |
279 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -21510 11982 id_adresse\001 | |
280 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
281 | + -22278 12053 -20743 12053 | |
282 | +-6 | |
283 | +6 0 0 0 0 | |
284 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -21534 13659 1169 425 0 0 0 0 | |
285 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -21534 13659 1169 425 0 0 0 0 | |
286 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -21534 13777 id_person\001 | |
287 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
288 | + -22231 13848 -20837 13848 | |
289 | +-6 | |
290 | +6 0 0 0 0 | |
291 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
292 | + -20727 13358 -20340 13038 | |
293 | +-6 | |
294 | +6 0 0 0 0 | |
295 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
296 | + -20674 12164 -20340 12499 | |
297 | +-6 | |
298 | +6 0 0 0 0 | |
299 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -16702 14982 1169 425 0 0 0 0 | |
300 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -16702 14982 1169 425 0 0 0 0 | |
301 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -16702 15100 id_person\001 | |
302 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
303 | + -17398 15171 -16005 15171 | |
304 | +-6 | |
305 | +6 0 0 0 0 | |
306 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -15733 13801 1098 425 0 0 0 0 | |
307 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -15733 13801 1098 425 0 0 0 0 | |
308 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15733 13919 best\303\244tigt\001 | |
309 | +-6 | |
310 | +6 0 0 0 0 | |
311 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -12733 13801 1311 425 0 0 0 0 | |
312 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -12733 13801 1311 425 0 0 0 0 | |
313 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -12733 13919 id_abteilung\001 | |
314 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
315 | + -13572 13990 -11894 13990 | |
316 | +-6 | |
317 | +6 0 0 0 0 | |
318 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -14268 14580 838 425 0 0 0 0 | |
319 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -14268 14580 838 425 0 0 0 0 | |
320 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -14268 14698 email\001 | |
321 | +-6 | |
322 | +6 0 0 0 0 | |
323 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -12485 17793 968 425 0 0 0 0 | |
324 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -12485 17793 968 425 0 0 0 0 | |
325 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -12485 17911 telefon\001 | |
326 | +-6 | |
327 | +6 0 0 0 0 | |
328 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -11788 16399 673 425 0 0 0 0 | |
329 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -11788 16399 673 425 0 0 0 0 | |
330 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -11788 16517 fax\001 | |
331 | +-6 | |
332 | +6 0 0 0 0 | |
333 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -14009 17013 909 425 0 0 0 0 | |
334 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -14009 17013 909 425 0 0 0 0 | |
335 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -14009 17131 gehalt\001 | |
336 | +-6 | |
337 | +6 0 0 0 0 | |
338 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -15922 17840 1452 425 0 0 0 0 | |
339 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -15922 17840 1452 425 0 0 0 0 | |
340 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -15922 17840 1263 330 0 0 0 0 | |
341 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15922 17958 beschreibung\001 | |
342 | +-6 | |
343 | +6 0 0 0 0 | |
344 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -16501 16824 1039 425 0 0 0 0 | |
345 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -16501 16824 1039 425 0 0 0 0 | |
346 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -16501 16943 position\001 | |
347 | +-6 | |
348 | +6 0 0 0 0 | |
349 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
350 | + -13324 15776 -8408 15776 | |
351 | +-6 | |
352 | +6 0 0 0 0 | |
353 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -13278 15667 1,n\001 | |
354 | +-6 | |
355 | +6 0 0 0 0 | |
356 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -15590 15643 m\001 | |
357 | +-6 | |
358 | +6 0 0 0 0 | |
359 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
360 | + -15895 15283 -13324 15776 | |
361 | +-6 | |
362 | +6 0 0 0 0 | |
363 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
364 | + -15745 14226 -14292 16357 | |
365 | +-6 | |
366 | +6 0 0 0 0 | |
367 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
368 | + -12733 14226 -13324 15194 | |
369 | +-6 | |
370 | +6 0 0 0 0 | |
371 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
372 | + -12461 16399 -15261 15194 | |
373 | +-6 | |
374 | +6 0 0 0 0 | |
375 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
376 | + -12485 17368 -13324 16357 | |
377 | +-6 | |
378 | +6 0 0 0 0 | |
379 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
380 | + -14009 16588 -14292 15194 | |
381 | +-6 | |
382 | +6 0 0 0 0 | |
383 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
384 | + -15934 17415 -13324 15194 | |
385 | +-6 | |
386 | +6 0 0 0 0 | |
387 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
388 | + -15786 16524 -15261 16357 | |
389 | +-6 | |
390 | +6 0 0 0 0 | |
391 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
392 | + -15261 15194 -13324 15194 -13324 16357 -15261 16357 -15261 15194 | |
393 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
394 | + -15261 15194 -13324 15194 -13324 16357 -15261 16357 -15261 15194 | |
395 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
396 | + -15261 15776 -14292 15194 -13324 15776 -14292 16357 -15261 15776 | |
397 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
398 | + -15261 15776 -14292 15194 -13324 15776 -14292 16357 -15261 15776 | |
399 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -14292 15894 arbeit\001 | |
400 | +-6 | |
401 | +6 0 0 0 0 | |
402 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
403 | + -14268 15005 -14292 15194 | |
404 | +-6 | |
405 | +6 0 0 0 0 | |
406 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
407 | + -7121 13201 -7121 15303 | |
408 | +-6 | |
409 | +6 0 0 0 0 | |
410 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
411 | + -7121 16248 -7121 17911 | |
412 | +-6 | |
413 | +6 0 0 0 0 | |
414 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
415 | + -7121 19300 -7121 21265 | |
416 | +-6 | |
417 | +6 0 0 0 0 | |
418 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -9501 14958 1240 425 0 0 0 0 | |
419 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -9501 14958 1240 425 0 0 0 0 | |
420 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -9501 15076 id_adresse\001 | |
421 | +-6 | |
422 | +6 0 0 0 0 | |
423 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -8863 17061 1003 425 0 0 0 0 | |
424 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -8863 17061 1003 425 0 0 0 0 | |
425 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -8863 17179 id_firma\001 | |
426 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
427 | + -9394 17250 -8331 17250 | |
428 | +-6 | |
429 | +6 0 0 0 0 | |
430 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -8213 14061 968 425 0 0 0 0 | |
431 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -8213 14061 968 425 0 0 0 0 | |
432 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -8213 14179 telefon\001 | |
433 | +-6 | |
434 | +6 0 0 0 0 | |
435 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -6099 14486 673 425 0 0 0 0 | |
436 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -6099 14486 673 425 0 0 0 0 | |
437 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -6099 14604 fax\001 | |
438 | +-6 | |
439 | +6 0 0 0 0 | |
440 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -3040 15029 1086 425 0 0 0 0 | |
441 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -3040 15029 1086 425 0 0 0 0 | |
442 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3040 15147 postfach\001 | |
443 | +-6 | |
444 | +6 0 0 0 0 | |
445 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -4008 16021 1370 425 0 0 0 0 | |
446 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -4008 16021 1370 425 0 0 0 0 | |
447 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -4008 16139 bezeichnung\001 | |
448 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
449 | + -4906 16210 -3111 16210 | |
450 | +-6 | |
451 | +6 0 0 0 0 | |
452 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -6253 16919 732 425 0 0 0 0 | |
453 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -6253 16919 732 425 0 0 0 0 | |
454 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -6253 17037 _id_\001 | |
455 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
456 | + -6512 17108 -5993 17108 | |
457 | +-6 | |
458 | +6 0 0 0 0 | |
459 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -4280 14202 838 425 0 0 0 0 | |
460 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -4280 14202 838 425 0 0 0 0 | |
461 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -4280 14320 email\001 | |
462 | +-6 | |
463 | +6 0 0 0 0 | |
464 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -3713 17202 1452 425 0 0 0 0 | |
465 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -3713 17202 1452 425 0 0 0 0 | |
466 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -3713 17202 1263 330 0 0 0 0 | |
467 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3713 17320 beschreibung\001 | |
468 | +-6 | |
469 | +6 0 0 0 0 | |
470 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
471 | + -8213 14486 -7121 16248 | |
472 | +-6 | |
473 | +6 0 0 0 0 | |
474 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
475 | + -8664 15259 -7121 16248 | |
476 | +-6 | |
477 | +6 0 0 0 0 | |
478 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
479 | + -8863 16635 -8408 16248 | |
480 | +-6 | |
481 | +6 0 0 0 0 | |
482 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
483 | + -6253 16494 -7121 15303 | |
484 | +-6 | |
485 | +6 0 0 0 0 | |
486 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
487 | + -4744 16902 -5833 16248 | |
488 | +-6 | |
489 | +6 0 0 0 0 | |
490 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
491 | + -4127 15029 -5833 15776 | |
492 | +-6 | |
493 | +6 0 0 0 0 | |
494 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
495 | + -5379 16021 -8408 15776 | |
496 | +-6 | |
497 | +6 0 0 0 0 | |
498 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
499 | + -6575 14786 -7121 16248 | |
500 | +-6 | |
501 | +6 0 0 0 0 | |
502 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
503 | + -4873 14503 -7121 16248 | |
504 | +-6 | |
505 | +6 0 0 0 0 | |
506 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
507 | + -8408 15303 -5833 15303 -5833 16248 -8408 16248 -8408 15303 | |
508 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
509 | + -8408 15303 -5833 15303 -5833 16248 -8408 16248 -8408 15303 | |
510 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -7121 15894 abteilung\001 | |
511 | +-6 | |
512 | +6 0 0 0 0 | |
513 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -20980 19305 732 425 0 0 0 0 | |
514 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -20980 19305 732 425 0 0 0 0 | |
515 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -20980 19423 _id_\001 | |
516 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
517 | + -21240 19494 -20720 19494 | |
518 | +-6 | |
519 | +6 0 0 0 0 | |
520 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -21736 20415 1039 425 0 0 0 0 | |
521 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -21736 20415 1039 425 0 0 0 0 | |
522 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -21736 20533 geb_dat\001 | |
523 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
524 | + -22303 20604 -21169 20604 | |
525 | +-6 | |
526 | +6 0 0 0 0 | |
527 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -18299 23391 885 425 0 0 0 0 | |
528 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -18299 23391 885 425 0 0 0 0 | |
529 | +4 1 0 0 0 12 22.762205 0.0 6 0.0 0.0 -18299 23509 titel\001 | |
530 | +-6 | |
531 | +6 0 0 0 0 | |
532 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -22137 23486 1181 425 0 0 0 0 | |
533 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -22137 23486 1181 425 0 0 0 0 | |
534 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -22137 23604 nachname\001 | |
535 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
536 | + -22846 23675 -21429 23675 | |
537 | +-6 | |
538 | +6 0 0 0 0 | |
539 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -22208 21383 968 425 0 0 0 0 | |
540 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -22208 21383 968 425 0 0 0 0 | |
541 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -22208 21502 anrede\001 | |
542 | +-6 | |
543 | +6 0 0 0 0 | |
544 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -22102 22470 1074 425 0 0 0 0 | |
545 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -22102 22470 1074 425 0 0 0 0 | |
546 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -22102 22588 vorname\001 | |
547 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
548 | + -22704 22659 -21499 22659 | |
549 | +-6 | |
550 | +6 0 0 0 0 | |
551 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -16551 22399 1145 425 0 0 0 0 | |
552 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -16551 22399 1145 425 0 0 0 0 | |
553 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -16551 22517 webpage\001 | |
554 | +-6 | |
555 | +6 0 0 0 0 | |
556 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -17614 20887 673 425 0 0 0 0 | |
557 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -17614 20887 673 425 0 0 0 0 | |
558 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -17614 21005 fax\001 | |
559 | +-6 | |
560 | +6 0 0 0 0 | |
561 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -18440 19848 838 425 0 0 0 0 | |
562 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -18440 19848 838 425 0 0 0 0 | |
563 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -18440 19966 email\001 | |
564 | +-6 | |
565 | +6 0 0 0 0 | |
566 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -16161 23368 1086 425 0 0 0 0 | |
567 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -16161 23368 1086 425 0 0 0 0 | |
568 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -16161 23486 postfach\001 | |
569 | +-6 | |
570 | +6 0 0 0 0 | |
571 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -16515 20061 874 425 0 0 0 0 | |
572 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -16515 20061 874 425 0 0 0 0 | |
573 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -16515 20179 handy\001 | |
574 | +-6 | |
575 | +6 0 0 0 0 | |
576 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -15925 21478 968 425 0 0 0 0 | |
577 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -15925 21478 968 425 0 0 0 0 | |
578 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15925 21596 telefon\001 | |
579 | +-6 | |
580 | +6 0 0 0 0 | |
581 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
582 | + -20462 19605 -19631 21738 | |
583 | +-6 | |
584 | +6 0 0 0 0 | |
585 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
586 | + -20696 20415 -18662 21738 | |
587 | +-6 | |
588 | +6 0 0 0 0 | |
589 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
590 | + -21240 21383 -19631 20793 | |
591 | +-6 | |
592 | +6 0 0 0 0 | |
593 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
594 | + -21342 22169 -20599 21738 | |
595 | +-6 | |
596 | +6 0 0 0 0 | |
597 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
598 | + -21302 23185 -19631 20793 | |
599 | +-6 | |
600 | +6 0 0 0 0 | |
601 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
602 | + -18299 22966 -19631 20793 | |
603 | +-6 | |
604 | +6 0 0 0 0 | |
605 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
606 | + -17248 23368 -18662 21738 | |
607 | +-6 | |
608 | +6 0 0 0 0 | |
609 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
610 | + -17361 22099 -20599 20793 | |
611 | +-6 | |
612 | +6 0 0 0 0 | |
613 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
614 | + -16893 21478 -20599 21265 | |
615 | +-6 | |
616 | +6 0 0 0 0 | |
617 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
618 | + -18287 20887 -18662 21265 | |
619 | +-6 | |
620 | +6 0 0 0 0 | |
621 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
622 | + -17389 20061 -20599 21738 | |
623 | +-6 | |
624 | +6 0 0 0 0 | |
625 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
626 | + -19033 20149 -19631 21738 | |
627 | +-6 | |
628 | +6 0 0 0 0 | |
629 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -9100 20532 732 425 0 0 0 0 | |
630 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -9100 20532 732 425 0 0 0 0 | |
631 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -9100 20650 _id_\001 | |
632 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
633 | + -9360 20721 -8840 20721 | |
634 | +-6 | |
635 | +6 0 0 0 0 | |
636 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -9383 21784 850 425 0 0 0 0 | |
637 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -9383 21784 850 425 0 0 0 0 | |
638 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -9383 21902 name\001 | |
639 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
640 | + -9761 21973 -9005 21973 | |
641 | +-6 | |
642 | +6 0 0 0 0 | |
643 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -9112 23083 791 425 0 0 0 0 | |
644 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -9112 23083 791 425 0 0 0 0 | |
645 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -9112 23201 plz_f\001 | |
646 | +-6 | |
647 | +6 0 0 0 0 | |
648 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -4978 20697 1145 425 0 0 0 0 | |
649 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -4978 20697 1145 425 0 0 0 0 | |
650 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -4978 20815 webpage\001 | |
651 | +-6 | |
652 | +6 0 0 0 0 | |
653 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -4175 21784 1452 425 0 0 0 0 | |
654 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -4175 21784 1452 425 0 0 0 0 | |
655 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -4175 21784 1263 330 0 0 0 0 | |
656 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -4175 21902 beschreibung\001 | |
657 | +-6 | |
658 | +6 0 0 0 0 | |
659 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -5025 22989 838 425 0 0 0 0 | |
660 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -5025 22989 838 425 0 0 0 0 | |
661 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -5025 23107 email\001 | |
662 | +-6 | |
663 | +6 0 0 0 0 | |
664 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
665 | + -8582 20833 -7983 21265 | |
666 | +-6 | |
667 | +6 0 0 0 0 | |
668 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
669 | + -8533 21784 -7983 21738 | |
670 | +-6 | |
671 | +6 0 0 0 0 | |
672 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
673 | + -8532 22783 -7983 22210 | |
674 | +-6 | |
675 | +6 0 0 0 0 | |
676 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
677 | + -5788 20998 -6258 21265 | |
678 | +-6 | |
679 | +6 0 0 0 0 | |
680 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
681 | + -5627 21784 -6258 21738 | |
682 | +-6 | |
683 | +6 0 0 0 0 | |
684 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
685 | + -5618 22688 -6258 22210 | |
686 | +-6 | |
687 | +6 0 0 0 0 | |
688 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
689 | + -17999 29220 -17101 28681 -16204 29220 -17101 29758 -17999 29220 | |
690 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
691 | + -17999 29220 -17101 28681 -16204 29220 -17101 29758 -17999 29220 | |
692 | +4 2 0 0 0 16 22.762205 0.0 6 0.0 0.0 -18141 29078 0,1\001 | |
693 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -16062 29078 1\001 | |
694 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -17101 29338 ist ein\001 | |
695 | +-6 | |
696 | +6 0 0 0 0 | |
697 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
698 | + -14526 30987 -13629 30448 -12731 30987 -13629 31525 -14526 30987 | |
699 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
700 | + -14526 30987 -13629 30448 -12731 30987 -13629 31525 -14526 30987 | |
701 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -13534 30306 1\001 | |
702 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -13534 32045 0,1\001 | |
703 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -13629 31105 ist ein\001 | |
704 | +-6 | |
705 | +6 0 0 0 0 | |
706 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
707 | + -11591 36473 -10693 35934 -9795 36473 -10693 37012 -11591 36473 | |
708 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
709 | + -11591 36473 -10693 35934 -9795 36473 -10693 37012 -11591 36473 | |
710 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -10599 35793 1\001 | |
711 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -10599 37531 0,1\001 | |
712 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -10693 36591 ist ein\001 | |
713 | +-6 | |
714 | +6 0 0 0 0 | |
715 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
716 | + -9276 36473 -8378 35934 -7481 36473 -8378 37012 -9276 36473 | |
717 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
718 | + -9276 36473 -8378 35934 -7481 36473 -8378 37012 -9276 36473 | |
719 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -8284 35793 1\001 | |
720 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -8284 37531 0,1\001 | |
721 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -8378 36591 ist ein\001 | |
722 | +-6 | |
723 | +6 0 0 0 0 | |
724 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
725 | + -16605 33064 -15920 32652 -15235 33064 -15920 33475 -16605 33064 | |
726 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
727 | + -16605 33064 -15920 32652 -15235 33064 -15920 33475 -16605 33064 | |
728 | +4 2 0 0 0 16 22.762205 0.0 6 0.0 0.0 -16747 32922 n\001 | |
729 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -15093 32922 m\001 | |
730 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -15920 33182 hat\001 | |
731 | +-6 | |
732 | +6 0 0 0 0 | |
733 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
734 | + -8196 29220 -7357 28717 -6518 29220 -7357 29723 -8196 29220 | |
735 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
736 | + -8196 29220 -7357 28717 -6518 29220 -7357 29723 -8196 29220 | |
737 | +4 2 0 0 0 16 22.762205 0.0 6 0.0 0.0 -8337 29078 1\001 | |
738 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -6377 29078 1\001 | |
739 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -7357 29338 offen\001 | |
740 | +-6 | |
741 | +6 0 0 0 0 | |
742 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
743 | + -21843 36473 -20945 35934 -20047 36473 -20945 37012 -21843 36473 | |
744 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
745 | + -21843 36473 -20945 35934 -20047 36473 -20945 37012 -21843 36473 | |
746 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20851 35793 0,1\001 | |
747 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20851 37531 0,1\001 | |
748 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20945 36591 ist ein\001 | |
749 | +-6 | |
750 | +6 0 0 0 0 | |
751 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
752 | + -24040 36473 -23142 35934 -22244 36473 -23142 37012 -24040 36473 | |
753 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
754 | + -24040 36473 -23142 35934 -22244 36473 -23142 37012 -24040 36473 | |
755 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -23047 35793 0,1\001 | |
756 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -23047 37531 0,1\001 | |
757 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -23142 36591 ist ein\001 | |
758 | +-6 | |
759 | +6 0 0 0 0 | |
760 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
761 | + -10912 26617 -10014 26078 -9117 26617 -10014 27155 -10912 26617 | |
762 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
763 | + -10912 26617 -10014 26078 -9117 26617 -10014 27155 -10912 26617 | |
764 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -9920 25936 0,1\001 | |
765 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -9920 27675 1\001 | |
766 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -10014 26735 ist ein\001 | |
767 | +-6 | |
768 | +6 0 0 0 0 | |
769 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 4 | |
770 | + -18662 21265 -19414 21265 -19414 29220 -17999 29220 | |
771 | +-6 | |
772 | +6 0 0 0 0 | |
773 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
774 | + -16204 29220 -11195 29220 | |
775 | +-6 | |
776 | +6 0 0 0 0 | |
777 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
778 | + -7983 21738 -7544 21738 -7544 24637 -20945 24637 -20945 35934 | |
779 | +-6 | |
780 | +6 0 0 0 0 | |
781 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
782 | + -20599 21265 -19940 21265 -19940 24259 -23142 24259 -23142 35934 | |
783 | +-6 | |
784 | +6 0 0 0 0 | |
785 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
786 | + -20599 20793 -18662 20793 -18662 21738 -20599 21738 -20599 20793 | |
787 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
788 | + -20599 20793 -18662 20793 -18662 21738 -20599 21738 -20599 20793 | |
789 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -19631 21383 person\001 | |
790 | +-6 | |
791 | +6 0 0 0 0 | |
792 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
793 | + -6258 21738 -6669 21738 -6669 25558 -10014 25558 -10014 26078 | |
794 | +-6 | |
795 | +6 0 0 0 0 | |
796 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
797 | + -7983 21265 -6258 21265 -6258 22210 -7983 22210 -7983 21265 | |
798 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
799 | + -7983 21265 -6258 21265 -6258 22210 -7983 22210 -7983 21265 | |
800 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -7121 21856 firma\001 | |
801 | +-6 | |
802 | +6 0 0 0 0 | |
803 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
804 | + -10014 27155 -10014 28747 | |
805 | +-6 | |
806 | +6 0 0 0 0 | |
807 | +5 1 2 1 0 0 0 0 -1 31.496063 0 1 1 0 0.000000 0.000000 -15489 26517 -16614 27362 -17101 28681 | |
808 | + 0 0 1.574803 236.220472 236.220472 | |
809 | +-6 | |
810 | +6 0 0 0 0 | |
811 | +5 1 2 1 0 0 0 0 -1 31.496063 0 1 1 0 0.000000 0.000000 -14468 26007 -12416 25589 -10463 26347 | |
812 | + 0 0 1.574803 236.220472 236.220472 | |
813 | +-6 | |
814 | +6 0 0 0 0 | |
815 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
816 | + -8833 29220 -8196 29220 | |
817 | +-6 | |
818 | +6 0 0 0 0 | |
819 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
820 | + -6518 29220 -5809 29220 | |
821 | +-6 | |
822 | +6 0 0 0 0 | |
823 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
824 | + -8833 29220 -9925 29220 -9925 34511 -10693 34511 -10693 35934 | |
825 | +-6 | |
826 | +6 0 0 0 0 | |
827 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
828 | + -8833 29220 -9240 29220 -9240 34511 -8378 34511 -8378 35934 | |
829 | +-6 | |
830 | +6 0 0 0 0 | |
831 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
832 | + -11195 29220 -11082 29220 -11082 29480 -13629 29480 -13629 30448 | |
833 | +-6 | |
834 | +6 0 0 0 0 | |
835 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
836 | + -13629 31525 -13629 32591 | |
837 | +-6 | |
838 | +6 0 0 0 0 | |
839 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
840 | + -14491 33064 -15235 33064 | |
841 | +-6 | |
842 | +6 0 0 0 0 | |
843 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
844 | + -17408 33064 -16605 33064 | |
845 | +-6 | |
846 | +6 0 0 0 0 | |
847 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -18864 31653 933 425 0 0 0 0 | |
848 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -18864 31653 933 425 0 0 0 0 | |
849 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -18864 31771 maske\001 | |
850 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
851 | + -19325 31842 -18404 31842 | |
852 | +-6 | |
853 | +6 0 0 0 0 | |
854 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -19396 34180 850 425 0 0 0 0 | |
855 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -19396 34180 850 425 0 0 0 0 | |
856 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -19396 34299 name\001 | |
857 | +-6 | |
858 | +6 0 0 0 0 | |
859 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -12983 34157 933 425 0 0 0 0 | |
860 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -12983 34157 933 425 0 0 0 0 | |
861 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -12983 34275 rechte\001 | |
862 | +-6 | |
863 | +6 0 0 0 0 | |
864 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -11790 33023 732 425 0 0 0 0 | |
865 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -11790 33023 732 425 0 0 0 0 | |
866 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -11790 33141 _id_\001 | |
867 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
868 | + -12050 33212 -11530 33212 | |
869 | +-6 | |
870 | +6 0 0 0 0 | |
871 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -14400 35031 1287 425 0 0 0 0 | |
872 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -14400 35031 1287 425 0 0 0 0 | |
873 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -14400 35149 id_benutzer\001 | |
874 | +-6 | |
875 | +6 0 0 0 0 | |
876 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -11128 30377 732 425 0 0 0 0 | |
877 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -11128 30377 732 425 0 0 0 0 | |
878 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -11128 30495 _id_\001 | |
879 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
880 | + -11388 30566 -10868 30566 | |
881 | +-6 | |
882 | +6 0 0 0 0 | |
883 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -11636 28133 1169 425 0 0 0 0 | |
884 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -11636 28133 1169 425 0 0 0 0 | |
885 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -11636 28251 id_person\001 | |
886 | +-6 | |
887 | +6 0 0 0 0 | |
888 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -3994 27968 732 425 0 0 0 0 | |
889 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -3994 27968 732 425 0 0 0 0 | |
890 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3994 28086 _id_\001 | |
891 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
892 | + -4254 28157 -3735 28157 | |
893 | +-6 | |
894 | +6 0 0 0 0 | |
895 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -3782 30590 732 425 0 0 0 0 | |
896 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -3782 30590 732 425 0 0 0 0 | |
897 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -3782 30590 543 330 0 0 0 0 | |
898 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3782 30708 info\001 | |
899 | +-6 | |
900 | +6 0 0 0 0 | |
901 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -8617 28062 1003 425 0 0 0 0 | |
902 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -8617 28062 1003 425 0 0 0 0 | |
903 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -8617 28180 id_firma\001 | |
904 | +-6 | |
905 | +6 0 0 0 0 | |
906 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
907 | + -10829 28434 -10014 29692 | |
908 | +-6 | |
909 | +6 0 0 0 0 | |
910 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
911 | + -9326 28363 -10014 29692 | |
912 | +-6 | |
913 | +6 0 0 0 0 | |
914 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
915 | + -10610 30077 -10014 28747 | |
916 | +-6 | |
917 | +6 0 0 0 0 | |
918 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
919 | + -6979 30820 -9953 28795 | |
920 | +-6 | |
921 | +6 0 0 0 0 | |
922 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -7786 30519 1169 425 0 0 0 0 | |
923 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -7786 30519 1169 425 0 0 0 0 | |
924 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -7786 30637 username\001 | |
925 | +-6 | |
926 | +6 0 0 0 0 | |
927 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
928 | + -11195 28747 -8833 28747 -8833 29692 -11195 29692 -11195 28747 | |
929 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
930 | + -11195 28747 -8833 28747 -8833 29692 -11195 29692 -11195 28747 | |
931 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -10014 29338 benutzer\001 | |
932 | +-6 | |
933 | +6 0 0 0 0 | |
934 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
935 | + -3782 30165 -4735 28747 | |
936 | +-6 | |
937 | +6 0 0 0 0 | |
938 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
939 | + -3994 28393 -4735 29692 | |
940 | +-6 | |
941 | +6 0 0 0 0 | |
942 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
943 | + -5809 28747 -3660 28747 -3660 29692 -5809 29692 -5809 28747 | |
944 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
945 | + -5809 28747 -3660 28747 -3660 29692 -5809 29692 -5809 28747 | |
946 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -4735 29338 session\001 | |
947 | +-6 | |
948 | +6 0 0 0 0 | |
949 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
950 | + -12522 33023 -12767 33064 | |
951 | +-6 | |
952 | +6 0 0 0 0 | |
953 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
954 | + -12983 33732 -13629 32591 | |
955 | +-6 | |
956 | +6 0 0 0 0 | |
957 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
958 | + -18876 32078 -18457 32621 | |
959 | +-6 | |
960 | +6 0 0 0 0 | |
961 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
962 | + -18795 33880 -18377 33536 | |
963 | +-6 | |
964 | +6 0 0 0 0 | |
965 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
966 | + -19345 32591 -17408 32591 -17408 33536 -19345 33536 -19345 32591 | |
967 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
968 | + -19345 32591 -17408 32591 -17408 33536 -19345 33536 -19345 32591 | |
969 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -18377 33182 rechte\001 | |
970 | +-6 | |
971 | +6 0 0 0 0 | |
972 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
973 | + -14388 34606 -13629 32591 | |
974 | +-6 | |
975 | +6 0 0 0 0 | |
976 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
977 | + -14491 32591 -12767 32591 -12767 33536 -14491 33536 -14491 32591 | |
978 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
979 | + -14491 32591 -12767 32591 -12767 33536 -14491 33536 -14491 32591 | |
980 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -13629 33182 admin\001 | |
981 | +-6 | |
982 | +6 0 0 0 0 | |
983 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
984 | + -17468 30448 -15902 30448 -15603 30586 -15603 31137 -17468 31137 -17468 30448 | |
985 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
986 | + -17468 30448 -15902 30448 -15603 30586 -15603 31137 -17468 31137 -17468 30448 | |
987 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
988 | + -15902 30448 -15902 30586 | |
989 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
990 | + -15902 30586 -15603 30586 | |
991 | +4 0 0 0 0 12 19.916929 0.0 6 0.0 0.0 -17281 30863 Bitmaske\001 | |
992 | +-6 | |
993 | +6 0 0 0 0 | |
994 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
995 | + -6578 34724 -1416 34724 -432 35329 -432 37751 -6578 37751 -6578 34724 | |
996 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
997 | + -6578 34724 -1416 34724 -432 35329 -432 37751 -6578 37751 -6578 34724 | |
998 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
999 | + -1416 34724 -1416 35329 | |
1000 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1001 | + -1416 35329 -432 35329 | |
1002 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -5964 35151 WEB-Shop System ERM\001 | |
1003 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -5964 35481 Seite 1\001 | |
1004 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -5964 35812 \001 | |
1005 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -5964 36143 Autor: Georg Steffers\001 | |
1006 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -5964 36473 E-Mail: georg@steffers.org\001 | |
1007 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -5964 36804 \001 | |
1008 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -5964 37135 Copyright (C)2004 Georg Steffers\001 | |
1009 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -5964 37466 erzeugt mit DIA V0.93\001 | |
1010 | +-6 | |
1011 | +6 0 0 0 0 | |
1012 | +5 1 3 1 0 0 0 0 -1 31.496063 0 1 1 0 0.000000 0.000000 -17468 30792 -17951 30930 -18225 31352 | |
1013 | + 0 0 1.574803 236.220472 236.220472 | |
1014 | +-6 | |
1015 | +6 0 0 0 0 | |
1016 | +2 1 3 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1017 | + -24113 25247 -2381 25247 | |
1018 | +-6 | |
1019 | +6 0 0 0 0 | |
1020 | +2 1 3 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1021 | + -24113 10648 -2381 10648 | |
1022 | +-6 | |
1023 | +6 0 0 0 0 | |
1024 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
1025 | + -2858 9332 -820 9332 -432 9474 -432 10044 -2858 10044 -2858 9332 | |
1026 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
1027 | + -2858 9332 -820 9332 -432 9474 -432 10044 -2858 10044 -2858 9332 | |
1028 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1029 | + -820 9332 -820 9474 | |
1030 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1031 | + -820 9474 -432 9474 | |
1032 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1645 9759 Adressdaten\001 | |
1033 | +-6 | |
1034 | +6 0 0 0 0 | |
1035 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
1036 | + -3212 23741 -877 23741 -432 23950 -432 24784 -3212 24784 -3212 23741 | |
1037 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
1038 | + -3212 23741 -877 23741 -432 23950 -432 24784 -3212 24784 -3212 23741 | |
1039 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1040 | + -877 23741 -877 23950 | |
1041 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1042 | + -877 23950 -432 23950 | |
1043 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1822 24168 Personen- und\001 | |
1044 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1822 24499 Firmendaten\001 | |
1045 | +-6 | |
1046 | +6 0 0 0 0 | |
1047 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
1048 | + -2681 33072 -792 33072 -432 33281 -432 34115 -2681 34115 -2681 33072 | |
1049 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
1050 | + -2681 33072 -792 33072 -432 33281 -432 34115 -2681 34115 -2681 33072 | |
1051 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1052 | + -792 33072 -792 33281 | |
1053 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1054 | + -792 33281 -432 33281 | |
1055 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1557 33499 Benutzer-\001 | |
1056 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1557 33830 verwaltung\001 | |
1057 | +-6 | |
1058 | +6 0 0 0 0 | |
1059 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1060 | + -24040 39779 -23142 39240 -22244 39779 -23142 40317 -24040 39779 | |
1061 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1062 | + -24040 39779 -23142 39240 -22244 39779 -23142 40317 -24040 39779 | |
1063 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -23047 39098 0,1\001 | |
1064 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -23047 40837 0,1\001 | |
1065 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -23142 39897 ist ein\001 | |
1066 | +-6 | |
1067 | +6 0 0 0 0 | |
1068 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1069 | + -21843 39779 -20945 39240 -20047 39779 -20945 40317 -21843 39779 | |
1070 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1071 | + -21843 39779 -20945 39240 -20047 39779 -20945 40317 -21843 39779 | |
1072 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20851 39098 0,1\001 | |
1073 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20851 40837 0,1\001 | |
1074 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20945 39897 ist ein\001 | |
1075 | +-6 | |
1076 | +6 0 0 0 0 | |
1077 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1078 | + -11591 39779 -10693 39240 -9795 39779 -10693 40317 -11591 39779 | |
1079 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1080 | + -11591 39779 -10693 39240 -9795 39779 -10693 40317 -11591 39779 | |
1081 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -10599 39098 1\001 | |
1082 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -10599 40837 0,1\001 | |
1083 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -10693 39897 ist ein\001 | |
1084 | +-6 | |
1085 | +6 0 0 0 0 | |
1086 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1087 | + -9276 39779 -8378 39240 -7481 39779 -8378 40317 -9276 39779 | |
1088 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1089 | + -9276 39779 -8378 39240 -7481 39779 -8378 40317 -9276 39779 | |
1090 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -8284 39098 1\001 | |
1091 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -8284 40837 0,1\001 | |
1092 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -8378 39897 ist ein\001 | |
1093 | +-6 | |
1094 | +6 0 0 0 0 | |
1095 | +2 1 1 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1096 | + -23142 37012 -23142 39240 | |
1097 | +-6 | |
1098 | +6 0 0 0 0 | |
1099 | +2 1 1 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1100 | + -20945 37012 -20945 39240 | |
1101 | +-6 | |
1102 | +6 0 0 0 0 | |
1103 | +2 1 1 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1104 | + -10693 37012 -10693 39240 | |
1105 | +-6 | |
1106 | +6 0 0 0 0 | |
1107 | +2 1 1 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1108 | + -8378 37012 -8378 39240 | |
1109 | +-6 | |
1110 | +6 0 0 0 0 | |
1111 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1112 | + -23142 40317 -23142 41130 -22295 41130 -22295 42523 -23510 42523 | |
1113 | +-6 | |
1114 | +6 0 0 0 0 | |
1115 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1116 | + -20945 40317 -20945 41130 -21869 41130 -21869 42523 -20935 42523 | |
1117 | +-6 | |
1118 | +6 0 0 0 0 | |
1119 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 3 | |
1120 | + -10693 40317 -10693 42523 -11948 42523 | |
1121 | +-6 | |
1122 | +6 0 0 0 0 | |
1123 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 3 | |
1124 | + -8378 40317 -8378 42523 -6777 42523 | |
1125 | +-6 | |
1126 | +6 0 0 0 0 | |
1127 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1128 | + -23356 45094 -22222 44413 -21088 45094 -22222 45774 -23356 45094 | |
1129 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1130 | + -23356 45094 -22222 44413 -21088 45094 -22222 45774 -23356 45094 | |
1131 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -22128 44271 n\001 | |
1132 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -22128 46294 2\001 | |
1133 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -22222 45212 deb/kred\001 | |
1134 | +-6 | |
1135 | +6 0 0 0 0 | |
1136 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1137 | + -14263 45084 -13129 44404 -11995 45084 -13129 45764 -14263 45084 | |
1138 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1139 | + -14263 45084 -13129 44404 -11995 45084 -13129 45764 -14263 45084 | |
1140 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -13035 44262 n\001 | |
1141 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -13035 46284 2\001 | |
1142 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -13129 45202 deb/kred\001 | |
1143 | +-6 | |
1144 | +6 0 0 0 0 | |
1145 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1146 | + -7049 45060 -5915 44380 -4781 45060 -5915 45741 -7049 45060 | |
1147 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1148 | + -7049 45060 -5915 44380 -4781 45060 -5915 45741 -7049 45060 | |
1149 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -5821 44238 n\001 | |
1150 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -5821 46260 2\001 | |
1151 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -5915 45179 deb/kred\001 | |
1152 | +-6 | |
1153 | +6 0 0 0 0 | |
1154 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1155 | + -22222 42996 -22222 44413 | |
1156 | +-6 | |
1157 | +6 0 0 0 0 | |
1158 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1159 | + -13129 42996 -13129 44404 | |
1160 | +-6 | |
1161 | +6 0 0 0 0 | |
1162 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1163 | + -5915 42996 -5915 44380 | |
1164 | +-6 | |
1165 | +6 0 0 0 0 | |
1166 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1167 | + -13129 45764 -13129 46780 -11806 46780 -11806 50554 -12672 50554 | |
1168 | +-6 | |
1169 | +6 0 0 0 0 | |
1170 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1171 | + -5915 45741 -5915 46780 -11381 46780 -11381 50554 -10948 50554 | |
1172 | +-6 | |
1173 | +6 0 0 0 0 | |
1174 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1175 | + -22222 45774 -22222 47718 -12255 47718 -12255 50554 -12672 50554 | |
1176 | +-6 | |
1177 | +6 0 0 0 0 | |
1178 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -15073 50417 n\001 | |
1179 | +-6 | |
1180 | +6 0 0 0 0 | |
1181 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -18466 50417 1\001 | |
1182 | +-6 | |
1183 | +6 0 0 0 0 | |
1184 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -16582 51779 n\001 | |
1185 | +-6 | |
1186 | +6 0 0 0 0 | |
1187 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1188 | + -15177 50554 -12672 50554 | |
1189 | +-6 | |
1190 | +6 0 0 0 0 | |
1191 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1192 | + -20616 50554 -18177 50554 | |
1193 | +-6 | |
1194 | +6 0 0 0 0 | |
1195 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1196 | + -16677 51454 -16677 53840 | |
1197 | +-6 | |
1198 | +6 0 0 0 0 | |
1199 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1200 | + -23368 52637 -22222 51950 -21077 52637 -22222 53325 -23368 52637 | |
1201 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1202 | + -23368 52637 -22222 51950 -21077 52637 -22222 53325 -23368 52637 | |
1203 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -22128 51808 n\001 | |
1204 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -22128 53845 n\001 | |
1205 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -22222 52756 nr_zu_typ\001 | |
1206 | +-6 | |
1207 | +6 0 0 0 0 | |
1208 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1209 | + -22222 51026 -22222 51950 | |
1210 | +-6 | |
1211 | +6 0 0 0 0 | |
1212 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 3 | |
1213 | + -22222 53325 -22222 54312 -18071 54312 | |
1214 | +-6 | |
1215 | +6 0 0 0 0 | |
1216 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 7 | |
1217 | + -7007 50554 -5950 50554 -5950 49437 -8509 49437 -8509 50297 -11810 50297 -11810 50082 | |
1218 | +-6 | |
1219 | +6 0 0 0 0 | |
1220 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 7 | |
1221 | + -7007 50554 -5927 50554 -5927 51671 -8509 51671 -8509 50610 -11810 50610 -11810 51026 | |
1222 | +-6 | |
1223 | +6 0 0 0 0 | |
1224 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -5833 49736 n\001 | |
1225 | +-6 | |
1226 | +6 0 0 0 0 | |
1227 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -5833 51463 n\001 | |
1228 | +-6 | |
1229 | +6 0 0 0 0 | |
1230 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -20550 43717 732 425 0 0 0 0 | |
1231 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -20550 43717 732 425 0 0 0 0 | |
1232 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -20550 43836 _id_\001 | |
1233 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1234 | + -20810 43906 -20291 43906 | |
1235 | +-6 | |
1236 | +6 0 0 0 0 | |
1237 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -23609 43836 838 425 0 0 0 0 | |
1238 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -23609 43836 838 425 0 0 0 0 | |
1239 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -23609 43954 vk_nr\001 | |
1240 | +-6 | |
1241 | +6 0 0 0 0 | |
1242 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -19476 41615 1263 425 0 0 0 0 | |
1243 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -19476 41615 1263 425 0 0 0 0 | |
1244 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -19476 41733 kred_konto\001 | |
1245 | +-6 | |
1246 | +6 0 0 0 0 | |
1247 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -19287 42678 1216 425 0 0 0 0 | |
1248 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -19287 42678 1216 425 0 0 0 0 | |
1249 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -19287 42796 deb_konto\001 | |
1250 | +-6 | |
1251 | +6 0 0 0 0 | |
1252 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -24649 41591 1169 425 0 0 0 0 | |
1253 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -24649 41591 1169 425 0 0 0 0 | |
1254 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -24649 41710 id_person\001 | |
1255 | +-6 | |
1256 | +6 0 0 0 0 | |
1257 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -24791 42773 1003 425 0 0 0 0 | |
1258 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -24791 42773 1003 425 0 0 0 0 | |
1259 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -24791 42891 id_firma\001 | |
1260 | +-6 | |
1261 | +6 0 0 0 0 | |
1262 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1263 | + -23822 41892 -20935 42996 | |
1264 | +-6 | |
1265 | +6 0 0 0 0 | |
1266 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1267 | + -23787 42773 -22222 42051 | |
1268 | +-6 | |
1269 | +6 0 0 0 0 | |
1270 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1271 | + -23016 43535 -22222 42051 | |
1272 | +-6 | |
1273 | +6 0 0 0 0 | |
1274 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1275 | + -21068 43417 -22222 42051 | |
1276 | +-6 | |
1277 | +6 0 0 0 0 | |
1278 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1279 | + -20503 42678 -23510 42523 | |
1280 | +-6 | |
1281 | +6 0 0 0 0 | |
1282 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1283 | + -20739 41615 -22222 42996 | |
1284 | +-6 | |
1285 | +6 0 0 0 0 | |
1286 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1287 | + -23510 42051 -20935 42051 -20935 42996 -23510 42996 -23510 42051 | |
1288 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1289 | + -23510 42051 -20935 42051 -20935 42996 -23510 42996 -23510 42051 | |
1290 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -22222 42642 verk\303\244ufer\001 | |
1291 | +-6 | |
1292 | +6 0 0 0 0 | |
1293 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -13483 40458 732 425 0 0 0 0 | |
1294 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -13483 40458 732 425 0 0 0 0 | |
1295 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -13483 40576 _id_\001 | |
1296 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1297 | + -13743 40647 -13223 40647 | |
1298 | +-6 | |
1299 | +6 0 0 0 0 | |
1300 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -15527 43694 1287 425 0 0 0 0 | |
1301 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -15527 43694 1287 425 0 0 0 0 | |
1302 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15527 43812 id_benutzer\001 | |
1303 | +-6 | |
1304 | +6 0 0 0 0 | |
1305 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -15881 42489 1263 425 0 0 0 0 | |
1306 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -15881 42489 1263 425 0 0 0 0 | |
1307 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15881 42607 kred_konto\001 | |
1308 | +-6 | |
1309 | +6 0 0 0 0 | |
1310 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -15527 41190 1216 425 0 0 0 0 | |
1311 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -15527 41190 1216 425 0 0 0 0 | |
1312 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15527 41308 deb_konto\001 | |
1313 | +-6 | |
1314 | +6 0 0 0 0 | |
1315 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -11948 41214 850 425 0 0 0 0 | |
1316 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -11948 41214 850 425 0 0 0 0 | |
1317 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -11948 41332 an_nr\001 | |
1318 | +-6 | |
1319 | +6 0 0 0 0 | |
1320 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1321 | + -13483 40883 -13129 42996 | |
1322 | +-6 | |
1323 | +6 0 0 0 0 | |
1324 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1325 | + -11948 41639 -13129 42996 | |
1326 | +-6 | |
1327 | +6 0 0 0 0 | |
1328 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1329 | + -14666 41491 -13129 42996 | |
1330 | +-6 | |
1331 | +6 0 0 0 0 | |
1332 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1333 | + -14617 42489 -14310 42523 | |
1334 | +-6 | |
1335 | +6 0 0 0 0 | |
1336 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1337 | + -14616 43393 -13129 42051 | |
1338 | +-6 | |
1339 | +6 0 0 0 0 | |
1340 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1341 | + -14310 42051 -11948 42051 -11948 42996 -14310 42996 -14310 42051 | |
1342 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1343 | + -14310 42051 -11948 42051 -11948 42996 -14310 42996 -14310 42051 | |
1344 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -13129 42642 anbieter\001 | |
1345 | +-6 | |
1346 | +6 0 0 0 0 | |
1347 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -5513 40259 732 425 0 0 0 0 | |
1348 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -5513 40259 732 425 0 0 0 0 | |
1349 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -5513 40377 _id_\001 | |
1350 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1351 | + -5773 40448 -5253 40448 | |
1352 | +-6 | |
1353 | +6 0 0 0 0 | |
1354 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -3730 43637 1287 425 0 0 0 0 | |
1355 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -3730 43637 1287 425 0 0 0 0 | |
1356 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3730 43755 id_benutzer\001 | |
1357 | +-6 | |
1358 | +6 0 0 0 0 | |
1359 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -3281 42456 1263 425 0 0 0 0 | |
1360 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -3281 42456 1263 425 0 0 0 0 | |
1361 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3281 42574 kred_konto\001 | |
1362 | +-6 | |
1363 | +6 0 0 0 0 | |
1364 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -3801 41251 1216 425 0 0 0 0 | |
1365 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -3801 41251 1216 425 0 0 0 0 | |
1366 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3801 41369 deb_konto\001 | |
1367 | +-6 | |
1368 | +6 0 0 0 0 | |
1369 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -6860 41228 850 425 0 0 0 0 | |
1370 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -6860 41228 850 425 0 0 0 0 | |
1371 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -6860 41346 kd_nr\001 | |
1372 | +-6 | |
1373 | +6 0 0 0 0 | |
1374 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1375 | + -6860 41653 -5915 42996 | |
1376 | +-6 | |
1377 | +6 0 0 0 0 | |
1378 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1379 | + -5513 40684 -5915 42996 | |
1380 | +-6 | |
1381 | +6 0 0 0 0 | |
1382 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1383 | + -4661 41552 -6777 42996 | |
1384 | +-6 | |
1385 | +6 0 0 0 0 | |
1386 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1387 | + -4545 42456 -5053 42523 | |
1388 | +-6 | |
1389 | +6 0 0 0 0 | |
1390 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1391 | + -5017 43637 -5915 42051 | |
1392 | +-6 | |
1393 | +6 0 0 0 0 | |
1394 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1395 | + -6777 42051 -5053 42051 -5053 42996 -6777 42996 -6777 42051 | |
1396 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1397 | + -6777 42051 -5053 42051 -5053 42996 -6777 42996 -6777 42051 | |
1398 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -5915 42642 kunde\001 | |
1399 | +-6 | |
1400 | +6 0 0 0 0 | |
1401 | +2 1 3 1 0 0 0 0 -1 31.496063 0 0 0 0 0 4 | |
1402 | + -24153 38683 -17486 38683 -17486 47251 -2476 47251 | |
1403 | +-6 | |
1404 | +6 0 0 0 0 | |
1405 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
1406 | + -2681 45706 -792 45706 -432 45914 -432 46748 -2681 46748 -2681 45706 | |
1407 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
1408 | + -2681 45706 -792 45706 -432 45914 -432 46748 -2681 46748 -2681 45706 | |
1409 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1410 | + -792 45706 -792 45914 | |
1411 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1412 | + -792 45914 -432 45914 | |
1413 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1557 46133 Benutzer-\001 | |
1414 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1557 46463 verwaltung\001 | |
1415 | +-6 | |
1416 | +6 0 0 0 0 | |
1417 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -14021 52778 1074 425 0 0 0 0 | |
1418 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -14021 52778 1074 425 0 0 0 0 | |
1419 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -14021 52896 b_kto_nr\001 | |
1420 | +-6 | |
1421 | +6 0 0 0 0 | |
1422 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -9946 53912 1015 425 0 0 0 0 | |
1423 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -9946 53912 1015 425 0 0 0 0 | |
1424 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -9946 54030 b_name\001 | |
1425 | +-6 | |
1426 | +6 0 0 0 0 | |
1427 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -13749 51455 850 425 0 0 0 0 | |
1428 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -13749 51455 850 425 0 0 0 0 | |
1429 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -13749 51574 name\001 | |
1430 | +-6 | |
1431 | +6 0 0 0 0 | |
1432 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -10123 49613 673 425 0 0 0 0 | |
1433 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -10123 49613 673 425 0 0 0 0 | |
1434 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -10123 49731 blz\001 | |
1435 | +-6 | |
1436 | +6 0 0 0 0 | |
1437 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -9710 51550 968 425 0 0 0 0 | |
1438 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -9710 51550 968 425 0 0 0 0 | |
1439 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -9710 51668 summe\001 | |
1440 | +-6 | |
1441 | +6 0 0 0 0 | |
1442 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -13808 49707 909 425 0 0 0 0 | |
1443 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -13808 49707 909 425 0 0 0 0 | |
1444 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -13808 49825 kto_nr\001 | |
1445 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1446 | + -14245 49896 -13371 49896 | |
1447 | +-6 | |
1448 | +6 0 0 0 0 | |
1449 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -9497 52755 1157 425 0 0 0 0 | |
1450 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -9497 52755 1157 425 0 0 0 0 | |
1451 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -9497 52873 konto_typ\001 | |
1452 | +-6 | |
1453 | +6 0 0 0 0 | |
1454 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -9745 48550 1169 425 0 0 0 0 | |
1455 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -9745 48550 1169 425 0 0 0 0 | |
1456 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -9745 48668 saldo_soll\001 | |
1457 | +-6 | |
1458 | +6 0 0 0 0 | |
1459 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -14139 48597 1358 425 0 0 0 0 | |
1460 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -14139 48597 1358 425 0 0 0 0 | |
1461 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -14139 48715 saldo_haben\001 | |
1462 | +-6 | |
1463 | +6 0 0 0 0 | |
1464 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1465 | + -13178 48898 -11810 51026 | |
1466 | +-6 | |
1467 | +6 0 0 0 0 | |
1468 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1469 | + -13165 50008 -10948 51026 | |
1470 | +-6 | |
1471 | +6 0 0 0 0 | |
1472 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1473 | + -13148 51154 -11810 50082 | |
1474 | +-6 | |
1475 | +6 0 0 0 0 | |
1476 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1477 | + -13261 52477 -11810 50082 | |
1478 | +-6 | |
1479 | +6 0 0 0 0 | |
1480 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1481 | + -10664 53611 -11810 50082 | |
1482 | +-6 | |
1483 | +6 0 0 0 0 | |
1484 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1485 | + -10572 48850 -11810 51026 | |
1486 | +-6 | |
1487 | +6 0 0 0 0 | |
1488 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1489 | + -10316 52454 -11810 50082 | |
1490 | +-6 | |
1491 | +6 0 0 0 0 | |
1492 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1493 | + -10395 51249 -11810 50082 | |
1494 | +-6 | |
1495 | +6 0 0 0 0 | |
1496 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -17212 48526 1086 425 0 0 0 0 | |
1497 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -17212 48526 1086 425 0 0 0 0 | |
1498 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -17212 48644 konto_nr\001 | |
1499 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1500 | + -17826 48715 -16598 48715 | |
1501 | +-6 | |
1502 | +6 0 0 0 0 | |
1503 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -19373 49802 814 425 0 0 0 0 | |
1504 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -19373 49802 814 425 0 0 0 0 | |
1505 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -19373 49920 used\001 | |
1506 | +-6 | |
1507 | +6 0 0 0 0 | |
1508 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -19740 48715 1157 425 0 0 0 0 | |
1509 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -19740 48715 1157 425 0 0 0 0 | |
1510 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -19740 48833 konto_typ\001 | |
1511 | +-6 | |
1512 | +6 0 0 0 0 | |
1513 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1514 | + -18559 49802 -15177 51454 | |
1515 | +-6 | |
1516 | +6 0 0 0 0 | |
1517 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1518 | + -18582 48715 -15177 51454 | |
1519 | +-6 | |
1520 | +6 0 0 0 0 | |
1521 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1522 | + -17212 48951 -15177 51454 | |
1523 | +-6 | |
1524 | +6 0 0 0 0 | |
1525 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1526 | + -18177 49654 -15177 49654 -15177 51454 -18177 51454 -18177 49654 | |
1527 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1528 | + -18177 49654 -15177 49654 -15177 51454 -18177 51454 -18177 49654 | |
1529 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1530 | + -18177 50554 -16677 49654 -15177 50554 -16677 51454 -18177 50554 | |
1531 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1532 | + -18177 50554 -16677 49654 -15177 50554 -16677 51454 -18177 50554 | |
1533 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -16677 50672 used_konten\001 | |
1534 | +-6 | |
1535 | +6 0 0 0 0 | |
1536 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -4678 48125 1417 425 0 0 0 0 | |
1537 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -4678 48125 1417 425 0 0 0 0 | |
1538 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -4678 48243 buchungstext\001 | |
1539 | +-6 | |
1540 | +6 0 0 0 0 | |
1541 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -3403 50274 1015 425 0 0 0 0 | |
1542 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -3403 50274 1015 425 0 0 0 0 | |
1543 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3403 50392 kto_soll\001 | |
1544 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1545 | + -3946 50463 -2859 50463 | |
1546 | +-6 | |
1547 | +6 0 0 0 0 | |
1548 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -5340 52282 874 425 0 0 0 0 | |
1549 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -5340 52282 874 425 0 0 0 0 | |
1550 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -5340 52400 be_nr\001 | |
1551 | +-6 | |
1552 | +6 0 0 0 0 | |
1553 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -3308 52825 897 425 0 0 0 0 | |
1554 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -3308 52825 897 425 0 0 0 0 | |
1555 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3308 52944 berag\001 | |
1556 | +-6 | |
1557 | +6 0 0 0 0 | |
1558 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -3355 49235 1204 425 0 0 0 0 | |
1559 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -3355 49235 1204 425 0 0 0 0 | |
1560 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3355 49353 kto_haben\001 | |
1561 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1562 | + -4088 49424 -2623 49424 | |
1563 | +-6 | |
1564 | +6 0 0 0 0 | |
1565 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -3249 51408 1027 425 0 0 0 0 | |
1566 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -3249 51408 1027 425 0 0 0 0 | |
1567 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -3249 51526 bu_date\001 | |
1568 | +-6 | |
1569 | +6 0 0 0 0 | |
1570 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1571 | + -4678 48550 -5932 51199 | |
1572 | +-6 | |
1573 | +6 0 0 0 0 | |
1574 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1575 | + -4207 49535 -5932 51199 | |
1576 | +-6 | |
1577 | +6 0 0 0 0 | |
1578 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1579 | + -4418 50274 -7007 50554 | |
1580 | +-6 | |
1581 | +6 0 0 0 0 | |
1582 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1583 | + -4277 51408 -5932 49909 | |
1584 | +-6 | |
1585 | +6 0 0 0 0 | |
1586 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1587 | + -3943 52525 -5932 49909 | |
1588 | +-6 | |
1589 | +6 0 0 0 0 | |
1590 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1591 | + -5340 51857 -5932 49909 | |
1592 | +-6 | |
1593 | +6 0 0 0 0 | |
1594 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1595 | + -7007 49909 -4857 49909 -4857 51199 -7007 51199 -7007 49909 | |
1596 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1597 | + -7007 49909 -4857 49909 -4857 51199 -7007 51199 -7007 49909 | |
1598 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1599 | + -7007 50554 -5932 49909 -4857 50554 -5932 51199 -7007 50554 | |
1600 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1601 | + -7007 50554 -5932 49909 -4857 50554 -5932 51199 -7007 50554 | |
1602 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -5932 50672 buchung\001 | |
1603 | +-6 | |
1604 | +6 0 0 0 0 | |
1605 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -24238 49306 1452 425 0 0 0 0 | |
1606 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -24238 49306 1452 425 0 0 0 0 | |
1607 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -24238 49424 beschreibung\001 | |
1608 | +-6 | |
1609 | +6 0 0 0 0 | |
1610 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -24959 50440 850 425 0 0 0 0 | |
1611 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -24959 50440 850 425 0 0 0 0 | |
1612 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -24959 50558 name\001 | |
1613 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1614 | + -25337 50629 -24581 50629 | |
1615 | +-6 | |
1616 | +6 0 0 0 0 | |
1617 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -24628 51715 1157 425 0 0 0 0 | |
1618 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -24628 51715 1157 425 0 0 0 0 | |
1619 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -24628 51833 konto_typ\001 | |
1620 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1621 | + -25313 51904 -23943 51904 | |
1622 | +-6 | |
1623 | +6 0 0 0 0 | |
1624 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -17565 55637 732 425 0 0 0 0 | |
1625 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -17565 55637 732 425 0 0 0 0 | |
1626 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -17565 55755 _id_\001 | |
1627 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1628 | + -17825 55825 -17305 55825 | |
1629 | +-6 | |
1630 | +6 0 0 0 0 | |
1631 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -14577 55353 933 425 0 0 0 0 | |
1632 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -14577 55353 933 425 0 0 0 0 | |
1633 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -14577 55471 nr_von\001 | |
1634 | +-6 | |
1635 | +6 0 0 0 0 | |
1636 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -13785 54314 1157 425 0 0 0 0 | |
1637 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -13785 54314 1157 425 0 0 0 0 | |
1638 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -13785 54432 konto_typ\001 | |
1639 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1640 | + -14471 54503 -13100 54503 | |
1641 | +-6 | |
1642 | +6 0 0 0 0 | |
1643 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -15911 56062 897 425 0 0 0 0 | |
1644 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -15911 56062 897 425 0 0 0 0 | |
1645 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15911 56180 nr_bis\001 | |
1646 | +-6 | |
1647 | +6 0 0 0 0 | |
1648 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -19171 55140 850 425 0 0 0 0 | |
1649 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -19171 55140 850 425 0 0 0 0 | |
1650 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -19171 55259 name\001 | |
1651 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1652 | + -19549 55329 -18793 55329 | |
1653 | +-6 | |
1654 | +6 0 0 0 0 | |
1655 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1656 | + -23211 49606 -22222 51026 | |
1657 | +-6 | |
1658 | +6 0 0 0 0 | |
1659 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1660 | + -24108 50440 -20616 50554 | |
1661 | +-6 | |
1662 | +6 0 0 0 0 | |
1663 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1664 | + -23810 51414 -22222 50082 | |
1665 | +-6 | |
1666 | +6 0 0 0 0 | |
1667 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1668 | + -23828 50082 -20616 50082 -20616 51026 -23828 51026 -23828 50082 | |
1669 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1670 | + -23828 50082 -20616 50082 -20616 51026 -23828 51026 -23828 50082 | |
1671 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -22222 50672 konten_typen\001 | |
1672 | +-6 | |
1673 | +6 0 0 0 0 | |
1674 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1675 | + -18570 54839 -16677 53840 | |
1676 | +-6 | |
1677 | +6 0 0 0 0 | |
1678 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1679 | + -17565 55211 -16677 53840 | |
1680 | +-6 | |
1681 | +6 0 0 0 0 | |
1682 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1683 | + -15911 55637 -16677 53840 | |
1684 | +-6 | |
1685 | +6 0 0 0 0 | |
1686 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1687 | + -15237 55052 -16677 53840 | |
1688 | +-6 | |
1689 | +6 0 0 0 0 | |
1690 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1691 | + -14943 54314 -18071 54785 | |
1692 | +-6 | |
1693 | +6 0 0 0 0 | |
1694 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1695 | + -18071 53840 -15284 53840 -15284 54785 -18071 54785 -18071 53840 | |
1696 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1697 | + -18071 53840 -15284 53840 -15284 54785 -18071 54785 -18071 53840 | |
1698 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -16677 54430 kontenplan\001 | |
1699 | +-6 | |
1700 | +6 0 0 0 0 | |
1701 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1702 | + -11810 51026 -11810 57625 | |
1703 | +-6 | |
1704 | +6 0 0 0 0 | |
1705 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1706 | + -21242 59971 -20521 59539 -19801 59971 -20521 60403 -21242 59971 | |
1707 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1708 | + -21242 59971 -20521 59539 -19801 59971 -20521 60403 -21242 59971 | |
1709 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20427 59397 1\001 | |
1710 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20427 60923 1\001 | |
1711 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20521 60089 aus\001 | |
1712 | +-6 | |
1713 | +6 0 0 0 0 | |
1714 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1715 | + -21159 63229 -20521 62846 -19884 63229 -20521 63611 -21159 63229 | |
1716 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1717 | + -21159 63229 -20521 62846 -19884 63229 -20521 63611 -21159 63229 | |
1718 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20427 62704 n\001 | |
1719 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20427 64131 m\001 | |
1720 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -20521 63347 ist\001 | |
1721 | +-6 | |
1722 | +6 0 0 0 0 | |
1723 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1724 | + -20521 58764 -20521 59539 | |
1725 | +-6 | |
1726 | +6 0 0 0 0 | |
1727 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1728 | + -20521 60403 -20521 61162 | |
1729 | +-6 | |
1730 | +6 0 0 0 0 | |
1731 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1732 | + -20521 62107 -20521 62846 | |
1733 | +-6 | |
1734 | +6 0 0 0 0 | |
1735 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1736 | + -20521 63611 -20521 65586 | |
1737 | +-6 | |
1738 | +6 0 0 0 0 | |
1739 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1740 | + -17908 61634 -16963 61067 -16018 61634 -16963 62201 -17908 61634 | |
1741 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1742 | + -17908 61634 -16963 61067 -16018 61634 -16963 62201 -17908 61634 | |
1743 | +4 2 0 0 0 16 22.762205 0.0 6 0.0 0.0 -18050 61492 n\001 | |
1744 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -15876 61492 m\001 | |
1745 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -16963 61752 enth\303\244lt\001 | |
1746 | +-6 | |
1747 | +6 0 0 0 0 | |
1748 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1749 | + -18809 61634 -17908 61634 | |
1750 | +-6 | |
1751 | +6 0 0 0 0 | |
1752 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1753 | + -16018 61634 -13416 61634 | |
1754 | +-6 | |
1755 | +6 0 0 0 0 | |
1756 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1757 | + -12920 58292 -11810 57625 -10700 58292 -11810 58958 -12920 58292 | |
1758 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1759 | + -12920 58292 -11810 57625 -10700 58292 -11810 58958 -12920 58292 | |
1760 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -11716 57484 2\001 | |
1761 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -11716 59477 n\001 | |
1762 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -11810 58410 aufw/ertr\001 | |
1763 | +-6 | |
1764 | +6 0 0 0 0 | |
1765 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1766 | + -11810 58958 -11810 61162 | |
1767 | +-6 | |
1768 | +6 0 0 0 0 | |
1769 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 5 | |
1770 | + -6865 61634 -5932 61074 -4999 61634 -5932 62194 -6865 61634 | |
1771 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1772 | + -6865 61634 -5932 61074 -4999 61634 -5932 62194 -6865 61634 | |
1773 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -5837 60933 0,1\001 | |
1774 | +4 0 0 0 0 16 22.762205 0.0 6 0.0 0.0 -5837 62714 1\001 | |
1775 | +4 1 0 0 0 16 22.762205 0.0 6 0.0 0.0 -5932 61752 parent\001 | |
1776 | +-6 | |
1777 | +6 0 0 0 0 | |
1778 | +2 1 3 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1779 | + -24148 56884 -2416 56884 | |
1780 | +-6 | |
1781 | +6 0 0 0 0 | |
1782 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
1783 | + -6643 72734 -1480 72734 -497 73340 -497 75761 -6643 75761 -6643 72734 | |
1784 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
1785 | + -6643 72734 -1480 72734 -497 73340 -497 75761 -6643 75761 -6643 72734 | |
1786 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1787 | + -1480 72734 -1480 73340 | |
1788 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1789 | + -1480 73340 -497 73340 | |
1790 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -6028 73161 WEB-Shop System ERM\001 | |
1791 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -6028 73492 Seite 2\001 | |
1792 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -6028 73822 \001 | |
1793 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -6028 74153 Autor: Georg Steffers\001 | |
1794 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -6028 74484 E-Mail: georg@steffers.org\001 | |
1795 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -6028 74815 \001 | |
1796 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -6028 75145 Copyright (C)2004 Georg Steffers\001 | |
1797 | +4 0 0 0 0 14 19.916929 0.0 6 0.0 0.0 -6028 75476 erzeugt mit DIA V0.93\001 | |
1798 | +-6 | |
1799 | +6 0 0 0 0 | |
1800 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1801 | + -10599 49913 -12672 51026 | |
1802 | +-6 | |
1803 | +6 0 0 0 0 | |
1804 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1805 | + -12672 50082 -10948 50082 -10948 51026 -12672 51026 -12672 50082 | |
1806 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1807 | + -12672 50082 -10948 50082 -10948 51026 -12672 51026 -12672 50082 | |
1808 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -11810 50672 konto\001 | |
1809 | +-6 | |
1810 | +6 0 0 0 0 | |
1811 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
1812 | + -11810 61162 -11810 61452 -7749 61452 -7749 60484 -5932 60484 -5932 61074 | |
1813 | +-6 | |
1814 | +6 0 0 0 0 | |
1815 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
1816 | + -11810 62107 -11810 61724 -7761 61724 -7761 62846 -5932 62846 -5932 62194 | |
1817 | +-6 | |
1818 | +6 0 0 0 0 | |
1819 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
1820 | + -1813 55275 -668 55275 -450 55484 -450 56318 -1813 56318 -1813 55275 | |
1821 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
1822 | + -1813 55275 -668 55275 -450 55484 -450 56318 -1813 56318 -1813 55275 | |
1823 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1824 | + -668 55275 -668 55484 | |
1825 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1826 | + -668 55484 -450 55484 | |
1827 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1131 55702 FiBu\001 | |
1828 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1131 56033 Daten\001 | |
1829 | +-6 | |
1830 | +6 0 0 0 0 | |
1831 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
1832 | + -3224 64641 -889 64641 -444 64850 -444 65684 -3224 65684 -3224 64641 | |
1833 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
1834 | + -3224 64641 -889 64641 -444 64850 -444 65684 -3224 65684 -3224 64641 | |
1835 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1836 | + -889 64641 -889 64850 | |
1837 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1838 | + -889 64850 -444 64850 | |
1839 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1834 65068 Warengruppen/\001 | |
1840 | +4 1 0 0 0 14 19.916929 0.0 6 0.0 0.0 -1834 65399 Produktdaten\001 | |
1841 | +-6 | |
1842 | +6 0 0 0 0 | |
1843 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -15146 63968 1476 425 0 0 0 0 | |
1844 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -15146 63968 1476 425 0 0 0 0 | |
1845 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -15146 64086 produkt_typen\001 | |
1846 | +-6 | |
1847 | +6 0 0 0 0 | |
1848 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -13457 59622 1275 425 0 0 0 0 | |
1849 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -13457 59622 1275 425 0 0 0 0 | |
1850 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -13457 59740 aufw_konto\001 | |
1851 | +-6 | |
1852 | +6 0 0 0 0 | |
1853 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -10103 59622 1204 425 0 0 0 0 | |
1854 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -10103 59622 1204 425 0 0 0 0 | |
1855 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -10103 59740 ertr_konto\001 | |
1856 | +-6 | |
1857 | +6 0 0 0 0 | |
1858 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -9702 60637 732 425 0 0 0 0 | |
1859 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -9702 60637 732 425 0 0 0 0 | |
1860 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -9702 60755 _id_\001 | |
1861 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1862 | + -9961 60826 -9442 60826 | |
1863 | +-6 | |
1864 | +6 0 0 0 0 | |
1865 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -12938 64748 1204 425 0 0 0 0 | |
1866 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -12938 64748 1204 425 0 0 0 0 | |
1867 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -12938 64866 kurzbesch\001 | |
1868 | +-6 | |
1869 | +6 0 0 0 0 | |
1870 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -8060 63496 1452 425 0 0 0 0 | |
1871 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -8060 63496 1452 425 0 0 0 0 | |
1872 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -8060 63614 beschreibung\001 | |
1873 | +-6 | |
1874 | +6 0 0 0 0 | |
1875 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -14650 60755 1051 425 0 0 0 0 | |
1876 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -14650 60755 1051 425 0 0 0 0 | |
1877 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -14650 60874 steuerkl\001 | |
1878 | +-6 | |
1879 | +6 0 0 0 0 | |
1880 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -14591 62763 1062 425 0 0 0 0 | |
1881 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -14591 62763 1062 425 0 0 0 0 | |
1882 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -14591 62881 pic_path\001 | |
1883 | +-6 | |
1884 | +6 0 0 0 0 | |
1885 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -12099 63188 791 425 0 0 0 0 | |
1886 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -12099 63188 791 425 0 0 0 0 | |
1887 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -12099 63307 tiefe\001 | |
1888 | +-6 | |
1889 | +6 0 0 0 0 | |
1890 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -10871 64039 1122 425 0 0 0 0 | |
1891 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -10871 64039 1122 425 0 0 0 0 | |
1892 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -10871 64157 is_parent\001 | |
1893 | +-6 | |
1894 | +6 0 0 0 0 | |
1895 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -10174 62834 850 425 0 0 0 0 | |
1896 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -10174 62834 850 425 0 0 0 0 | |
1897 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -10174 62952 name\001 | |
1898 | +2 1 1 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1899 | + -10552 63023 -9796 63023 | |
1900 | +-6 | |
1901 | +6 0 0 0 0 | |
1902 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1903 | + -13907 61056 -11810 62107 | |
1904 | +-6 | |
1905 | +6 0 0 0 0 | |
1906 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1907 | + -13457 60047 -11810 62107 | |
1908 | +-6 | |
1909 | +6 0 0 0 0 | |
1910 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1911 | + -10955 59922 -11810 62107 | |
1912 | +-6 | |
1913 | +6 0 0 0 0 | |
1914 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1915 | + -10219 60938 -11810 62107 | |
1916 | +-6 | |
1917 | +6 0 0 0 0 | |
1918 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1919 | + -13840 62462 -13416 62107 | |
1920 | +-6 | |
1921 | +6 0 0 0 0 | |
1922 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1923 | + -14103 63667 -11810 61162 | |
1924 | +-6 | |
1925 | +6 0 0 0 0 | |
1926 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1927 | + -12099 62763 -11810 61162 | |
1928 | +-6 | |
1929 | +6 0 0 0 0 | |
1930 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1931 | + -10871 63614 -11810 61162 | |
1932 | +-6 | |
1933 | +6 0 0 0 0 | |
1934 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1935 | + -10775 62533 -11810 61162 | |
1936 | +-6 | |
1937 | +6 0 0 0 0 | |
1938 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1939 | + -8060 63070 -10204 62107 | |
1940 | +-6 | |
1941 | +6 0 0 0 0 | |
1942 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1943 | + -13790 64447 -11810 61162 | |
1944 | +-6 | |
1945 | +6 0 0 0 0 | |
1946 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1947 | + -13416 61162 -10204 61162 -10204 62107 -13416 62107 -13416 61162 | |
1948 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1949 | + -13416 61162 -10204 61162 -10204 62107 -13416 62107 -13416 61162 | |
1950 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -11810 61752 warengruppen\001 | |
1951 | +-6 | |
1952 | +6 0 0 0 0 | |
1953 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -17704 57992 1169 425 0 0 0 0 | |
1954 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -17704 57992 1169 425 0 0 0 0 | |
1955 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -17704 57992 980 330 0 0 0 0 | |
1956 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -17704 58110 zusatzinfo\001 | |
1957 | +-6 | |
1958 | +6 0 0 0 0 | |
1959 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1960 | + -18873 57992 -21809 58292 | |
1961 | +-6 | |
1962 | +6 0 0 0 0 | |
1963 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
1964 | + -21809 57819 -19234 57819 -19234 58764 -21809 58764 -21809 57819 | |
1965 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1966 | + -21809 57819 -19234 57819 -19234 58764 -21809 58764 -21809 57819 | |
1967 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
1968 | + -21691 57937 -19352 57937 -19352 58646 -21691 58646 -21691 57937 | |
1969 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -20521 58410 typ_table\001 | |
1970 | +-6 | |
1971 | +6 0 0 0 0 | |
1972 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -22971 60472 1110 425 0 0 0 0 | |
1973 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -22971 60472 1110 425 0 0 0 0 | |
1974 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -22971 60590 typ_table\001 | |
1975 | +-6 | |
1976 | +6 0 0 0 0 | |
1977 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -23986 61677 1299 425 0 0 0 0 | |
1978 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -23986 61677 1299 425 0 0 0 0 | |
1979 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -23986 61795 produkt_typ\001 | |
1980 | +2 1 0 1 0 0 0 0 -1 9.448819 0 0 0 0 0 2 | |
1981 | + -24813 61866 -23159 61866 | |
1982 | +-6 | |
1983 | +6 0 0 0 0 | |
1984 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -23065 62858 1370 425 0 0 0 0 | |
1985 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -23065 62858 1370 425 0 0 0 0 | |
1986 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -23065 62976 bezeichnung\001 | |
1987 | +-6 | |
1988 | +6 0 0 0 0 | |
1989 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1990 | + -22185 60772 -20521 62107 | |
1991 | +-6 | |
1992 | +6 0 0 0 0 | |
1993 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1994 | + -22687 61677 -22234 61634 | |
1995 | +-6 | |
1996 | +6 0 0 0 0 | |
1997 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
1998 | + -22096 62557 -20521 61162 | |
1999 | +-6 | |
2000 | +6 0 0 0 0 | |
2001 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
2002 | + -22234 61162 -18809 61162 -18809 62107 -22234 62107 -22234 61162 | |
2003 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
2004 | + -22234 61162 -18809 61162 -18809 62107 -22234 62107 -22234 61162 | |
2005 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -20521 61752 produkt_typen\001 | |
2006 | +-6 | |
2007 | +6 0 0 0 0 | |
2008 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -21927 64736 732 425 0 0 0 0 | |
2009 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -21927 64736 732 425 0 0 0 0 | |
2010 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -21927 64854 _id_\001 | |
2011 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2012 | + -22187 64925 -21667 64925 | |
2013 | +-6 | |
2014 | +6 0 0 0 0 | |
2015 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -21549 67641 850 425 0 0 0 0 | |
2016 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -21549 67641 850 425 0 0 0 0 | |
2017 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -21549 67759 name\001 | |
2018 | +-6 | |
2019 | +6 0 0 0 0 | |
2020 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -23486 66791 1204 425 0 0 0 0 | |
2021 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -23486 66791 1204 425 0 0 0 0 | |
2022 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -23486 66909 kurzbesch\001 | |
2023 | +-6 | |
2024 | +6 0 0 0 0 | |
2025 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -17887 65822 1110 425 0 0 0 0 | |
2026 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -17887 65822 1110 425 0 0 0 0 | |
2027 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -17887 65940 small_pic\001 | |
2028 | +-6 | |
2029 | +6 0 0 0 0 | |
2030 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -17828 66909 980 425 0 0 0 0 | |
2031 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -17828 66909 980 425 0 0 0 0 | |
2032 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -17828 67027 big_pic\001 | |
2033 | +-6 | |
2034 | +6 0 0 0 0 | |
2035 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -23521 65657 1452 425 0 0 0 0 | |
2036 | +1 1 0 1 0 -1 0 0 -1 31.496063 1 0.0 -23521 65657 1452 425 0 0 0 0 | |
2037 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -23521 65775 beschreibung\001 | |
2038 | +-6 | |
2039 | +6 0 0 0 0 | |
2040 | +1 1 0 1 32 32 0 0 20 31.496063 1 0.0 -18513 64783 1476 425 0 0 0 0 | |
2041 | +1 1 1 1 0 -1 0 0 -1 9.448819 1 0.0 -18513 64783 1476 425 0 0 0 0 | |
2042 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -18513 64901 produkt_typen\001 | |
2043 | +-6 | |
2044 | +6 0 0 0 0 | |
2045 | +1 1 1 1 32 32 0 0 20 9.448819 1 0.0 -20521 68846 838 425 0 0 0 0 | |
2046 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -20521 68846 838 425 0 0 0 0 | |
2047 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -20521 68964 preis\001 | |
2048 | +-6 | |
2049 | +6 0 0 0 0 | |
2050 | +1 1 0 1 32 32 0 0 20 9.448819 1 0.0 -19435 67688 862 425 0 0 0 0 | |
2051 | +1 1 0 1 0 -1 0 0 -1 9.448819 1 0.0 -19435 67688 862 425 0 0 0 0 | |
2052 | +4 1 0 0 0 0 22.762205 0.0 6 0.0 0.0 -19435 67807 st\303\274ck\001 | |
2053 | +-6 | |
2054 | +6 0 0 0 0 | |
2055 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2056 | + -21409 65036 -20521 66531 | |
2057 | +-6 | |
2058 | +6 0 0 0 0 | |
2059 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2060 | + -22069 65657 -19447 66059 | |
2061 | +-6 | |
2062 | +6 0 0 0 0 | |
2063 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2064 | + -22281 66791 -20521 65586 | |
2065 | +-6 | |
2066 | +6 0 0 0 0 | |
2067 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2068 | + -21549 67216 -20521 65586 | |
2069 | +-6 | |
2070 | +6 0 0 0 0 | |
2071 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2072 | + -20521 68421 -20521 65586 | |
2073 | +-6 | |
2074 | +6 0 0 0 0 | |
2075 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2076 | + -19435 67263 -20521 65586 | |
2077 | +-6 | |
2078 | +6 0 0 0 0 | |
2079 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2080 | + -18809 66909 -20521 65586 | |
2081 | +-6 | |
2082 | +6 0 0 0 0 | |
2083 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2084 | + -18998 65822 -21596 66059 | |
2085 | +-6 | |
2086 | +6 0 0 0 0 | |
2087 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2088 | + -19557 65083 -20521 66531 | |
2089 | +-6 | |
2090 | +6 0 0 0 0 | |
2091 | +2 3 0 1 32 32 0 -1 20 31.496063 0 0 0 0 0 5 | |
2092 | + -21596 65586 -19447 65586 -19447 66531 -21596 66531 -21596 65586 | |
2093 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 5 | |
2094 | + -21596 65586 -19447 65586 -19447 66531 -21596 66531 -21596 65586 | |
2095 | +4 1 0 0 0 12 28.452756 0.0 6 0.0 0.0 -20521 66177 produkt\001 | |
2096 | +-6 | |
2097 | +6 0 0 0 0 | |
2098 | +5 1 2 1 0 0 0 0 -1 31.496063 0 1 1 0 0.000000 0.000000 -18634 36581 -19511 37282 -20496 36742 | |
2099 | + 0 0 1.574803 236.220472 236.220472 | |
2100 | +-6 | |
2101 | +6 0 0 0 0 | |
2102 | +5 1 2 1 0 0 0 0 -1 31.496063 0 1 1 0 0.000000 0.000000 -18634 36581 -20560 35274 -22693 36204 | |
2103 | + 0 0 1.574803 236.220472 236.220472 | |
2104 | +-6 | |
2105 | +6 0 0 0 0 | |
2106 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
2107 | + -19655 36581 -17940 36581 -17613 36784 -17613 37600 -19655 37600 -19655 36581 | |
2108 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
2109 | + -19655 36581 -17940 36581 -17613 36784 -17613 37600 -19655 37600 -19655 36581 | |
2110 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2111 | + -17940 36581 -17940 36784 | |
2112 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2113 | + -17940 36784 -17613 36784 | |
2114 | +4 0 0 0 0 12 19.916929 0.0 6 0.0 0.0 -19451 36996 entweder,\001 | |
2115 | +4 0 0 0 0 12 19.916929 0.0 6 0.0 0.0 -19451 37326 oder\001 | |
2116 | +-6 | |
2117 | +6 0 0 0 0 | |
2118 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
2119 | + -15489 26007 -13774 26007 -13448 26211 -13448 27026 -15489 27026 -15489 26007 | |
2120 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
2121 | + -15489 26007 -13774 26007 -13448 26211 -13448 27026 -15489 27026 -15489 26007 | |
2122 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2123 | + -13774 26007 -13774 26211 | |
2124 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2125 | + -13774 26211 -13448 26211 | |
2126 | +4 0 0 0 0 12 19.916929 0.0 6 0.0 0.0 -15285 26422 entweder,\001 | |
2127 | +4 0 0 0 0 12 19.916929 0.0 6 0.0 0.0 -15285 26753 oder\001 | |
2128 | +-6 | |
2129 | +6 0 0 0 0 | |
2130 | +5 1 2 1 0 0 0 0 -1 31.496063 0 1 1 0 0.000000 0.000000 -18648 39769 -19480 40525 -20496 40048 | |
2131 | + 0 0 1.574803 236.220472 236.220472 | |
2132 | +-6 | |
2133 | +6 0 0 0 0 | |
2134 | +5 1 2 1 0 0 0 0 -1 31.496063 0 1 1 0 0.000000 0.000000 -18648 39769 -20599 38519 -22693 39509 | |
2135 | + 0 0 1.574803 236.220472 236.220472 | |
2136 | +-6 | |
2137 | +6 0 0 0 0 | |
2138 | +2 3 0 0 32 32 0 0 20 31.496063 0 0 0 0 0 6 | |
2139 | + -19669 39769 -17954 39769 -17628 39973 -17628 40789 -19669 40789 -19669 39769 | |
2140 | +2 3 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 6 | |
2141 | + -19669 39769 -17954 39769 -17628 39973 -17628 40789 -19669 40789 -19669 39769 | |
2142 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2143 | + -17954 39769 -17954 39973 | |
2144 | +2 1 0 1 0 0 0 0 -1 31.496063 0 0 0 0 0 2 | |
2145 | + -17954 39973 -17628 39973 | |
2146 | +4 0 0 0 0 12 19.916929 0.0 6 0.0 0.0 -19465 40185 entweder,\001 | |
2147 | +4 0 0 0 0 12 19.916929 0.0 6 0.0 0.0 -19465 40515 oder\001 | |
2148 | +-6 | ... | ... |
doc/er/shop.log
0 → 100755
This diff could not be displayed because it is too large.
doc/er/shop.pdf
0 → 100755
No preview for this file type
doc/er/shop.png
0 → 100755
61.5 KB
doc/er/shop.ps
0 → 100755
This diff could not be displayed because it is too large.
doc/er/shop.svg
0 → 100755
This diff could not be displayed because it is too large.
doc/er/shop.tex
0 → 100755
This diff could not be displayed because it is too large.
doc/er/shop1.dia
0 → 100755
No preview for this file type
doc/er/showdia.tex
0 → 100755
1 | +\documentclass[a4paper,12pt]{article} | |
2 | +\usepackage{german,color} | |
3 | +\usepackage[latin1]{inputenc} | |
4 | +\pagestyle{empty} | |
5 | +%\evensidemargin 0cm | |
6 | +%\oddsidemargin 0cm | |
7 | +\textheight 25.5cm | |
8 | +\textwidth 15.9cm | |
9 | +\voffset -2cm | |
10 | +\hoffset -2cm | |
11 | +\renewcommand\floatpagefraction{.9} | |
12 | +\renewcommand\topfraction{.9} | |
13 | +\renewcommand\bottomfraction{.9} | |
14 | +\renewcommand\textfraction{.1} | |
15 | +\setcounter{totalnumber}{50} | |
16 | +\setcounter{topnumber}{50} | |
17 | +\setcounter{bottomnumber}{50} | |
18 | + | |
19 | +\begin{document} | |
20 | +% \appendix | |
21 | + | |
22 | + \begin{center} | |
23 | + \section*{\Large {\sf\bfseries Lebenslauf}\\ \large{\sf Georg Steffers\\}} | |
24 | + \end{center} | |
25 | + | |
26 | +%\hspace{3cm} | |
27 | +%\vspace{-1.5cm} | |
28 | +\small | |
29 | +\newlength{\lwidth} | |
30 | +\newlength{\schulw} | |
31 | +\newlength{\datew} | |
32 | +\newlength{\ortw} | |
33 | +\newlength{\abschlussw} | |
34 | +\settowidth{\schulw}{Hans-B"ockler-Schule} | |
35 | +%\settowidth{\schulw}{Privatbrauerei Rolinck} | |
36 | +\settowidth{\ortw}{Rothenburg/} | |
37 | +\settowidth{\datew}{00.00.0000 - 00.00.0000} | |
38 | +%\settowidth{\abschlussw}{Grundschulabschlu"s} | |
39 | + | |
40 | +\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} | |
41 | + {\begin{minipage}{.948\linewidth} | |
42 | + {\small\sf\bfseries Pers"onliche Daten} | |
43 | + \end{minipage}}}} | |
44 | + | |
45 | +\frame{\makebox[.96\linewidth][c] | |
46 | + {\begin{minipage}{.94\linewidth} | |
47 | + \vspace{5pt} | |
48 | + \hbox{ | |
49 | + \begin{minipage}[t][][c]{.35\linewidth} | |
50 | + Steffers Georg\\ | |
51 | + Warendorfer Str. 75\\ | |
52 | + 48145 M"unster | |
53 | + \end{minipage} | |
54 | + % linewidth: \number\linewidth\\ | |
55 | + % textwidth: \number\textwidth\\ | |
56 | + | |
57 | + \begin{minipage}[t][][t]{.60\linewidth} | |
58 | + \settowidth{\lwidth}{Staatsangeh"origkeit: } | |
59 | + \begin{tabular}[t]{p{\lwidth}l} | |
60 | + Geburtsdatum:&15. Dezember 1973\\ | |
61 | + Geburtsort:&48607 Ochtrup\\ | |
62 | + Familienstand:&ledig\\ | |
63 | + % Konfession:&rk\\ | |
64 | + Staatsangehörigkeit:&deutsch\\ | |
65 | + F"uhrerschein:&Klasse 3,1a | |
66 | + \end{tabular} | |
67 | + \end{minipage}} | |
68 | + %Eltern&&Michael Mustermann, Psychiater\\ | |
69 | + %&&Michaela Mustermann, geb. Musterfrau, Musterberuf\\ | |
70 | + \vspace{5pt} | |
71 | + \end{minipage}}} | |
72 | +\vfill | |
73 | +\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} | |
74 | + {\begin{minipage}{.948\linewidth} | |
75 | + {\small\sf\bfseries Schulbildung} | |
76 | + \end{minipage}}}} | |
77 | + | |
78 | +\frame{\makebox[.96\linewidth][c] | |
79 | + {\begin{minipage}{.94\linewidth} | |
80 | + \setlength{\abschlussw}{\linewidth} | |
81 | + \addtolength{\abschlussw}{-\schulw} | |
82 | + \addtolength{\abschlussw}{-\ortw} | |
83 | + \addtolength{\abschlussw}{-\datew} | |
84 | + \addtolength{\abschlussw}{-8\tabcolsep} | |
85 | + \vspace{5pt} | |
86 | + \begin{tabular}[t] | |
87 | + {p{\schulw}p{\ortw}p{\datew}p{\abschlussw}} | |
88 | + Mariengrundschule&Ochtrup& | |
89 | + 01.08.1980 - 27.06.1984& | |
90 | + Grundschulabschlu"s\\ | |
91 | + Gymnasium&Ochtrup& | |
92 | + 01.08.1984 - 30.11.1985&\\ | |
93 | + Hauptschule&Ochtrup& | |
94 | + 01.12.1985 - 01.06.1990& | |
95 | + Fachoberschulreife\\ | |
96 | + Hans-B"ockler-Schule&M"unster& | |
97 | + 01.08.1990 - 30.06.1993& | |
98 | + Fachhochschulreife | |
99 | + \end{tabular} | |
100 | + \vspace{5pt} | |
101 | + \end{minipage}}} | |
102 | +\vfill | |
103 | +\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} | |
104 | + {\begin{minipage}{.948\linewidth} | |
105 | + {\small\sf\bfseries Ausbildung/Studium} | |
106 | + \end{minipage}}}} | |
107 | + | |
108 | +\frame{\makebox[.96\linewidth][c] | |
109 | + {\begin{minipage}{.94\linewidth} | |
110 | + \setlength{\abschlussw}{\linewidth} | |
111 | + \addtolength{\abschlussw}{-\schulw} | |
112 | + \addtolength{\abschlussw}{-\ortw} | |
113 | + \addtolength{\abschlussw}{-\datew} | |
114 | + \addtolength{\abschlussw}{-8\tabcolsep} | |
115 | + \vspace{5pt} | |
116 | + \begin{tabular}[t] | |
117 | + {p{\schulw}p{\ortw}p{\datew}p{\abschlussw}} | |
118 | + BIB&Bergisch Gladbach& | |
119 | + 04.10.1995 - 30.09.1997& | |
120 | + Stattl. gepr. Informatik\-assistent Softwaretechnologie\\ | |
121 | + Fernuniversit"at&Hagen& | |
122 | + seit 01.10.2002& | |
123 | + \end{tabular} | |
124 | + \vspace{5pt} | |
125 | + \end{minipage}}} | |
126 | +\vfill | |
127 | +\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} | |
128 | + {\begin{minipage}{.948\linewidth} | |
129 | + {\small\sf\bfseries Wehr-/Zivildienst} | |
130 | + \end{minipage}}}} | |
131 | + | |
132 | +\frame{\makebox[.96\linewidth][c] | |
133 | + {\begin{minipage}{.94\linewidth} | |
134 | + \setlength{\abschlussw}{\linewidth} | |
135 | + \addtolength{\abschlussw}{-\schulw} | |
136 | + \addtolength{\abschlussw}{-\ortw} | |
137 | + \addtolength{\abschlussw}{-\datew} | |
138 | + \addtolength{\abschlussw}{-8\tabcolsep} | |
139 | + \vspace{5pt} | |
140 | + \begin{tabular}[t] | |
141 | + {p{\schulw}p{\ortw}p{\datew}p{\abschlussw}} | |
142 | + Heeresflieger&Rothenburg/ W"umme& | |
143 | + 01.07.1993 - 15.12.1993&Wehrdienst\\ | |
144 | + Pius Hospital&Ochtrup& | |
145 | + 16.12.1993 - 30.09.1994&Zivildienst | |
146 | + \end{tabular} | |
147 | + \vspace{5pt} | |
148 | + \end{minipage}}} | |
149 | +\vfill | |
150 | +\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} | |
151 | + {\begin{minipage}{.948\linewidth} | |
152 | + {\small\sf\bfseries Arbeitsverh"altnisse} | |
153 | + \end{minipage}}}} | |
154 | + | |
155 | +\frame{\makebox[.96\linewidth][c] | |
156 | + {\begin{minipage}{.94\linewidth} | |
157 | + \setlength{\abschlussw}{\linewidth} | |
158 | + \addtolength{\abschlussw}{-\schulw} | |
159 | + \addtolength{\abschlussw}{-\ortw} | |
160 | + \addtolength{\abschlussw}{-\datew} | |
161 | + \addtolength{\abschlussw}{-8\tabcolsep} | |
162 | + \vspace{5pt} | |
163 | + \begin{tabular}[t] | |
164 | + {p{\schulw}p{\ortw}p{\datew}p{\abschlussw}} | |
165 | + IKK LV-WL&M"unster& | |
166 | + 06.04.1998 - 30.11.1998& | |
167 | + Spezielle Datenbankabfragen | |
168 | + die die eingesetzte Software | |
169 | + nicht leisten konnte.\\ | |
170 | + Privatbrauerei Rolinck&Steinfurt& | |
171 | + 01.12.1998 - 30.04.1999& | |
172 | + Systemoperating\\ | |
173 | + WWU - Institut f"ur Geophysik&M"unster& | |
174 | + 25.05.1999 - 31.05.2000& | |
175 | + Systemadministration\\ | |
176 | + Deltacity.NET&Emsdetten& | |
177 | + 01.06.2000 - 30.11.2001& | |
178 | + E-Commerce und Webanwendungen entwickelt.\\ | |
179 | + Gamigo AG&Rheine& | |
180 | + 01.12.2001 - 30.04.2002& | |
181 | + Webanwendungen entwickelt.\\ | |
182 | + WWU - ZIV&M"unster& | |
183 | + seit Mitte 2003& | |
184 | + Portieren einer \mbox{AutoCAD} Application von AIX | |
185 | + (\mbox{AutoCAD V12}) auf Windows (erst \mbox{AutoCAD V14} | |
186 | + dann \mbox{AutoCAD 2004}). | |
187 | + \end{tabular} | |
188 | + \vspace{5pt} | |
189 | + \end{minipage}}} | |
190 | +%\vfill | |
191 | +%\begin{flushright}bitte wenden\end{flushright} | |
192 | +\newpage | |
193 | +\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} | |
194 | + {\begin{minipage}{.948\linewidth} | |
195 | + {\small\sf\bfseries Kenntnisse} | |
196 | + \end{minipage}}}} | |
197 | + | |
198 | +\frame{\makebox[.96\linewidth][c] | |
199 | + {\begin{minipage}{.94\linewidth} | |
200 | + \vspace{5pt} | |
201 | + \vbox{ | |
202 | + \begin{minipage}[t][\height][c]{.5\linewidth}\begin{center} | |
203 | + \vbox{\frame{\makebox[.96\linewidth][c]{ | |
204 | + \begin{minipage}[t][15pt][c]{.94\linewidth} | |
205 | + {\small\sf Betriebssysteme} | |
206 | + \end{minipage}}} | |
207 | + \frame{\makebox[.96\linewidth][c] | |
208 | + {\begin{minipage}[t]{.94\linewidth} | |
209 | + \vspace{5pt} | |
210 | + \vbox{\makebox[.96\linewidth][c] | |
211 | + {\begin{minipage}[t][][c]{.44\linewidth} | |
212 | + Linux | |
213 | + \end{minipage} | |
214 | + \begin{minipage}[t][][c]{.44\linewidth} | |
215 | + \begin{tabular}[t]{lr} | |
216 | + Installation&1\\ | |
217 | + Administration&2\\ | |
218 | + Scriptsprachen&1 | |
219 | + \end{tabular} | |
220 | + \end{minipage}}} | |
221 | + \vspace{2pt} | |
222 | + \vbox{\makebox[.96\linewidth][c] | |
223 | + {\begin{minipage}[t][][c]{.44\linewidth} | |
224 | + Windows (NT/2000/XP/98) | |
225 | + \end{minipage} | |
226 | + \begin{minipage}[t][][c]{.44\linewidth} | |
227 | + \begin{tabular}[t]{lr} | |
228 | + Installation&2\\ | |
229 | + Administration&3\\ | |
230 | + Anwenden&3 | |
231 | + \end{tabular} | |
232 | + \end{minipage}}} | |
233 | + \vspace{5pt} | |
234 | + \end{minipage}}}} | |
235 | + \vspace{5pt} | |
236 | + \vbox{\frame{\makebox[.96\linewidth][c]{ | |
237 | + \begin{minipage}[t][15pt][c]{.94\linewidth} | |
238 | + {\small\sf APIs/Libs} | |
239 | + \end{minipage}}} | |
240 | + \frame{\makebox[.96\linewidth][c] | |
241 | + {\begin{minipage}[t]{.94\linewidth} | |
242 | + \vspace{5pt} | |
243 | + \vbox{\makebox[.96\linewidth][c] | |
244 | + {\begin{tabular*}{.88\linewidth}[t] | |
245 | + {@{\extracolsep\fill}lr} | |
246 | + XWin-API&3\\ | |
247 | + Win32-API&4\\ | |
248 | + GTK&3\\ | |
249 | + BSD Socket Layer&3\\ | |
250 | + JDBC/ODBC&3\\ | |
251 | + Servlets/JSP&4\\ | |
252 | + OpenGL&(vermutlich) 3\\ | |
253 | + Linux System&3 | |
254 | + \end{tabular*}}} | |
255 | + \vspace{5pt} | |
256 | + \end{minipage}}}} | |
257 | + \vspace{5pt} | |
258 | + \vbox{\frame{\makebox[.96\linewidth][c]{ | |
259 | + \begin{minipage}[t][15pt][c]{.94\linewidth} | |
260 | + {\small\sf Software} | |
261 | + \end{minipage}}} | |
262 | + \frame{\makebox[.96\linewidth][c] | |
263 | + {\begin{minipage}[t]{.94\linewidth} | |
264 | + \vspace{5pt} | |
265 | + \vbox{\makebox[.96\linewidth][c] | |
266 | + {\begin{tabular*}{.88\linewidth}[t] | |
267 | + {@{\extracolsep\fill}lr} | |
268 | + Dia&2\\ | |
269 | + Vim&1\\ | |
270 | + \LaTeX&2\\ | |
271 | + OpenOffice&3\\ | |
272 | + Gimp&3\\ | |
273 | + Blender&3\\ | |
274 | + AutoCAD&3\\ | |
275 | + Photoshop&3 | |
276 | + \end{tabular*}}} | |
277 | + \vspace{5pt} | |
278 | + \end{minipage}}}} | |
279 | + \vspace{5pt} | |
280 | + \vbox{\frame{\makebox[.96\linewidth][c]{ | |
281 | + \begin{minipage}[t][15pt][c]{.94\linewidth} | |
282 | + {\small\sf Softwareengineering} | |
283 | + \end{minipage}}} | |
284 | + \frame{\makebox[.96\linewidth][c] | |
285 | + {\begin{minipage}[t]{.94\linewidth} | |
286 | + \vspace{5pt} | |
287 | + \vbox{\makebox[.96\linewidth][c] | |
288 | + {\begin{tabular*}{.88\linewidth}[t] | |
289 | + {@{\extracolsep\fill}lr} | |
290 | + Pflichten-/Lastenheft erstellen&3\\ | |
291 | + OOA&3\\ | |
292 | + ERM&3\\ | |
293 | + UML&3 | |
294 | + \end{tabular*}}} | |
295 | + \vspace{5pt} | |
296 | + \end{minipage}}}} | |
297 | + \vspace{5pt} | |
298 | + \vbox{\frame{\makebox[.96\linewidth][c]{ | |
299 | + \begin{minipage}[t][15pt][c]{.94\linewidth} | |
300 | + {\small\sf Hardware} | |
301 | + \end{minipage}}} | |
302 | + \frame{\makebox[.96\linewidth][c] | |
303 | + {\begin{minipage}[t]{.94\linewidth} | |
304 | + \vspace{5pt} | |
305 | + \vbox{\makebox[.96\linewidth][c] | |
306 | + {\begin{tabular*}{.88\linewidth}[t] | |
307 | + {@{\extracolsep\fill}lr} | |
308 | + PC-Hardware einbauen&2\\ | |
309 | + kleine bis mittlere LANs&2\\ | |
310 | + St"orungssuche&3 | |
311 | + \end{tabular*}}} | |
312 | + \vspace{5pt} | |
313 | + \end{minipage}}}} | |
314 | + \end{center} | |
315 | + \end{minipage} | |
316 | + \begin{minipage}[t][\height][c]{.5\linewidth}\begin{center} | |
317 | + \vbox{\frame{\makebox[.96\linewidth][c]{ | |
318 | + \begin{minipage}[t][15pt][c]{.94\linewidth} | |
319 | + {\small\sf Programmiersprachen} | |
320 | + \end{minipage}}} | |
321 | + \frame{\makebox[.96\linewidth][c] | |
322 | + {\begin{minipage}[t]{.94\linewidth} | |
323 | + \vspace{5pt} | |
324 | + \vbox{\makebox[.96\linewidth][c] | |
325 | + {\begin{tabular*}{.88\linewidth}[t] | |
326 | + {@{\extracolsep\fill}lr} | |
327 | + C&1\\ | |
328 | + C++&1\\ | |
329 | + Java&3\\ | |
330 | + Pascal&2\\ | |
331 | + Basic&3\\ | |
332 | + Cobol&4\\ | |
333 | + Lisp/Scheme&3\\ | |
334 | + TCL&4\\ | |
335 | + Perl&3\\ | |
336 | + PHP&2\\ | |
337 | + JavaScript&3\\ | |
338 | + HTML&2\\ | |
339 | + SQL&2 | |
340 | + \end{tabular*}}} | |
341 | + \vspace{5pt} | |
342 | + \end{minipage}}}} | |
343 | + \vspace{5pt} | |
344 | + \vbox{\frame{\makebox[.96\linewidth][c]{ | |
345 | + \begin{minipage}[t][15pt][c]{.94\linewidth} | |
346 | + {\small\sf Datenbanken} | |
347 | + \end{minipage}}} | |
348 | + \frame{\makebox[.96\linewidth][c] | |
349 | + {\begin{minipage}[t]{.94\linewidth} | |
350 | + \vspace{5pt} | |
351 | + \vbox{\makebox[.96\linewidth][c] | |
352 | + {\parbox[t][][c]{.88\linewidth} | |
353 | + {Allgemein gute Kenntnisse in SQL, daher leichter | |
354 | + Einstieg in jedes SQL-Datenbanksystem.\\ | |
355 | + Ich hatte bisher Kontakt mit folgenden | |
356 | + Datenbanksystemen:}}} | |
357 | + \vspace{5pt} | |
358 | + \vbox{\makebox[.96\linewidth][c] | |
359 | + {\begin{tabular*}{.88\linewidth}[t] | |
360 | + {@{\extracolsep\fill}lr} | |
361 | + PostgreSQL&1\\ | |
362 | + MySQL&1\\ | |
363 | + Adabas&3\\ | |
364 | + Informix&3\\ | |
365 | + \end{tabular*}}} | |
366 | + \vspace{5pt} | |
367 | + \end{minipage}}}} | |
368 | + \vspace{5pt} | |
369 | + \vbox{\frame{\makebox[.96\linewidth][c]{ | |
370 | + \begin{minipage}[t][15pt][c]{.94\linewidth} | |
371 | + {\small\sf Dienste einrichten/konfigurieren} | |
372 | + \end{minipage}}} | |
373 | + \frame{\makebox[.96\linewidth][c] | |
374 | + {\begin{minipage}[t]{.94\linewidth} | |
375 | + \vspace{5pt} | |
376 | + \vbox{\makebox[.96\linewidth][c] | |
377 | + {\begin{tabular*}{.88\linewidth}[t] | |
378 | + {@{\extracolsep\fill}lr} | |
379 | + SMTP (Postfix)&3\\ | |
380 | + HTTP (Apache)&3\\ | |
381 | + FTP (ProFtp)&3\\ | |
382 | + DNS (BIND pre 8)&3\\ | |
383 | + NTP&3\\ | |
384 | + NFS (Linux Kernel NFS)&3\\ | |
385 | + NIS&3\\ | |
386 | + SSH (OpenSSH)&3 | |
387 | + \end{tabular*}}} | |
388 | + \vspace{5pt} | |
389 | + \end{minipage}}}} | |
390 | + \vspace{5pt} | |
391 | + \vbox{\frame{\makebox[.96\linewidth][c]{ | |
392 | + \begin{minipage}[t][15pt][c]{.94\linewidth} | |
393 | + {\small\sf Fremdsprachen} | |
394 | + \end{minipage}}} | |
395 | + \frame{\makebox[.96\linewidth][c] | |
396 | + {\begin{minipage}[t]{.94\linewidth} | |
397 | + \vspace{5pt} | |
398 | + \vbox{\makebox[.96\linewidth][c] | |
399 | + {\begin{tabular*}{.88\linewidth}[t] | |
400 | + {@{\extracolsep\fill}lr} | |
401 | + Englisch&2 | |
402 | + \end{tabular*}}} | |
403 | + \vspace{5pt} | |
404 | + \end{minipage}}}} | |
405 | + \end{center} | |
406 | + \end{minipage}} | |
407 | + \vspace{5pt} | |
408 | + Bei den Noten handelt es sich um meine Selbsteinsch"atzung. Ausreichend | |
409 | + bedeutet dabei, das ich mich mit der Thematik besch"aftigt habe und | |
410 | + erfolgreich erste Versuche darin gemacht habe. Mangelhafte und | |
411 | + ungen"ugende F"ahigkeiten sind f"ur mich keine F"ahigkeiten und tauchen | |
412 | + darum nicht auf. Wo (vermutlich) vorsteht habe ich nur theoretische | |
413 | + und noch keine praktische Erfahrung. | |
414 | + | |
415 | + Es ist denkbar, das hier nicht alle F"ahigkeiten stehen. Bitte fragen | |
416 | + Sie bei Interesse nach.\\ | |
417 | + \vspace{5pt} | |
418 | + {\tiny 1 sehr gut, 2 gut, 3 befriedigend, % | |
419 | + 4 ausreichend, 5 mangelhaft, 6 ungen"ugend} | |
420 | + \vspace{5pt} | |
421 | + \end{minipage}}} | |
422 | +\vfill | |
423 | +\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} | |
424 | + {\begin{minipage}{.948\linewidth} | |
425 | + {\small\sf\bfseries Interessen} | |
426 | + \end{minipage}}}} | |
427 | + | |
428 | +\frame{\makebox[.96\linewidth][c] | |
429 | + {\begin{minipage}{.94\linewidth} | |
430 | + \vspace{5pt} | |
431 | + Kino, Musik, Open Source, Schwimmen, Sonne genie"sen, | |
432 | + Mein Linux administrieren | |
433 | + \vspace{5pt} | |
434 | + \end{minipage}}} | |
435 | +\end{document} | ... | ... |
dropdb.sql
0 → 100755
1 | +begin; | |
2 | + | |
3 | +-- Table und Funktionen um Länder zu verwalten -- | |
4 | +-- [ | |
5 | +drop sequence "land_id_land_seq"; | |
6 | + | |
7 | +drop index "land_ukey1"; | |
8 | +drop index "land_ukey2"; | |
9 | +drop index "land_ukey3"; | |
10 | + | |
11 | +drop function "chk_land" (text,varchar(3),varchar(4)); | |
12 | +drop function "ins_land" (text,varchar(3),varchar(4)); | |
13 | +drop function "get_id_land_by_land" (text); | |
14 | +drop function "get_id_land_by_lnd_kz" (varchar(3)); | |
15 | +drop function "get_id_land_by_vorwahl_l" (varchar(4)); | |
16 | + | |
17 | +drop table "land"; | |
18 | +-- Ende Länder -- | |
19 | + | |
20 | +-- Table und Funktionen um Orte zu verwalten -- | |
21 | +-- [ | |
22 | +drop sequence "ort_id_ort_seq"; | |
23 | + | |
24 | +drop index "ort_ukey1"; | |
25 | + | |
26 | +drop function "chk_ort" (text,varchar(10),int4); | |
27 | +drop function "ins_ort" (text,varchar(10),int4); | |
28 | +drop function "ins_ort" (text,varchar(10),text,varchar(3),varchar(4)); | |
29 | +drop function "get_id_ort_by_ukey1" (varchar(10),int4); | |
30 | + | |
31 | +drop table "ort"; | |
32 | +-- ] | |
33 | +-- ende Orte -- | |
34 | + | |
35 | +-- Table und Funktionen um Adressen zu verwalten -- | |
36 | +-- [ | |
37 | +drop sequence "adresse_id_adresse_seq"; | |
38 | + | |
39 | +drop index "adresse_ukey1"; | |
40 | + | |
41 | +drop function "chk_adresse" (text,varchar(5),varchar(10),int4,int4); | |
42 | +drop function "ins_adresse" (text,varchar(5),varchar(10),int4,int4); | |
43 | +drop function "ins_adresse" (text,varchar(5),varchar(10),text, | |
44 | + varchar(5),text,varchar(3),varchar(4)); | |
45 | +drop function "get_adresse_by_ukey1" (text,varchar(5),varchar(10)); | |
46 | + | |
47 | +drop table "adresse"; | |
48 | +-- ] | |
49 | +-- ende Adressen -- | |
50 | + | |
51 | +-- Tabellen und alles für Personendaten | |
52 | +-- [ | |
53 | +drop sequence "person_id_person_seq"; | |
54 | + | |
55 | +drop index "person_ukey1"; | |
56 | + | |
57 | +drop function "chk_person" (varchar(10),text,text,text,text, | |
58 | + varchar(10),varchar(10),varchar(10),varchar(50), | |
59 | + varchar(50),varchar(100)); | |
60 | +drop function "ins_person" (varchar(10),text,text,text,text, | |
61 | + varchar(10),varchar(10),varchar(10),varchar(50), | |
62 | + varchar(50),varchar(100)); | |
63 | +drop function "ins_person" (varchar(10),text,text,text,text, | |
64 | + varchar(10),varchar(10),varchar(10),varchar(50), | |
65 | + varchar(50),varchar(100),int4,int4,text, | |
66 | + text,money); | |
67 | +drop function "get_id_person_by_ukey1" (text, text, text); | |
68 | + | |
69 | +drop table "person"; | |
70 | +drop table "wohnt"; | |
71 | +-- ] | |
72 | +-- ende Personendaten -- | |
73 | + | |
74 | +-- Arbeitsplatz -- | |
75 | +-- [ | |
76 | +drop sequence "firma_id_firma_seq"; | |
77 | +drop sequence "abteilung_id_abteilung_seq"; | |
78 | + | |
79 | +drop index "firma_ukey1"; | |
80 | +drop index "abteilung_ukey1"; | |
81 | + | |
82 | +drop function "chk_arbeit" (text, text, money, int4, int4); | |
83 | +drop function "ins_arbeit" (text, text, money, int4, int4); | |
84 | +drop function "chk_firma" (text, text, varchar(10)); | |
85 | +drop function "ins_firma" (text, text, varchar(10)); | |
86 | +drop function "chk_abteilung" (text, text, int4, int4); | |
87 | +drop function "ins_abteilung" (text, text, int4, int4); | |
88 | +drop function "ins_abteilung" (text, text, text, text, varchar(10), int4); | |
89 | + | |
90 | +drop table "firma"; | |
91 | +drop table "abteilung"; | |
92 | +drop table "arbeit"; | |
93 | +-- ] | |
94 | +-- ende Arbeitsplatz -- | |
95 | + | |
96 | +drop view "adresse_v"; | |
97 | +drop view "person_v"; | |
98 | + | |
99 | +commit; | ... | ... |
filldb.sql
0 → 100755
1 | +-- der große ich mach alles auf einmale Aufruf :-) | |
2 | +-- das hat den anchteil, das beim loggen evtl. Daten verloren gehen, ich | |
3 | +-- vermute das haengt damit zusammen das jede Funktion eine in sich | |
4 | +-- abgeschlossene Transaktion darstellt und somit evt. durch andere Funktionen | |
5 | +-- bereitgestellte Daten nicht sieht. | |
6 | +select firma.ins_arbeit('Chef', 'Buchführung, Systemadministration, Programmierung', 900.00, | |
7 | + person.ins_person('Herr', 'Staatl. gepr. Informatikassistent', | |
8 | + 'Steffers', 'Georg', '1973-12-15', NULL, | |
9 | + '8993135', NULL, '01713258578', | |
10 | + 'georg@steffers.org', 'www.steffers.org', | |
11 | + adresse.ins_adresse('Warendorfer Straße', '75', '48155', | |
12 | + adresse.ins_ort('Münster', '0251', | |
13 | + adresse.ins_land('Deutschland', 'DE', '+49')), | |
14 | + adresse.id_land_by_lnd_kz('DE'))), | |
15 | + firma.id_abteilung_firma( | |
16 | + firma.ins_firma('Steffers Web- und Systemprogrammierung', | |
17 | + 'meine kleine Firma', NULL, | |
18 | + adresse.id_adresse('Warendorfer Straße', '75', '48155', | |
19 | + adresse.id_land_by_lnd_kz('DE'))))); | |
20 | + | |
21 | +select firma.ins_arbeit('Chef2', 'Kundenaquise, Webdesign, Programmierung', 900.00, | |
22 | + person.ins_person('Herr', NULL, | |
23 | + 'Engbers', 'Marcus', '1973-01-18', NULL, | |
24 | + '977077', NULL, '01708309739', | |
25 | + 'chef@hwmann.de', 'www.steffers.org', | |
26 | + adresse.ins_adresse('Bahnhofstraße', '58', '48607', | |
27 | + adresse.ins_ort('Ochtrup', '02553', | |
28 | + adresse.ins_land('Deutschland', 'DE', '+49')), | |
29 | + adresse.id_land_by_lnd_kz('DE'))), | |
30 | + firma.id_abteilung_firma( | |
31 | + firma.ins_firma('Steffers Web- und Systemprogrammierung', | |
32 | + 'meine kleine Firma', NULL, | |
33 | + adresse.id_adresse('Tannenhofallee', '21', '48155', | |
34 | + adresse.id_land_by_lnd_kz('DE'))))); | |
35 | + | |
36 | +--select ins_firma('Steffers Web- und Systemprogrammierung', | |
37 | +-- 'meine kleine Firma', NULL, | |
38 | +-- ins_adresse('Tannenhofallee', '21', '48155', | |
39 | +-- ins_ort('Münster', '0251', | |
40 | +-- ins_land('Deutschland', 'DE', '+49')), | |
41 | +-- id_land_by_lnd_kz('DE'))); | |
42 | + | |
43 | +--select ins_person('Herr', 'Staatl. gepr. Informatikassistent', 'Steffers', | |
44 | +-- 'Georg', '1973-12-15', NULL, '8993135', NULL, '01713258578', | |
45 | +-- 'georg@steffers.org', 'www.steffers.org', | |
46 | +-- ins_adresse('Tannenhofallee', '21', '48155', | |
47 | +-- ins_ort('Münster', '0251', | |
48 | +-- ins_land('Deutschland', 'DE', '+49')), | |
49 | +-- id_land_by_lnd_kz('DE'))); | |
50 | + | |
51 | +--select ins_arbeit('Chef', 'der Mann der alles alleine macht', 900.00, | |
52 | +-- id_person('Steffers', 'Georg', '1973-12-15'), | |
53 | +-- id_abteilung_firma( | |
54 | +-- id_firma('Steffers Web- und Systemprogrammierung', | |
55 | +-- NULL))); | |
56 | + | |
57 | +select person.ins_person('Frau', NULL, 'Vespermann', 'Tina', '1978-07-09', | |
58 | + NULL, '949780', NULL, '01711535514', | |
59 | + 'Tante_Tina@t-online.de', NULL, | |
60 | + adresse.ins_adresse('Walkemühlenweg', '8', '37574', | |
61 | + adresse.ins_ort('Einbeck', '05561', | |
62 | + adresse.id_land_by_lnd_kz('DE')), | |
63 | + adresse.id_land_by_lnd_kz('DE'))); | |
64 | + | |
65 | +select person.ins_person('Frau', NULL, 'Steffers', 'Mechtild', '1951-04-09', | |
66 | + NULL, '98266', '98266', NULL, NULL, NULL, | |
67 | + adresse.ins_adresse('Krummer Weg', '31', '48607', | |
68 | + adresse.ins_ort('Ochtrup', '02553', | |
69 | + adresse.id_land_by_lnd_kz('DE')), | |
70 | + adresse.id_land_by_lnd_kz('DE'))); | |
71 | + | |
72 | +select person.ins_person('Herr', NULL, 'Steffers', 'Wilhelm', '1943-09-09', | |
73 | + NULL, '98266', '98266', NULL, NULL, NULL, | |
74 | + adresse.id_adresse('Krummer Weg', '31', '48607', | |
75 | + adresse.id_land_by_lnd_kz('DE'))); | |
76 | + | |
77 | +select person.person_adresse( | |
78 | + person.id_person('Steffers', 'Georg', '1973-12-15'), | |
79 | + adresse.id_adresse('Krummer Weg', '31', '48607', | |
80 | + adresse.id_land_by_lnd_kz('DE'))); | |
81 | + | |
82 | +select person.ins_person('Frau', 'Dipl. Geophysikerin', 'Hofmann', 'Daniela', | |
83 | + '1974-01-27', NULL, '419665', NULL, '01758910013', | |
84 | + 'danhof@uni-bremen.de', NULL, | |
85 | + adresse.ins_adresse('Am Staugraben', '7', '28865', | |
86 | + adresse.ins_ort('Lilienthal', '04298', | |
87 | + adresse.id_land_by_lnd_kz('DE')), | |
88 | + adresse.id_land_by_lnd_kz('DE'))); | |
89 | + | |
90 | +select person.ins_person('Herr', 'Dipl. Informatiker', 'Fellmann', 'Ralf', | |
91 | + '1974-01-01', NULL, '6744505', NULL, '01775474207', | |
92 | + 'felle@web.de', NULL, | |
93 | + adresse.ins_adresse('Wolbecker Str.', '52', '48155', | |
94 | + adresse.id_ort('0251', | |
95 | + adresse.id_land_by_lnd_kz('DE')), | |
96 | + adresse.id_land_by_lnd_kz('DE'))); | |
97 | + | |
98 | +select person.ins_person('Frau', NULL, 'Voß', 'Anna', '1985-08-03', NULL, | |
99 | + '78523', NULL, '01786916935', 'gab58@web.de', | |
100 | + 'www.gab58.de.vu', | |
101 | + adresse.ins_adresse('Weezer Str.', '64', '47623', | |
102 | + adresse.ins_ort('Kevelaer', '02832', | |
103 | + adresse.id_land_by_lnd_kz('DE')), | |
104 | + adresse.id_land_by_lnd_kz('DE'))); | |
105 | + | |
106 | +select person.ins_person('Frau', NULL, 'Bendyk', 'Catharina', '1980-11-10', | |
107 | + NULL, '970289', NULL, '01722374138', | |
108 | + 'lost-star@gmx.de', | |
109 | + 'www.cyboworld3.de/pages/deswahnsinnsbraut', | |
110 | + adresse.ins_adresse('Witte Sand', '8', '48653', | |
111 | + adresse.ins_ort('Coesfeld', '02541', | |
112 | + adresse.id_land_by_lnd_kz('DE')), | |
113 | + adresse.id_land_by_lnd_kz('DE'))); | |
114 | + | ... | ... |
makescript.sh
0 → 100755
mk_lang_and_funcs.sh
0 → 100755
plpgsql_funcs/.cr_func_adresse.sql.swp
0 → 100755
No preview for this file type
plpgsql_funcs/cr_func_adresse.sql
0 → 100755
1 | +-- Funktionen um Adressen zu verwalten -- | |
2 | +-- [ | |
3 | +create function "chk_adresse" (text,varchar(5),varchar(10),int4,int4) | |
4 | + returns int4 as ' | |
5 | + /* | |
6 | + * chk_adresse(strasse, h_nr, plz_a, id_ort, id_land) | |
7 | + * | |
8 | + * ueberpruefen ob die Adresse schon in der DB gespeichert ist. | |
9 | + * | |
10 | + * returns: -1: falsche Parameter | |
11 | + * -2: Inkonsistenz endeckt. Es existiert bereits eine | |
12 | + * Adresse mit dem einer, aber nicht alle der Parameter | |
13 | + * übereinstimmen | |
14 | + * 0: Adresse existiert noch nicht in der DB | |
15 | + * >0: Adresse existiert bereits, gibt id_adresse zurück. | |
16 | + */ | |
17 | + | |
18 | + DECLARE | |
19 | + ida adresse.adresse%ROWTYPE; | |
20 | + BEGIN | |
21 | + IF $1 IS NULL OR $1 = '''' OR | |
22 | + $2 IS NULL OR $2 = '''' OR | |
23 | + $3 IS NULL OR $3 = '''' THEN | |
24 | + RETURN -1; | |
25 | + END IF; | |
26 | + | |
27 | + select INTO ida * from adresse.adresse where | |
28 | + strasse = $1 and plz_a = $3 and | |
29 | + id_land = $5; | |
30 | + | |
31 | + IF NOT FOUND THEN | |
32 | + RETURN 0; | |
33 | + ELSE | |
34 | + IF ida.h_nr <> $2 OR ida.id_ort <> $4 THEN | |
35 | + RETURN -2; | |
36 | + END IF; | |
37 | + END IF; | |
38 | + | |
39 | + RETURN ida._id_; | |
40 | + END; | |
41 | + ' language 'plpgsql'; | |
42 | + | |
43 | +create function "ins_adresse" (text,varchar(5),varchar(10),int4,int4) | |
44 | + returns int4 as ' | |
45 | + /* | |
46 | + * ins_adresse(strasse, h_nr, plz_a, id_ort, id_land) | |
47 | + * | |
48 | + * fügt eine Adresse in die DB ein sofern es nicht schon existiert, | |
49 | + * inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast | |
50 | + * sind. | |
51 | + * | |
52 | + * returns: 0: wenn die Adresse nicht eingefuegt werden kann | |
53 | + * >0: wenn die Adresse eingefuegt werden konnte oder bereits | |
54 | + * existierte, gibt id_adresse zurück. | |
55 | + */ | |
56 | + | |
57 | + DECLARE | |
58 | + id_adresse adresse.adresse._id_%TYPE; | |
59 | + BEGIN | |
60 | + select INTO id_adresse adresse.chk_adresse($1, $2, $3, $4, $5); | |
61 | + | |
62 | + IF id_adresse = -1 THEN | |
63 | + RETURN 0; | |
64 | + ELSE | |
65 | + IF id_adresse = 0 THEN | |
66 | + insert into adresse.adresse (strasse,h_nr,plz_a, | |
67 | + id_ort,id_land) | |
68 | + values ($1, $2, $3, $4, $5); | |
69 | + | |
70 | + select INTO id_adresse adresse.chk_adresse($1,$2,$3,$4,$5); | |
71 | + END IF; | |
72 | + END IF; | |
73 | + | |
74 | + RETURN id_adresse; | |
75 | + END; | |
76 | + ' language 'plpgsql'; | |
77 | + | |
78 | +create function "id_adresse" (text,varchar(5),varchar(10),int4) | |
79 | + returns int4 as ' | |
80 | + /* | |
81 | + * id_adresse(strasse, h_nr, plz_a, id_land) | |
82 | + * | |
83 | + * Ermittelt die id (id_adresse) einer in der DB enthaltenen Adresse | |
84 | + * anhand des Primaerschluessels (vorwahl_o, id_land) | |
85 | + * | |
86 | + * returns: 0: wenn das Land nicht eingefuegt werden kann | |
87 | + * >0: wenn das Land gefunden wurde, gibt id_land zurück. | |
88 | + */ | |
89 | + | |
90 | + DECLARE | |
91 | + ida adresse.adresse._id_%TYPE; | |
92 | + BEGIN | |
93 | + select INTO ida _id_ from adresse.adresse where | |
94 | + strasse = $1 and h_nr = $2 and plz_a = $3 and id_land = $4; | |
95 | + | |
96 | + IF NOT FOUND THEN | |
97 | + RETURN 0; | |
98 | + ELSE | |
99 | + RETURN ida; | |
100 | + END IF; | |
101 | + END; | |
102 | + ' language 'plpgsql'; | |
103 | +-- ] | |
104 | +-- Ende Adressen -- | ... | ... |
plpgsql_funcs/cr_func_arbeit.sql
0 → 100755
1 | +-- Funktionen um Arbeitsplaetze zu verwalten -- | |
2 | +-- [ | |
3 | +create function "chk_arbeit" (text,text,numeric(10,2),int4,int4) | |
4 | + returns int4 as ' | |
5 | + /* | |
6 | + * chk_arbeit(position, beschreibung, gehalt, id_person, id_abteilung) | |
7 | + * | |
8 | + * ueberpruefen ob eine passender Stelle in der DB gespeichert ist. | |
9 | + * | |
10 | + * returns: -1: falsche Parameter | |
11 | + * -2: Inkonsistenz endeckt. Es existiert bereits eine | |
12 | + * Adresse mit dem einer, aber nicht alle der Parameter | |
13 | + * übereinstimmen | |
14 | + * 0: Adresse existiert noch nicht in der DB | |
15 | + * >0: Adresse existiert bereits, gibt id_adresse zurück. | |
16 | + */ | |
17 | + | |
18 | + DECLARE | |
19 | + ida firma.arbeit%ROWTYPE; | |
20 | + BEGIN | |
21 | + IF $4 IS NULL OR $4 < 1 OR | |
22 | + $5 IS NULL OR $5 < 1 OR | |
23 | + $1 IS NULL OR $1 = '''' THEN | |
24 | + RETURN -1; | |
25 | + END IF; | |
26 | + | |
27 | + select INTO ida * from firma.arbeit where | |
28 | + id_person = $4 and id_abteilung = $5; | |
29 | + | |
30 | + IF NOT FOUND THEN | |
31 | + RETURN 0; | |
32 | + ELSE | |
33 | + IF ida.position <> $1 OR ida.beschreibung <> $2 OR | |
34 | + ida.gehalt <> $3 THEN | |
35 | + RETURN -2; | |
36 | + END IF; | |
37 | + END IF; | |
38 | + | |
39 | + RETURN 1; | |
40 | + END; | |
41 | + ' language 'plpgsql'; | |
42 | + | |
43 | +create function "ins_arbeit" (text,text,numeric(10,2),int4,int4) | |
44 | + returns int4 as ' | |
45 | + /* | |
46 | + * ins_arbeit(position, beschreibung, gehalt, id_person, id_abteilung) | |
47 | + * | |
48 | + * fügt eine Stelle in die DB ein sofern es nicht schon existiert, | |
49 | + * inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast | |
50 | + * sind. | |
51 | + * | |
52 | + * returns: 0: wenn die Adresse nicht eingefuegt werden kann | |
53 | + * >0: wenn die Adresse eingefuegt werden konnte oder bereits | |
54 | + * existierte, gibt id_adresse zurück. | |
55 | + */ | |
56 | + | |
57 | + DECLARE | |
58 | + chk int4; | |
59 | + BEGIN | |
60 | + select INTO chk firma.chk_arbeit($1, $2, $3, $4, $5); | |
61 | + | |
62 | + IF chk = 0 THEN | |
63 | + insert into firma.arbeit (position, beschreibung, gehalt, | |
64 | + id_person, id_abteilung) | |
65 | + values ($1, $2, $3, $4, $5); | |
66 | + | |
67 | + RETURN 1; | |
68 | + END IF; | |
69 | + | |
70 | + RETURN 0; | |
71 | + END; | |
72 | + ' language 'plpgsql'; | |
73 | + | |
74 | +create function "chk_firma" (text, text, varchar(10)) | |
75 | + returns int4 as ' | |
76 | + /* | |
77 | + * chk_firma(name, beschreibung, plz_f) | |
78 | + * | |
79 | + * ueberpruefen ob die Firma schon in der DB gespeichert ist. | |
80 | + * | |
81 | + * returns: -1: falsche Parameter | |
82 | + * -2: Inkonsistenz endeckt. Es existiert bereits ein | |
83 | + * Land mit dem einer, aber nicht alle der Parameter | |
84 | + * übereinstimmen | |
85 | + * 0: Land existiert noch nicht in der DB | |
86 | + * >0: Land existiert bereits, gibt id_land zurück. | |
87 | + */ | |
88 | + | |
89 | + DECLARE | |
90 | + idf firma.firma%ROWTYPE; | |
91 | + BEGIN | |
92 | + IF $1 IS NULL OR $1 = '''' THEN | |
93 | + return -1; | |
94 | + END IF; | |
95 | + | |
96 | + IF $3 IS NOT NULL THEN | |
97 | + select INTO idf * from firma.firma where | |
98 | + name = $1 and plz_f = $3; | |
99 | + ELSE | |
100 | + select INTO idf * from firma.firma where | |
101 | + name = $1; | |
102 | + END IF; | |
103 | + | |
104 | + IF NOT FOUND THEN | |
105 | + RETURN 0; | |
106 | + ELSE | |
107 | + IF idf.beschreibung <> $2 THEN | |
108 | + RETURN -2; | |
109 | + END IF; | |
110 | + END IF; | |
111 | + | |
112 | + RETURN idf._id_; | |
113 | + END; | |
114 | + ' language 'plpgsql'; | |
115 | + | |
116 | +create function "ins_firma" (text, text, varchar(10), int4) | |
117 | + returns int4 as ' | |
118 | + /* | |
119 | + * ins_firma(name, beschreibung, plz_f, id_adresse) | |
120 | + * | |
121 | + * fügt eine Firma in die DB ein sofern es nicht schon existiert, | |
122 | + * inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast | |
123 | + * sind. | |
124 | + * Ausserdem wir die globale Abteilung zu der Firma angelegt, siehe | |
125 | + * cr_tables.sql | |
126 | + * | |
127 | + * returns: 0: wenn die Firma nicht eingefuegt werden kann | |
128 | + * >0: wenn die Firma eingefuegt werden konnte oder bereits | |
129 | + * existierte, gibt id_firma zurück. | |
130 | + */ | |
131 | + | |
132 | + DECLARE | |
133 | + idf firma.firma._id_%TYPE; | |
134 | + BEGIN | |
135 | + select INTO idf firma.chk_firma($1, $2, $3); | |
136 | + | |
137 | + IF idf < 0 THEN | |
138 | + RETURN 0; | |
139 | + ELSE | |
140 | + IF idf = 0 THEN | |
141 | + insert into firma.firma (name, beschreibung, plz_f) | |
142 | + values ($1, $2, $3); | |
143 | + | |
144 | + select INTO idf firma.chk_firma($1, $2, $3); | |
145 | + | |
146 | + PERFORM firma.ins_abteilung(''_FIRMA_'', $2, idf, $4); | |
147 | + END IF; | |
148 | + END IF; | |
149 | + | |
150 | + RETURN idf; | |
151 | + END; | |
152 | + ' language 'plpgsql'; | |
153 | + | |
154 | +create function "id_abteilung" (text, int4) | |
155 | + returns int4 as ' | |
156 | + /* | |
157 | + * id_abteilung(bezeichnung, id_firma); | |
158 | + * gibt die id_abteilung einer bestimmten Abteilung einer | |
159 | + * bestimmten Firma aus. | |
160 | + * | |
161 | + * returns: 0: wenn keine passnede Abteilung existiert | |
162 | + * >0: die Abteilung (id_abteilung) | |
163 | + */ | |
164 | + | |
165 | + DECLARE | |
166 | + ida firma.abteilung._id_%TYPE; | |
167 | + BEGIN | |
168 | + select INTO ida _id_ from firma.abteilung where | |
169 | + id_firma = $2 and bezeichnung = $1; | |
170 | + | |
171 | + IF NOT FOUND THEN | |
172 | + RETURN 0; | |
173 | + ELSE | |
174 | + RETURN ida; | |
175 | + END IF; | |
176 | + END; | |
177 | + ' language 'plpgsql'; | |
178 | + | |
179 | +create function "id_firma" (text,varchar(10)) | |
180 | + returns int4 as ' | |
181 | + /* | |
182 | + * id_firma(name, plz_f); | |
183 | + * gibt die id_abteilung der zentralen Abteilung einer Firma aus | |
184 | + * siehe dazu auch cr_tables.sql | |
185 | + * | |
186 | + * returns: 0: wenn keine passende Firma existiert | |
187 | + * >0: die Firma (id_firma) | |
188 | + */ | |
189 | + | |
190 | + DECLARE | |
191 | + idf firma.firma._id_%TYPE; | |
192 | + BEGIN | |
193 | + IF $2 IS NOT NULL THEN | |
194 | + select INTO idf _id_ from firma.firma where | |
195 | + name = $1 and plz_f = $2; | |
196 | + ELSE | |
197 | + select INTO idf _id_ from firma.firma where | |
198 | + name = $1; | |
199 | + END IF; | |
200 | + | |
201 | + IF NOT FOUND THEN | |
202 | + RETURN 0; | |
203 | + ELSE | |
204 | + RETURN idf; | |
205 | + END IF; | |
206 | + END; | |
207 | + ' language 'plpgsql'; | |
208 | + | |
209 | +create function "id_abteilung_firma" (int4) | |
210 | + returns int4 as ' | |
211 | + /* | |
212 | + * id_abteilung_firma(id_firma); | |
213 | + * gibt die id_abteilung der zentralen Abteilung einer Firma aus | |
214 | + * siehe dazu auch cr_tables.sql | |
215 | + * | |
216 | + * returns: 0: wenn keine Firma zu dieser id_firma existiert | |
217 | + * >0: die Abteilung zu der Firma (id_abteilung) | |
218 | + */ | |
219 | + | |
220 | + DECLARE | |
221 | + ida firma.abteilung._id_%TYPE; | |
222 | + BEGIN | |
223 | + select INTO ida _id_ from firma.abteilung where | |
224 | + id_firma = $1 and bezeichnung = ''_FIRMA_''; | |
225 | + | |
226 | + IF NOT FOUND THEN | |
227 | + RETURN 0; | |
228 | + ELSE | |
229 | + RETURN ida; | |
230 | + END IF; | |
231 | + END; | |
232 | + ' language 'plpgsql'; | |
233 | + | |
234 | +create function "chk_abteilung" (text, text, int4, int4) | |
235 | + returns int4 as ' | |
236 | + /* | |
237 | + * chk_abteilung(bezeichnung, beschreibung, id_firma, id_adresse) | |
238 | + * | |
239 | + * ueberpruefen ob die Abteilung schon in der DB gespeichert ist. | |
240 | + * | |
241 | + * returns: -1: falsche Parameter | |
242 | + * -2: Inkonsistenz endeckt. Es existiert bereits ein | |
243 | + * Land mit dem einer, aber nicht alle der Parameter | |
244 | + * übereinstimmen | |
245 | + * 0: Land existiert noch nicht in der DB | |
246 | + * >0: Land existiert bereits, gibt id_land zurück. | |
247 | + */ | |
248 | + | |
249 | + DECLARE | |
250 | + ida firma.abteilung%ROWTYPE; | |
251 | + BEGIN | |
252 | + IF $1 IS NULL OR $1 = '''' OR | |
253 | + $3 IS NULL OR $3 < 1 THEN | |
254 | + RETURN -1; | |
255 | + END IF; | |
256 | + | |
257 | + select INTO ida * from firma.abteilung where | |
258 | + bezeichnung = $1 and id_firma = $3; | |
259 | + | |
260 | + IF NOT FOUND THEN | |
261 | + RETURN 0; | |
262 | + ELSE | |
263 | + IF ida.beschreibung <> $2 OR | |
264 | + ida.id_adresse <> $4 THEN | |
265 | + RETURN -2; | |
266 | + END IF; | |
267 | + END IF; | |
268 | + | |
269 | + RETURN ida._id_; | |
270 | + END; | |
271 | + ' language 'plpgsql'; | |
272 | + | |
273 | +create function "ins_abteilung" (text, text, int4, int4) | |
274 | + returns int4 as ' | |
275 | + /* | |
276 | + * ins_abteilung(bezeichnung, beschreibung, id_firma, id_adresse) | |
277 | + * | |
278 | + * fügt eine Abteilung in die DB ein sofern es nicht schon existiert, | |
279 | + * inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast | |
280 | + * sind. | |
281 | + * | |
282 | + * returns: 0: wenn die Abteilung nicht eingefuegt werden kann | |
283 | + * >0: wenn die Abteilung eingefuegt werden konnte oder bereits | |
284 | + * existierte, gibt id_firma zurück. | |
285 | + */ | |
286 | + | |
287 | + DECLARE | |
288 | + ida firma.abteilung._id_%TYPE; | |
289 | + BEGIN | |
290 | + select INTO ida firma.chk_abteilung($1, $2, $3, $4); | |
291 | + | |
292 | + IF ida = -1 THEN | |
293 | + RETURN 0; | |
294 | + ELSE | |
295 | + IF ida = 0 THEN | |
296 | + insert into firma.abteilung (bezeichnung, beschreibung, | |
297 | + id_firma, id_adresse) | |
298 | + values ($1, $2, $3, $4); | |
299 | + | |
300 | + select INTO ida firma.chk_abteilung($1, $2, $3, $4); | |
301 | + END IF; | |
302 | + END IF; | |
303 | + | |
304 | + RETURN ida; | |
305 | + END; | |
306 | + ' language 'plpgsql'; | |
307 | +-- ] | |
308 | +-- Ende Arbeitsplatz -- | ... | ... |
plpgsql_funcs/cr_func_generic.sql
0 → 100755
1 | +-- allgemeine Funktionen -- | |
2 | +-- [ | |
3 | +create function start_logging(text, text) | |
4 | + returns int4 as ' | |
5 | + /* | |
6 | + * start_logging(table-name, operation) (INSERT, UPDATE, DELETE) | |
7 | + * | |
8 | + * Startet das logging zu einer bestimmten table. | |
9 | + * | |
10 | + * returns: 1 - logging eingeschaltet | |
11 | + * 0 - logging war schon eingeschaltet | |
12 | + */ | |
13 | + DECLARE | |
14 | + table_schema text; | |
15 | + table_schema_oid int4; | |
16 | + trig_name_before text; | |
17 | + trig_name_after text; | |
18 | + all_actions _text := ''{\"INSERT\", \"UPDATE\", \"DELETE\"}''; | |
19 | + actions _text; | |
20 | + range int4; | |
21 | + query text; | |
22 | + BEGIN | |
23 | + IF $2 <> ''INSERT'' AND | |
24 | + $2 <> ''UPDATE'' AND | |
25 | + $2 <> ''DELETE'' AND | |
26 | + $2 <> ''CHANGE'' AND | |
27 | + $2 <> ''ALL'' THEN | |
28 | + RETURN -1; | |
29 | + END IF; | |
30 | + | |
31 | + select into table_schema_oid relnamespace | |
32 | + from pg_catalog.pg_class where relname=$1; | |
33 | + select into table_schema nspname from pg_catalog.pg_namespace where | |
34 | + oid=table_schema_oid; | |
35 | + | |
36 | + IF $2 = ''ALL'' THEN | |
37 | + range := 3; | |
38 | + actions := all_actions; | |
39 | + ELSE | |
40 | + IF $2 = ''CHANGE'' THEN | |
41 | + range := 2; | |
42 | + | |
43 | + actions := ''{''; | |
44 | + FOR i IN 1..2 LOOP | |
45 | + actions := actions || quote_ident(all_actions[i]); | |
46 | + IF i<2 THEN | |
47 | + actions := actions || '',''; | |
48 | + ELSE | |
49 | + actions := actions || ''}''; | |
50 | + END IF; | |
51 | + END LOOP; | |
52 | + ELSE | |
53 | + range := 1; | |
54 | + actions := ''{'' || quote_ident($2) || ''}''; | |
55 | + END IF; | |
56 | + END IF; | |
57 | + | |
58 | + FOR i IN 1..range LOOP | |
59 | + trig_name_before := ''log_before_'' || lower(actions[i]) || | |
60 | + ''_'' || $1; | |
61 | + trig_name_after := ''log_after_'' || lower(actions[i]) || | |
62 | + ''_'' || $1; | |
63 | + | |
64 | + PERFORM * from pg_catalog.pg_trigger where | |
65 | + tgname=trig_name_before; | |
66 | + | |
67 | + IF NOT FOUND THEN | |
68 | + query := ''CREATE TRIGGER '' || trig_name_before || | |
69 | + '' BEFORE '' || actions[i] || '' ON '' || | |
70 | + table_schema || ''.'' || $1 || | |
71 | + '' FOR EACH ROW EXECUTE PROCEDURE '' || | |
72 | + ''trigger_func.set_history();''; | |
73 | + EXECUTE query; | |
74 | + | |
75 | + query := ''CREATE TRIGGER '' || trig_name_after || | |
76 | + '' AFTER '' || actions[i] || '' ON '' || | |
77 | + table_schema || ''.'' || $1 || | |
78 | + '' FOR EACH ROW EXECUTE PROCEDURE '' || | |
79 | + ''trigger_func.set_history();''; | |
80 | + EXECUTE query; | |
81 | + ELSE | |
82 | + RAISE EXCEPTION ''specified trigger not found''; | |
83 | + END IF; | |
84 | + END LOOP; | |
85 | + | |
86 | + RETURN 1; | |
87 | + END; | |
88 | + ' language 'plpgsql'; | |
89 | + | |
90 | +create function stop_logging(text, text) | |
91 | + returns int4 as ' | |
92 | + /* | |
93 | + * stop_logging(table-name, operation) (INSERT, UPDATE, DELETE) | |
94 | + * | |
95 | + * Stoppt das logging zu einer bestimmten table. | |
96 | + * | |
97 | + * returns: 1 - logging eingeschaltet | |
98 | + * 0 - logging war schon eingeschaltet | |
99 | + */ | |
100 | + DECLARE | |
101 | + table_schema text; | |
102 | + table_schema_oid int4; | |
103 | + trig_name_before text; | |
104 | + trig_name_after text; | |
105 | + all_actions _text := ''{\"INSERT\", \"UPDATE\", \"DELETE\"}''; | |
106 | + actions _text; | |
107 | + range int4; | |
108 | + query text; | |
109 | + BEGIN | |
110 | + IF $2 <> ''INSERT'' AND | |
111 | + $2 <> ''UPDATE'' AND | |
112 | + $2 <> ''DELETE'' AND | |
113 | + $2 <> ''CHANGE'' AND | |
114 | + $2 <> ''ALL'' THEN | |
115 | + RETURN -1; | |
116 | + END IF; | |
117 | + | |
118 | + select into table_schema_oid relnamespace | |
119 | + from pg_catalog.pg_class where relname=$1; | |
120 | + select into table_schema nspname from pg_catalog.pg_namespace where | |
121 | + oid=table_schema_oid; | |
122 | + | |
123 | + IF $2 = ''ALL'' THEN | |
124 | + range := 3; | |
125 | + actions := all_actions; | |
126 | + ELSE | |
127 | + IF $2 = ''CHANGE'' THEN | |
128 | + range := 2; | |
129 | + | |
130 | + actions := ''{''; | |
131 | + FOR i IN 1..2 LOOP | |
132 | + actions := actions || quote_ident(all_actions[i]); | |
133 | + IF i<2 THEN | |
134 | + actions := actions || '',''; | |
135 | + ELSE | |
136 | + actions := actions || ''}''; | |
137 | + END IF; | |
138 | + END LOOP; | |
139 | + ELSE | |
140 | + range := 1; | |
141 | + actions := ''{'' || quote_ident($2) || ''}''; | |
142 | + END IF; | |
143 | + END IF; | |
144 | + | |
145 | + FOR i IN 1..range LOOP | |
146 | + trig_name_before := ''log_before_'' || lower(actions[i]) || | |
147 | + ''_'' || $1; | |
148 | + trig_name_after := ''log_after_'' || lower(actions[i]) || | |
149 | + ''_'' || $1; | |
150 | + | |
151 | + PERFORM * from pg_catalog.pg_trigger where | |
152 | + tgname=trig_name_before; | |
153 | + | |
154 | + IF FOUND THEN | |
155 | + query := ''DROP TRIGGER '' || trig_name_before || | |
156 | + '' ON '' || table_schema || ''.'' || $1 || '';''; | |
157 | + EXECUTE query; | |
158 | + | |
159 | + query := ''DROP TRIGGER '' || trig_name_after || | |
160 | + '' ON '' || table_schema || ''.'' || $1 || '';''; | |
161 | + EXECUTE query; | |
162 | + ELSE | |
163 | + RAISE EXCEPTION ''specified trigger not found''; | |
164 | + END IF; | |
165 | + END LOOP; | |
166 | + | |
167 | + RETURN 1; | |
168 | + END; | |
169 | + ' language 'plpgsql'; | |
170 | + | |
171 | +create function bit2text(bit varying) | |
172 | + returns text as ' | |
173 | + DECLARE | |
174 | + len int4; | |
175 | + i int4; | |
176 | + conv int4; | |
177 | + ret text := ''''; | |
178 | + BEGIN | |
179 | + len := bit_length($1); | |
180 | + | |
181 | + FOR i IN 0..len-1 LOOP | |
182 | + conv := ($1<<i)::BIT(1)::int4; | |
183 | + ret := ret || conv; | |
184 | + END LOOP; | |
185 | + | |
186 | + RETURN ret; | |
187 | + END; | |
188 | + ' language 'plpgsql'; | |
189 | + | |
190 | +create function bit_set_len(bit varying, int4) | |
191 | + returns bit varying as ' | |
192 | + /* | |
193 | + * bitlen(zu aenderneder Bitstring, len) | |
194 | + * | |
195 | + * Postres hat die dumme regelung, das wenn man die laenge eines | |
196 | + * Bitstrings umcastet immer rechts weggeschnitten oder ergaenzt | |
197 | + * wird. Erwarten tut man allerdings normalerweise das diese dinge | |
198 | + * links passieren, damit der Wert der Bitfolge nicht veraendert, bzw. | |
199 | + * die Positionen der bisherigen Bits nicht veraendert werden. | |
200 | + * genau das macht diese Funktion. | |
201 | + * | |
202 | + * returns: Den veraenderten Bitstring | |
203 | + */ | |
204 | + DECLARE | |
205 | + old_len int4; | |
206 | + sel text; | |
207 | + dummy RECORD; | |
208 | + BEGIN | |
209 | + old_len := bit_length($1); | |
210 | + | |
211 | + IF old_len < $2 THEN | |
212 | + sel := ''select B'' || quote_literal(bit2text($1)) || | |
213 | + ''::BIT('' || $2 || '')>>'' || $2-old_len || | |
214 | + '' as new_val''; | |
215 | + | |
216 | + FOR dummy IN EXECUTE sel LOOP | |
217 | + END LOOP; | |
218 | + ELSE | |
219 | + IF old_len > $2 THEN | |
220 | + sel := ''select (B'' || quote_literal(bit2text($1)) || | |
221 | + ''<<'' || old_len-$2 || '')::BIT('' || $2 || | |
222 | + '') as new_val''; | |
223 | + | |
224 | + FOR dummy IN EXECUTE sel LOOP | |
225 | + END LOOP; | |
226 | + ELSE | |
227 | + RETURN $1; | |
228 | + END IF; | |
229 | + END IF; | |
230 | + | |
231 | + RETURN dummy.new_val; | |
232 | + END; | |
233 | + ' language 'plpgsql'; | |
234 | + | |
235 | +create function mask_len(text, text, text) | |
236 | + returns int4 as ' | |
237 | + DECLARE | |
238 | + len int4 := 0; | |
239 | + result RECORD; | |
240 | + query text; | |
241 | + i int4 := 0; | |
242 | + BEGIN | |
243 | + query := ''select bit_length('' || $2 || '') '' || | |
244 | + ''as len from '' || $1; | |
245 | + | |
246 | + FOR result IN EXECUTE query LOOP | |
247 | + IF i = 0 THEN | |
248 | + len := result.len; | |
249 | + i := 1; | |
250 | + END IF; | |
251 | + IF $3 = ''min'' THEN | |
252 | + IF result.len < len THEN | |
253 | + len := result.len; | |
254 | + END IF; | |
255 | + END IF; | |
256 | + IF $3 = ''max'' THEN | |
257 | + IF result.len > len THEN | |
258 | + len := result.len; | |
259 | + END IF; | |
260 | + END IF; | |
261 | + IF $3 IS NULL OR $3 = ''first'' THEN | |
262 | + EXIT; | |
263 | + END IF; | |
264 | + END LOOP; | |
265 | + | |
266 | + IF NOT FOUND THEN | |
267 | + len := 0; | |
268 | + END IF; | |
269 | + | |
270 | + RETURN len; | |
271 | + END; | |
272 | + ' language 'plpgsql'; | |
273 | + | |
274 | +create function corrected_mask(text, text, bit varying) | |
275 | + returns bit varying as ' | |
276 | + DECLARE | |
277 | + len int4; | |
278 | + new bit varying; | |
279 | + BEGIN | |
280 | + select INTO len public.mask_len($1, $2, NULL); | |
281 | + | |
282 | + IF len < bit_length($3) THEN | |
283 | + RETURN $3; | |
284 | + ELSE | |
285 | + RETURN bit_set_len($3, len); | |
286 | + END IF; | |
287 | + END; | |
288 | + ' language 'plpgsql'; | |
289 | + | |
290 | +create function get_db_comment(text) | |
291 | + returns text as ' | |
292 | + DECLARE | |
293 | + co text; | |
294 | + dboid pg_catalog.pg_stat_database.datid%TYPE; | |
295 | + BEGIN | |
296 | + select into dboid OID from pg_catalog.pg_database where | |
297 | + datname=$1; | |
298 | + select into co description from pg_catalog.pg_description where | |
299 | + objoid=dboid; | |
300 | + | |
301 | + return co; | |
302 | + END; | |
303 | + ' language 'plpgsql'; | |
304 | + | |
305 | +create function get_schema_comment(text) | |
306 | + returns text as ' | |
307 | + DECLARE | |
308 | + co text; | |
309 | + schemaoid pg_catalog.pg_class.relnamespace%TYPE; | |
310 | + BEGIN | |
311 | + select into schemaoid OID from pg_catalog.pg_namespace where | |
312 | + nspname=$1; | |
313 | + select into co description from pg_catalog.pg_description where | |
314 | + objoid=schemaoid; | |
315 | + | |
316 | + return co; | |
317 | + END; | |
318 | + ' language 'plpgsql'; | |
319 | + | |
320 | +create function get_constraint_comment(text) | |
321 | + returns text as ' | |
322 | + DECLARE | |
323 | + co text; | |
324 | + conoid pg_catalog.pg_stat_database.datid%TYPE; | |
325 | + BEGIN | |
326 | + select into conoid OID from pg_catalog.pg_constraint where | |
327 | + conname=$1; | |
328 | + select into co description from pg_catalog.pg_description where | |
329 | + objoid=conoid; | |
330 | + | |
331 | + return co; | |
332 | + END; | |
333 | + ' language 'plpgsql'; | |
334 | + | |
335 | +-- CREATE FUNCTION jdbc_clean(text) RETURNS text AS' | |
336 | +-- /* | |
337 | +-- * Brauchte ich aufgrund eines Bugs im jdbc Treiber, der LATIN1 nicht | |
338 | +-- * korrekt in UNICODE umwandelte. | |
339 | +-- * Jetzt ist dies Funktion obsolet. | |
340 | +-- * | |
341 | +-- */ | |
342 | +-- DECLARE | |
343 | +-- ret text; | |
344 | +-- BEGIN | |
345 | +-- SELECT INTO ret replace($1, ''\\\\344'', ''ä''); | |
346 | +-- SELECT INTO ret replace(ret, ''\\\\366'', ''ö''); | |
347 | +-- SELECT INTO ret replace(ret, ''\\\\374'', ''ü''); | |
348 | +-- SELECT INTO ret replace(ret, ''\\\\337'', ''\ß''); | |
349 | +-- SELECT INTO ret replace(ret, ''\\\\304'', ''Ä''); | |
350 | +-- SELECT INTO ret replace(ret, ''\\\\326'', ''Ö''); | |
351 | +-- SELECT INTO ret replace(ret, ''\\\\334'', ''Ü''); | |
352 | +-- | |
353 | +-- RETURN ret; | |
354 | +-- END; | |
355 | +--' LANGUAGE 'plpgsql' | |
356 | +-- ] | |
357 | +-- allgemeine Funktionen -- | ... | ... |
plpgsql_funcs/cr_func_konto.sql
0 → 100755
1 | +-- allgemeine Funktionen zu Konten -- | |
2 | +-- [ | |
3 | +create function konto_typ_min_len() | |
4 | + returns int4 as ' | |
5 | + DECLARE | |
6 | + len int4; | |
7 | + BEGIN | |
8 | + select INTO len bit_length(mask) from fibu.konten_typen; | |
9 | + | |
10 | + IF NOT FOUND THEN | |
11 | + len := 0; | |
12 | + END IF; | |
13 | + | |
14 | + RETURN len; | |
15 | + END; | |
16 | + ' language 'plpgsql'; | |
17 | + | |
18 | +create function konto_typ(text, int4) | |
19 | + returns bit varying as ' | |
20 | + /* | |
21 | + * konto_typ(name, output_len) | |
22 | + * | |
23 | + * ermittelt den konto_typ zu einem entsprechenden namen. | |
24 | + * | |
25 | + * dies existierem hauptsaechlich zur besseren lesbar machung von | |
26 | + * querys bezueglich konten, folgende query ist verstaendlicher, | |
27 | + * wenn auch etwas laenger: | |
28 | + * select * from konto where | |
29 | + * konto_typ=konto_typ(''AKTIVA''); | |
30 | + * als: | |
31 | + * select * from konto where | |
32 | + * konto_typ=1; | |
33 | + * bei der ersten query sieht man intuitiv das nach allen aktiva-konten | |
34 | + * gesucht wird, waerend das aus der zweiten nur hervorgeht wenn man | |
35 | + * alle Kontentypen im Kopf hat. | |
36 | + * | |
37 | + * returns: NULL: falls der name nicht in konten_typen existiert | |
38 | + * >0: der konten_typ zu dem namen | |
39 | + */ | |
40 | + | |
41 | + DECLARE | |
42 | + row fibu.konten_typen%ROWTYPE; | |
43 | + min_len int4 := fibu.konto_typ_min_len(); | |
44 | + sel text; | |
45 | + BEGIN | |
46 | + IF $2 < min_len THEN | |
47 | + RAISE EXCEPTION ''len is to short''; | |
48 | + END IF; | |
49 | + | |
50 | + sel := ''select mask::BIT('' || $2 || '')>>'' || | |
51 | + $2-min_len || | |
52 | + '' from fibu.konten_typen where name='' || | |
53 | + quote_literal($1); | |
54 | + | |
55 | + FOR row IN EXECUTE sel LOOP | |
56 | + END LOOP; | |
57 | + | |
58 | + IF NOT FOUND THEN | |
59 | + RETURN NULL; | |
60 | + ELSE | |
61 | + RETURN row.mask; | |
62 | + END IF; | |
63 | + END; | |
64 | + ' language 'plpgsql'; | |
65 | + | |
66 | +create function "inc_konto_ref_count" (int4) | |
67 | + returns int4 as ' | |
68 | + /* | |
69 | + * inc_konto_ref_count(kto_nr) | |
70 | + * | |
71 | + * erhoet das Feld used in used_konten um 1, damit wird signalisiert, | |
72 | + * das einmal mehr auf dieses Konto referenziert wird. | |
73 | + * | |
74 | + * returns: -1: Konto passt nicht in aktuellen kontenplan | |
75 | + * 0: Konto noch nicht in Konten, daher kein increment | |
76 | + * >0: Anzahl der Referenzen nach der erhoehung. | |
77 | + */ | |
78 | + | |
79 | + DECLARE | |
80 | + ref_count fibu.used_konten.used%TYPE; | |
81 | + konto fibu.konto%ROWTYPE; | |
82 | + BEGIN | |
83 | + select INTO ref_count used from fibu.used_konten where kto_nr=$1; | |
84 | + IF NOT FOUND THEN | |
85 | + return -1; | |
86 | + END IF; | |
87 | + | |
88 | + select INTO konto * from fibu.konto where kto_nr=$1; | |
89 | + IF NOT FOUND THEN | |
90 | + return 0; | |
91 | + END IF; | |
92 | + | |
93 | + ref_count := ref_count + 1; | |
94 | + update fibu.used_konten set used=ref_count where kto_nr=$1; | |
95 | + | |
96 | + RETURN ref_count; | |
97 | + END; | |
98 | + ' language 'plpgsql'; | |
99 | + | |
100 | +create function "dec_konto_ref_count" (int4) | |
101 | + returns int4 as ' | |
102 | + /* | |
103 | + * dec_konto_ref_count(kto_nr) | |
104 | + * | |
105 | + * verringert das Feld used in used_konten um 1, damit wird | |
106 | + * signalisiert, das einmal mehr auf dieses Konto referenziert wird. | |
107 | + * Es existiert ein trigger, der Konto loescht, wenn keine Referenz | |
108 | + * mehr darauf besteht, das koennte zu problemen fuehren, da Konten | |
109 | + * fuer die Buchfuehrung auch erhalten bleiben muessen, wenn die | |
110 | + * Kunden keinerlei Umsatz mehr produzieren, allerdings sollten dann | |
111 | + * auch die Kundeninformationen bestehen bleiben wodurch auch die | |
112 | + * Referenz bleibt. | |
113 | + * | |
114 | + * returns: -1: Konto passt nicht in aktuellen kontenplan | |
115 | + * 0: entweder wurde used gerade auf 0 gesetzt, oder es | |
116 | + * war bereits 0. | |
117 | + * >0: Anzahl der Referenzen nach der verringerung. | |
118 | + */ | |
119 | + | |
120 | + DECLARE | |
121 | + ref_count fibu.used_konten.used%TYPE; | |
122 | + konto fibu.konto%ROWTYPE; | |
123 | + BEGIN | |
124 | + select INTO ref_count used from fibu.used_konten where kto_nr=$1; | |
125 | + IF NOT FOUND THEN | |
126 | + RETURN -1; | |
127 | + END IF; | |
128 | + | |
129 | + IF ref_count = 0 THEN | |
130 | + RETURN 0; | |
131 | + ELSE | |
132 | + ref_count := ref_count - 1; | |
133 | + update fibu.used_konten set used=ref_count where kto_nr=$1; | |
134 | + END IF; | |
135 | + | |
136 | + RETURN ref_count; | |
137 | + END; | |
138 | + ' language 'plpgsql'; | |
139 | + | |
140 | +create function "chk_konto" (int4,text,bit varying,varchar(8),text, text) | |
141 | + returns int4 as ' | |
142 | + /* | |
143 | + * chk_konto(kto_nr, name, konto_typ, blz, b_kto_nr, b_name) | |
144 | + * | |
145 | + * ueberpruefen ob das Konto schon in der DB gespeichert ist und | |
146 | + * ob es in dem sinne gueltig ist, das in den existierenden | |
147 | + * kontenplan passt. | |
148 | + * | |
149 | + * returns: -1: falsche Parameter | |
150 | + * -2: Inkonsistenz endeckt. Es existiert bereits ein | |
151 | + * Konto mit dem der Schluessel, aber nicht alle der | |
152 | + * Parameter übereinstimmen | |
153 | + * -3: Inkonsistenz, Konto passt nicht in den Kontenplan | |
154 | + * 0: Konto existiert noch nicht in der DB | |
155 | + * >0: Konto existiert bereits, gibt id_person zurück. | |
156 | + */ | |
157 | + | |
158 | + DECLARE | |
159 | + idk fibu.konto%ROWTYPE; | |
160 | + kot fibu.konto.konto_typ%TYPE; | |
161 | + BEGIN | |
162 | + IF $1 IS NULL OR $1 < 0 THEN | |
163 | + RETURN -1; | |
164 | + END IF; | |
165 | + | |
166 | + select INTO kot konto_typ from fibu.used_konten where kto_nr = $1; | |
167 | + IF NOT FOUND OR kot != $3 THEN | |
168 | + RETURN -3; | |
169 | + END IF; | |
170 | + | |
171 | + select INTO idk * from fibu.konto where | |
172 | + kto_nr = $1; | |
173 | + | |
174 | + IF NOT FOUND THEN | |
175 | + RETURN 0; | |
176 | + ELSE | |
177 | + IF idk.name <> $2 OR idk.konto_typ <> $3 OR | |
178 | + idk.blz <> $4 OR idk.b_kto_nr <> $5 OR | |
179 | + idk.b_name <> $5 THEN | |
180 | + RETURN -2; | |
181 | + END IF; | |
182 | + END IF; | |
183 | + | |
184 | + RETURN idk.kto_nr; | |
185 | + END; | |
186 | + ' language 'plpgsql'; | |
187 | + | |
188 | +create function ins_konto(int4,text,bit varying,varchar(8),text,text) | |
189 | + returns int4 as ' | |
190 | + /* | |
191 | + * ins_konto(kto_nr, name, konto_typ, blz, b_kto_nr, b_name) | |
192 | + * | |
193 | + * fügt eine Konto in die DB ein sofern es nicht schon existiert, | |
194 | + * inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast | |
195 | + * sind. | |
196 | + * Es muss nur konto_typ angegeben werden, alle anderen Werte koennen | |
197 | + * NULL sein. | |
198 | + * Ist kto_nr NULL, dann ermittelt die Funktion einen freie Kontonummer | |
199 | + * aus dem zu konto_typ gehoerenden Nummernbereich. Dann wird das Konto | |
200 | + * angelegt. | |
201 | + * Ist sie nicht NULL so wird geprueft ob die zu dem konto_typ gehoert, | |
202 | + * wenn das so ist, dann wird chk_konto aufgerufen um zu pruefen | |
203 | + * ob das Konto bereits existiert, ist das nicht der Fall dann wird | |
204 | + * es angelegt, wenn ein Konto existiert, das nicht zu den gemachten | |
205 | + * Angeben passt, dann wird eine Fehlermeldung zurueckgegeben. | |
206 | + * ACHTUNG: Hier wird natuerlich noch nicht inc_ref_count_erhoeht, | |
207 | + * da noch keine referenz auf das konto existiert. | |
208 | + * Das heißt, wenn ein naechster update auf used_konten | |
209 | + * nicht den ref_count (used) auf mindestens eins setzt | |
210 | + * wird das Konto wieder unmittelbar geloescht. | |
211 | + * | |
212 | + * returns: 0: wenn die Person nicht eingefuegt werden kann | |
213 | + * >0: wenn die Person eingefuegt werden konnte oder bereits | |
214 | + * existierte, gibt id_person zurück. | |
215 | + */ | |
216 | + | |
217 | + DECLARE | |
218 | + ktn fibu.konto.kto_nr%TYPE; | |
219 | + row fibu.used_konten%ROWTYPE; | |
220 | + BEGIN | |
221 | + IF $1 IS NOT NULL THEN | |
222 | + select INTO ktn fibu.chk_konto($1,$2,$3,$4,$5,$6); | |
223 | + | |
224 | + IF ktn < 0 THEN | |
225 | + RETURN 0; | |
226 | + END IF; | |
227 | + ELSE | |
228 | + ktn := 0; | |
229 | + | |
230 | + PERFORM * from fibu.konten_typen where mask=$3; | |
231 | + IF NOT FOUND THEN | |
232 | + RETURN 0; | |
233 | + END IF; | |
234 | + END IF; | |
235 | + | |
236 | + IF ktn = 0 THEN | |
237 | + IF $1 IS NULL THEN | |
238 | + select INTO row * from fibu.used_konten where | |
239 | + konto_typ=$3 and used=0; | |
240 | + | |
241 | + IF NOT FOUND THEN | |
242 | + RETURN 0; | |
243 | + ELSE | |
244 | + ktn := row.kto_nr; | |
245 | + END IF; | |
246 | + ELSE | |
247 | + ktn := $1; | |
248 | + END IF; | |
249 | + | |
250 | + insert into fibu.konto | |
251 | + (kto_nr,name,konto_typ,blz,b_kto_nr,b_name) values | |
252 | + (ktn,$2,$3,$4,$5,$6); | |
253 | + END IF; | |
254 | + | |
255 | + RETURN ktn; | |
256 | + END; | |
257 | + ' language 'plpgsql'; | |
258 | +-- ] | |
259 | +-- Ende allgemeine Funktionen -- | ... | ... |
plpgsql_funcs/cr_func_kunde.sql
0 → 100755
plpgsql_funcs/cr_func_land.sql
0 → 100755
1 | +-- Funktionen um Laender zu verwalten -- | |
2 | +-- [ | |
3 | +create function "chk_land" (text,varchar(3),varchar(4)) | |
4 | + returns int4 as ' | |
5 | + /* | |
6 | + * chk_land(land, lnd_kz, vorwahl_l) | |
7 | + * | |
8 | + * ueberpruefen ob das Land schon in der DB gespeichert ist. | |
9 | + * | |
10 | + * returns: -1: falsche Parameter | |
11 | + * -2: Inkonsistenz endeckt. Es existiert bereits ein | |
12 | + * Land mit dem einer, aber nicht alle der Parameter | |
13 | + * uebereinstimmen | |
14 | + * 0: Land existiert noch nicht in der DB | |
15 | + * >0: Land existiert bereits, gibt id_land zurueck. | |
16 | + */ | |
17 | + | |
18 | + DECLARE | |
19 | + idl adresse.land%ROWTYPE; | |
20 | + BEGIN | |
21 | + IF $1 IS NULL OR $1 = '''' OR | |
22 | + $2 IS NULL OR $2 = '''' OR | |
23 | + $3 IS NULL OR $3 = '''' THEN | |
24 | + RETURN -1; | |
25 | + END IF; | |
26 | + | |
27 | + /* | |
28 | + * Jeder der Teile is unique, existiert also einer der Teile | |
29 | + * schon aber mit anderen Partnern dann is ein Fehler aufgetreten. | |
30 | + */ | |
31 | + select INTO idl * from adresse.land where | |
32 | + land = $1 or | |
33 | + lnd_kz = $2 or | |
34 | + vorwahl_l = $3; | |
35 | + | |
36 | + IF NOT FOUND THEN | |
37 | + RETURN 0; | |
38 | + ELSE | |
39 | + IF idl.land <> $1 OR idl.lnd_kz <> $2 OR | |
40 | + idl.vorwahl_l <> $3 THEN | |
41 | + RETURN -2; | |
42 | + END IF; | |
43 | + END IF; | |
44 | + | |
45 | + RETURN idl._id_; | |
46 | + END; | |
47 | + ' language 'plpgsql'; | |
48 | + | |
49 | +create function "ins_land" (text,varchar(3),varchar(4)) | |
50 | + returns int4 as ' | |
51 | + /* | |
52 | + * ins_land(land, lnd_kz, vorwahl_l) | |
53 | + * | |
54 | + * fuegt ein Land in die DB ein sofern es nicht schon existiert, | |
55 | + * inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast | |
56 | + * sind. | |
57 | + * | |
58 | + * returns: 0: wenn das Land nicht eingefuegt werden kann | |
59 | + * >0: wenn das Land eingefuegt werden konnte oder bereits | |
60 | + * existierte, gibt id_land zurueck. | |
61 | + */ | |
62 | + | |
63 | + DECLARE | |
64 | + id_land adresse.land._id_%TYPE; | |
65 | + BEGIN | |
66 | + /* | |
67 | + * Daten ueberpruefen (siehe chk_land) | |
68 | + */ | |
69 | + select INTO id_land adresse.chk_land($1, $2, $3); | |
70 | + | |
71 | + IF id_land < 0 THEN | |
72 | + RETURN 0; | |
73 | + ELSE | |
74 | + IF id_land = 0 THEN | |
75 | + insert into adresse.land (land, lnd_kz, vorwahl_l) | |
76 | + values ($1, $2, $3); | |
77 | + | |
78 | + select INTO id_land adresse.chk_land($1, $2, $3); | |
79 | + END IF; | |
80 | + END IF; | |
81 | + | |
82 | + RETURN id_land; | |
83 | + END; | |
84 | + ' language 'plpgsql'; | |
85 | + | |
86 | +create function "id_land_by_land" (text) | |
87 | + returns int4 as ' | |
88 | + /* | |
89 | + * get_id_land_by_land(land) | |
90 | + * | |
91 | + * Ermittelt die id (id_land) eines in der DB enthaltenen Landes | |
92 | + * anhand seiner Bezeuchnung (land.land) | |
93 | + * | |
94 | + * returns: 0: wenn das Land nicht eingefuegt werden kann | |
95 | + * >0: wenn das Land gefunden wurde, gibt id_land zurueck. | |
96 | + */ | |
97 | + | |
98 | + DECLARE | |
99 | + idl adresse.land._id_%TYPE; | |
100 | + BEGIN | |
101 | + select INTO idl _id_ from adresse.land where | |
102 | + land = $1; | |
103 | + | |
104 | + IF NOT FOUND THEN | |
105 | + RETURN 0; | |
106 | + ELSE | |
107 | + RETURN idl; | |
108 | + END IF; | |
109 | + END; | |
110 | + ' language 'plpgsql'; | |
111 | + | |
112 | +create function "id_land_by_lnd_kz" (varchar(3)) | |
113 | + returns int4 as ' | |
114 | + /* | |
115 | + * get_id_land_by_lnd_kz(lnd_kz) | |
116 | + * | |
117 | + * Ermittelt die id (id_land) eines in der DB enthaltenen Landes | |
118 | + * anhand des internationalen Kennzeichens (land.lnd_kz) | |
119 | + * | |
120 | + * returns: 0: wenn das Land nicht eingefuegt werden kann | |
121 | + * >0: wenn das Land gefunden wurde, gibt id_land zurueck. | |
122 | + */ | |
123 | + | |
124 | + DECLARE | |
125 | + idl adresse.land._id_%TYPE; | |
126 | + BEGIN | |
127 | + select INTO idl _id_ from adresse.land where | |
128 | + lnd_kz = $1; | |
129 | + | |
130 | + IF NOT FOUND THEN | |
131 | + RETURN 0; | |
132 | + ELSE | |
133 | + RETURN idl; | |
134 | + END IF; | |
135 | + END; | |
136 | + ' language 'plpgsql'; | |
137 | + | |
138 | +create function "id_land_by_vorwahl_l" (varchar(4)) | |
139 | + returns int4 as ' | |
140 | + /* | |
141 | + * get_id_land_by_vorwahl_l(vorwahl_l) | |
142 | + * | |
143 | + * Ermittelt die id (id_land) eines in der DB enthaltenen Landes | |
144 | + * anhand die internationalen Laendervorwahl (land.land_kz) | |
145 | + * | |
146 | + * returns: 0: wenn das Land nicht eingefuegt werden kann | |
147 | + * >0: wenn das Land gefunden wurde, gibt id_land zurueck. | |
148 | + */ | |
149 | + | |
150 | + DECLARE | |
151 | + idl adresse.land._id_%TYPE; | |
152 | + BEGIN | |
153 | + select INTO idl _id_ from adresse.land where | |
154 | + vorwahl_l = $1; | |
155 | + | |
156 | + IF NOT FOUND THEN | |
157 | + RETURN 0; | |
158 | + ELSE | |
159 | + RETURN idl; | |
160 | + END IF; | |
161 | + END; | |
162 | + ' language 'plpgsql'; | |
163 | +-- ] | |
164 | +-- Ende Laender -- | ... | ... |
plpgsql_funcs/cr_func_ort.sql
0 → 100755
1 | +-- Funktionen um Orte zu verwalten -- | |
2 | +-- [ | |
3 | +create function "chk_ort" (text,varchar(10),int4) | |
4 | + returns int4 as ' | |
5 | + /* | |
6 | + * chk_ort(ort, vorwahl_o, id_land) | |
7 | + * | |
8 | + * ueberpruefen ob der Ort schon in der DB gespeichert ist. | |
9 | + * | |
10 | + * returns: -1: falsche Parameter | |
11 | + * -2: Inkonsistenz endeckt. Es existiert bereits ein | |
12 | + * Ort mit dem einer, aber nicht alle der Parameter | |
13 | + * übereinstimmen | |
14 | + * 0: Ort existiert noch nicht in der DB | |
15 | + * >0: Ort existiert bereits, gibt id_ort zurück. | |
16 | + */ | |
17 | + | |
18 | + DECLARE | |
19 | + ido adresse.ort%ROWTYPE; | |
20 | + BEGIN | |
21 | + IF $2 IS NULL OR $2 = '''' OR | |
22 | + $3 IS NULL OR $3 < 1 THEN | |
23 | + RETURN -1; | |
24 | + END IF; | |
25 | + | |
26 | + -- | |
27 | + -- OK, also zu jeder Kombination (vorwahl_o und id_land) kann | |
28 | + -- es nur einen Ort geben. | |
29 | + -- | |
30 | + select INTO ido * from adresse.ort where | |
31 | + vorwahl_o = $2 and | |
32 | + id_land = $3; | |
33 | + | |
34 | + IF NOT FOUND THEN | |
35 | + RETURN 0; | |
36 | + ELSE | |
37 | + IF ido.ort <> $1 THEN | |
38 | + RETURN -1; | |
39 | + END IF; | |
40 | + END IF; | |
41 | + | |
42 | + RETURN ido._id_; | |
43 | + END; | |
44 | + ' language 'plpgsql'; | |
45 | + | |
46 | +create function "ins_ort" (text,varchar(10),int4) | |
47 | + returns int4 as ' | |
48 | + /* | |
49 | + * ins_land(ort, vorwahl_o, id_land) | |
50 | + * | |
51 | + * fügt einen Ort in die DB ein sofern es nicht schon existiert, | |
52 | + * Inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast | |
53 | + * sind. | |
54 | + * | |
55 | + * returns: 0: wenn der Ort nicht eingefuegt werden kann | |
56 | + * >0: wenn der Ort eingefuegt werden konnte oder bereits | |
57 | + * existierte, gibt id_ort zurück. | |
58 | + */ | |
59 | + | |
60 | + DECLARE | |
61 | + id_ort adresse.ort._id_%TYPE; | |
62 | + BEGIN | |
63 | + select INTO id_ort adresse.chk_ort($1, $2, $3); | |
64 | + | |
65 | + IF id_ort = -1 THEN | |
66 | + RETURN 0; | |
67 | + ELSE | |
68 | + IF id_ort = 0 THEN | |
69 | + insert into adresse.ort (ort, vorwahl_o, id_land) | |
70 | + values ($1, $2, $3); | |
71 | + | |
72 | + select INTO id_ort adresse.chk_ort($1, $2, $3); | |
73 | + END IF; | |
74 | + END IF; | |
75 | + | |
76 | + RETURN id_ort; | |
77 | + END; | |
78 | + ' language 'plpgsql'; | |
79 | + | |
80 | +create function "id_ort" (varchar(10),int4) | |
81 | + returns int4 as ' | |
82 | + /* | |
83 | + * get_id_ort_by_ukey1(vorwahl_o, id_land) | |
84 | + * | |
85 | + * Ermittelt die id (id_ort) eines in der DB enthaltenen Orts | |
86 | + * anhand des Primaerschluessels (vorwahl_o, id_land) | |
87 | + * | |
88 | + * returns: 0: wenn das Land nicht eingefuegt werden kann | |
89 | + * >0: wenn das Land gefunden wurde, gibt id_land zurück. | |
90 | + */ | |
91 | + | |
92 | + DECLARE | |
93 | + ido adresse.ort._id_%TYPE; | |
94 | + BEGIN | |
95 | + select INTO ido adresse.chk_ort(NULL, $1, $2); | |
96 | + | |
97 | + RETURN ido; | |
98 | + END; | |
99 | + ' language 'plpgsql'; | |
100 | +-- ] | |
101 | +-- Ende Orte -- | ... | ... |
plpgsql_funcs/cr_func_person.sql
0 → 100755
1 | +-- Funktionen um Personen zu verwalten -- | |
2 | +-- [ | |
3 | +create function "chk_person" (varchar(10),text,text,text,text, | |
4 | + varchar(10),varchar(10),varchar(10),varchar(50), | |
5 | + varchar(50), varchar(100)) | |
6 | + returns int4 as ' | |
7 | + /* | |
8 | + * chk_person(anrede, titel, nachname, vorname, geb_dat, | |
9 | + * postfach, telefon, fax, handy, | |
10 | + * email, webpage) | |
11 | + * | |
12 | + * ueberpruefen ob die Person schon in der DB gespeichert ist. | |
13 | + * | |
14 | + * returns: -1: falsche Parameter | |
15 | + * -2: Inkonsistenz endeckt. Es existiert bereits eine | |
16 | + * Person mit dem einer, aber nicht alle der Parameter | |
17 | + * übereinstimmen | |
18 | + * 0: Person existiert noch nicht in der DB | |
19 | + * >0: Person existiert bereits, gibt id_person zurück. | |
20 | + */ | |
21 | + | |
22 | + DECLARE | |
23 | + idp person.person%ROWTYPE; | |
24 | + BEGIN | |
25 | + IF $3 IS NULL OR $3 = '''' OR | |
26 | + $4 IS NULL OR $4 = '''' OR | |
27 | + $5 IS NULL OR $5 = '''' THEN | |
28 | + RETURN -1; | |
29 | + END IF; | |
30 | + | |
31 | + select INTO idp * from person.person where | |
32 | + nachname = $3 and vorname = $4 and | |
33 | + geb_dat = $5::date; | |
34 | + | |
35 | + IF NOT FOUND THEN | |
36 | + RETURN 0; | |
37 | + ELSE | |
38 | + IF idp.anrede <> $1 OR idp.titel <> $2 OR | |
39 | + idp.postfach <> $6 OR idp.telefon <> $7 OR | |
40 | + idp.fax <> $8 OR idp.handy <> $9 OR | |
41 | + idp.email <> $10 OR idp.webpage <> $11 THEN | |
42 | + RETURN -2; | |
43 | + END IF; | |
44 | + END IF; | |
45 | + | |
46 | + RETURN idp._id_; | |
47 | + END; | |
48 | + ' language 'plpgsql'; | |
49 | + | |
50 | +create function "ins_person" (varchar(10),text,text,text,text, | |
51 | + varchar(10),varchar(10),varchar(10),varchar(50), | |
52 | + varchar(50),varchar(100)) | |
53 | + returns int4 as ' | |
54 | + /* | |
55 | + * ins_person(anrede, titel, nachname, vorname, geb_dat, | |
56 | + * postfach, telefon, fax, handy, | |
57 | + * email, webpage) | |
58 | + * | |
59 | + * fügt eine Person in die DB ein sofern es nicht schon existiert, | |
60 | + * inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast | |
61 | + * sind. | |
62 | + * | |
63 | + * returns: 0: wenn die Person nicht eingefuegt werden kann | |
64 | + * >0: wenn die Person eingefuegt werden konnte oder bereits | |
65 | + * existierte, gibt id_person zurück. | |
66 | + */ | |
67 | + | |
68 | + DECLARE | |
69 | + idp person.person._id_%TYPE; | |
70 | + BEGIN | |
71 | + select INTO idp person.chk_person($1,$2,$3,$4,$5,$6,$7,$8,$9, | |
72 | + $10,$11); | |
73 | + | |
74 | + IF idp < 0 THEN | |
75 | + RETURN 0; | |
76 | + ELSE | |
77 | + IF idp = 0 THEN | |
78 | + insert into person.person (anrede,titel,nachname,vorname, | |
79 | + geb_dat,postfach,telefon,fax, | |
80 | + handy,email,webpage) | |
81 | + values ($1,$2,$3,$4,$5::date,$6,$7,$8,$9,$10,$11); | |
82 | + | |
83 | + select INTO idp person.chk_person($1,$2,$3,$4,$5,$6, | |
84 | + $7,$8,$9,$10,$11); | |
85 | + END IF; | |
86 | + END IF; | |
87 | + | |
88 | + RETURN idp; | |
89 | + END; | |
90 | + ' language 'plpgsql'; | |
91 | + | |
92 | +create function "ins_person" (varchar(10),text,text,text,text, | |
93 | + varchar(10),varchar(10),varchar(10),varchar(50), | |
94 | + varchar(50),varchar(100),int4) | |
95 | + returns int4 as ' | |
96 | + /* | |
97 | + * ins_person(anrede, titel, nachname, vorname, geb_dat, | |
98 | + * postfach, telefon, fax, handy, | |
99 | + * email, webpage, id_adresse, id_abteilung) | |
100 | + * | |
101 | + * fügt eine Person in die DB ein sofern es nicht schon existiert, | |
102 | + * inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast | |
103 | + * sind. | |
104 | + * Außerdem werden schon zuordnugen zu einer Adresse und einem Arbeits | |
105 | + * platz gemacht. | |
106 | + * | |
107 | + * returns: 0: wenn die Person nicht eingefuegt werden kann | |
108 | + * >0: wenn die Person eingefuegt werden konnte oder bereits | |
109 | + * existierte, gibt id_person zurück. | |
110 | + */ | |
111 | + | |
112 | + DECLARE | |
113 | + idp person.person._id_%TYPE; | |
114 | + BEGIN | |
115 | + select INTO idp person.ins_person($1,$2,$3,$4,$5,$6,$7,$8,$9, | |
116 | + $10,$11); | |
117 | + | |
118 | + IF idp = 0 THEN | |
119 | + RETURN 0; | |
120 | + ELSE | |
121 | + PERFORM person.person_adresse(idp, $12); | |
122 | + /* | |
123 | + * Die Zuordnung zu arbeit erfordert weiter Informationen, | |
124 | + * wie Gehalt, Position u.a. darum ist eine Zuordnung hier | |
125 | + * warscheinlich nicht seht sinnvoll. Trotzdem lasse ich das | |
126 | + * hier nochmal auskommentiert stehen, vielleicht braucht man | |
127 | + * es ja doch... | |
128 | + */ | |
129 | + --select INTO tmp create_rel_person_abteilung(idp, $13);-- | |
130 | + END IF; | |
131 | + | |
132 | + RETURN idp; | |
133 | + END; | |
134 | + ' language 'plpgsql'; | |
135 | + | |
136 | +create function "person_adresse" (int4, int4) | |
137 | + returns int4 as ' | |
138 | + /* | |
139 | + * person_adresse(id_person, id_adresse) | |
140 | + * | |
141 | + * ordnet eine Person einer Adresse zu, dies passiert ueber einen | |
142 | + * Eintrag in der Relation wohnt. Es wird sichergestellt das keine | |
143 | + * inkonstistenzen auftreten (keine doppelten Zuordnungen) | |
144 | + * | |
145 | + * returns: -1: Wenn die Eingabedaten fehlerhaft waren. | |
146 | + * 0: Wenn die Zuordnung nicht gemacht werden konnte. | |
147 | + * 1: Wenn die Zuordnung gemacht wurde. | |
148 | + */ | |
149 | + | |
150 | + BEGIN | |
151 | + IF $1 IS NULL OR $1 < 1 OR | |
152 | + $2 IS NULL OR $2 < 1 THEN | |
153 | + RETURN -1; | |
154 | + END IF; | |
155 | + | |
156 | + PERFORM * from person.person where _id_ = $1; | |
157 | + IF NOT FOUND THEN | |
158 | + RETURN 0; | |
159 | + END IF; | |
160 | + | |
161 | + PERFORM * from adresse.adresse where _id_ = $2; | |
162 | + IF NOT FOUND THEN | |
163 | + RETURN 0; | |
164 | + END IF; | |
165 | + | |
166 | + PERFORM * from person.wohnt where | |
167 | + id_person = $1 and id_adresse = $2; | |
168 | + IF NOT FOUND THEN | |
169 | + insert into person.wohnt (id_person, id_adresse) | |
170 | + values ($1, $2); | |
171 | + IF NOT FOUND THEN | |
172 | + RETURN 0; | |
173 | + END IF; | |
174 | + END IF; | |
175 | + | |
176 | + RETURN 1; | |
177 | + END; | |
178 | + ' language 'plpgsql'; | |
179 | + | |
180 | +-- Da kann ich keinen view draus machen, da ich einen Parameter brauche. | |
181 | +create function "person_wohnt" (int4) | |
182 | + returns SETOF wohnt as ' | |
183 | + /* | |
184 | + * person_wohnt(id_person) | |
185 | + * | |
186 | + * ordnet eine Person einer Adresse zu, dies passiert ueber einen | |
187 | + * Eintrag in der Relation wohnt. Es wird sichergestellt das keine | |
188 | + * inkonstistenzen auftreten (keine doppelten Zuordnungen) | |
189 | + * Wird fuer id_adresse NULL oder ein Wert < 1 eingegeben, so sucht | |
190 | + * die Funktion nach den Ein | |
191 | + * | |
192 | + * Das ist im prinziep das selbe wie | |
193 | + * select * from wohnt where id_person=?? | |
194 | + * ich lass es trotzdem zu anschauungszwecken drin. | |
195 | + * | |
196 | + * returns: -1 (in erstem Element): Wenn die Eingabedaten fehlerhaft | |
197 | + * waren. | |
198 | + * 0 (im ersten Element): Die Person existiert nicht | |
199 | + * >0 (in allen Elementen): Jede Adresse (id_adresse) an der | |
200 | + * die Person wohnt. | |
201 | + * <EMPTY SET>: Keine Adresse gefunden. | |
202 | + */ | |
203 | + | |
204 | + DECLARE | |
205 | + idw_curs refcursor; | |
206 | + idw person.wohnt%ROWTYPE; | |
207 | + BEGIN | |
208 | + IF $1 IS NULL OR $1 < 1 THEN | |
209 | + idw.id_person := -1; | |
210 | + idw.id_adresse := -1; | |
211 | + RETURN NEXT idw; | |
212 | + RETURN; | |
213 | + END IF; | |
214 | + | |
215 | + PERFORM * from person.person where id_person = $1; | |
216 | + IF NOT FOUND THEN | |
217 | + idw.id_person := 0; | |
218 | + idw.id_adresse := 0; | |
219 | + RETURN NEXT idw; | |
220 | + RETURN; | |
221 | + END IF; | |
222 | + | |
223 | + /* | |
224 | + * Moeglichkeit 1 | |
225 | + * | |
226 | + * OPEN idw_curs FOR select * from person.wohnt where id_person = $1; | |
227 | + * | |
228 | + * FETCH idw_curs INTO idw; | |
229 | + * WHILE FOUND LOOP | |
230 | + * RETURN NEXT idw; | |
231 | + * FETCH idw_curs INTO idw; | |
232 | + * END LOOP; | |
233 | + */ | |
234 | + | |
235 | + /* | |
236 | + * Moeglichkeit 2 | |
237 | + */ | |
238 | + FOR idw IN select * from person.wohnt where id_person = $1 LOOP | |
239 | + RETURN NEXT idw; | |
240 | + END LOOP; | |
241 | + | |
242 | + RETURN; | |
243 | + END; | |
244 | + ' language 'plpgsql'; | |
245 | + | |
246 | +create function "id_person" (text, text, text) | |
247 | + returns int4 as ' | |
248 | + /* | |
249 | + * get_id_person_by_ukey1(nachname, vorname, geb_dat) | |
250 | + * | |
251 | + * Ermittelt die id (id_person) einer in der DB enthaltenen Person | |
252 | + * anhand des Primaerschluessels (nachname, vorname, geb_dat) | |
253 | + * | |
254 | + * returns: 0: wenn die Person nicht eingefuegt werden kann | |
255 | + * >0: wenn die Person gefunden wurde, gibt id_person zurück. | |
256 | + */ | |
257 | + | |
258 | + DECLARE | |
259 | + idp person.person._id_%TYPE; | |
260 | + BEGIN | |
261 | + select INTO idp _id_ from person.person where | |
262 | + nachname = $1 and vorname = $2 and geb_dat = $3::date; | |
263 | + | |
264 | + IF NOT FOUND THEN | |
265 | + RETURN 0; | |
266 | + ELSE | |
267 | + RETURN idp; | |
268 | + END IF; | |
269 | + END; | |
270 | + ' language 'plpgsql'; | |
271 | +-- ] | |
272 | +-- Ende Personendaten -- | ... | ... |
plpgsql_funcs/cr_func_waren.sql
0 → 100755
1 | +-- allgemeine Funktionen zu Waren/Warengruppen -- | |
2 | +-- [ | |
3 | +create function produkt_typ_len() | |
4 | + returns int4 as ' | |
5 | + DECLARE | |
6 | + len int4; | |
7 | + BEGIN | |
8 | + select INTO len bit_length(produkt_typ) from waren.produkt_typen; | |
9 | + | |
10 | + IF NOT FOUND THEN | |
11 | + len := 0; | |
12 | + END IF; | |
13 | + | |
14 | + RETURN len; | |
15 | + END; | |
16 | + ' language 'plpgsql'; | |
17 | + | |
18 | +create function produkt_typ(text, int4) | |
19 | + returns bit varying as ' | |
20 | + /* | |
21 | + * produkt_typ(name, len) | |
22 | + * | |
23 | + * ermittelt den produkt_typ zu einem entsprechenden namen. | |
24 | + * | |
25 | + * returns: NULL: falls der name nicht in konten_typen existiert | |
26 | + * >0: der konten_typ zu dem namen | |
27 | + */ | |
28 | + | |
29 | + DECLARE | |
30 | + row waren.produkt_typen%ROWTYPE; | |
31 | + min_len int4 := waren.produkt_typ_len(); | |
32 | + sel text; | |
33 | + BEGIN | |
34 | + IF $2 < min_len THEN | |
35 | + RAISE EXCEPTION ''len is to short''; | |
36 | + END IF; | |
37 | + | |
38 | + sel := ''select produkt_typ::BIT('' || $2 || '')>>'' || | |
39 | + $2-min_len || | |
40 | + '' from waren.produkt_typen where bezeichnung='' || | |
41 | + quote_literal($1); | |
42 | + | |
43 | + FOR row IN EXECUTE sel LOOP | |
44 | + END LOOP; | |
45 | + | |
46 | + IF NOT FOUND THEN | |
47 | + RETURN NULL; | |
48 | + ELSE | |
49 | + RETURN row.konto_typ; | |
50 | + END IF; | |
51 | + END; | |
52 | + ' language 'plpgsql'; | |
53 | + | |
54 | +create function get_warengruppe(text) | |
55 | + returns warengruppe as ' | |
56 | + DECLARE | |
57 | + row waren.warengruppe%ROWTYPE; | |
58 | + BEGIN | |
59 | + select INTO row * from waren.warengruppe where name=$1; | |
60 | + | |
61 | + IF NOT FOUND THEN | |
62 | + RETURN NULL; | |
63 | + ELSE | |
64 | + RETURN row; | |
65 | + END IF; | |
66 | + END; | |
67 | + ' language 'plpgsql'; | |
68 | + | |
69 | +create function get_warengruppe(int4) | |
70 | + returns warengruppe as ' | |
71 | + DECLARE | |
72 | + row waren.warengruppe%ROWTYPE; | |
73 | + BEGIN | |
74 | + select INTO row * from waren.warengruppe where _id_=$1; | |
75 | + | |
76 | + IF NOT FOUND THEN | |
77 | + RETURN NULL; | |
78 | + ELSE | |
79 | + RETURN row; | |
80 | + END IF; | |
81 | + END; | |
82 | + ' language 'plpgsql'; | |
83 | + | |
84 | +create function warengruppe_id(text) | |
85 | + returns int4 as ' | |
86 | + DECLARE | |
87 | + row waren.warengruppe%ROWTYPE; | |
88 | + BEGIN | |
89 | + select INTO row * from waren.warengruppe where name=$1; | |
90 | + | |
91 | + IF NOT FOUND THEN | |
92 | + RETURN NULL; | |
93 | + ELSE | |
94 | + RETURN row._id_; | |
95 | + END IF; | |
96 | + END; | |
97 | + ' language 'plpgsql'; | |
98 | +-- ] | |
99 | +-- Ende allgemeine Funktionen zu Waren/Warengruppen -- | ... | ... |
trigger_funcs/cr_trigger_func_benutzer.sql
0 → 100755
1 | +-- Trigger Funktionen zu Kunden -- | |
2 | +-- [ | |
3 | +create function on_insert_create_konten() | |
4 | + returns TRIGGER as ' | |
5 | + DECLARE | |
6 | + err_msg text; | |
7 | + BEGIN | |
8 | + IF TG_OP <> ''INSERT'' THEN | |
9 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
10 | + RAISE EXCEPTION ''%'', err_msg; | |
11 | + END IF; | |
12 | + | |
13 | + /* | |
14 | + * Die funktion ins_konto uebernimmt schon alle checks bzgl. | |
15 | + * Des Nummernbereichs, etc. fuer uns. | |
16 | + */ | |
17 | + NEW.konto1 := fibu.ins_konto(NEW.konto1, TG_ARGV[0], | |
18 | + fibu.konto_typ(TG_ARGV[0]), | |
19 | + NULL, NULL, NULL); | |
20 | + IF NEW.konto1 = 0 THEN | |
21 | + err_msg := TG_NAME || '': cannot create debitor_kto''; | |
22 | + RAISE EXCEPTION ''%'', err_msg; | |
23 | + ELSE | |
24 | + PERFORM fibu.inc_konto_ref_count(NEW.konto1); | |
25 | + END IF; | |
26 | + | |
27 | + NEW.konto2 := fibu.ins_konto(NEW.konto2, TG_ARGV[1], | |
28 | + fibu.konto_typ(TG_ARGV[1]), | |
29 | + NULL, NULL, NULL); | |
30 | + IF NEW.konto2 = 0 THEN | |
31 | + err_msg := TG_NAME || '': cannot create kreditor_kto''; | |
32 | + RAISE EXCEPTION ''%'', err_msg; | |
33 | + ELSE | |
34 | + PERFORM fibu.inc_konto_ref_count(NEW.konto2); | |
35 | + END IF; | |
36 | + | |
37 | + RETURN NEW; | |
38 | + END; | |
39 | + ' LANGUAGE 'plpgsql'; | |
40 | + | |
41 | +create function on_update_update_konten() | |
42 | + returns TRIGGER as ' | |
43 | + DECLARE | |
44 | + err_msg text; | |
45 | + range fibu.kontenplan%ROWTYPE; | |
46 | + BEGIN | |
47 | + IF TG_OP <> ''UPDATE'' THEN | |
48 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
49 | + RAISE EXCEPTION ''%'', err_msg; | |
50 | + END IF; | |
51 | + | |
52 | + IF NEW.konto1 <> OLD.konto1 THEN | |
53 | + NEW.konto1 := fibu.ins_konto(NEW.konto1,TG_ARGV[0], | |
54 | + fibu.konto_typ(TG_ARGV[0]), | |
55 | + NULL, NULL, NULL); | |
56 | + | |
57 | + IF NEW.konto1 = 0 THEN | |
58 | + err_msg := TG_NAME || '': cannot create debitor_kto''; | |
59 | + RAISE EXCEPTION ''%'', err_msg; | |
60 | + ELSE | |
61 | + PERFORM fibu.inc_konto_ref_count(NEW.konto1); | |
62 | + PERFORM fibu.dec_konto_ref_count(OLD.konto1); | |
63 | + END IF; | |
64 | + END IF; | |
65 | + | |
66 | + IF NEW.konto2 <> OLD.konto2 THEN | |
67 | + NEW.konto2 := fibu.ins_konto(NEW.konto2,TG_ARGV[1], | |
68 | + fibu.konto_typ(TG_ARGV[1]), | |
69 | + NULL, NULL, NULL); | |
70 | + | |
71 | + IF NEW.konto2 = 0 THEN | |
72 | + err_msg := TG_NAME || '': cannot create kreditor_kto''; | |
73 | + RAISE EXCEPTION ''%'', err_msg; | |
74 | + ELSE | |
75 | + PERFORM fibu.inc_konto_ref_count(NEW.konto2); | |
76 | + PERFORM fibu.dec_konto_ref_count(OLD.konto2); | |
77 | + END IF; | |
78 | + END IF; | |
79 | + | |
80 | + RETURN NEW; | |
81 | + END; | |
82 | + ' LANGUAGE 'plpgsql'; | |
83 | + | |
84 | +create function on_delete_dec_konto_ref_count() | |
85 | + returns TRIGGER as ' | |
86 | + BEGIN | |
87 | + PERFORM fibu.dec_konto_ref_count(OLD.konto1); | |
88 | + PERFORM fibu.dec_konto_ref_count(OLD.konto2); | |
89 | + | |
90 | + RETURN OLD; | |
91 | + END; | |
92 | + ' language 'plpgsql'; | |
93 | + | |
94 | +CREATE FUNCTION on_change_one_null() | |
95 | + RETURNS TRIGGER AS ' | |
96 | + DECLARE | |
97 | + err_msg text; | |
98 | + BEGIN | |
99 | + IF TG_OP = ''INSERT'' THEN | |
100 | + IF (NEW.id_person IS NULL AND NEW.id_firma IS NULL) OR | |
101 | + (NEW.id_person IS NOT NULL AND NEW.id_firma IS NOT NULL) THEN | |
102 | + err_msg := TG_NAME || '': both or none are NULL''; | |
103 | + RAISE EXCEPTION ''%'', err_msg; | |
104 | + ELSE | |
105 | + RETURN NEW; | |
106 | + END IF; | |
107 | + END IF; | |
108 | + | |
109 | + /* | |
110 | + * Bei einem update gibt es mehrere Moeglichkeiten: | |
111 | + * 1. weder id_person noch id_firma werden veraendert: | |
112 | + * Dann passiert in dieser Funktion gar nichts. | |
113 | + * 2. entweder id_person oder id_firma wird veraendert: | |
114 | + * - id_person oder id_firma werden gesetzt und das | |
115 | + * jeweils andere Feld wird auf NULL gesetzt. | |
116 | + * - sind nach dem update beide NULL wird das update nicht | |
117 | + * ausgefueht und eine Fehlermeldung ausgegeben. | |
118 | + * 3. beide werden verandert: | |
119 | + * - wird fuer beide Felder ein neuer Wert angegeben, so | |
120 | + * geht diese Funktion davon aus das das bisher NULL | |
121 | + * enthaltende Feld gesetzt werden soll (diese Situation | |
122 | + * sollte allerdings moeglichst immer vom Frontend abgefangen | |
123 | + * werden, ein Kunde kann nur entweder eine Person oder eine | |
124 | + * Firma sein, nicht beides. | |
125 | + */ | |
126 | + IF TG_OP = ''UPDATE'' THEN | |
127 | + IF OLD.id_person IS NOT NULL AND | |
128 | + NEW.id_firma IS NOT NULL THEN | |
129 | + NEW.id_person := NULL; | |
130 | + END IF; | |
131 | + IF OLD.id_firma IS NOT NULL AND | |
132 | + NEW.id_person IS NOT NULL THEN | |
133 | + NEW.id_firma := NULL; | |
134 | + END IF; | |
135 | + | |
136 | + IF NEW.id_person IS NULL AND NEW.id_FIRMA IS NULL THEN | |
137 | + RAISE EXCEPTION ''change_kunde_trigger: both are NULL''; | |
138 | + END IF; | |
139 | + | |
140 | + RETURN NEW; | |
141 | + END IF; | |
142 | + | |
143 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
144 | + RAISE EXCEPTION ''%'', err_msg; | |
145 | + END; | |
146 | + ' LANGUAGE 'plpgsql'; | |
147 | + | |
148 | +CREATE FUNCTION on_change_one_null2() | |
149 | + RETURNS TRIGGER AS ' | |
150 | + DECLARE | |
151 | + err_msg text; | |
152 | + BEGIN | |
153 | + IF TG_OP = ''INSERT'' THEN | |
154 | + IF (NEW.id_person IS NULL AND | |
155 | + NEW.id_firma IS NULL AND | |
156 | + NEW.id_benutzer IS NULL) OR | |
157 | + (NEW.id_person IS NOT NULL AND | |
158 | + NEW.id_benutzer IS NOT NULL) OR | |
159 | + (NEW.id_firma IS NOT NULL AND | |
160 | + NEW.id_benutzer IS NOT NULL) OR | |
161 | + (NEW.id_firma IS NOT NULL AND | |
162 | + NEW.id_person IS NOT NULL) THEN | |
163 | + err_msg := TG_NAME || '': all or none are NULL''; | |
164 | + RAISE EXCEPTION ''%'', err_msg; | |
165 | + ELSE | |
166 | + RETURN NEW; | |
167 | + END IF; | |
168 | + END IF; | |
169 | + | |
170 | + IF TG_OP = ''UPDATE'' THEN | |
171 | + IF OLD.id_person IS NOT NULL AND | |
172 | + (NEW.id_firma IS NOT NULL OR | |
173 | + NEW.id_benutzer IS NOT NULL) THEN | |
174 | + NEW.id_person := NULL; | |
175 | + END IF; | |
176 | + IF OLD.id_firma IS NOT NULL AND | |
177 | + (NEW.id_person IS NOT NULL OR | |
178 | + NEW id_benutzer IS NOT NULL) THEN | |
179 | + NEW.id_firma := NULL; | |
180 | + END IF; | |
181 | + IF OLD.id_benutzer IS NOT NULL AND | |
182 | + (NEW.id_person IS NOT NULL OR | |
183 | + NEW.id_firma IS NOT NULL) THEN | |
184 | + NEW.id_benutzer := NULL; | |
185 | + END IF; | |
186 | + | |
187 | + IF NEW.id_person IS NULL AND | |
188 | + NEW.id_firma IS NULL AND | |
189 | + NEW.id_benutzer IS NULL THEN | |
190 | + RAISE EXCEPTION ''change_kunde_trigger: all are NULL''; | |
191 | + END IF; | |
192 | + | |
193 | + RETURN NEW; | |
194 | + END IF; | |
195 | + | |
196 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
197 | + RAISE EXCEPTION ''%'', err_msg; | |
198 | + END; | |
199 | + ' LANGUAGE 'plpgsql'; | |
200 | +-- ] | |
201 | +-- Ende Triggerfunktionen zu Kunden -- | ... | ... |
trigger_funcs/cr_trigger_func_generic.sql
0 → 100755
1 | +-- allgemeine Trigger-Funtionen | |
2 | +-- [ | |
3 | +create function set_history() | |
4 | + returns TRIGGER as ' | |
5 | + DECLARE | |
6 | + usern text; | |
7 | + table_natts int4; | |
8 | + table_col_curs refcursor; | |
9 | + table_schema text; | |
10 | + table_schema_oid int4; | |
11 | + row_oid int4; | |
12 | + oid_bit int4; | |
13 | + oid_varbit int4; | |
14 | + col_name text; | |
15 | + col_names text := ''{''; | |
16 | + col_typ int4; | |
17 | + col_typ_name text; | |
18 | + col_types text := ''{''; | |
19 | + col_val text; | |
20 | + col_vals text := ''{''; | |
21 | + dummy_text RECORD; | |
22 | + dummy_bit RECORD; | |
23 | + query text; | |
24 | + BEGIN | |
25 | + usern := user; | |
26 | + | |
27 | + select into table_natts relnatts from pg_catalog.pg_class where | |
28 | + relname=TG_RELNAME; | |
29 | + select into oid_bit oid from pg_catalog.pg_type where | |
30 | + typname=''bit''; | |
31 | + select into oid_varbit oid from pg_catalog.pg_type where | |
32 | + typname=''varbit''; | |
33 | + select into table_schema_oid relnamespace | |
34 | + from pg_catalog.pg_class where relname=TG_RELNAME; | |
35 | + select into table_schema nspname from pg_catalog.pg_namespace where | |
36 | + oid=table_schema_oid; | |
37 | + | |
38 | + OPEN table_col_curs FOR select attname,atttypid from | |
39 | + pg_catalog.pg_attribute where attrelid=TG_RELID; | |
40 | + | |
41 | + FOR i IN 1..7 LOOP | |
42 | + FETCH table_col_curs INTO col_name,col_typ; | |
43 | + END LOOP; | |
44 | + | |
45 | + FOR i IN 1..table_natts LOOP | |
46 | + FETCH table_col_curs INTO col_name,col_typ; | |
47 | + col_names := col_names || quote_literal(col_name); | |
48 | + | |
49 | + select into col_typ_name typname from pg_catalog.pg_type where | |
50 | + oid=col_typ; | |
51 | + | |
52 | + col_types := col_types || quote_literal(col_typ_name); | |
53 | + | |
54 | + IF col_typ = oid_bit OR | |
55 | + col_typ = oid_varbit THEN | |
56 | + query := ''select '' || col_name || '' as val from '' || | |
57 | + table_schema || ''.'' || TG_RELNAME || | |
58 | + '' where oid=''; | |
59 | + ELSE | |
60 | + query := ''select '' || col_name || ''::text as val '' || | |
61 | + ''from '' || table_schema || ''.'' || | |
62 | + TG_RELNAME || '' where oid=''; | |
63 | + END IF; | |
64 | + | |
65 | + IF TG_OP = ''INSERT'' OR | |
66 | + TG_OP = ''UPDATE'' THEN | |
67 | + query := query || NEW.oid; | |
68 | + row_oid := NEW.oid; | |
69 | + ELSE | |
70 | + query := query || OLD.oid; | |
71 | + row_oid := OLD.oid; | |
72 | + END IF; | |
73 | + | |
74 | + IF col_typ = oid_bit OR | |
75 | + col_typ = oid_varbit THEN | |
76 | + FOR dummy_bit IN EXECUTE query LOOP | |
77 | + IF dummy_bit.val IS NOT NULL THEN | |
78 | + col_vals := col_vals || | |
79 | + quote_literal(public.bit2text(dummy_bit.val)); | |
80 | + END IF; | |
81 | + END LOOP; | |
82 | + ELSE | |
83 | + FOR dummy_text IN EXECUTE query LOOP | |
84 | + IF dummy_text.val IS NOT NULL THEN | |
85 | + col_vals := col_vals || | |
86 | + quote_literal(dummy_text.val::text); | |
87 | + END IF; | |
88 | + END LOOP; | |
89 | + END IF; | |
90 | + | |
91 | + IF i <> table_natts THEN | |
92 | + col_names := col_names || '',''; | |
93 | + col_types := col_types || '',''; | |
94 | + col_vals := col_vals || '',''; | |
95 | + ELSE | |
96 | + col_names := col_names || ''}''; | |
97 | + col_types := col_types || ''}''; | |
98 | + col_vals := col_vals || ''}''; | |
99 | + END IF; | |
100 | + END LOOP; | |
101 | + | |
102 | + -- IF query IS NOT NULL THEN | |
103 | + -- insert into public.history (username,time,tab,row_oid,at_time, | |
104 | + -- operation,col_names,col_types, | |
105 | + -- col_vals) | |
106 | + -- values (quote_literal(usern), | |
107 | + -- quote_literal(''now''), | |
108 | + -- quote_literal(TG_RELNAME), | |
109 | + -- quote_literal(row_oid), | |
110 | + -- quote_literal(TG_WHEN), | |
111 | + -- quote_literal(TG_OP), | |
112 | + -- quote_literal(col_names), | |
113 | + -- quote_literal(col_types), | |
114 | + -- quote_literal(col_vals)); | |
115 | + -- END IF; | |
116 | + | |
117 | + query := ''insert into public.history (username,time,tab,'' || | |
118 | + ''row_oid,at_time,operation,col_names,col_types,'' || | |
119 | + ''col_vals) values ('' || | |
120 | + quote_literal(usern) || '','' || | |
121 | + quote_literal(''now'') || '','' || | |
122 | + quote_literal(TG_RELNAME) || '','' || | |
123 | + quote_literal(row_oid) || '','' || | |
124 | + quote_literal(TG_WHEN) || '','' || | |
125 | + quote_literal(TG_OP) || '','' || | |
126 | + quote_literal(col_names) || '','' || | |
127 | + quote_literal(col_types) || '','' || | |
128 | + quote_literal(col_vals) || '')''; | |
129 | + | |
130 | + IF query IS NOT NULL THEN | |
131 | + EXECUTE query; | |
132 | + ELSE | |
133 | + RAISE NOTICE ''Found null query:''; | |
134 | + RAISE NOTICE ''query: %'', query; | |
135 | + RAISE NOTICE ''user: %'', usern; | |
136 | + RAISE NOTICE ''TG_RELNAME: %'', TG_RELNAME; | |
137 | + RAISE NOTICE ''row_oid: %'', row_oid; | |
138 | + RAISE NOTICE ''TG_WHEN: %'', TG_WHEN; | |
139 | + RAISE NOTICE ''TG_OP: %'', TG_OP; | |
140 | + RAISE NOTICE ''col_names: %'', col_names; | |
141 | + RAISE NOTICE ''col_vals: %'', col_vals; | |
142 | + RAISE NOTICE ''col_types: %'', col_types; | |
143 | + END IF; | |
144 | + | |
145 | + IF TG_OP = ''INSERT'' OR | |
146 | + TG_OP = ''UPDATE'' THEN | |
147 | + RETURN NEW; | |
148 | + ELSE | |
149 | + RETURN OLD; | |
150 | + END IF; | |
151 | + END; | |
152 | + ' language 'plpgsql'; | |
153 | + | |
154 | +create function create_valid_mask_before() | |
155 | + returns TRIGGER as ' | |
156 | + /* | |
157 | + Aufgrund vin beschraenkungen in plpgsql muessen alle Bitmasken | |
158 | + mask heissen....zumindest in den Tabellen fuer die diese Triggerfunc | |
159 | + arbeiten soll....das gilt ebenso fuer jeden weiteren universellen | |
160 | + Trigger, sie koennen immer nur funktionieren wenn die Spalten | |
161 | + name wohldefiniert sind. | |
162 | + */ | |
163 | + DECLARE | |
164 | + err_msg text; | |
165 | + new_len int4; | |
166 | + old_len int4; | |
167 | + dummy RECORD; | |
168 | + sel text; | |
169 | + BEGIN | |
170 | + IF TG_OP <> ''UPDATE'' AND TG_OP <> ''INSERT'' THEN | |
171 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
172 | + RAISE EXCEPTION ''%'', err_msg; | |
173 | + END IF; | |
174 | + | |
175 | + new_len := bit_length(NEW.mask); | |
176 | + IF TG_OP = ''UPDATE'' THEN | |
177 | + old_len := bit_length(OLD.mask); | |
178 | + ELSE | |
179 | + sel := ''select public.mask_len('' || | |
180 | + quote_literal(TG_ARGV[0]) || '', '' || | |
181 | + quote_literal(''mask'') || '',NULL) as len''; | |
182 | + FOR dummy IN EXECUTE sel LOOP | |
183 | + EXIT; | |
184 | + END LOOP; | |
185 | + IF NOT FOUND THEN | |
186 | + old_len := 0; | |
187 | + ELSE | |
188 | + old_len := dummy.len; | |
189 | + END IF; | |
190 | + END IF; | |
191 | + | |
192 | + IF new_len < old_len THEN | |
193 | + NEW.mask := bit_set_len(NEW.mask, old_len); | |
194 | + END IF; | |
195 | + | |
196 | + RETURN NEW; | |
197 | + END; | |
198 | + ' language 'plpgsql'; | |
199 | + | |
200 | +create function create_valid_mask_after() | |
201 | + returns TRIGGER as ' | |
202 | + /* | |
203 | + Aufgrund von beschraenkungen in plpgsql muessen alle Bitmasken | |
204 | + mask heissen....zumindest in den Tabellen fuer die diese Triggerfunc | |
205 | + arbeiten soll....das gilt ebenso fuer jeden weiteren universellen | |
206 | + Trigger, sie koennen immer nur funktionieren wenn die Spalten | |
207 | + name wohldefiniert sind. | |
208 | + */ | |
209 | + DECLARE | |
210 | + err_msg text; | |
211 | + new_len int4; | |
212 | + old_len int4; | |
213 | + dummy RECORD; | |
214 | + sel text; | |
215 | + BEGIN | |
216 | + IF TG_OP <> ''UPDATE'' AND TG_OP <> ''INSERT'' THEN | |
217 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
218 | + RAISE EXCEPTION ''%'', err_msg; | |
219 | + END IF; | |
220 | + | |
221 | + new_len := bit_length(NEW.mask); | |
222 | + IF TG_OP = ''UPDATE'' THEN | |
223 | + old_len := bit_length(OLD.mask); | |
224 | + ELSE | |
225 | + sel := ''select public.mask_len('' || | |
226 | + quote_literal(TG_ARGV[0]) || '', '' || | |
227 | + quote_literal(''mask'') || '',NULL) as len''; | |
228 | + FOR dummy IN EXECUTE sel LOOP | |
229 | + EXIT; | |
230 | + END LOOP; | |
231 | + IF NOT FOUND THEN | |
232 | + old_len := 0; | |
233 | + ELSE | |
234 | + old_len := dummy.len; | |
235 | + END IF; | |
236 | + END IF; | |
237 | + | |
238 | + sel := ''select mask from '' || TG_ARGV[0] || | |
239 | + '' where bit_length(mask)<>'' || new_len; | |
240 | + | |
241 | + FOR dummy IN EXECUTE sel LOOP | |
242 | + EXECUTE ''update '' || TG_ARGV[0] || '' set mask='' || | |
243 | + ''mask::BIT('' || new_len || '')>>'' || | |
244 | + new_len-old_len || '' where mask=B'' || | |
245 | + quote_literal(public.bit2text(dummy.mask)); | |
246 | + EXIT; | |
247 | + END LOOP; | |
248 | + | |
249 | + RETURN NEW; | |
250 | + END; | |
251 | + ' language 'plpgsql'; | |
252 | + | |
253 | +-- ] | |
254 | +-- Ende allgemeine Triggerfunktionen | ... | ... |
trigger_funcs/cr_trigger_func_konto.sql
0 → 100755
1 | +-- Trigger Funktionen zu Konten -- | |
2 | +-- [ | |
3 | +create function on_ref_count_null_del_konto() | |
4 | + returns TRIGGER as ' | |
5 | + DECLARE | |
6 | + err_msg text; | |
7 | + konto fibu.konto%ROWTYPE; | |
8 | + BEGIN | |
9 | + IF TG_OP <> ''UPDATE'' THEN | |
10 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
11 | + RAISE EXCEPTION ''%'', err_msg; | |
12 | + END IF; | |
13 | + | |
14 | + IF NEW.used = 0 THEN | |
15 | + select INTO konto * from fibu.konto where kto_nr=NEW.kto_nr; | |
16 | + | |
17 | + IF FOUND THEN | |
18 | + delete from fibu.konto where kto_nr=NEW.kto_nr; | |
19 | + END IF; | |
20 | + END IF; | |
21 | + | |
22 | + RETURN NEW; | |
23 | + END; | |
24 | + ' language 'plpgsql'; | |
25 | + | |
26 | +create function on_change_kontenplan_check_ranges() | |
27 | + returns TRIGGER as ' | |
28 | + DECLARE | |
29 | + kontenplan_row fibu.kontenplan%ROWTYPE; | |
30 | + err_msg text; | |
31 | + BEGIN | |
32 | + IF TG_OP = ''INSERT'' THEN | |
33 | + FOR kontenplan_row IN select * from fibu.kontenplan LOOP | |
34 | + IF (NEW.nr_von >= kontenplan_row.nr_von AND | |
35 | + NEW.nr_von <= kontenplan_row.nr_bis) OR | |
36 | + (NEW.nr_bis >= kontenplan_row.nr_von AND | |
37 | + NEW.nr_bis <= kontenplan_row.nr_bis) OR | |
38 | + (NEW.nr_von < kontenplan_row.nr_von AND | |
39 | + NEW.nr_bis > kontenplan_row.nr_bis) THEN | |
40 | + RAISE EXCEPTION ''range violation''; | |
41 | + END IF; | |
42 | + END LOOP; | |
43 | + | |
44 | + RETURN NEW; | |
45 | + END IF; | |
46 | + | |
47 | + IF TG_OP = ''UPDATE'' THEN | |
48 | + FOR kontenplan_row IN | |
49 | + select * from fibu.kontenplan where _id_<>NEW._id_ | |
50 | + LOOP | |
51 | + IF (NEW.nr_von >= kontenplan_row.nr_von AND | |
52 | + NEW.nr_von <= kontenplan_row.nr_bis) OR | |
53 | + (NEW.nr_bis >= kontenplan_row.nr_von AND | |
54 | + NEW.nr_bis <= kontenplan_row.nr_bis) OR | |
55 | + (NEW.nr_von < kontenplan_row.nr_von AND | |
56 | + NEW.nr_bis > kontenplan_row.nr_bis) THEN | |
57 | + RAISE EXCEPTION ''range violation''; | |
58 | + END IF; | |
59 | + END LOOP; | |
60 | + RETURN NEW; | |
61 | + END IF; | |
62 | + | |
63 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
64 | + RAISE EXCEPTION ''%'', err_msg; | |
65 | + END; | |
66 | + ' language 'plpgsql'; | |
67 | + | |
68 | +create function on_insert_kontenplan_create_used_konten() | |
69 | + returns TRIGGER as ' | |
70 | + DECLARE | |
71 | + err_msg text; | |
72 | + i fibu.kontenplan.nr_von%TYPE; | |
73 | + BEGIN | |
74 | + IF TG_OP <> ''INSERT'' THEN | |
75 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
76 | + RAISE EXCEPTION ''%'', err_msg; | |
77 | + END IF; | |
78 | + | |
79 | + FOR i IN NEW.nr_von..NEW.nr_bis LOOP | |
80 | + insert into fibu.used_konten (kto_nr, used, konto_typ) | |
81 | + values (i, 0, NEW.konto_typ); | |
82 | + END LOOP; | |
83 | + | |
84 | + RETURN NEW; | |
85 | + END; | |
86 | + ' language 'plpgsql'; | |
87 | + | |
88 | +create function on_update_kontenplan_upd_used_konten() | |
89 | + returns TRIGGER as ' | |
90 | + DECLARE | |
91 | + err_msg text; | |
92 | + von fibu.kontenplan.nr_von%TYPE; | |
93 | + bis fibu.kontenplan.nr_bis%TYPE; | |
94 | + displacement fibu.kontenplan.nr_von%TYPE; | |
95 | + count fibu.kontenplan.nr_von%TYPE; | |
96 | + i fibu.kontenplan.nr_von%TYPE; | |
97 | + BEGIN | |
98 | + IF TG_OP <> ''UPDATE'' THEN | |
99 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
100 | + RAISE EXCEPTION ''%'', err_msg; | |
101 | + END IF; | |
102 | + | |
103 | + displacement := NEW.nr_von - OLD.nr_von; | |
104 | + | |
105 | + IF (NEW.nr_bis - NEW.nr_von) < (OLD.nr_bis - OLD.nr_von) THEN | |
106 | + count := NEW.nr_bis - NEW.nr_von; | |
107 | + von := OLD.nr_von; | |
108 | + bis := von + count; | |
109 | + | |
110 | + FOR i IN von..bis LOOP | |
111 | + update fibu.used_konten set kto_nr=i + displacement, | |
112 | + konto_typ=NEW.konto_typ where kto_nr=i; | |
113 | + END LOOP; | |
114 | + | |
115 | + von := bis + 1; | |
116 | + bis := OLD.nr_bis; | |
117 | + | |
118 | + FOR i IN von..bis LOOP | |
119 | + delete from fibu.used_konten where kto_nr=i; | |
120 | + END LOOP; | |
121 | + ELSE | |
122 | + von := OLD.nr_von; | |
123 | + bis := OLD.nr_bis; | |
124 | + | |
125 | + FOR i IN von..bis LOOP | |
126 | + update fibu.used_konten set kto_nr=i + displacement, | |
127 | + konto_typ=NEW.konto_typ where kto_nr=i; | |
128 | + END LOOP; | |
129 | + | |
130 | + von := bis + 1; | |
131 | + bis := NEW.nr_bis; | |
132 | + | |
133 | + FOR i IN von..bis LOOP | |
134 | + insert into fibu.used_konten (kto_nr, used, konto_typ) | |
135 | + values (i, 0, NEW.konto_typ); | |
136 | + END LOOP; | |
137 | + END IF; | |
138 | + | |
139 | + RETURN NEW; | |
140 | + END; | |
141 | + ' language 'plpgsql'; | |
142 | + | |
143 | +create function on_delete_kontenplan_del_used_konten() | |
144 | + returns TRIGGER as ' | |
145 | + DECLARE | |
146 | + err_msg text; | |
147 | + i fibu.kontenplan.nr_von%TYPE; | |
148 | + BEGIN | |
149 | + IF TG_OP <> ''DELETE'' THEN | |
150 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
151 | + RAISE EXCEPTION ''%'', err_msg; | |
152 | + END IF; | |
153 | + | |
154 | + FOR i IN OLD.nr_von..OLD.nr_bis LOOP | |
155 | + delete from fibu.used_konten where kto_nr=i; | |
156 | + END LOOP; | |
157 | + | |
158 | + RETURN OLD; | |
159 | + END; | |
160 | + ' language 'plpgsql'; | |
161 | +-- ] | |
162 | +-- Ende Trigger -- | ... | ... |
trigger_funcs/cr_trigger_func_rechte.sql
0 → 100755
1 | +-- Trigger Funktionen zu Rechten -- | |
2 | +-- [ | |
3 | +create function create_valid_rechte_mask() | |
4 | + returns TRIGGER as ' | |
5 | + DECLARE | |
6 | + err_msg text; | |
7 | + new_len int4; | |
8 | + old_len int4; | |
9 | + dummy RECORD; | |
10 | + sel text; | |
11 | + BEGIN | |
12 | + IF TG_OP <> ''UPDATE'' AND TG_OP <> ''INSERT'' THEN | |
13 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
14 | + RAISE EXCEPTION ''%'', err_msg; | |
15 | + END IF; | |
16 | + | |
17 | + new_len := bit_length(NEW.maske); | |
18 | + old_len := fibu.konto_typ_min_len(); | |
19 | + | |
20 | + IF new_len < old_len THEN | |
21 | + NEW.maske := bit_set_len(NEW.maske, old_len); | |
22 | + END IF; | |
23 | + | |
24 | + IF old_len < new_len THEN | |
25 | + EXECUTE ''update fibu.konten_typen set konto_typ=konto_typ'' || | |
26 | + ''::BIT('' || new_len || '')>>'' || new_len-old_len; | |
27 | + END IF; | |
28 | + | |
29 | + RETURN NEW; | |
30 | + END; | |
31 | + ' language 'plpgsql'; | |
32 | + | |
33 | +-- create function on_ref_count_null_del_konto() | ... | ... |
trigger_funcs/cr_trigger_func_waren.sql
0 → 100755
1 | +-- Triggerfunktionen zu Waren/Warengruppen -- | |
2 | +-- [ | |
3 | +create function create_valid_produkt_typ_mask() | |
4 | + returns TRIGGER as ' | |
5 | + DECLARE | |
6 | + mask bit varying; | |
7 | + freepos int4 := 0; | |
8 | + err_msg text; | |
9 | + new_len int4; | |
10 | + old_len int4; | |
11 | + BEGIN | |
12 | + IF TG_OP <> ''UPDATE'' AND TG_OP <> ''INSERT'' THEN | |
13 | + err_msg := TG_NAME || '': called for wrong action '' || TG_OP; | |
14 | + RAISE EXCEPTION ''%'', err_msg; | |
15 | + END IF; | |
16 | + | |
17 | + new_len := bit_length(NEW.produkt_typ); | |
18 | + IF TG_OP = ''UPDATE'' THEN | |
19 | + new_len := bit_length(OLD.konto_typ); | |
20 | + ELSE | |
21 | + old_len := fibu.konto_typ_min_len(); | |
22 | + END IF; | |
23 | + | |
24 | + IF new_len < old_len THEN | |
25 | + NEW.konto_typ := NEW.konto_typ::BIT(old_len)>>old_len-new_len; | |
26 | + END IF; | |
27 | + | |
28 | + IF old_len < new_len THEN | |
29 | + EXECUTE ''update fibu.konten_typen set konto_typ=konto_typ'' || | |
30 | + ''::BIT('' || new_len || '')>>'' || new_len-old_len; | |
31 | + END IF; | |
32 | + | |
33 | + RETURN NEW; | |
34 | + END; | |
35 | + ' language 'plpgsql'; | |
36 | + | |
37 | +create function set_tiefe() | |
38 | + returns TRIGGER as ' | |
39 | + DECLARE | |
40 | + BEGIN | |
41 | + IF NEW.parent IS NOT NULL THEN | |
42 | + select INTO NEW.tiefe tiefe+1 from | |
43 | + waren.get_warengruppe(NEW.parent); | |
44 | + | |
45 | + update waren.warengruppe set is_parent=''true'' where | |
46 | + _id_=NEW.parent; | |
47 | + ELSE | |
48 | + NEW.tiefe := 0; | |
49 | + END IF; | |
50 | + | |
51 | + RETURN NEW; | |
52 | + END; | |
53 | + ' language 'plpgsql'; | |
54 | + | |
55 | +create function on_update_delete_check_is_parent() | |
56 | + returns TRIGGER as ' | |
57 | + DECLARE | |
58 | + i int4; | |
59 | + BEGIN | |
60 | + select INTO i count(*) from waren.warengruppe where | |
61 | + parent=OLD.parent; | |
62 | + | |
63 | + IF i > 0 THEN | |
64 | + update waren.warengruppe set is_parent=''true'' where | |
65 | + _id_=OLD.parent; | |
66 | + ELSE | |
67 | + update waren.warengruppe set is_parent=''false'' where | |
68 | + _id_=OLD.parent; | |
69 | + END IF; | |
70 | + | |
71 | + RETURN OLD; | |
72 | + END; | |
73 | + ' language 'plpgsql'; | |
74 | + | |
75 | +create function on_update_check_tiefe() | |
76 | + returns TRIGGER as ' | |
77 | + DECLARE | |
78 | + row waren.warengruppe%ROWTYPE; | |
79 | + parent_count int4; | |
80 | + BEGIN | |
81 | + IF NEW.parent IS NULL THEN | |
82 | + NEW.tiefe := 0; | |
83 | + ELSE | |
84 | + IF OLD.parent IS NULL OR | |
85 | + OLD.parent <> NEW.parent THEN | |
86 | + select INTO NEW.tiefe tiefe+1 from | |
87 | + waren.get_warengruppe(NEW.parent); | |
88 | + END IF; | |
89 | + END IF; | |
90 | + | |
91 | + IF NEW.tiefe <> OLD.tiefe THEN | |
92 | + FOR row IN select * from waren.warengruppe where | |
93 | + parent=NEW._id_ | |
94 | + LOOP | |
95 | + update waren.warengruppe set tiefe=NEW.tiefe+1 where | |
96 | + _id_=row._id_; | |
97 | + END LOOP; | |
98 | + END IF; | |
99 | + | |
100 | + RETURN NEW; | |
101 | + END; | |
102 | + ' language 'plpgsql'; | |
103 | + | |
104 | +create function on_delete_new_parent() | |
105 | + returns TRIGGER as ' | |
106 | + DECLARE | |
107 | + row waren.warengruppe%ROWTYPE; | |
108 | + BEGIN | |
109 | + FOR row IN select * from waren.warengruppe where | |
110 | + parent=OLD._id_ | |
111 | + LOOP | |
112 | + update waren.warengruppe set parent=OLD.parent where | |
113 | + _id_=row._id_; | |
114 | + END LOOP; | |
115 | + | |
116 | + RETURN OLD; | |
117 | + END; | |
118 | + ' language 'plpgsql'; | |
119 | +-- ] | |
120 | +-- Ende Triggerfunktionen zu Waren/Warengruppen -- | ... | ... |
Please
register
or
login
to post a comment