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