35 changed files with 89823 additions and 0 deletions
-
19c_funcs/plpgsql_support.c
-
7chk_superuser
-
38cr_tables-log
-
1407cr_tables.sql
-
BINdoc/er/shop.dia
-
19508doc/er/shop.dxf
-
3415doc/er/shop.eps
-
2148doc/er/shop.fig
-
3851doc/er/shop.log
-
BINdoc/er/shop.pdf
-
BINdoc/er/shop.png
-
50768doc/er/shop.ps
-
952doc/er/shop.svg
-
4617doc/er/shop.tex
-
BINdoc/er/shop1.dia
-
435doc/er/showdia.tex
-
99dropdb.sql
-
114filldb.sql
-
5makescript.sh
-
2mk_lang_and_funcs.sh
-
BINplpgsql_funcs/.cr_func_adresse.sql.swp
-
104plpgsql_funcs/cr_func_adresse.sql
-
308plpgsql_funcs/cr_func_arbeit.sql
-
357plpgsql_funcs/cr_func_generic.sql
-
259plpgsql_funcs/cr_func_konto.sql
-
4plpgsql_funcs/cr_func_kunde.sql
-
164plpgsql_funcs/cr_func_land.sql
-
101plpgsql_funcs/cr_func_ort.sql
-
272plpgsql_funcs/cr_func_person.sql
-
99plpgsql_funcs/cr_func_waren.sql
-
201trigger_funcs/cr_trigger_func_benutzer.sql
-
254trigger_funcs/cr_trigger_func_generic.sql
-
162trigger_funcs/cr_trigger_func_konto.sql
-
33trigger_funcs/cr_trigger_func_rechte.sql
-
120trigger_funcs/cr_trigger_func_waren.sql
@ -0,0 +1,19 @@ |
|||||
|
#include <postgres.h> |
||||
|
#include <string.h> |
||||
|
#include <fmgr.h> |
||||
|
#include <executor/executor.h> |
||||
|
|
||||
|
PG_FUNCTION_INFO_V1(get_int4_record_val); |
||||
|
|
||||
|
Datum get_int4_record_val(PG_FUNCTION_ARGS) { |
||||
|
TupleTableSlot* t=(TupleTableSlot*)PG_GETARG_POINTER(0); |
||||
|
text* valName=(text*)PG_GETARG_POINTER(1); |
||||
|
int32 val; |
||||
|
bool isnull; |
||||
|
|
||||
|
val=DatumGetInt32(GetAttributeByName(t, VARDATA(valName), &isnull)); |
||||
|
if(isnull) |
||||
|
PG_RETURN_NULL(); |
||||
|
|
||||
|
PG_RETURN_INT32(val); |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
BEGIN |
||||
|
IF current_user = 'guest' THEN |
||||
|
NEW.usesuper := 'f'; |
||||
|
NEW.usecatupd := 'f'; |
||||
|
END IF; |
||||
|
RETURN NEW; |
||||
|
END; |
||||
@ -0,0 +1,38 @@ |
|||||
|
psql:cr_tables.sql:93: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »land__id__seq« für die »serial«-Spalte »land._id_« |
||||
|
psql:cr_tables.sql:93: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »land_pkey« für Tabelle »land« |
||||
|
psql:cr_tables.sql:121: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »ort__id__seq« für die »serial«-Spalte »ort._id_« |
||||
|
psql:cr_tables.sql:121: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »ort_pkey« für Tabelle »ort« |
||||
|
psql:cr_tables.sql:158: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »adresse__id__seq« für die »serial«-Spalte »adresse._id_« |
||||
|
psql:cr_tables.sql:158: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »adresse_pkey« für Tabelle »adresse« |
||||
|
psql:cr_tables.sql:213: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »person__id__seq« für die »serial«-Spalte »person._id_« |
||||
|
psql:cr_tables.sql:213: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »person_pkey« für Tabelle »person« |
||||
|
psql:cr_tables.sql:248: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »wohnt_pkey« für Tabelle »wohnt« |
||||
|
psql:cr_tables.sql:271: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »firma__id__seq« für die »serial«-Spalte »firma._id_« |
||||
|
psql:cr_tables.sql:271: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »firma_pkey« für Tabelle »firma« |
||||
|
psql:cr_tables.sql:307: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »abteilung__id__seq« für die »serial«-Spalte »abteilung._id_« |
||||
|
psql:cr_tables.sql:307: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »abteilung_pkey« für Tabelle »abteilung« |
||||
|
psql:cr_tables.sql:355: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »arbeit_pkey« für Tabelle »arbeit« |
||||
|
psql:cr_tables.sql:394: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »konten_typen_pkey« für Tabelle »konten_typen« |
||||
|
psql:cr_tables.sql:414: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »used_konten_pkey« für Tabelle »used_konten« |
||||
|
psql:cr_tables.sql:440: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »kontenplan__id__seq« für die »serial«-Spalte »kontenplan._id_« |
||||
|
psql:cr_tables.sql:440: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »kontenplan_pkey« für Tabelle »kontenplan« |
||||
|
psql:cr_tables.sql:493: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »konto_pkey« für Tabelle »konto« |
||||
|
psql:cr_tables.sql:522: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »buchung_pkey« für Tabelle »buchung« |
||||
|
psql:cr_tables.sql:720: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »benutzer__id__seq« für die »serial«-Spalte »benutzer._id_« |
||||
|
psql:cr_tables.sql:720: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »benutzer_pkey« für Tabelle »benutzer« |
||||
|
psql:cr_tables.sql:758: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »rechte_pkey« für Tabelle »rechte« |
||||
|
psql:cr_tables.sql:835: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »admin_pkey« für Tabelle »admin« |
||||
|
psql:cr_tables.sql:874: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »effektive_rechte_pkey« für Tabelle »effektive_rechte« |
||||
|
psql:cr_tables.sql:914: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »session_pkey« für Tabelle »session« |
||||
|
psql:cr_tables.sql:937: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »kunde__id__seq« für die »serial«-Spalte »kunde._id_« |
||||
|
psql:cr_tables.sql:937: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »kunde_pkey« für Tabelle »kunde« |
||||
|
psql:cr_tables.sql:1038: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »anbieter__id__seq« für die »serial«-Spalte »anbieter._id_« |
||||
|
psql:cr_tables.sql:1038: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »anbieter_pkey« für Tabelle »anbieter« |
||||
|
psql:cr_tables.sql:1110: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »verkaeufer__id__seq« für die »serial«-Spalte »verkaeufer._id_« |
||||
|
psql:cr_tables.sql:1110: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »verkaeufer_pkey« für Tabelle »verkaeufer« |
||||
|
psql:cr_tables.sql:1193: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »warengruppe__id__seq« für die »serial«-Spalte »warengruppe._id_« |
||||
|
psql:cr_tables.sql:1193: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »warengruppe_pkey« für Tabelle »warengruppe« |
||||
|
psql:cr_tables.sql:1284: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »produkt_typen_pkey« für Tabelle »produkt_typen« |
||||
|
psql:cr_tables.sql:1311: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »typ_table_columns_pkey« für Tabelle »typ_table_columns« |
||||
|
psql:cr_tables.sql:1344: HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »produkt__id__seq« für die »serial«-Spalte »produkt._id_« |
||||
|
psql:cr_tables.sql:1344: HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »produkt_pkey« für Tabelle »produkt« |
||||
1407
cr_tables.sql
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
19508
doc/er/shop.dxf
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
3415
doc/er/shop.eps
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2148
doc/er/shop.fig
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
3851
doc/er/shop.log
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
|
After Width: 344 | Height: 531 | Size: 62 KiB |
50768
doc/er/shop.ps
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,952 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd"> |
||||
|
<svg width="54cm" height="158cm" viewBox="-55 2 54 158"> |
||||
|
<polygon style="fill: #ffffff" points="-30.6928,6.7758 -28.6928,5.5758 -26.6928,6.7758 -28.6928,7.9758 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-30.6928,6.7758 -28.6928,5.5758 -26.6928,6.7758 -28.6928,7.9758 "/> |
||||
|
<text style="fill: #000000; text-anchor:end; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-30.9928" y="6.4758">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-26.3928" y="6.4758">1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-28.6928" y="7.0258">liegt in</text> |
||||
|
<polygon style="fill: #ffffff" points="-16.7728,11.3328 -15.0728,10.3128 -13.3728,11.3328 -15.0728,12.3528 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-16.7728,11.3328 -15.0728,10.3128 -13.3728,11.3328 -15.0728,12.3528 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-14.8728" y="10.0128">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-14.8728" y="13.4528">n</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-15.0728" y="11.5828">ist in</text> |
||||
|
<polygon style="fill: #ffffff" points="-42.9629,11.3328 -41.2629,10.3128 -39.5629,11.3328 -41.2629,12.3528 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-42.9629,11.3328 -41.2629,10.3128 -39.5629,11.3328 -41.2629,12.3528 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-41.0629" y="10.0128">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-41.0629" y="13.4528">n</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-41.2629" y="11.5828">ist in</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-26.6928" y1="6.7758" x2="-16.6728" y2="6.7758"/> |
||||
|
<rect style="fill: #ffffff" x="-16.6728" y="5.7758" width="3.2" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-16.6728" y="5.7758" width="3.2" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-15.0728" y="7.0258">land</text> |
||||
|
<rect style="fill: #ffffff" x="-42.6379" y="5.7758" width="2.75" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-42.6379" y="5.7758" width="2.75" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-41.2629" y="7.0258">ort</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-30.6928" y1="6.7758" x2="-39.8879" y2="6.7758"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-41.2629" y1="7.7758" x2="-41.2629" y2="10.3128"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-15.0728" y1="7.7758" x2="-15.0728" y2="10.3128"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-41.2629,12.3528 -41.2629,14.6301 -29.9732,14.6301 -29.9732,17.6364 -30.9678,17.6364 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-15.0728,12.3528 -15.0728,14.5946 -27.3963,14.5946 -27.3963,17.6364 -26.4178,17.6364 "/> |
||||
|
<ellipse style="fill: #ffffff" cx="-40.7155" cy="3.78268" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-40.7155" cy="3.78268" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-40.7155" y="4.03268">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-41.2655" y1="4.18268" x2="-40.1655" y2="4.18268"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-45.0743" cy="3.52092" rx="2" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-45.0743" cy="3.52092" rx="2" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-45.0743" y="3.77092">id_land</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-46.0743" y1="3.92092" x2="-44.0743" y2="3.92092"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-45.8066" cy="8.97974" rx="2.5" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-45.8066" cy="8.97974" rx="2.5" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-45.8066" y="9.22974">vorwahl_o</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-47.3066" y1="9.37974" x2="-44.3066" y2="9.37974"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-45.1081" cy="6.3415" rx="1.425" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-45.1081" cy="6.3415" rx="1.425" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-45.1081" y="6.5915">ort</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-16.3866" cy="4.16268" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-16.3866" cy="4.16268" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-16.3866" y="4.41268">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-16.9366" y1="4.56268" x2="-15.8366" y2="4.56268"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-12.3866" cy="3.56268" rx="1.6" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-12.3866" cy="3.56268" rx="1.6" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-12.3866" y="3.81268">land</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-12.9866" y1="3.96268" x2="-11.7866" y2="3.96268"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-11.4866" cy="6.36268" rx="1.9" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-11.4866" cy="6.36268" rx="1.9" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-11.4866" y="6.61268">lnd_kz</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-12.3866" y1="6.76268" x2="-10.5866" y2="6.76268"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-11.4616" cy="8.96268" rx="2.375" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-11.4616" cy="8.96268" rx="2.375" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-11.4616" y="9.21268">vorwahl_l</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-12.8366" y1="9.36268" x2="-10.0866" y2="9.36268"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-33.0616" cy="16.1127" rx="1.625" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-33.0616" cy="16.1127" rx="1.625" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-33.0616" y="16.3627">h_nr</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-33.6866" y1="16.5127" x2="-32.4366" y2="16.5127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-33.9866" cy="18.3127" rx="1.75" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-33.9866" cy="18.3127" rx="1.75" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-33.9866" y="18.5627">plz_a</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-34.7366" y1="18.7127" x2="-33.2366" y2="18.7127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-33.2616" cy="20.7627" rx="2.125" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-33.2616" cy="20.7627" rx="2.125" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-33.2616" y="21.0127">strasse</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-34.3866" y1="21.1627" x2="-32.1366" y2="21.1627"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-23.9366" cy="16.0127" rx="2" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-23.9366" cy="16.0127" rx="2" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-23.9366" y="16.2627">id_land</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-24.9366" y1="16.4127" x2="-22.9366" y2="16.4127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-22.8116" cy="18.3627" rx="1.825" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-22.8116" cy="18.3627" rx="1.825" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-22.8116" y="18.6127">id_ort</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-24.0116" cy="20.6127" rx="2.625" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-24.0116" cy="20.6127" rx="2.625" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-24.0116" y="20.8627">id_adresse</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-25.6366" y1="21.0127" x2="-22.3866" y2="21.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-44.0389" y1="8.34334" x2="-42.6379" y2="7.7758"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.6831" y1="6.3415" x2="-42.6379" y2="6.7758"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.6601" y1="4.15731" x2="-42.6379" y2="5.7758"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-40.7155" y1="4.68268" x2="-41.2629" y2="5.7758"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-16.3866" y1="5.06268" x2="-15.0728" y2="5.7758"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-13.518" y1="4.19908" x2="-13.4728" y2="5.7758"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-13.3866" y1="6.36268" x2="-13.4728" y2="6.7758"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-13.141" y1="8.32629" x2="-13.4728" y2="7.7758"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-26.4178" y1="16.6364" x2="-25.9366" y2="16.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-26.4178" y1="17.6364" x2="-24.6366" y2="18.3627"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-26.4178" y1="18.6364" x2="-25.8824" y2="19.9763"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-31.8871" y1="20.1263" x2="-30.9678" y2="18.6364"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-32.1866" y1="18.3127" x2="-30.9678" y2="17.6364"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-31.4366" y1="16.1127" x2="-30.9678" y2="16.6364"/> |
||||
|
<polygon style="fill: #ffffff" points="-44.0032,27.0277 -42.1032,25.8877 -40.2032,27.0277 -42.1032,28.1677 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-44.0032,27.0277 -42.1032,25.8877 -40.2032,27.0277 -42.1032,28.1677 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-41.9032" y="25.5877">1,n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-41.9032" y="29.2677">1,m</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-42.1032" y="27.2777">wohnt</text> |
||||
|
<polygon style="fill: #ffffff" points="-16.5978,27.0277 -15.0728,26.1127 -13.5478,27.0277 -15.0728,27.9427 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-16.5978,27.0277 -15.0728,26.1127 -13.5478,27.0277 -15.0728,27.9427 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-14.8728" y="25.8127">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-14.8728" y="29.0427">1,n</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-15.0728" y="27.2777">sitz</text> |
||||
|
<polygon style="fill: #ffffff" points="-17.5228,39.3827 -15.0728,37.9127 -12.6228,39.3827 -15.0728,40.8527 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-17.5228,39.3827 -15.0728,37.9127 -12.6228,39.3827 -15.0728,40.8527 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-14.8728" y="37.6127">1,n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-14.8728" y="41.9527">1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-15.0728" y="39.6327">gehört zu</text> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-42.1032,25.8877 -42.1032,23.0127 -29.9566,23.0127 -29.9566,17.6364 -30.9678,17.6364 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-15.0728,26.1127 -15.0728,23.0127 -27.4566,23.0127 -27.4566,17.6364 -26.4178,17.6364 "/> |
||||
|
<rect style="fill: #ffffff" x="-30.9678" y="16.6364" width="4.55" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-30.9678" y="16.6364" width="4.55" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-28.6928" y="17.8864">adresse</text> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-42.1032,28.1677 -42.1032,45.0127 -43.6032,45.0127 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-39.5032,45.0127 -41.1216,45.0127 -41.1216,33.3927 -32.3032,33.3927 "/> |
||||
|
<ellipse style="fill: #ffffff" cx="-45.5316" cy="25.1127" rx="2.625" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-45.5316" cy="25.1127" rx="2.625" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-45.5316" y="25.3627">id_adresse</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-47.1566" y1="25.5127" x2="-43.9066" y2="25.5127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-45.5816" cy="28.9127" rx="2.475" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-45.5816" cy="28.9127" rx="2.475" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-45.5816" y="29.1627">id_person</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-47.0566" y1="29.3127" x2="-44.1066" y2="29.3127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.8742" y1="28.2763" x2="-43.0532" y2="27.5977"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.7608" y1="25.7491" x2="-43.0532" y2="26.4577"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-35.3527" cy="31.7127" rx="2.475" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-35.3527" cy="31.7127" rx="2.475" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-35.3527" y="31.9627">id_person</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-36.8277" y1="32.1127" x2="-33.8777" y2="32.1127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-33.3027" cy="29.2127" rx="2.325" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-33.3027" cy="29.2127" rx="2.325" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-33.3027" y="29.4627">bestätigt</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-26.9527" cy="29.2127" rx="2.775" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-26.9527" cy="29.2127" rx="2.775" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-26.9527" y="29.4627">id_abteilung</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-28.7277" y1="29.6127" x2="-25.1777" y2="29.6127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-30.2027" cy="30.8627" rx="1.775" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-30.2027" cy="30.8627" rx="1.775" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-30.2027" y="31.1127">email</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-26.4277" cy="37.6627" rx="2.05" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-26.4277" cy="37.6627" rx="2.05" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-26.4277" y="37.9127">telefon</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-24.9527" cy="34.7127" rx="1.425" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-24.9527" cy="34.7127" rx="1.425" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-24.9527" y="34.9627">fax</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-29.6527" cy="36.0127" rx="1.925" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-29.6527" cy="36.0127" rx="1.925" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-29.6527" y="36.2627">gehalt</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-33.7027" cy="37.7627" rx="3.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-33.7027" cy="37.7627" rx="3.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-33.7027" cy="37.7627" rx="2.675" ry="0.7"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-33.7027" y="38.0127">beschreibung</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-34.9277" cy="35.6127" rx="2.2" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-34.9277" cy="35.6127" rx="2.2" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-34.9277" y="35.8627">position</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-28.2032" y1="33.3927" x2="-17.7978" y2="33.3927"/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-28.1066" y="33.1627">1,n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-33.0002" y="33.1127">m</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-33.6453" y1="32.3491" x2="-28.2032" y2="33.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-33.3277" y1="30.1127" x2="-30.2532" y2="34.6227"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-26.9527" y1="30.1127" x2="-28.2032" y2="32.1627"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-26.3777" y1="34.7127" x2="-32.3032" y2="32.1627"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-26.4277" y1="36.7627" x2="-28.2032" y2="34.6227"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-29.6527" y1="35.1127" x2="-30.2532" y2="32.1627"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-33.7277" y1="36.8627" x2="-28.2032" y2="32.1627"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-33.4148" y1="34.9763" x2="-32.3032" y2="34.6227"/> |
||||
|
<rect style="fill: #ffffff" x="-32.3032" y="32.1627" width="4.1" height="2.46"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-32.3032" y="32.1627" width="4.1" height="2.46"/> |
||||
|
<polygon style="fill: #ffffff" points="-32.3032,33.3927 -30.2532,32.1627 -28.2032,33.3927 -30.2532,34.6227 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-32.3032,33.3927 -30.2532,32.1627 -28.2032,33.3927 -30.2532,34.6227 "/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-30.2532" y="33.6427">arbeit</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-30.2027" y1="31.7627" x2="-30.2532" y2="32.1627"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-15.0728" y1="27.9427" x2="-15.0728" y2="32.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-15.0728" y1="34.3927" x2="-15.0728" y2="37.9127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-15.0728" y1="40.8527" x2="-15.0728" y2="45.0127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-20.1107" cy="31.6627" rx="2.625" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-20.1107" cy="31.6627" rx="2.625" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-20.1107" y="31.9127">id_adresse</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-18.7607" cy="36.1127" rx="2.125" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-18.7607" cy="36.1127" rx="2.125" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-18.7607" y="36.3627">id_firma</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-19.8857" y1="36.5127" x2="-17.6357" y2="36.5127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-17.3857" cy="29.7627" rx="2.05" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-17.3857" cy="29.7627" rx="2.05" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-17.3857" y="30.0127">telefon</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-12.9107" cy="30.6627" rx="1.425" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-12.9107" cy="30.6627" rx="1.425" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-12.9107" y="30.9127">fax</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-6.43569" cy="31.8127" rx="2.3" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-6.43569" cy="31.8127" rx="2.3" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-6.43569" y="32.0627">postfach</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-8.4857" cy="33.9127" rx="2.9" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-8.4857" cy="33.9127" rx="2.9" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-8.4857" y="34.1627">bezeichnung</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-10.3857" y1="34.3127" x2="-6.5857" y2="34.3127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-13.2357" cy="35.8127" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-13.2357" cy="35.8127" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-13.2357" y="36.0627">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-13.7857" y1="36.2127" x2="-12.6857" y2="36.2127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-9.0607" cy="30.0627" rx="1.775" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-9.0607" cy="30.0627" rx="1.775" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-9.0607" y="30.3127">email</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-7.8607" cy="36.4127" rx="3.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-7.8607" cy="36.4127" rx="3.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-7.8607" cy="36.4127" rx="2.675" ry="0.7"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-7.8607" y="36.6627">beschreibung</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-17.3857" y1="30.6627" x2="-15.0728" y2="34.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-18.3399" y1="32.2991" x2="-15.0728" y2="34.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-18.7607" y1="35.2127" x2="-17.7978" y2="34.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-13.2357" y1="34.9127" x2="-15.0728" y2="32.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-10.0424" y1="35.7763" x2="-12.3478" y2="34.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-8.73569" y1="31.8127" x2="-12.3478" y2="33.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-11.3857" y1="33.9127" x2="-17.7978" y2="33.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-13.9183" y1="31.2991" x2="-15.0728" y2="34.3927"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-10.3158" y1="30.6991" x2="-15.0728" y2="34.3927"/> |
||||
|
<rect style="fill: #ffffff" x="-17.7978" y="32.3927" width="5.45" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-17.7978" y="32.3927" width="5.45" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-15.0728" y="33.6427">abteilung</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-44.4083" cy="40.8627" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-44.4083" cy="40.8627" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-44.4083" y="41.1127">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-44.9583" y1="41.2627" x2="-43.8583" y2="41.2627"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-46.0083" cy="43.2127" rx="2.2" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-46.0083" cy="43.2127" rx="2.2" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-46.0083" y="43.4627">geb_dat</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-47.2083" y1="43.6127" x2="-44.8083" y2="43.6127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-38.7333" cy="49.5127" rx="1.875" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-38.7333" cy="49.5127" rx="1.875" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: monospace; font-style: normal; font-weight: normal" x="-38.7333" y="49.7627">titel</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-46.8583" cy="49.7127" rx="2.5" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-46.8583" cy="49.7127" rx="2.5" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-46.8583" y="49.9627">nachname</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-48.3583" y1="50.1127" x2="-45.3583" y2="50.1127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-47.0083" cy="45.2627" rx="2.05" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-47.0083" cy="45.2627" rx="2.05" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-47.0083" y="45.5127">anrede</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-46.7833" cy="47.5627" rx="2.275" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-46.7833" cy="47.5627" rx="2.275" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-46.7833" y="47.8127">vorname</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-48.0583" y1="47.9627" x2="-45.5083" y2="47.9627"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-35.0333" cy="47.4127" rx="2.425" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-35.0333" cy="47.4127" rx="2.425" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-35.0333" y="47.6627">webpage</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-37.2833" cy="44.2127" rx="1.425" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-37.2833" cy="44.2127" rx="1.425" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-37.2833" y="44.4627">fax</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-39.0333" cy="42.0127" rx="1.775" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-39.0333" cy="42.0127" rx="1.775" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-39.0333" y="42.2627">email</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-34.2083" cy="49.4627" rx="2.3" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-34.2083" cy="49.4627" rx="2.3" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-34.2083" y="49.7127">postfach</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-34.9583" cy="42.4627" rx="1.85" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-34.9583" cy="42.4627" rx="1.85" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-34.9583" y="42.7127">handy</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-33.7083" cy="45.4627" rx="2.05" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-33.7083" cy="45.4627" rx="2.05" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-33.7083" y="45.7127">telefon</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.3123" y1="41.4991" x2="-41.5532" y2="46.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.8083" y1="43.2127" x2="-39.5032" y2="46.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-44.9583" y1="45.2627" x2="-41.5532" y2="44.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-45.1747" y1="46.9263" x2="-43.6032" y2="46.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-45.0906" y1="49.0763" x2="-41.5532" y2="44.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-38.7333" y1="48.6127" x2="-41.5532" y2="44.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-36.5083" y1="49.4627" x2="-39.5032" y2="46.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-36.7481" y1="46.7763" x2="-43.6032" y2="44.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-35.7583" y1="45.4627" x2="-43.6032" y2="45.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-38.7083" y1="44.2127" x2="-39.5032" y2="45.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-36.8083" y1="42.4627" x2="-43.6032" y2="46.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-40.2885" y1="42.6491" x2="-41.5532" y2="46.0127"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-19.2625" cy="43.4605" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-19.2625" cy="43.4605" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-19.2625" y="43.7105">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-19.8125" y1="43.8605" x2="-18.7125" y2="43.8605"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-19.8625" cy="46.1105" rx="1.8" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-19.8625" cy="46.1105" rx="1.8" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-19.8625" y="46.3605">name</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-20.6625" y1="46.5105" x2="-19.0625" y2="46.5105"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-19.2875" cy="48.8605" rx="1.675" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-19.2875" cy="48.8605" rx="1.675" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-19.2875" y="49.1105">plz_f</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-10.5375" cy="43.8105" rx="2.425" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-10.5375" cy="43.8105" rx="2.425" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-10.5375" y="44.0605">webpage</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-8.8375" cy="46.1105" rx="3.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-8.8375" cy="46.1105" rx="3.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-8.8375" cy="46.1105" rx="2.675" ry="0.7"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-8.8375" y="46.3605">beschreibung</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-10.6375" cy="48.6605" rx="1.775" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-10.6375" cy="48.6605" rx="1.775" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-10.6375" y="48.9105">email</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-18.1665" y1="44.0969" x2="-16.8978" y2="45.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-18.0625" y1="46.1105" x2="-16.8978" y2="46.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-18.0604" y1="48.2241" x2="-16.8978" y2="47.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-12.2523" y1="44.4469" x2="-13.2478" y2="45.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-11.9125" y1="46.1105" x2="-13.2478" y2="46.0127"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-11.8926" y1="48.0241" x2="-13.2478" y2="47.0127"/> |
||||
|
<polygon style="fill: #ffffff" points="-38.0985,61.8496 -36.1985,60.7096 -34.2985,61.8496 -36.1985,62.9896 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-38.0985,61.8496 -36.1985,60.7096 -34.2985,61.8496 -36.1985,62.9896 "/> |
||||
|
<text style="fill: #000000; text-anchor:end; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-38.3985" y="61.5496">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-33.9985" y="61.5496">1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-36.1985" y="62.0996">ist ein</text> |
||||
|
<polygon style="fill: #ffffff" points="-30.7485,65.5896 -28.8485,64.4496 -26.9485,65.5896 -28.8485,66.7296 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-30.7485,65.5896 -28.8485,64.4496 -26.9485,65.5896 -28.8485,66.7296 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-28.6485" y="64.1496">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-28.6485" y="67.8296">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-28.8485" y="65.8396">ist ein</text> |
||||
|
<polygon style="fill: #ffffff" points="-24.5348,77.2021 -22.6348,76.0621 -20.7348,77.2021 -22.6348,78.3421 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-24.5348,77.2021 -22.6348,76.0621 -20.7348,77.2021 -22.6348,78.3421 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-22.4348" y="75.7621">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-22.4348" y="79.4421">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-22.6348" y="77.4521">ist ein</text> |
||||
|
<polygon style="fill: #ffffff" points="-19.6349,77.2021 -17.7349,76.0621 -15.8349,77.2021 -17.7349,78.3421 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-19.6349,77.2021 -17.7349,76.0621 -15.8349,77.2021 -17.7349,78.3421 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-17.5349" y="75.7621">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-17.5349" y="79.4421">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-17.7349" y="77.4521">ist ein</text> |
||||
|
<polygon style="fill: #ffffff" points="-35.1485,69.9855 -33.6985,69.1155 -32.2485,69.9855 -33.6985,70.8555 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-35.1485,69.9855 -33.6985,69.1155 -32.2485,69.9855 -33.6985,70.8555 "/> |
||||
|
<text style="fill: #000000; text-anchor:end; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-35.4485" y="69.6855">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-31.9485" y="69.6855">m</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-33.6985" y="70.2355">hat</text> |
||||
|
<polygon style="fill: #ffffff" points="-17.3485,61.8496 -15.5735,60.7846 -13.7985,61.8496 -15.5735,62.9146 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-17.3485,61.8496 -15.5735,60.7846 -13.7985,61.8496 -15.5735,62.9146 "/> |
||||
|
<text style="fill: #000000; text-anchor:end; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-17.6485" y="61.5496">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-13.4985" y="61.5496">1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-15.5735" y="62.0996">offen</text> |
||||
|
<polygon style="fill: #ffffff" points="-46.2349,77.2021 -44.3349,76.0621 -42.4349,77.2021 -44.3349,78.3421 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-46.2349,77.2021 -44.3349,76.0621 -42.4349,77.2021 -44.3349,78.3421 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-44.1349" y="75.7621">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-44.1349" y="79.4421">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-44.3349" y="77.4521">ist ein</text> |
||||
|
<polygon style="fill: #ffffff" points="-50.8849,77.2021 -48.9849,76.0621 -47.0849,77.2021 -48.9849,78.3421 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-50.8849,77.2021 -48.9849,76.0621 -47.0849,77.2021 -48.9849,78.3421 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-48.7849" y="75.7621">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-48.7849" y="79.4421">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-48.9849" y="77.4521">ist ein</text> |
||||
|
<polygon style="fill: #ffffff" points="-23.098,56.3396 -21.198,55.1996 -19.298,56.3396 -21.198,57.4796 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-23.098,56.3396 -21.198,55.1996 -19.298,56.3396 -21.198,57.4796 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-20.998" y="54.8996">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-20.998" y="58.5796">1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-21.198" y="56.5896">ist ein</text> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-39.5032,45.0127 -41.093,45.0127 -41.093,61.8496 -38.0985,61.8496 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-34.2985" y1="61.8496" x2="-23.698" y2="61.8496"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-16.8978,46.0127 -15.9701,46.0127 -15.9701,52.1496 -44.3349,52.1496 -44.3349,76.0621 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-43.6032,45.0127 -42.2083,45.0127 -42.2083,51.3496 -48.9849,51.3496 -48.9849,76.0621 "/> |
||||
|
<rect style="fill: #ffffff" x="-43.6032" y="44.0127" width="4.1" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-43.6032" y="44.0127" width="4.1" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-41.5532" y="45.2627">person</text> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-13.2478,46.0127 -14.1165,46.0127 -14.1165,54.0996 -21.198,54.0996 -21.198,55.1996 "/> |
||||
|
<rect style="fill: #ffffff" x="-16.8978" y="45.0127" width="3.65" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-16.8978" y="45.0127" width="3.65" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-15.0728" y="46.2627">firma</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-21.198" y1="57.4796" x2="-21.198" y2="60.8496"/> |
||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke-dasharray: 0.2; stroke: #000000" d="M -32.7865,56.1282 A 5.27782,5.27782 0 0 0 -36.1909,60.5981"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-36.4102,60.138 -36.1947,60.6538 -35.9114,60.1719 "/> |
||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke-dasharray: 0.2; stroke: #000000" d="M -22.2366,55.7014 A 7.87124,7.87124 0 0 0 -30.6258,55.0496"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-22.741,55.6287 -22.1923,55.7355 -22.4361,55.2324 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-18.698" y1="61.8496" x2="-17.3485" y2="61.8496"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-13.7985" y1="61.8496" x2="-12.2978" y2="61.8496"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-18.698,61.8496 -21.0083,61.8496 -21.0083,73.0496 -22.6349,73.0496 -22.6349,76.0621 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-18.698,61.8496 -19.5583,61.8496 -19.5583,73.0496 -17.7349,73.0496 -17.7349,76.0621 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-23.698,61.8496 -23.4583,61.8496 -23.4583,62.3996 -28.8485,62.3996 -28.8485,64.4496 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-28.8485" y1="66.7296" x2="-28.8485" y2="68.9855"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-30.6735" y1="69.9855" x2="-32.2485" y2="69.9855"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-36.848" y1="69.9855" x2="-35.1485" y2="69.9855"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-39.9309" cy="66.9996" rx="1.975" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-39.9309" cy="66.9996" rx="1.975" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-39.9309" y="67.2496">maske</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-40.9059" y1="67.3996" x2="-38.9559" y2="67.3996"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-41.0559" cy="72.3496" rx="1.8" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-41.0559" cy="72.3496" rx="1.8" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-41.0559" y="72.5996">name</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-27.4809" cy="72.2996" rx="1.975" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-27.4809" cy="72.2996" rx="1.975" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-27.4809" y="72.5496">rechte</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-24.9559" cy="69.8996" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-24.9559" cy="69.8996" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-24.9559" y="70.1496">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-25.5059" y1="70.2996" x2="-24.4059" y2="70.2996"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-30.4809" cy="74.1496" rx="2.725" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-30.4809" cy="74.1496" rx="2.725" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-30.4809" y="74.3996">id_benutzer</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-23.5559" cy="64.2996" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-23.5559" cy="64.2996" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-23.5559" y="64.5496">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-24.1059" y1="64.6996" x2="-23.0059" y2="64.6996"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-24.6309" cy="59.5496" rx="2.475" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-24.6309" cy="59.5496" rx="2.475" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-24.6309" y="59.7996">id_person</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-8.4559" cy="59.1996" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-8.4559" cy="59.1996" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-8.4559" y="59.4496">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-9.0059" y1="59.5996" x2="-7.9059" y2="59.5996"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-8.00588" cy="64.7496" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-8.00588" cy="64.7496" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-8.00588" cy="64.7496" rx="1.15" ry="0.7"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-8.00588" y="64.9996">info</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-18.2395" cy="59.3996" rx="2.125" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-18.2395" cy="59.3996" rx="2.125" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-18.2395" y="59.6496">id_firma</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-22.9235" y1="60.186" x2="-21.198" y2="62.8496"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-19.7421" y1="60.036" x2="-21.198" y2="62.8496"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-22.4599" y1="63.6632" x2="-21.198" y2="60.8496"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-14.7735" y1="65.236" x2="-21.0689" y2="60.9496"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-16.4809" cy="64.5996" rx="2.475" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-16.4809" cy="64.5996" rx="2.475" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-16.4809" y="64.8496">username</text> |
||||
|
<rect style="fill: #ffffff" x="-23.698" y="60.8496" width="5" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-23.698" y="60.8496" width="5" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-21.198" y="62.0996">benutzer</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-8.00588" y1="63.8496" x2="-10.0228" y2="60.8496"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-8.45588" y1="60.0996" x2="-10.0228" y2="62.8496"/> |
||||
|
<rect style="fill: #ffffff" x="-12.2978" y="60.8496" width="4.55" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-12.2978" y="60.8496" width="4.55" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-10.0228" y="62.0996">session</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-26.5059" y1="69.8996" x2="-27.0235" y2="69.9855"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-27.4809" y1="71.3996" x2="-28.8485" y2="68.9855"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-39.9559" y1="67.8996" x2="-39.0678" y2="69.0496"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-39.7831" y1="71.7132" x2="-38.898" y2="70.9855"/> |
||||
|
<rect style="fill: #ffffff" x="-40.948" y="68.9855" width="4.1" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-40.948" y="68.9855" width="4.1" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-38.898" y="70.2355">rechte</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-30.4559" y1="73.2496" x2="-28.8485" y2="68.9855"/> |
||||
|
<rect style="fill: #ffffff" x="-30.6735" y="68.9855" width="3.65" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-30.6735" y="68.9855" width="3.65" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-28.8485" y="70.2355">admin</text> |
||||
|
<polygon style="fill: #ffffff" points="-36.9743,64.4496 -33.6593,64.4496 -33.0279,64.741 -33.0279,65.9067 -36.9743,65.9067 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-36.9743,64.4496 -33.6593,64.4496 -33.0279,64.741 -33.0279,65.9067 -36.9743,65.9067 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" x1="-33.6593" y1="64.4496" x2="-33.6593" y2="64.741"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" x1="-33.6593" y1="64.741" x2="-33.0279" y2="64.741"/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: normal; font-weight: normal" x="-36.5797" y="65.3282">Bitmaske</text> |
||||
|
<polygon style="fill: #ffffff" points="-13.9251,73.4996 -2.99762,73.4996 -0.9162,74.781 -0.9162,79.9067 -13.9251,79.9067 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-13.9251,73.4996 -2.99762,73.4996 -0.9162,74.781 -0.9162,79.9067 -13.9251,79.9067 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-2.99762" y1="73.4996" x2="-2.99762" y2="74.781"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-2.99762" y1="74.781" x2="-0.9162" y2="74.781"/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.6242" y="74.4032">WEB-Shop System ERM</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.6242" y="75.1032">Seite 1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.6242" y="75.8032"></text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.6242" y="76.5032">Autor: Georg Steffers</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.6242" y="77.2032">E-Mail: georg@steffers.org</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.6242" y="77.9032"></text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.6242" y="78.6032">Copyright (C)2004 Georg Steffers</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.6242" y="79.3032">erzeugt mit DIA V0.93</text> |
||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke-dasharray: 1 0.4 0.2 0.4; stroke: #000000" d="M -36.9743,65.1782 A 1.52254,1.52254 0 0 0 -38.5532,66.254"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-38.7027,65.7668 -38.5651,66.3086 -38.2142,65.8734 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 1 0.4 0.2 0.4; stroke: #000000" x1="-51.0412" y1="53.4396" x2="-5.04126" y2="53.4396"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 1 0.4 0.2 0.4; stroke: #000000" x1="-51.0412" y1="22.5396" x2="-5.04126" y2="22.5396"/> |
||||
|
<polygon style="fill: #ffffff" points="-6.05014,19.7539 -1.73768,19.7539 -0.916258,20.0553 -0.916258,21.261 -6.05014,21.261 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-6.05014,19.7539 -1.73768,19.7539 -0.916258,20.0553 -0.916258,21.261 -6.05014,21.261 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.73768" y1="19.7539" x2="-1.73768" y2="20.0553"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.73768" y1="20.0553" x2="-0.916258" y2="20.0553"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-3.4832" y="20.6575">Adressdaten</text> |
||||
|
<polygon style="fill: #ffffff" points="-6.80014,50.2539 -1.85768,50.2539 -0.916258,50.6953 -0.916258,52.461 -6.80014,52.461 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-6.80014,50.2539 -1.85768,50.2539 -0.916258,50.6953 -0.916258,52.461 -6.80014,52.461 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.85768" y1="50.2539" x2="-1.85768" y2="50.6953"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.85768" y1="50.6953" x2="-0.916258" y2="50.6953"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-3.8582" y="51.1575">Personen- und</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-3.8582" y="51.8575">Firmendaten</text> |
||||
|
<polygon style="fill: #ffffff" points="-5.67514,70.0039 -1.67768,70.0039 -0.916258,70.4453 -0.916258,72.211 -5.67514,72.211 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-5.67514,70.0039 -1.67768,70.0039 -0.916258,70.4453 -0.916258,72.211 -5.67514,72.211 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.67768" y1="70.0039" x2="-1.67768" y2="70.4453"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.67768" y1="70.4453" x2="-0.916258" y2="70.4453"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-3.2957" y="70.9075">Benutzer-</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-3.2957" y="71.6075">verwaltung</text> |
||||
|
<polygon style="fill: #ffffff" points="-50.8849,84.1989 -48.9849,83.0589 -47.0849,84.1989 -48.9849,85.3389 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-50.8849,84.1989 -48.9849,83.0589 -47.0849,84.1989 -48.9849,85.3389 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-48.7849" y="82.7589">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-48.7849" y="86.4389">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-48.9849" y="84.4489">ist ein</text> |
||||
|
<polygon style="fill: #ffffff" points="-46.2349,84.1989 -44.3349,83.0589 -42.4349,84.1989 -44.3349,85.3389 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-46.2349,84.1989 -44.3349,83.0589 -42.4349,84.1989 -44.3349,85.3389 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-44.1349" y="82.7589">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-44.1349" y="86.4389">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-44.3349" y="84.4489">ist ein</text> |
||||
|
<polygon style="fill: #ffffff" points="-24.5348,84.1989 -22.6348,83.0589 -20.7348,84.1989 -22.6348,85.3389 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-24.5348,84.1989 -22.6348,83.0589 -20.7348,84.1989 -22.6348,85.3389 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-22.4348" y="82.7589">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-22.4348" y="86.4389">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-22.6348" y="84.4489">ist ein</text> |
||||
|
<polygon style="fill: #ffffff" points="-19.6349,84.1989 -17.7349,83.0589 -15.8349,84.1989 -17.7349,85.3389 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-19.6349,84.1989 -17.7349,83.0589 -15.8349,84.1989 -17.7349,85.3389 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-17.5349" y="82.7589">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-17.5349" y="86.4389">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-17.7349" y="84.4489">ist ein</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 1; stroke: #000000" x1="-48.9849" y1="78.3421" x2="-48.9849" y2="83.0589"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 1; stroke: #000000" x1="-44.3349" y1="78.3421" x2="-44.3349" y2="83.0589"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 1; stroke: #000000" x1="-22.6349" y1="78.3421" x2="-22.6349" y2="83.0589"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 1; stroke: #000000" x1="-17.7349" y1="78.3421" x2="-17.7349" y2="83.0589"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-48.9849,85.3389 -48.9849,87.059 -47.1912,87.059 -47.1912,90.009 -49.763,90.009 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-44.3349,85.3389 -44.3349,87.059 -46.2912,87.059 -46.2912,90.009 -44.313,90.009 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-22.6349,85.3389 -22.6349,90.009 -25.2912,90.009 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-17.7349,85.3389 -17.7349,90.009 -14.3462,90.009 "/> |
||||
|
<polygon style="fill: #ffffff" points="-49.438,95.449 -47.038,94.009 -44.638,95.449 -47.038,96.889 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-49.438,95.449 -47.038,94.009 -44.638,95.449 -47.038,96.889 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-46.838" y="93.709">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-46.838" y="97.989">2</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-47.038" y="95.699">deb/kred</text> |
||||
|
<polygon style="fill: #ffffff" points="-30.1912,95.429 -27.7912,93.989 -25.3912,95.429 -27.7912,96.869 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-30.1912,95.429 -27.7912,93.989 -25.3912,95.429 -27.7912,96.869 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-27.5912" y="93.689">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-27.5912" y="97.969">2</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-27.7912" y="95.679">deb/kred</text> |
||||
|
<polygon style="fill: #ffffff" points="-14.9212,95.379 -12.5212,93.939 -10.1212,95.379 -12.5212,96.819 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-14.9212,95.379 -12.5212,93.939 -10.1212,95.379 -12.5212,96.819 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-12.3212" y="93.639">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-12.3212" y="97.919">2</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-12.5212" y="95.629">deb/kred</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-47.038" y1="91.009" x2="-47.038" y2="94.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-27.7912" y1="91.009" x2="-27.7912" y2="93.989"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-12.5212" y1="91.009" x2="-12.5212" y2="93.939"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-27.7912,96.869 -27.7912,99.0186 -24.9912,99.0186 -24.9912,107.007 -26.8243,107.007 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-12.5212,96.819 -12.5212,99.0186 -24.0912,99.0186 -24.0912,107.007 -23.1743,107.007 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-47.038,96.889 -47.038,101.005 -25.9412,101.005 -25.9412,107.007 -26.8243,107.007 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-31.9056" y="106.718">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-39.0868" y="106.718">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-35.0992" y="109.599">n</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-32.1267" y1="107.007" x2="-26.8243" y2="107.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.638" y1="107.007" x2="-38.4767" y2="107.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-35.3017" y1="108.912" x2="-35.3017" y2="113.962"/> |
||||
|
<polygon style="fill: #ffffff" points="-49.463,111.417 -47.038,109.962 -44.613,111.417 -47.038,112.872 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-49.463,111.417 -47.038,109.962 -44.613,111.417 -47.038,112.872 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-46.838" y="109.662">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-46.838" y="113.972">n</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-47.038" y="111.667">nr_zu_typ</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-47.038" y1="108.007" x2="-47.038" y2="109.962"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-47.038,112.872 -47.038,114.962 -38.2517,114.962 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-14.8317,107.007 -12.5961,107.007 -12.5961,104.642 -18.0117,104.642 -18.0117,106.462 -24.9993,106.462 -24.9993,106.007 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-14.8317,107.007 -12.5461,107.007 -12.5461,109.372 -18.0117,109.372 -18.0117,107.125 -24.9993,107.125 -24.9993,108.007 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-12.3475" y="105.275">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-12.3475" y="108.931">n</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-43.4993" cy="92.5364" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-43.4993" cy="92.5364" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-43.4993" y="92.7864">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-44.0493" y1="92.9364" x2="-42.9493" y2="92.9364"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-49.9743" cy="92.7864" rx="1.775" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-49.9743" cy="92.7864" rx="1.775" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-49.9743" y="93.0364">vk_nr</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-41.2243" cy="88.0864" rx="2.675" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-41.2243" cy="88.0864" rx="2.675" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-41.2243" y="88.3364">kred_konto</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-40.8243" cy="90.3364" rx="2.575" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-40.8243" cy="90.3364" rx="2.575" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-40.8243" y="90.5864">deb_konto</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-52.1743" cy="88.0364" rx="2.475" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-52.1743" cy="88.0364" rx="2.475" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-52.1743" y="88.2864">id_person</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-52.4743" cy="90.5364" rx="2.125" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-52.4743" cy="90.5364" rx="2.125" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-52.4743" y="90.7864">id_firma</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-50.4242" y1="88.6728" x2="-44.313" y2="91.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-50.3493" y1="90.5364" x2="-47.038" y2="89.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-48.7192" y1="92.15" x2="-47.038" y2="89.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-44.5953" y1="91.9" x2="-47.038" y2="89.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.3993" y1="90.3364" x2="-49.763" y2="90.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.8993" y1="88.0864" x2="-47.038" y2="91.009"/> |
||||
|
<rect style="fill: #ffffff" x="-49.763" y="89.009" width="5.45" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-49.763" y="89.009" width="5.45" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-47.038" y="90.259">verkäufer</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-28.5406" cy="85.6364" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-28.5406" cy="85.6364" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-28.5406" y="85.8864">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-29.0906" y1="86.0364" x2="-27.9906" y2="86.0364"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-32.8656" cy="92.4864" rx="2.725" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-32.8656" cy="92.4864" rx="2.725" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-32.8656" y="92.7364">id_benutzer</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-33.6156" cy="89.9364" rx="2.675" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-33.6156" cy="89.9364" rx="2.675" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-33.6156" y="90.1864">kred_konto</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-32.8656" cy="87.1864" rx="2.575" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-32.8656" cy="87.1864" rx="2.575" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-32.8656" y="87.4364">deb_konto</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-25.2906" cy="87.2364" rx="1.8" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-25.2906" cy="87.2364" rx="1.8" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-25.2906" y="87.4864">an_nr</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-28.5406" y1="86.5364" x2="-27.7912" y2="91.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-25.2906" y1="88.1364" x2="-27.7912" y2="91.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-31.0448" y1="87.8228" x2="-27.7912" y2="91.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-30.9406" y1="89.9364" x2="-30.2912" y2="90.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-30.9387" y1="91.85" x2="-27.7912" y2="89.009"/> |
||||
|
<rect style="fill: #ffffff" x="-30.2912" y="89.009" width="5" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-30.2912" y="89.009" width="5" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-27.7912" y="90.259">anbieter</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-11.6707" cy="85.2164" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-11.6707" cy="85.2164" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-11.6707" y="85.4664">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-12.2207" y1="85.6164" x2="-11.1207" y2="85.6164"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-7.8957" cy="92.3664" rx="2.725" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-7.8957" cy="92.3664" rx="2.725" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-7.8957" y="92.6164">id_benutzer</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-6.94566" cy="89.8664" rx="2.675" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-6.94566" cy="89.8664" rx="2.675" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-6.94566" y="90.1164">kred_konto</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-8.0457" cy="87.3164" rx="2.575" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-8.0457" cy="87.3164" rx="2.575" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-8.0457" y="87.5664">deb_konto</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-14.5207" cy="87.2664" rx="1.8" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-14.5207" cy="87.2664" rx="1.8" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-14.5207" y="87.5164">kd_nr</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-14.5207" y1="88.1664" x2="-12.5212" y2="91.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-11.6707" y1="86.1164" x2="-12.5212" y2="91.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-9.86646" y1="87.9528" x2="-14.3462" y2="91.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-9.62066" y1="89.8664" x2="-10.6962" y2="90.009"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-10.6207" y1="92.3664" x2="-12.5212" y2="89.009"/> |
||||
|
<rect style="fill: #ffffff" x="-14.3462" y="89.009" width="3.65" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-14.3462" y="89.009" width="3.65" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-12.5212" y="90.259">kunde</text> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 1 0.4 0.2 0.4; stroke: #000000" points="-51.1259,81.8793 -37.0124,81.8793 -37.0124,100.016 -5.24268,100.016 "/> |
||||
|
<polygon style="fill: #ffffff" points="-5.67514,96.7449 -1.67768,96.7449 -0.916258,97.1863 -0.916258,98.952 -5.67514,98.952 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-5.67514,96.7449 -1.67768,96.7449 -0.916258,97.1863 -0.916258,98.952 -5.67514,98.952 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.67768" y1="96.7449" x2="-1.67768" y2="97.1863"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.67768" y1="97.1863" x2="-0.916258" y2="97.1863"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-3.2957" y="97.6485">Benutzer-</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-3.2957" y="98.3485">verwaltung</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-29.6782" cy="111.715" rx="2.275" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-29.6782" cy="111.715" rx="2.275" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-29.6782" y="111.965">b_kto_nr</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-21.0532" cy="114.115" rx="2.15" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-21.0532" cy="114.115" rx="2.15" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-21.0532" y="114.365">b_name</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-29.1032" cy="108.915" rx="1.8" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-29.1032" cy="108.915" rx="1.8" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-29.1032" y="109.165">name</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-21.4282" cy="105.015" rx="1.425" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-21.4282" cy="105.015" rx="1.425" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-21.4282" y="105.265">blz</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-20.5532" cy="109.115" rx="2.05" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-20.5532" cy="109.115" rx="2.05" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-20.5532" y="109.365">summe</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-29.2282" cy="105.215" rx="1.925" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-29.2282" cy="105.215" rx="1.925" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-29.2282" y="105.465">kto_nr</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-30.1532" y1="105.615" x2="-28.3032" y2="105.615"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-20.1032" cy="111.665" rx="2.45" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-20.1032" cy="111.665" rx="2.45" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-20.1032" y="111.915">konto_typ</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-20.6282" cy="102.765" rx="2.475" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-20.6282" cy="102.765" rx="2.475" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-20.6282" y="103.015">saldo_soll</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-29.9282" cy="102.865" rx="2.875" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-29.9282" cy="102.865" rx="2.875" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-29.9282" y="103.115">saldo_haben</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-27.8953" y1="103.501" x2="-24.9993" y2="108.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-27.867" y1="105.851" x2="-23.1743" y2="108.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-27.8304" y1="108.278" x2="-24.9993" y2="106.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-28.0695" y1="111.078" x2="-24.9993" y2="106.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-22.5735" y1="113.478" x2="-24.9993" y2="106.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-22.3783" y1="103.401" x2="-24.9993" y2="108.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-21.8356" y1="111.028" x2="-24.9993" y2="106.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-22.0028" y1="108.478" x2="-24.9993" y2="106.007"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-36.4333" cy="102.715" rx="2.3" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-36.4333" cy="102.715" rx="2.3" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-36.4333" y="102.965">konto_nr</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-37.7333" y1="103.115" x2="-35.1333" y2="103.115"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-41.0083" cy="105.415" rx="1.725" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-41.0083" cy="105.415" rx="1.725" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-41.0083" y="105.665">used</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-41.7833" cy="103.115" rx="2.45" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-41.7833" cy="103.115" rx="2.45" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-41.7833" y="103.365">konto_typ</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-39.2833" y1="105.415" x2="-32.1267" y2="108.912"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-39.3333" y1="103.115" x2="-32.1267" y2="108.912"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-36.4333" y1="103.615" x2="-32.1267" y2="108.912"/> |
||||
|
<rect style="fill: #ffffff" x="-38.4767" y="105.102" width="6.35" height="3.81"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-38.4767" y="105.102" width="6.35" height="3.81"/> |
||||
|
<polygon style="fill: #ffffff" points="-38.4767,107.007 -35.3017,105.102 -32.1267,107.007 -35.3017,108.912 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-38.4767,107.007 -35.3017,105.102 -32.1267,107.007 -35.3017,108.912 "/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-35.3017" y="107.257">used_konten</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-9.9032" cy="101.865" rx="3" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-9.9032" cy="101.865" rx="3" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-9.9032" y="102.115">buchungstext</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-7.2032" cy="106.415" rx="2.15" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-7.2032" cy="106.415" rx="2.15" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-7.2032" y="106.665">kto_soll</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-8.3532" y1="106.815" x2="-6.0532" y2="106.815"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-11.3032" cy="110.665" rx="1.85" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-11.3032" cy="110.665" rx="1.85" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-11.3032" y="110.915">be_nr</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-7.0032" cy="111.815" rx="1.9" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-7.0032" cy="111.815" rx="1.9" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-7.0032" y="112.065">berag</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-7.1032" cy="104.215" rx="2.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-7.1032" cy="104.215" rx="2.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-7.1032" y="104.465">kto_haben</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-8.6532" y1="104.615" x2="-5.5532" y2="104.615"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-6.8782" cy="108.815" rx="2.175" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-6.8782" cy="108.815" rx="2.175" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-6.8782" y="109.065">bu_date</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-9.9032" y1="102.765" x2="-12.5567" y2="108.372"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-8.90632" y1="104.851" x2="-12.5567" y2="108.372"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-9.3532" y1="106.415" x2="-14.8317" y2="107.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-9.0532" y1="108.815" x2="-12.5567" y2="105.642"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-8.3467" y1="111.178" x2="-12.5567" y2="105.642"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-11.3032" y1="109.765" x2="-12.5567" y2="105.642"/> |
||||
|
<rect style="fill: #ffffff" x="-14.8317" y="105.642" width="4.55" height="2.73"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-14.8317" y="105.642" width="4.55" height="2.73"/> |
||||
|
<polygon style="fill: #ffffff" points="-14.8317,107.007 -12.5567,105.642 -10.2817,107.007 -12.5567,108.372 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-14.8317,107.007 -12.5567,105.642 -10.2817,107.007 -12.5567,108.372 "/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-12.5567" y="107.257">buchung</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-51.3053" cy="104.365" rx="3.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-51.3053" cy="104.365" rx="3.075" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-51.3053" y="104.615">beschreibung</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-52.8303" cy="106.765" rx="1.8" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-52.8303" cy="106.765" rx="1.8" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-52.8303" y="107.015">name</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-53.6303" y1="107.165" x2="-52.0303" y2="107.165"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-52.1303" cy="109.465" rx="2.45" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-52.1303" cy="109.465" rx="2.45" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-52.1303" y="109.715">konto_typ</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-53.5803" y1="109.865" x2="-50.6803" y2="109.865"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-37.1803" cy="117.765" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-37.1803" cy="117.765" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-37.1803" y="118.015">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-37.7303" y1="118.165" x2="-36.6303" y2="118.165"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-30.8553" cy="117.165" rx="1.975" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-30.8553" cy="117.165" rx="1.975" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-30.8553" y="117.415">nr_von</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-29.1803" cy="114.965" rx="2.45" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-29.1803" cy="114.965" rx="2.45" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-29.1803" y="115.215">konto_typ</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-30.6303" y1="115.365" x2="-27.7303" y2="115.365"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-33.6803" cy="118.665" rx="1.9" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-33.6803" cy="118.665" rx="1.9" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-33.6803" y="118.915">nr_bis</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-40.5803" cy="116.715" rx="1.8" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-40.5803" cy="116.715" rx="1.8" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-40.5803" y="116.965">name</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-41.3803" y1="117.115" x2="-39.7803" y2="117.115"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-49.131" y1="105.001" x2="-47.038" y2="108.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-51.0303" y1="106.765" x2="-43.638" y2="107.007"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-50.3979" y1="108.828" x2="-47.038" y2="106.007"/> |
||||
|
<rect style="fill: #ffffff" x="-50.438" y="106.007" width="6.8" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-50.438" y="106.007" width="6.8" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-47.038" y="107.257">konten_typen</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-39.3075" y1="116.078" x2="-35.3017" y2="113.962"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-37.1803" y1="116.865" x2="-35.3017" y2="113.962"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-33.6803" y1="117.765" x2="-35.3017" y2="113.962"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-32.2519" y1="116.528" x2="-35.3017" y2="113.962"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-31.6303" y1="114.965" x2="-38.2517" y2="115.962"/> |
||||
|
<rect style="fill: #ffffff" x="-38.2517" y="113.962" width="5.9" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-38.2517" y="113.962" width="5.9" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-35.3017" y="115.212">kontenplan</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-24.9993" y1="108.007" x2="-24.9993" y2="121.975"/> |
||||
|
<polygon style="fill: #ffffff" points="-44.963,126.94 -43.438,126.025 -41.913,126.94 -43.438,127.855 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-44.963,126.94 -43.438,126.025 -41.913,126.94 -43.438,127.855 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-43.238" y="125.725">1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-43.238" y="128.955">1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-43.438" y="127.19">aus</text> |
||||
|
<polygon style="fill: #ffffff" points="-44.788,133.835 -43.438,133.025 -42.088,133.835 -43.438,134.645 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-44.788,133.835 -43.438,133.025 -42.088,133.835 -43.438,134.645 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-43.238" y="132.725">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-43.238" y="135.745">m</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-43.438" y="134.085">ist</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.438" y1="124.385" x2="-43.438" y2="126.025"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.438" y1="127.855" x2="-43.438" y2="129.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.438" y1="131.46" x2="-43.438" y2="133.025"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.438" y1="134.645" x2="-43.438" y2="138.825"/> |
||||
|
<polygon style="fill: #ffffff" points="-37.906,130.46 -35.906,129.26 -33.906,130.46 -35.906,131.66 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-37.906,130.46 -35.906,129.26 -33.906,130.46 -35.906,131.66 "/> |
||||
|
<text style="fill: #000000; text-anchor:end; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-38.206" y="130.16">n</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-33.606" y="130.16">m</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-35.906" y="130.71">enthält</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-39.813" y1="130.46" x2="-37.906" y2="130.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-33.906" y1="130.46" x2="-28.3993" y2="130.46"/> |
||||
|
<polygon style="fill: #ffffff" points="-27.3493,123.385 -24.9993,121.975 -22.6493,123.385 -24.9993,124.795 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-27.3493,123.385 -24.9993,121.975 -22.6493,123.385 -24.9993,124.795 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-24.7993" y="121.675">2</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-24.7993" y="125.895">n</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-24.9993" y="123.635">aufw/ertr</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-24.9993" y1="124.795" x2="-24.9993" y2="129.46"/> |
||||
|
<polygon style="fill: #ffffff" points="-14.5317,130.46 -12.5567,129.275 -10.5817,130.46 -12.5567,131.645 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-14.5317,130.46 -12.5567,129.275 -10.5817,130.46 -12.5567,131.645 "/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-12.3567" y="128.975">0,1</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-12.3567" y="132.745">1</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: sans; font-style: normal; font-weight: normal" x="-12.5567" y="130.71">parent</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 1 0.4 0.2 0.4; stroke: #000000" x1="-51.1153" y1="120.405" x2="-5.11531" y2="120.405"/> |
||||
|
<polygon style="fill: #ffffff" points="-14.0621,153.955 -3.13462,153.955 -1.0532,155.236 -1.0532,160.362 -14.0621,160.362 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-14.0621,153.955 -3.13462,153.955 -1.0532,155.236 -1.0532,160.362 -14.0621,160.362 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-3.13462" y1="153.955" x2="-3.13462" y2="155.236"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-3.13462" y1="155.236" x2="-1.0532" y2="155.236"/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.7612" y="154.859">WEB-Shop System ERM</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.7612" y="155.559">Seite 2</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.7612" y="156.259"></text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.7612" y="156.959">Autor: Georg Steffers</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.7612" y="157.659">E-Mail: georg@steffers.org</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.7612" y="158.359"></text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.7612" y="159.059">Copyright (C)2004 Georg Steffers</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-12.7612" y="159.759">erzeugt mit DIA V0.93</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-22.4358" y1="105.651" x2="-26.8243" y2="108.007"/> |
||||
|
<rect style="fill: #ffffff" x="-26.8243" y="106.007" width="3.65" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-26.8243" y="106.007" width="3.65" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-24.9993" y="107.257">konto</text> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-24.9993,129.46 -24.9993,130.075 -16.4038,130.075 -16.4038,128.025 -12.5567,128.025 -12.5567,129.275 "/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-24.9993,131.46 -24.9993,130.65 -16.4279,130.65 -16.4279,133.025 -12.5567,133.025 -12.5567,131.645 "/> |
||||
|
<polygon style="fill: #ffffff" points="-3.83776,117 -1.4153,117 -0.953878,117.441 -0.953878,119.207 -3.83776,119.207 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-3.83776,117 -1.4153,117 -0.953878,117.441 -0.953878,119.207 -3.83776,119.207 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.4153" y1="117" x2="-1.4153" y2="117.441"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.4153" y1="117.441" x2="-0.953878" y2="117.441"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-2.39582" y="117.904">FiBu</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-2.39582" y="118.604">Daten</text> |
||||
|
<polygon style="fill: #ffffff" points="-6.82463,136.825 -1.88217,136.825 -0.940748,137.266 -0.940748,139.032 -6.82463,139.032 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" points="-6.82463,136.825 -1.88217,136.825 -0.940748,137.266 -0.940748,139.032 -6.82463,139.032 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.88217" y1="136.825" x2="-1.88217" y2="137.266"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-1.88217" y1="137.266" x2="-0.940748" y2="137.266"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-3.88269" y="137.729">Warengruppen/</text> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.7; font-family: courier new; font-style: italic; font-weight: normal" x="-3.88269" y="138.429">Produktdaten</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-32.0611" cy="135.4" rx="3.125" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-32.0611" cy="135.4" rx="3.125" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-32.0611" y="135.65">produkt_typen</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-28.4861" cy="126.2" rx="2.7" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-28.4861" cy="126.2" rx="2.7" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-28.4861" y="126.45">aufw_konto</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-21.3861" cy="126.2" rx="2.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-21.3861" cy="126.2" rx="2.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-21.3861" y="126.45">ertr_konto</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-20.5361" cy="128.35" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-20.5361" cy="128.35" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-20.5361" y="128.6">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-21.0861" y1="128.75" x2="-19.9861" y2="128.75"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-27.3861" cy="137.05" rx="2.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-27.3861" cy="137.05" rx="2.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-27.3861" y="137.3">kurzbesch</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-17.0611" cy="134.4" rx="3.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-17.0611" cy="134.4" rx="3.075" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-17.0611" y="134.65">beschreibung</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-31.0111" cy="128.6" rx="2.225" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-31.0111" cy="128.6" rx="2.225" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-31.0111" y="128.85">steuerkl</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-30.8861" cy="132.85" rx="2.25" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-30.8861" cy="132.85" rx="2.25" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-30.8861" y="133.1">pic_path</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-25.6111" cy="133.75" rx="1.675" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-25.6111" cy="133.75" rx="1.675" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-25.6111" y="134">tiefe</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-23.0111" cy="135.55" rx="2.375" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-23.0111" cy="135.55" rx="2.375" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-23.0111" y="135.8">is_parent</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-21.5361" cy="133" rx="1.8" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-21.5361" cy="133" rx="1.8" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-21.5361" y="133.25">name</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" x1="-22.3361" y1="133.4" x2="-20.7361" y2="133.4"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-29.4378" y1="129.236" x2="-24.9993" y2="131.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-28.4861" y1="127.1" x2="-24.9993" y2="131.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-23.1893" y1="126.836" x2="-24.9993" y2="131.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-21.6321" y1="128.986" x2="-24.9993" y2="131.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-29.2951" y1="132.213" x2="-28.3993" y2="131.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-29.8514" y1="134.763" x2="-24.9993" y2="129.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-25.6111" y1="132.85" x2="-24.9993" y2="129.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-23.0111" y1="134.65" x2="-24.9993" y2="129.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-22.8089" y1="132.363" x2="-24.9993" y2="129.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-17.0611" y1="133.5" x2="-21.5993" y2="131.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-29.1893" y1="136.413" x2="-24.9993" y2="129.46"/> |
||||
|
<rect style="fill: #ffffff" x="-28.3993" y="129.46" width="6.8" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-28.3993" y="129.46" width="6.8" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-24.9993" y="130.71">warengruppen</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-37.4743" cy="122.75" rx="2.475" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-37.4743" cy="122.75" rx="2.475" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-37.4743" cy="122.75" rx="2.075" ry="0.7"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-37.4743" y="123">zusatzinfo</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-39.9493" y1="122.75" x2="-46.163" y2="123.385"/> |
||||
|
<rect style="fill: #ffffff" x="-46.163" y="122.385" width="5.45" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-46.163" y="122.385" width="5.45" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-45.913" y="122.635" width="4.95" height="1.5"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-43.438" y="123.635">typ_table</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-48.622" cy="128" rx="2.35" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-48.622" cy="128" rx="2.35" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-48.622" y="128.25">typ_table</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-50.772" cy="130.55" rx="2.75" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-50.772" cy="130.55" rx="2.75" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-50.772" y="130.8">produkt_typ</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-52.522" y1="130.95" x2="-49.022" y2="130.95"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-48.822" cy="133.05" rx="2.9" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-48.822" cy="133.05" rx="2.9" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-48.822" y="133.3">bezeichnung</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-46.9603" y1="128.636" x2="-43.438" y2="131.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-48.022" y1="130.55" x2="-47.063" y2="130.46"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-46.7713" y1="132.413" x2="-43.438" y2="129.46"/> |
||||
|
<rect style="fill: #ffffff" x="-47.063" y="129.46" width="7.25" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-47.063" y="129.46" width="7.25" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-43.438" y="130.71">produkt_typen</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-46.4128" cy="137.025" rx="1.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-46.4128" cy="137.025" rx="1.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-46.4128" y="137.275">_id_</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-46.9628" y1="137.425" x2="-45.8628" y2="137.425"/> |
||||
|
<ellipse style="fill: #ffffff" cx="-45.6128" cy="143.175" rx="1.8" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-45.6128" cy="143.175" rx="1.8" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-45.6128" y="143.425">name</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-49.7128" cy="141.375" rx="2.55" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-49.7128" cy="141.375" rx="2.55" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-49.7128" y="141.625">kurzbesch</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-37.8628" cy="139.325" rx="2.35" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-37.8628" cy="139.325" rx="2.35" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-37.8628" y="139.575">small_pic</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-37.7378" cy="141.625" rx="2.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-37.7378" cy="141.625" rx="2.075" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-37.7378" y="141.875">big_pic</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-49.7878" cy="138.975" rx="3.075" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-49.7878" cy="138.975" rx="3.075" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-49.7878" y="139.225">beschreibung</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-39.1878" cy="137.125" rx="3.125" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke-dasharray: 0.3; stroke: #000000" cx="-39.1878" cy="137.125" rx="3.125" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-39.1878" y="137.375">produkt_typen</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-43.4378" cy="145.725" rx="1.775" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-43.4378" cy="145.725" rx="1.775" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-43.4378" y="145.975">preis</text> |
||||
|
<ellipse style="fill: #ffffff" cx="-41.1378" cy="143.275" rx="1.825" ry="0.9"/> |
||||
|
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" cx="-41.1378" cy="143.275" rx="1.825" ry="0.9"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 0.8; font-family: serif; font-style: normal; font-weight: normal" x="-41.1378" y="143.525">stück</text> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-45.3167" y1="137.661" x2="-43.438" y2="140.825"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-46.7128" y1="138.975" x2="-41.163" y2="139.825"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-47.1628" y1="141.375" x2="-43.438" y2="138.825"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-45.6128" y1="142.275" x2="-43.438" y2="138.825"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-43.4378" y1="144.825" x2="-43.438" y2="138.825"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-41.1378" y1="142.375" x2="-43.438" y2="138.825"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-39.8128" y1="141.625" x2="-43.438" y2="138.825"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-40.2128" y1="139.325" x2="-45.713" y2="139.825"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x1="-41.3975" y1="137.761" x2="-43.438" y2="140.825"/> |
||||
|
<rect style="fill: #ffffff" x="-45.713" y="138.825" width="4.55" height="2"/> |
||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #000000" x="-45.713" y="138.825" width="4.55" height="2"/> |
||||
|
<text style="fill: #000000; text-anchor:middle; font-size: 1; font-family: monospace; font-style: normal; font-weight: normal" x="-43.438" y="140.075">produkt</text> |
||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke-dasharray: 0.2; stroke: #000000" d="M -43.3332,77.8712 A 2.14502,2.14502 0 0 0 -39.4436,77.4298"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-42.9061,78.1493 -43.359,77.8217 -43.3493,78.3806 "/> |
||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke-dasharray: 0.2; stroke: #000000" d="M -39.4436,77.4298 A 5.10522,5.10522 0 0 0 -47.9666,76.5435"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-47.8936,76.0391 -48.0007,76.5878 -47.4975,76.3443 "/> |
||||
|
<polygon style="fill: #ffffff" points="-41.6043,77.4298 -37.9743,77.4298 -37.2829,77.8612 -37.2829,79.5869 -41.6043,79.5869 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-41.6043,77.4298 -37.9743,77.4298 -37.2829,77.8612 -37.2829,79.5869 -41.6043,79.5869 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" x1="-37.9743" y1="77.4298" x2="-37.9743" y2="77.8612"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" x1="-37.9743" y1="77.8612" x2="-37.2829" y2="77.8612"/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: normal; font-weight: normal" x="-41.1722" y="78.3084">entweder,</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: normal; font-weight: normal" x="-41.1722" y="79.0084">oder</text> |
||||
|
<polygon style="fill: #ffffff" points="-32.7865,55.0496 -29.1565,55.0496 -28.4651,55.481 -28.4651,57.2067 -32.7865,57.2067 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-32.7865,55.0496 -29.1565,55.0496 -28.4651,55.481 -28.4651,57.2067 -32.7865,57.2067 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" x1="-29.1565" y1="55.0496" x2="-29.1565" y2="55.481"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" x1="-29.1565" y1="55.481" x2="-28.4651" y2="55.481"/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: normal; font-weight: normal" x="-32.3544" y="55.9282">entweder,</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: normal; font-weight: normal" x="-32.3544" y="56.6282">oder</text> |
||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke-dasharray: 0.2; stroke: #000000" d="M -43.3271,84.8646 A 2.14448,2.14448 0 0 0 -39.4736,84.1798"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-42.8834,85.1153 -43.356,84.8167 -43.3113,85.374 "/> |
||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke-dasharray: 0.2; stroke: #000000" d="M -39.4736,84.1798 A 5.06065,5.06065 0 0 0 -47.9696,83.5381"/> |
||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-47.9134,83.0316 -48.0022,83.5835 -47.5074,83.3234 "/> |
||||
|
<polygon style="fill: #ffffff" points="-41.6343,84.1798 -38.0043,84.1798 -37.3129,84.6112 -37.3129,86.3369 -41.6343,86.3369 "/> |
||||
|
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" points="-41.6343,84.1798 -38.0043,84.1798 -37.3129,84.6112 -37.3129,86.3369 -41.6343,86.3369 "/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" x1="-38.0043" y1="84.1798" x2="-38.0043" y2="84.6112"/> |
||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 0.05; stroke: #000000" x1="-38.0043" y1="84.6112" x2="-37.3129" y2="84.6112"/> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: normal; font-weight: normal" x="-41.2022" y="85.0584">entweder,</text> |
||||
|
<text style="fill: #000000; text-anchor:start; font-size: 0.7; font-family: courier new; font-style: normal; font-weight: normal" x="-41.2022" y="85.7584">oder</text> |
||||
|
</svg> |
||||
4617
doc/er/shop.tex
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,435 @@ |
|||||
|
\documentclass[a4paper,12pt]{article} |
||||
|
\usepackage{german,color} |
||||
|
\usepackage[latin1]{inputenc} |
||||
|
\pagestyle{empty} |
||||
|
%\evensidemargin 0cm |
||||
|
%\oddsidemargin 0cm |
||||
|
\textheight 25.5cm |
||||
|
\textwidth 15.9cm |
||||
|
\voffset -2cm |
||||
|
\hoffset -2cm |
||||
|
\renewcommand\floatpagefraction{.9} |
||||
|
\renewcommand\topfraction{.9} |
||||
|
\renewcommand\bottomfraction{.9} |
||||
|
\renewcommand\textfraction{.1} |
||||
|
\setcounter{totalnumber}{50} |
||||
|
\setcounter{topnumber}{50} |
||||
|
\setcounter{bottomnumber}{50} |
||||
|
|
||||
|
\begin{document} |
||||
|
% \appendix |
||||
|
|
||||
|
\begin{center} |
||||
|
\section*{\Large {\sf\bfseries Lebenslauf}\\ \large{\sf Georg Steffers\\}} |
||||
|
\end{center} |
||||
|
|
||||
|
%\hspace{3cm} |
||||
|
%\vspace{-1.5cm} |
||||
|
\small |
||||
|
\newlength{\lwidth} |
||||
|
\newlength{\schulw} |
||||
|
\newlength{\datew} |
||||
|
\newlength{\ortw} |
||||
|
\newlength{\abschlussw} |
||||
|
\settowidth{\schulw}{Hans-B"ockler-Schule} |
||||
|
%\settowidth{\schulw}{Privatbrauerei Rolinck} |
||||
|
\settowidth{\ortw}{Rothenburg/} |
||||
|
\settowidth{\datew}{00.00.0000 - 00.00.0000} |
||||
|
%\settowidth{\abschlussw}{Grundschulabschlu"s} |
||||
|
|
||||
|
\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} |
||||
|
{\begin{minipage}{.948\linewidth} |
||||
|
{\small\sf\bfseries Pers"onliche Daten} |
||||
|
\end{minipage}}}} |
||||
|
|
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\hbox{ |
||||
|
\begin{minipage}[t][][c]{.35\linewidth} |
||||
|
Steffers Georg\\ |
||||
|
Warendorfer Str. 75\\ |
||||
|
48145 M"unster |
||||
|
\end{minipage} |
||||
|
% linewidth: \number\linewidth\\ |
||||
|
% textwidth: \number\textwidth\\ |
||||
|
|
||||
|
\begin{minipage}[t][][t]{.60\linewidth} |
||||
|
\settowidth{\lwidth}{Staatsangeh"origkeit: } |
||||
|
\begin{tabular}[t]{p{\lwidth}l} |
||||
|
Geburtsdatum:&15. Dezember 1973\\ |
||||
|
Geburtsort:&48607 Ochtrup\\ |
||||
|
Familienstand:&ledig\\ |
||||
|
% Konfession:&rk\\ |
||||
|
Staatsangehörigkeit:&deutsch\\ |
||||
|
F"uhrerschein:&Klasse 3,1a |
||||
|
\end{tabular} |
||||
|
\end{minipage}} |
||||
|
%Eltern&&Michael Mustermann, Psychiater\\ |
||||
|
%&&Michaela Mustermann, geb. Musterfrau, Musterberuf\\ |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}} |
||||
|
\vfill |
||||
|
\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} |
||||
|
{\begin{minipage}{.948\linewidth} |
||||
|
{\small\sf\bfseries Schulbildung} |
||||
|
\end{minipage}}}} |
||||
|
|
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}{.94\linewidth} |
||||
|
\setlength{\abschlussw}{\linewidth} |
||||
|
\addtolength{\abschlussw}{-\schulw} |
||||
|
\addtolength{\abschlussw}{-\ortw} |
||||
|
\addtolength{\abschlussw}{-\datew} |
||||
|
\addtolength{\abschlussw}{-8\tabcolsep} |
||||
|
\vspace{5pt} |
||||
|
\begin{tabular}[t] |
||||
|
{p{\schulw}p{\ortw}p{\datew}p{\abschlussw}} |
||||
|
Mariengrundschule&Ochtrup& |
||||
|
01.08.1980 - 27.06.1984& |
||||
|
Grundschulabschlu"s\\ |
||||
|
Gymnasium&Ochtrup& |
||||
|
01.08.1984 - 30.11.1985&\\ |
||||
|
Hauptschule&Ochtrup& |
||||
|
01.12.1985 - 01.06.1990& |
||||
|
Fachoberschulreife\\ |
||||
|
Hans-B"ockler-Schule&M"unster& |
||||
|
01.08.1990 - 30.06.1993& |
||||
|
Fachhochschulreife |
||||
|
\end{tabular} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}} |
||||
|
\vfill |
||||
|
\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} |
||||
|
{\begin{minipage}{.948\linewidth} |
||||
|
{\small\sf\bfseries Ausbildung/Studium} |
||||
|
\end{minipage}}}} |
||||
|
|
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}{.94\linewidth} |
||||
|
\setlength{\abschlussw}{\linewidth} |
||||
|
\addtolength{\abschlussw}{-\schulw} |
||||
|
\addtolength{\abschlussw}{-\ortw} |
||||
|
\addtolength{\abschlussw}{-\datew} |
||||
|
\addtolength{\abschlussw}{-8\tabcolsep} |
||||
|
\vspace{5pt} |
||||
|
\begin{tabular}[t] |
||||
|
{p{\schulw}p{\ortw}p{\datew}p{\abschlussw}} |
||||
|
BIB&Bergisch Gladbach& |
||||
|
04.10.1995 - 30.09.1997& |
||||
|
Stattl. gepr. Informatik\-assistent Softwaretechnologie\\ |
||||
|
Fernuniversit"at&Hagen& |
||||
|
seit 01.10.2002& |
||||
|
\end{tabular} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}} |
||||
|
\vfill |
||||
|
\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} |
||||
|
{\begin{minipage}{.948\linewidth} |
||||
|
{\small\sf\bfseries Wehr-/Zivildienst} |
||||
|
\end{minipage}}}} |
||||
|
|
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}{.94\linewidth} |
||||
|
\setlength{\abschlussw}{\linewidth} |
||||
|
\addtolength{\abschlussw}{-\schulw} |
||||
|
\addtolength{\abschlussw}{-\ortw} |
||||
|
\addtolength{\abschlussw}{-\datew} |
||||
|
\addtolength{\abschlussw}{-8\tabcolsep} |
||||
|
\vspace{5pt} |
||||
|
\begin{tabular}[t] |
||||
|
{p{\schulw}p{\ortw}p{\datew}p{\abschlussw}} |
||||
|
Heeresflieger&Rothenburg/ W"umme& |
||||
|
01.07.1993 - 15.12.1993&Wehrdienst\\ |
||||
|
Pius Hospital&Ochtrup& |
||||
|
16.12.1993 - 30.09.1994&Zivildienst |
||||
|
\end{tabular} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}} |
||||
|
\vfill |
||||
|
\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} |
||||
|
{\begin{minipage}{.948\linewidth} |
||||
|
{\small\sf\bfseries Arbeitsverh"altnisse} |
||||
|
\end{minipage}}}} |
||||
|
|
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}{.94\linewidth} |
||||
|
\setlength{\abschlussw}{\linewidth} |
||||
|
\addtolength{\abschlussw}{-\schulw} |
||||
|
\addtolength{\abschlussw}{-\ortw} |
||||
|
\addtolength{\abschlussw}{-\datew} |
||||
|
\addtolength{\abschlussw}{-8\tabcolsep} |
||||
|
\vspace{5pt} |
||||
|
\begin{tabular}[t] |
||||
|
{p{\schulw}p{\ortw}p{\datew}p{\abschlussw}} |
||||
|
IKK LV-WL&M"unster& |
||||
|
06.04.1998 - 30.11.1998& |
||||
|
Spezielle Datenbankabfragen |
||||
|
die die eingesetzte Software |
||||
|
nicht leisten konnte.\\ |
||||
|
Privatbrauerei Rolinck&Steinfurt& |
||||
|
01.12.1998 - 30.04.1999& |
||||
|
Systemoperating\\ |
||||
|
WWU - Institut f"ur Geophysik&M"unster& |
||||
|
25.05.1999 - 31.05.2000& |
||||
|
Systemadministration\\ |
||||
|
Deltacity.NET&Emsdetten& |
||||
|
01.06.2000 - 30.11.2001& |
||||
|
E-Commerce und Webanwendungen entwickelt.\\ |
||||
|
Gamigo AG&Rheine& |
||||
|
01.12.2001 - 30.04.2002& |
||||
|
Webanwendungen entwickelt.\\ |
||||
|
WWU - ZIV&M"unster& |
||||
|
seit Mitte 2003& |
||||
|
Portieren einer \mbox{AutoCAD} Application von AIX |
||||
|
(\mbox{AutoCAD V12}) auf Windows (erst \mbox{AutoCAD V14} |
||||
|
dann \mbox{AutoCAD 2004}). |
||||
|
\end{tabular} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}} |
||||
|
%\vfill |
||||
|
%\begin{flushright}bitte wenden\end{flushright} |
||||
|
\newpage |
||||
|
\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} |
||||
|
{\begin{minipage}{.948\linewidth} |
||||
|
{\small\sf\bfseries Kenntnisse} |
||||
|
\end{minipage}}}} |
||||
|
|
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{ |
||||
|
\begin{minipage}[t][\height][c]{.5\linewidth}\begin{center} |
||||
|
\vbox{\frame{\makebox[.96\linewidth][c]{ |
||||
|
\begin{minipage}[t][15pt][c]{.94\linewidth} |
||||
|
{\small\sf Betriebssysteme} |
||||
|
\end{minipage}}} |
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t]{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t][][c]{.44\linewidth} |
||||
|
Linux |
||||
|
\end{minipage} |
||||
|
\begin{minipage}[t][][c]{.44\linewidth} |
||||
|
\begin{tabular}[t]{lr} |
||||
|
Installation&1\\ |
||||
|
Administration&2\\ |
||||
|
Scriptsprachen&1 |
||||
|
\end{tabular} |
||||
|
\end{minipage}}} |
||||
|
\vspace{2pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t][][c]{.44\linewidth} |
||||
|
Windows (NT/2000/XP/98) |
||||
|
\end{minipage} |
||||
|
\begin{minipage}[t][][c]{.44\linewidth} |
||||
|
\begin{tabular}[t]{lr} |
||||
|
Installation&2\\ |
||||
|
Administration&3\\ |
||||
|
Anwenden&3 |
||||
|
\end{tabular} |
||||
|
\end{minipage}}} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}}} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\frame{\makebox[.96\linewidth][c]{ |
||||
|
\begin{minipage}[t][15pt][c]{.94\linewidth} |
||||
|
{\small\sf APIs/Libs} |
||||
|
\end{minipage}}} |
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t]{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{tabular*}{.88\linewidth}[t] |
||||
|
{@{\extracolsep\fill}lr} |
||||
|
XWin-API&3\\ |
||||
|
Win32-API&4\\ |
||||
|
GTK&3\\ |
||||
|
BSD Socket Layer&3\\ |
||||
|
JDBC/ODBC&3\\ |
||||
|
Servlets/JSP&4\\ |
||||
|
OpenGL&(vermutlich) 3\\ |
||||
|
Linux System&3 |
||||
|
\end{tabular*}}} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}}} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\frame{\makebox[.96\linewidth][c]{ |
||||
|
\begin{minipage}[t][15pt][c]{.94\linewidth} |
||||
|
{\small\sf Software} |
||||
|
\end{minipage}}} |
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t]{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{tabular*}{.88\linewidth}[t] |
||||
|
{@{\extracolsep\fill}lr} |
||||
|
Dia&2\\ |
||||
|
Vim&1\\ |
||||
|
\LaTeX&2\\ |
||||
|
OpenOffice&3\\ |
||||
|
Gimp&3\\ |
||||
|
Blender&3\\ |
||||
|
AutoCAD&3\\ |
||||
|
Photoshop&3 |
||||
|
\end{tabular*}}} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}}} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\frame{\makebox[.96\linewidth][c]{ |
||||
|
\begin{minipage}[t][15pt][c]{.94\linewidth} |
||||
|
{\small\sf Softwareengineering} |
||||
|
\end{minipage}}} |
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t]{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{tabular*}{.88\linewidth}[t] |
||||
|
{@{\extracolsep\fill}lr} |
||||
|
Pflichten-/Lastenheft erstellen&3\\ |
||||
|
OOA&3\\ |
||||
|
ERM&3\\ |
||||
|
UML&3 |
||||
|
\end{tabular*}}} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}}} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\frame{\makebox[.96\linewidth][c]{ |
||||
|
\begin{minipage}[t][15pt][c]{.94\linewidth} |
||||
|
{\small\sf Hardware} |
||||
|
\end{minipage}}} |
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t]{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{tabular*}{.88\linewidth}[t] |
||||
|
{@{\extracolsep\fill}lr} |
||||
|
PC-Hardware einbauen&2\\ |
||||
|
kleine bis mittlere LANs&2\\ |
||||
|
St"orungssuche&3 |
||||
|
\end{tabular*}}} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}}} |
||||
|
\end{center} |
||||
|
\end{minipage} |
||||
|
\begin{minipage}[t][\height][c]{.5\linewidth}\begin{center} |
||||
|
\vbox{\frame{\makebox[.96\linewidth][c]{ |
||||
|
\begin{minipage}[t][15pt][c]{.94\linewidth} |
||||
|
{\small\sf Programmiersprachen} |
||||
|
\end{minipage}}} |
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t]{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{tabular*}{.88\linewidth}[t] |
||||
|
{@{\extracolsep\fill}lr} |
||||
|
C&1\\ |
||||
|
C++&1\\ |
||||
|
Java&3\\ |
||||
|
Pascal&2\\ |
||||
|
Basic&3\\ |
||||
|
Cobol&4\\ |
||||
|
Lisp/Scheme&3\\ |
||||
|
TCL&4\\ |
||||
|
Perl&3\\ |
||||
|
PHP&2\\ |
||||
|
JavaScript&3\\ |
||||
|
HTML&2\\ |
||||
|
SQL&2 |
||||
|
\end{tabular*}}} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}}} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\frame{\makebox[.96\linewidth][c]{ |
||||
|
\begin{minipage}[t][15pt][c]{.94\linewidth} |
||||
|
{\small\sf Datenbanken} |
||||
|
\end{minipage}}} |
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t]{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\parbox[t][][c]{.88\linewidth} |
||||
|
{Allgemein gute Kenntnisse in SQL, daher leichter |
||||
|
Einstieg in jedes SQL-Datenbanksystem.\\ |
||||
|
Ich hatte bisher Kontakt mit folgenden |
||||
|
Datenbanksystemen:}}} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{tabular*}{.88\linewidth}[t] |
||||
|
{@{\extracolsep\fill}lr} |
||||
|
PostgreSQL&1\\ |
||||
|
MySQL&1\\ |
||||
|
Adabas&3\\ |
||||
|
Informix&3\\ |
||||
|
\end{tabular*}}} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}}} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\frame{\makebox[.96\linewidth][c]{ |
||||
|
\begin{minipage}[t][15pt][c]{.94\linewidth} |
||||
|
{\small\sf Dienste einrichten/konfigurieren} |
||||
|
\end{minipage}}} |
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t]{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{tabular*}{.88\linewidth}[t] |
||||
|
{@{\extracolsep\fill}lr} |
||||
|
SMTP (Postfix)&3\\ |
||||
|
HTTP (Apache)&3\\ |
||||
|
FTP (ProFtp)&3\\ |
||||
|
DNS (BIND pre 8)&3\\ |
||||
|
NTP&3\\ |
||||
|
NFS (Linux Kernel NFS)&3\\ |
||||
|
NIS&3\\ |
||||
|
SSH (OpenSSH)&3 |
||||
|
\end{tabular*}}} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}}} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\frame{\makebox[.96\linewidth][c]{ |
||||
|
\begin{minipage}[t][15pt][c]{.94\linewidth} |
||||
|
{\small\sf Fremdsprachen} |
||||
|
\end{minipage}}} |
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}[t]{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
\vbox{\makebox[.96\linewidth][c] |
||||
|
{\begin{tabular*}{.88\linewidth}[t] |
||||
|
{@{\extracolsep\fill}lr} |
||||
|
Englisch&2 |
||||
|
\end{tabular*}}} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}}} |
||||
|
\end{center} |
||||
|
\end{minipage}} |
||||
|
\vspace{5pt} |
||||
|
Bei den Noten handelt es sich um meine Selbsteinsch"atzung. Ausreichend |
||||
|
bedeutet dabei, das ich mich mit der Thematik besch"aftigt habe und |
||||
|
erfolgreich erste Versuche darin gemacht habe. Mangelhafte und |
||||
|
ungen"ugende F"ahigkeiten sind f"ur mich keine F"ahigkeiten und tauchen |
||||
|
darum nicht auf. Wo (vermutlich) vorsteht habe ich nur theoretische |
||||
|
und noch keine praktische Erfahrung. |
||||
|
|
||||
|
Es ist denkbar, das hier nicht alle F"ahigkeiten stehen. Bitte fragen |
||||
|
Sie bei Interesse nach.\\ |
||||
|
\vspace{5pt} |
||||
|
{\tiny 1 sehr gut, 2 gut, 3 befriedigend, % |
||||
|
4 ausreichend, 5 mangelhaft, 6 ungen"ugend} |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}} |
||||
|
\vfill |
||||
|
\frame{\makebox[.96\linewidth][c]{\colorbox[gray]{.8} |
||||
|
{\begin{minipage}{.948\linewidth} |
||||
|
{\small\sf\bfseries Interessen} |
||||
|
\end{minipage}}}} |
||||
|
|
||||
|
\frame{\makebox[.96\linewidth][c] |
||||
|
{\begin{minipage}{.94\linewidth} |
||||
|
\vspace{5pt} |
||||
|
Kino, Musik, Open Source, Schwimmen, Sonne genie"sen, |
||||
|
Mein Linux administrieren |
||||
|
\vspace{5pt} |
||||
|
\end{minipage}}} |
||||
|
\end{document} |
||||
@ -0,0 +1,99 @@ |
|||||
|
begin; |
||||
|
|
||||
|
-- Table und Funktionen um Länder zu verwalten -- |
||||
|
-- [ |
||||
|
drop sequence "land_id_land_seq"; |
||||
|
|
||||
|
drop index "land_ukey1"; |
||||
|
drop index "land_ukey2"; |
||||
|
drop index "land_ukey3"; |
||||
|
|
||||
|
drop function "chk_land" (text,varchar(3),varchar(4)); |
||||
|
drop function "ins_land" (text,varchar(3),varchar(4)); |
||||
|
drop function "get_id_land_by_land" (text); |
||||
|
drop function "get_id_land_by_lnd_kz" (varchar(3)); |
||||
|
drop function "get_id_land_by_vorwahl_l" (varchar(4)); |
||||
|
|
||||
|
drop table "land"; |
||||
|
-- Ende Länder -- |
||||
|
|
||||
|
-- Table und Funktionen um Orte zu verwalten -- |
||||
|
-- [ |
||||
|
drop sequence "ort_id_ort_seq"; |
||||
|
|
||||
|
drop index "ort_ukey1"; |
||||
|
|
||||
|
drop function "chk_ort" (text,varchar(10),int4); |
||||
|
drop function "ins_ort" (text,varchar(10),int4); |
||||
|
drop function "ins_ort" (text,varchar(10),text,varchar(3),varchar(4)); |
||||
|
drop function "get_id_ort_by_ukey1" (varchar(10),int4); |
||||
|
|
||||
|
drop table "ort"; |
||||
|
-- ] |
||||
|
-- ende Orte -- |
||||
|
|
||||
|
-- Table und Funktionen um Adressen zu verwalten -- |
||||
|
-- [ |
||||
|
drop sequence "adresse_id_adresse_seq"; |
||||
|
|
||||
|
drop index "adresse_ukey1"; |
||||
|
|
||||
|
drop function "chk_adresse" (text,varchar(5),varchar(10),int4,int4); |
||||
|
drop function "ins_adresse" (text,varchar(5),varchar(10),int4,int4); |
||||
|
drop function "ins_adresse" (text,varchar(5),varchar(10),text, |
||||
|
varchar(5),text,varchar(3),varchar(4)); |
||||
|
drop function "get_adresse_by_ukey1" (text,varchar(5),varchar(10)); |
||||
|
|
||||
|
drop table "adresse"; |
||||
|
-- ] |
||||
|
-- ende Adressen -- |
||||
|
|
||||
|
-- Tabellen und alles für Personendaten |
||||
|
-- [ |
||||
|
drop sequence "person_id_person_seq"; |
||||
|
|
||||
|
drop index "person_ukey1"; |
||||
|
|
||||
|
drop function "chk_person" (varchar(10),text,text,text,text, |
||||
|
varchar(10),varchar(10),varchar(10),varchar(50), |
||||
|
varchar(50),varchar(100)); |
||||
|
drop function "ins_person" (varchar(10),text,text,text,text, |
||||
|
varchar(10),varchar(10),varchar(10),varchar(50), |
||||
|
varchar(50),varchar(100)); |
||||
|
drop function "ins_person" (varchar(10),text,text,text,text, |
||||
|
varchar(10),varchar(10),varchar(10),varchar(50), |
||||
|
varchar(50),varchar(100),int4,int4,text, |
||||
|
text,money); |
||||
|
drop function "get_id_person_by_ukey1" (text, text, text); |
||||
|
|
||||
|
drop table "person"; |
||||
|
drop table "wohnt"; |
||||
|
-- ] |
||||
|
-- ende Personendaten -- |
||||
|
|
||||
|
-- Arbeitsplatz -- |
||||
|
-- [ |
||||
|
drop sequence "firma_id_firma_seq"; |
||||
|
drop sequence "abteilung_id_abteilung_seq"; |
||||
|
|
||||
|
drop index "firma_ukey1"; |
||||
|
drop index "abteilung_ukey1"; |
||||
|
|
||||
|
drop function "chk_arbeit" (text, text, money, int4, int4); |
||||
|
drop function "ins_arbeit" (text, text, money, int4, int4); |
||||
|
drop function "chk_firma" (text, text, varchar(10)); |
||||
|
drop function "ins_firma" (text, text, varchar(10)); |
||||
|
drop function "chk_abteilung" (text, text, int4, int4); |
||||
|
drop function "ins_abteilung" (text, text, int4, int4); |
||||
|
drop function "ins_abteilung" (text, text, text, text, varchar(10), int4); |
||||
|
|
||||
|
drop table "firma"; |
||||
|
drop table "abteilung"; |
||||
|
drop table "arbeit"; |
||||
|
-- ] |
||||
|
-- ende Arbeitsplatz -- |
||||
|
|
||||
|
drop view "adresse_v"; |
||||
|
drop view "person_v"; |
||||
|
|
||||
|
commit; |
||||
@ -0,0 +1,114 @@ |
|||||
|
-- der große ich mach alles auf einmale Aufruf :-) |
||||
|
-- das hat den anchteil, das beim loggen evtl. Daten verloren gehen, ich |
||||
|
-- vermute das haengt damit zusammen das jede Funktion eine in sich |
||||
|
-- abgeschlossene Transaktion darstellt und somit evt. durch andere Funktionen |
||||
|
-- bereitgestellte Daten nicht sieht. |
||||
|
select firma.ins_arbeit('Chef', 'Buchführung, Systemadministration, Programmierung', 900.00, |
||||
|
person.ins_person('Herr', 'Staatl. gepr. Informatikassistent', |
||||
|
'Steffers', 'Georg', '1973-12-15', NULL, |
||||
|
'8993135', NULL, '01713258578', |
||||
|
'georg@steffers.org', 'www.steffers.org', |
||||
|
adresse.ins_adresse('Warendorfer Straße', '75', '48155', |
||||
|
adresse.ins_ort('Münster', '0251', |
||||
|
adresse.ins_land('Deutschland', 'DE', '+49')), |
||||
|
adresse.id_land_by_lnd_kz('DE'))), |
||||
|
firma.id_abteilung_firma( |
||||
|
firma.ins_firma('Steffers Web- und Systemprogrammierung', |
||||
|
'meine kleine Firma', NULL, |
||||
|
adresse.id_adresse('Warendorfer Straße', '75', '48155', |
||||
|
adresse.id_land_by_lnd_kz('DE'))))); |
||||
|
|
||||
|
select firma.ins_arbeit('Chef2', 'Kundenaquise, Webdesign, Programmierung', 900.00, |
||||
|
person.ins_person('Herr', NULL, |
||||
|
'Engbers', 'Marcus', '1973-01-18', NULL, |
||||
|
'977077', NULL, '01708309739', |
||||
|
'chef@hwmann.de', 'www.steffers.org', |
||||
|
adresse.ins_adresse('Bahnhofstraße', '58', '48607', |
||||
|
adresse.ins_ort('Ochtrup', '02553', |
||||
|
adresse.ins_land('Deutschland', 'DE', '+49')), |
||||
|
adresse.id_land_by_lnd_kz('DE'))), |
||||
|
firma.id_abteilung_firma( |
||||
|
firma.ins_firma('Steffers Web- und Systemprogrammierung', |
||||
|
'meine kleine Firma', NULL, |
||||
|
adresse.id_adresse('Tannenhofallee', '21', '48155', |
||||
|
adresse.id_land_by_lnd_kz('DE'))))); |
||||
|
|
||||
|
--select ins_firma('Steffers Web- und Systemprogrammierung', |
||||
|
-- 'meine kleine Firma', NULL, |
||||
|
-- ins_adresse('Tannenhofallee', '21', '48155', |
||||
|
-- ins_ort('Münster', '0251', |
||||
|
-- ins_land('Deutschland', 'DE', '+49')), |
||||
|
-- id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
|
--select ins_person('Herr', 'Staatl. gepr. Informatikassistent', 'Steffers', |
||||
|
-- 'Georg', '1973-12-15', NULL, '8993135', NULL, '01713258578', |
||||
|
-- 'georg@steffers.org', 'www.steffers.org', |
||||
|
-- ins_adresse('Tannenhofallee', '21', '48155', |
||||
|
-- ins_ort('Münster', '0251', |
||||
|
-- ins_land('Deutschland', 'DE', '+49')), |
||||
|
-- id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
|
--select ins_arbeit('Chef', 'der Mann der alles alleine macht', 900.00, |
||||
|
-- id_person('Steffers', 'Georg', '1973-12-15'), |
||||
|
-- id_abteilung_firma( |
||||
|
-- id_firma('Steffers Web- und Systemprogrammierung', |
||||
|
-- NULL))); |
||||
|
|
||||
|
select person.ins_person('Frau', NULL, 'Vespermann', 'Tina', '1978-07-09', |
||||
|
NULL, '949780', NULL, '01711535514', |
||||
|
'Tante_Tina@t-online.de', NULL, |
||||
|
adresse.ins_adresse('Walkemühlenweg', '8', '37574', |
||||
|
adresse.ins_ort('Einbeck', '05561', |
||||
|
adresse.id_land_by_lnd_kz('DE')), |
||||
|
adresse.id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
|
select person.ins_person('Frau', NULL, 'Steffers', 'Mechtild', '1951-04-09', |
||||
|
NULL, '98266', '98266', NULL, NULL, NULL, |
||||
|
adresse.ins_adresse('Krummer Weg', '31', '48607', |
||||
|
adresse.ins_ort('Ochtrup', '02553', |
||||
|
adresse.id_land_by_lnd_kz('DE')), |
||||
|
adresse.id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
|
select person.ins_person('Herr', NULL, 'Steffers', 'Wilhelm', '1943-09-09', |
||||
|
NULL, '98266', '98266', NULL, NULL, NULL, |
||||
|
adresse.id_adresse('Krummer Weg', '31', '48607', |
||||
|
adresse.id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
|
select person.person_adresse( |
||||
|
person.id_person('Steffers', 'Georg', '1973-12-15'), |
||||
|
adresse.id_adresse('Krummer Weg', '31', '48607', |
||||
|
adresse.id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
|
select person.ins_person('Frau', 'Dipl. Geophysikerin', 'Hofmann', 'Daniela', |
||||
|
'1974-01-27', NULL, '419665', NULL, '01758910013', |
||||
|
'danhof@uni-bremen.de', NULL, |
||||
|
adresse.ins_adresse('Am Staugraben', '7', '28865', |
||||
|
adresse.ins_ort('Lilienthal', '04298', |
||||
|
adresse.id_land_by_lnd_kz('DE')), |
||||
|
adresse.id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
|
select person.ins_person('Herr', 'Dipl. Informatiker', 'Fellmann', 'Ralf', |
||||
|
'1974-01-01', NULL, '6744505', NULL, '01775474207', |
||||
|
'felle@web.de', NULL, |
||||
|
adresse.ins_adresse('Wolbecker Str.', '52', '48155', |
||||
|
adresse.id_ort('0251', |
||||
|
adresse.id_land_by_lnd_kz('DE')), |
||||
|
adresse.id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
|
select person.ins_person('Frau', NULL, 'Voß', 'Anna', '1985-08-03', NULL, |
||||
|
'78523', NULL, '01786916935', 'gab58@web.de', |
||||
|
'www.gab58.de.vu', |
||||
|
adresse.ins_adresse('Weezer Str.', '64', '47623', |
||||
|
adresse.ins_ort('Kevelaer', '02832', |
||||
|
adresse.id_land_by_lnd_kz('DE')), |
||||
|
adresse.id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
|
select person.ins_person('Frau', NULL, 'Bendyk', 'Catharina', '1980-11-10', |
||||
|
NULL, '970289', NULL, '01722374138', |
||||
|
'lost-star@gmx.de', |
||||
|
'www.cyboworld3.de/pages/deswahnsinnsbraut', |
||||
|
adresse.ins_adresse('Witte Sand', '8', '48653', |
||||
|
adresse.ins_ort('Coesfeld', '02541', |
||||
|
adresse.id_land_by_lnd_kz('DE')), |
||||
|
adresse.id_land_by_lnd_kz('DE'))); |
||||
|
|
||||
@ -0,0 +1,5 @@ |
|||||
|
dropdb shop |
||||
|
createdb -E LATIN1 shop |
||||
|
su -c "/home/georg/projects/shopsystem/mk_lang_and_funcs.sh" - postgres |
||||
|
psql -f cr_tables.sql shop |
||||
|
|
||||
@ -0,0 +1,2 @@ |
|||||
|
createlang plpgsql shop |
||||
|
# psql -c "create function get_int4_record_val(record, text) returns int4 as '/home/georg/projects/shopsystem/plpgsql_support' language C;" shop |
||||
@ -0,0 +1,104 @@ |
|||||
|
-- Funktionen um Adressen zu verwalten -- |
||||
|
-- [ |
||||
|
create function "chk_adresse" (text,varchar(5),varchar(10),int4,int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* chk_adresse(strasse, h_nr, plz_a, id_ort, id_land) |
||||
|
* |
||||
|
* ueberpruefen ob die Adresse schon in der DB gespeichert ist. |
||||
|
* |
||||
|
* returns: -1: falsche Parameter |
||||
|
* -2: Inkonsistenz endeckt. Es existiert bereits eine |
||||
|
* Adresse mit dem einer, aber nicht alle der Parameter |
||||
|
* übereinstimmen |
||||
|
* 0: Adresse existiert noch nicht in der DB |
||||
|
* >0: Adresse existiert bereits, gibt id_adresse zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ida adresse.adresse%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF $1 IS NULL OR $1 = '''' OR |
||||
|
$2 IS NULL OR $2 = '''' OR |
||||
|
$3 IS NULL OR $3 = '''' THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
select INTO ida * from adresse.adresse where |
||||
|
strasse = $1 and plz_a = $3 and |
||||
|
id_land = $5; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF ida.h_nr <> $2 OR ida.id_ort <> $4 THEN |
||||
|
RETURN -2; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN ida._id_; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "ins_adresse" (text,varchar(5),varchar(10),int4,int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* ins_adresse(strasse, h_nr, plz_a, id_ort, id_land) |
||||
|
* |
||||
|
* fügt eine Adresse in die DB ein sofern es nicht schon existiert, |
||||
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast |
||||
|
* sind. |
||||
|
* |
||||
|
* returns: 0: wenn die Adresse nicht eingefuegt werden kann |
||||
|
* >0: wenn die Adresse eingefuegt werden konnte oder bereits |
||||
|
* existierte, gibt id_adresse zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
id_adresse adresse.adresse._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO id_adresse adresse.chk_adresse($1, $2, $3, $4, $5); |
||||
|
|
||||
|
IF id_adresse = -1 THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF id_adresse = 0 THEN |
||||
|
insert into adresse.adresse (strasse,h_nr,plz_a, |
||||
|
id_ort,id_land) |
||||
|
values ($1, $2, $3, $4, $5); |
||||
|
|
||||
|
select INTO id_adresse adresse.chk_adresse($1,$2,$3,$4,$5); |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN id_adresse; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "id_adresse" (text,varchar(5),varchar(10),int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* id_adresse(strasse, h_nr, plz_a, id_land) |
||||
|
* |
||||
|
* Ermittelt die id (id_adresse) einer in der DB enthaltenen Adresse |
||||
|
* anhand des Primaerschluessels (vorwahl_o, id_land) |
||||
|
* |
||||
|
* returns: 0: wenn das Land nicht eingefuegt werden kann |
||||
|
* >0: wenn das Land gefunden wurde, gibt id_land zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ida adresse.adresse._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO ida _id_ from adresse.adresse where |
||||
|
strasse = $1 and h_nr = $2 and plz_a = $3 and id_land = $4; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
RETURN ida; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende Adressen -- |
||||
@ -0,0 +1,308 @@ |
|||||
|
-- Funktionen um Arbeitsplaetze zu verwalten -- |
||||
|
-- [ |
||||
|
create function "chk_arbeit" (text,text,numeric(10,2),int4,int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* chk_arbeit(position, beschreibung, gehalt, id_person, id_abteilung) |
||||
|
* |
||||
|
* ueberpruefen ob eine passender Stelle in der DB gespeichert ist. |
||||
|
* |
||||
|
* returns: -1: falsche Parameter |
||||
|
* -2: Inkonsistenz endeckt. Es existiert bereits eine |
||||
|
* Adresse mit dem einer, aber nicht alle der Parameter |
||||
|
* übereinstimmen |
||||
|
* 0: Adresse existiert noch nicht in der DB |
||||
|
* >0: Adresse existiert bereits, gibt id_adresse zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ida firma.arbeit%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF $4 IS NULL OR $4 < 1 OR |
||||
|
$5 IS NULL OR $5 < 1 OR |
||||
|
$1 IS NULL OR $1 = '''' THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
select INTO ida * from firma.arbeit where |
||||
|
id_person = $4 and id_abteilung = $5; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF ida.position <> $1 OR ida.beschreibung <> $2 OR |
||||
|
ida.gehalt <> $3 THEN |
||||
|
RETURN -2; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN 1; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "ins_arbeit" (text,text,numeric(10,2),int4,int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* ins_arbeit(position, beschreibung, gehalt, id_person, id_abteilung) |
||||
|
* |
||||
|
* fügt eine Stelle in die DB ein sofern es nicht schon existiert, |
||||
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast |
||||
|
* sind. |
||||
|
* |
||||
|
* returns: 0: wenn die Adresse nicht eingefuegt werden kann |
||||
|
* >0: wenn die Adresse eingefuegt werden konnte oder bereits |
||||
|
* existierte, gibt id_adresse zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
chk int4; |
||||
|
BEGIN |
||||
|
select INTO chk firma.chk_arbeit($1, $2, $3, $4, $5); |
||||
|
|
||||
|
IF chk = 0 THEN |
||||
|
insert into firma.arbeit (position, beschreibung, gehalt, |
||||
|
id_person, id_abteilung) |
||||
|
values ($1, $2, $3, $4, $5); |
||||
|
|
||||
|
RETURN 1; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN 0; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "chk_firma" (text, text, varchar(10)) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* chk_firma(name, beschreibung, plz_f) |
||||
|
* |
||||
|
* ueberpruefen ob die Firma schon in der DB gespeichert ist. |
||||
|
* |
||||
|
* returns: -1: falsche Parameter |
||||
|
* -2: Inkonsistenz endeckt. Es existiert bereits ein |
||||
|
* Land mit dem einer, aber nicht alle der Parameter |
||||
|
* übereinstimmen |
||||
|
* 0: Land existiert noch nicht in der DB |
||||
|
* >0: Land existiert bereits, gibt id_land zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idf firma.firma%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF $1 IS NULL OR $1 = '''' THEN |
||||
|
return -1; |
||||
|
END IF; |
||||
|
|
||||
|
IF $3 IS NOT NULL THEN |
||||
|
select INTO idf * from firma.firma where |
||||
|
name = $1 and plz_f = $3; |
||||
|
ELSE |
||||
|
select INTO idf * from firma.firma where |
||||
|
name = $1; |
||||
|
END IF; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF idf.beschreibung <> $2 THEN |
||||
|
RETURN -2; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN idf._id_; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "ins_firma" (text, text, varchar(10), int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* ins_firma(name, beschreibung, plz_f, id_adresse) |
||||
|
* |
||||
|
* fügt eine Firma in die DB ein sofern es nicht schon existiert, |
||||
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast |
||||
|
* sind. |
||||
|
* Ausserdem wir die globale Abteilung zu der Firma angelegt, siehe |
||||
|
* cr_tables.sql |
||||
|
* |
||||
|
* returns: 0: wenn die Firma nicht eingefuegt werden kann |
||||
|
* >0: wenn die Firma eingefuegt werden konnte oder bereits |
||||
|
* existierte, gibt id_firma zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idf firma.firma._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO idf firma.chk_firma($1, $2, $3); |
||||
|
|
||||
|
IF idf < 0 THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF idf = 0 THEN |
||||
|
insert into firma.firma (name, beschreibung, plz_f) |
||||
|
values ($1, $2, $3); |
||||
|
|
||||
|
select INTO idf firma.chk_firma($1, $2, $3); |
||||
|
|
||||
|
PERFORM firma.ins_abteilung(''_FIRMA_'', $2, idf, $4); |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN idf; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "id_abteilung" (text, int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* id_abteilung(bezeichnung, id_firma); |
||||
|
* gibt die id_abteilung einer bestimmten Abteilung einer |
||||
|
* bestimmten Firma aus. |
||||
|
* |
||||
|
* returns: 0: wenn keine passnede Abteilung existiert |
||||
|
* >0: die Abteilung (id_abteilung) |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ida firma.abteilung._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO ida _id_ from firma.abteilung where |
||||
|
id_firma = $2 and bezeichnung = $1; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
RETURN ida; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "id_firma" (text,varchar(10)) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* id_firma(name, plz_f); |
||||
|
* gibt die id_abteilung der zentralen Abteilung einer Firma aus |
||||
|
* siehe dazu auch cr_tables.sql |
||||
|
* |
||||
|
* returns: 0: wenn keine passende Firma existiert |
||||
|
* >0: die Firma (id_firma) |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idf firma.firma._id_%TYPE; |
||||
|
BEGIN |
||||
|
IF $2 IS NOT NULL THEN |
||||
|
select INTO idf _id_ from firma.firma where |
||||
|
name = $1 and plz_f = $2; |
||||
|
ELSE |
||||
|
select INTO idf _id_ from firma.firma where |
||||
|
name = $1; |
||||
|
END IF; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
RETURN idf; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "id_abteilung_firma" (int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* id_abteilung_firma(id_firma); |
||||
|
* gibt die id_abteilung der zentralen Abteilung einer Firma aus |
||||
|
* siehe dazu auch cr_tables.sql |
||||
|
* |
||||
|
* returns: 0: wenn keine Firma zu dieser id_firma existiert |
||||
|
* >0: die Abteilung zu der Firma (id_abteilung) |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ida firma.abteilung._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO ida _id_ from firma.abteilung where |
||||
|
id_firma = $1 and bezeichnung = ''_FIRMA_''; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
RETURN ida; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "chk_abteilung" (text, text, int4, int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* chk_abteilung(bezeichnung, beschreibung, id_firma, id_adresse) |
||||
|
* |
||||
|
* ueberpruefen ob die Abteilung schon in der DB gespeichert ist. |
||||
|
* |
||||
|
* returns: -1: falsche Parameter |
||||
|
* -2: Inkonsistenz endeckt. Es existiert bereits ein |
||||
|
* Land mit dem einer, aber nicht alle der Parameter |
||||
|
* übereinstimmen |
||||
|
* 0: Land existiert noch nicht in der DB |
||||
|
* >0: Land existiert bereits, gibt id_land zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ida firma.abteilung%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF $1 IS NULL OR $1 = '''' OR |
||||
|
$3 IS NULL OR $3 < 1 THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
select INTO ida * from firma.abteilung where |
||||
|
bezeichnung = $1 and id_firma = $3; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF ida.beschreibung <> $2 OR |
||||
|
ida.id_adresse <> $4 THEN |
||||
|
RETURN -2; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN ida._id_; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "ins_abteilung" (text, text, int4, int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* ins_abteilung(bezeichnung, beschreibung, id_firma, id_adresse) |
||||
|
* |
||||
|
* fügt eine Abteilung in die DB ein sofern es nicht schon existiert, |
||||
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast |
||||
|
* sind. |
||||
|
* |
||||
|
* returns: 0: wenn die Abteilung nicht eingefuegt werden kann |
||||
|
* >0: wenn die Abteilung eingefuegt werden konnte oder bereits |
||||
|
* existierte, gibt id_firma zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ida firma.abteilung._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO ida firma.chk_abteilung($1, $2, $3, $4); |
||||
|
|
||||
|
IF ida = -1 THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF ida = 0 THEN |
||||
|
insert into firma.abteilung (bezeichnung, beschreibung, |
||||
|
id_firma, id_adresse) |
||||
|
values ($1, $2, $3, $4); |
||||
|
|
||||
|
select INTO ida firma.chk_abteilung($1, $2, $3, $4); |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN ida; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende Arbeitsplatz -- |
||||
@ -0,0 +1,357 @@ |
|||||
|
-- allgemeine Funktionen -- |
||||
|
-- [ |
||||
|
create function start_logging(text, text) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* start_logging(table-name, operation) (INSERT, UPDATE, DELETE) |
||||
|
* |
||||
|
* Startet das logging zu einer bestimmten table. |
||||
|
* |
||||
|
* returns: 1 - logging eingeschaltet |
||||
|
* 0 - logging war schon eingeschaltet |
||||
|
*/ |
||||
|
DECLARE |
||||
|
table_schema text; |
||||
|
table_schema_oid int4; |
||||
|
trig_name_before text; |
||||
|
trig_name_after text; |
||||
|
all_actions _text := ''{\"INSERT\", \"UPDATE\", \"DELETE\"}''; |
||||
|
actions _text; |
||||
|
range int4; |
||||
|
query text; |
||||
|
BEGIN |
||||
|
IF $2 <> ''INSERT'' AND |
||||
|
$2 <> ''UPDATE'' AND |
||||
|
$2 <> ''DELETE'' AND |
||||
|
$2 <> ''CHANGE'' AND |
||||
|
$2 <> ''ALL'' THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
select into table_schema_oid relnamespace |
||||
|
from pg_catalog.pg_class where relname=$1; |
||||
|
select into table_schema nspname from pg_catalog.pg_namespace where |
||||
|
oid=table_schema_oid; |
||||
|
|
||||
|
IF $2 = ''ALL'' THEN |
||||
|
range := 3; |
||||
|
actions := all_actions; |
||||
|
ELSE |
||||
|
IF $2 = ''CHANGE'' THEN |
||||
|
range := 2; |
||||
|
|
||||
|
actions := ''{''; |
||||
|
FOR i IN 1..2 LOOP |
||||
|
actions := actions || quote_ident(all_actions[i]); |
||||
|
IF i<2 THEN |
||||
|
actions := actions || '',''; |
||||
|
ELSE |
||||
|
actions := actions || ''}''; |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
ELSE |
||||
|
range := 1; |
||||
|
actions := ''{'' || quote_ident($2) || ''}''; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
FOR i IN 1..range LOOP |
||||
|
trig_name_before := ''log_before_'' || lower(actions[i]) || |
||||
|
''_'' || $1; |
||||
|
trig_name_after := ''log_after_'' || lower(actions[i]) || |
||||
|
''_'' || $1; |
||||
|
|
||||
|
PERFORM * from pg_catalog.pg_trigger where |
||||
|
tgname=trig_name_before; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
query := ''CREATE TRIGGER '' || trig_name_before || |
||||
|
'' BEFORE '' || actions[i] || '' ON '' || |
||||
|
table_schema || ''.'' || $1 || |
||||
|
'' FOR EACH ROW EXECUTE PROCEDURE '' || |
||||
|
''trigger_func.set_history();''; |
||||
|
EXECUTE query; |
||||
|
|
||||
|
query := ''CREATE TRIGGER '' || trig_name_after || |
||||
|
'' AFTER '' || actions[i] || '' ON '' || |
||||
|
table_schema || ''.'' || $1 || |
||||
|
'' FOR EACH ROW EXECUTE PROCEDURE '' || |
||||
|
''trigger_func.set_history();''; |
||||
|
EXECUTE query; |
||||
|
ELSE |
||||
|
RAISE EXCEPTION ''specified trigger not found''; |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
|
||||
|
RETURN 1; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function stop_logging(text, text) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* stop_logging(table-name, operation) (INSERT, UPDATE, DELETE) |
||||
|
* |
||||
|
* Stoppt das logging zu einer bestimmten table. |
||||
|
* |
||||
|
* returns: 1 - logging eingeschaltet |
||||
|
* 0 - logging war schon eingeschaltet |
||||
|
*/ |
||||
|
DECLARE |
||||
|
table_schema text; |
||||
|
table_schema_oid int4; |
||||
|
trig_name_before text; |
||||
|
trig_name_after text; |
||||
|
all_actions _text := ''{\"INSERT\", \"UPDATE\", \"DELETE\"}''; |
||||
|
actions _text; |
||||
|
range int4; |
||||
|
query text; |
||||
|
BEGIN |
||||
|
IF $2 <> ''INSERT'' AND |
||||
|
$2 <> ''UPDATE'' AND |
||||
|
$2 <> ''DELETE'' AND |
||||
|
$2 <> ''CHANGE'' AND |
||||
|
$2 <> ''ALL'' THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
select into table_schema_oid relnamespace |
||||
|
from pg_catalog.pg_class where relname=$1; |
||||
|
select into table_schema nspname from pg_catalog.pg_namespace where |
||||
|
oid=table_schema_oid; |
||||
|
|
||||
|
IF $2 = ''ALL'' THEN |
||||
|
range := 3; |
||||
|
actions := all_actions; |
||||
|
ELSE |
||||
|
IF $2 = ''CHANGE'' THEN |
||||
|
range := 2; |
||||
|
|
||||
|
actions := ''{''; |
||||
|
FOR i IN 1..2 LOOP |
||||
|
actions := actions || quote_ident(all_actions[i]); |
||||
|
IF i<2 THEN |
||||
|
actions := actions || '',''; |
||||
|
ELSE |
||||
|
actions := actions || ''}''; |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
ELSE |
||||
|
range := 1; |
||||
|
actions := ''{'' || quote_ident($2) || ''}''; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
FOR i IN 1..range LOOP |
||||
|
trig_name_before := ''log_before_'' || lower(actions[i]) || |
||||
|
''_'' || $1; |
||||
|
trig_name_after := ''log_after_'' || lower(actions[i]) || |
||||
|
''_'' || $1; |
||||
|
|
||||
|
PERFORM * from pg_catalog.pg_trigger where |
||||
|
tgname=trig_name_before; |
||||
|
|
||||
|
IF FOUND THEN |
||||
|
query := ''DROP TRIGGER '' || trig_name_before || |
||||
|
'' ON '' || table_schema || ''.'' || $1 || '';''; |
||||
|
EXECUTE query; |
||||
|
|
||||
|
query := ''DROP TRIGGER '' || trig_name_after || |
||||
|
'' ON '' || table_schema || ''.'' || $1 || '';''; |
||||
|
EXECUTE query; |
||||
|
ELSE |
||||
|
RAISE EXCEPTION ''specified trigger not found''; |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
|
||||
|
RETURN 1; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function bit2text(bit varying) |
||||
|
returns text as ' |
||||
|
DECLARE |
||||
|
len int4; |
||||
|
i int4; |
||||
|
conv int4; |
||||
|
ret text := ''''; |
||||
|
BEGIN |
||||
|
len := bit_length($1); |
||||
|
|
||||
|
FOR i IN 0..len-1 LOOP |
||||
|
conv := ($1<<i)::BIT(1)::int4; |
||||
|
ret := ret || conv; |
||||
|
END LOOP; |
||||
|
|
||||
|
RETURN ret; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function bit_set_len(bit varying, int4) |
||||
|
returns bit varying as ' |
||||
|
/* |
||||
|
* bitlen(zu aenderneder Bitstring, len) |
||||
|
* |
||||
|
* Postres hat die dumme regelung, das wenn man die laenge eines |
||||
|
* Bitstrings umcastet immer rechts weggeschnitten oder ergaenzt |
||||
|
* wird. Erwarten tut man allerdings normalerweise das diese dinge |
||||
|
* links passieren, damit der Wert der Bitfolge nicht veraendert, bzw. |
||||
|
* die Positionen der bisherigen Bits nicht veraendert werden. |
||||
|
* genau das macht diese Funktion. |
||||
|
* |
||||
|
* returns: Den veraenderten Bitstring |
||||
|
*/ |
||||
|
DECLARE |
||||
|
old_len int4; |
||||
|
sel text; |
||||
|
dummy RECORD; |
||||
|
BEGIN |
||||
|
old_len := bit_length($1); |
||||
|
|
||||
|
IF old_len < $2 THEN |
||||
|
sel := ''select B'' || quote_literal(bit2text($1)) || |
||||
|
''::BIT('' || $2 || '')>>'' || $2-old_len || |
||||
|
'' as new_val''; |
||||
|
|
||||
|
FOR dummy IN EXECUTE sel LOOP |
||||
|
END LOOP; |
||||
|
ELSE |
||||
|
IF old_len > $2 THEN |
||||
|
sel := ''select (B'' || quote_literal(bit2text($1)) || |
||||
|
''<<'' || old_len-$2 || '')::BIT('' || $2 || |
||||
|
'') as new_val''; |
||||
|
|
||||
|
FOR dummy IN EXECUTE sel LOOP |
||||
|
END LOOP; |
||||
|
ELSE |
||||
|
RETURN $1; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN dummy.new_val; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function mask_len(text, text, text) |
||||
|
returns int4 as ' |
||||
|
DECLARE |
||||
|
len int4 := 0; |
||||
|
result RECORD; |
||||
|
query text; |
||||
|
i int4 := 0; |
||||
|
BEGIN |
||||
|
query := ''select bit_length('' || $2 || '') '' || |
||||
|
''as len from '' || $1; |
||||
|
|
||||
|
FOR result IN EXECUTE query LOOP |
||||
|
IF i = 0 THEN |
||||
|
len := result.len; |
||||
|
i := 1; |
||||
|
END IF; |
||||
|
IF $3 = ''min'' THEN |
||||
|
IF result.len < len THEN |
||||
|
len := result.len; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
IF $3 = ''max'' THEN |
||||
|
IF result.len > len THEN |
||||
|
len := result.len; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
IF $3 IS NULL OR $3 = ''first'' THEN |
||||
|
EXIT; |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
len := 0; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN len; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function corrected_mask(text, text, bit varying) |
||||
|
returns bit varying as ' |
||||
|
DECLARE |
||||
|
len int4; |
||||
|
new bit varying; |
||||
|
BEGIN |
||||
|
select INTO len public.mask_len($1, $2, NULL); |
||||
|
|
||||
|
IF len < bit_length($3) THEN |
||||
|
RETURN $3; |
||||
|
ELSE |
||||
|
RETURN bit_set_len($3, len); |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function get_db_comment(text) |
||||
|
returns text as ' |
||||
|
DECLARE |
||||
|
co text; |
||||
|
dboid pg_catalog.pg_stat_database.datid%TYPE; |
||||
|
BEGIN |
||||
|
select into dboid OID from pg_catalog.pg_database where |
||||
|
datname=$1; |
||||
|
select into co description from pg_catalog.pg_description where |
||||
|
objoid=dboid; |
||||
|
|
||||
|
return co; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function get_schema_comment(text) |
||||
|
returns text as ' |
||||
|
DECLARE |
||||
|
co text; |
||||
|
schemaoid pg_catalog.pg_class.relnamespace%TYPE; |
||||
|
BEGIN |
||||
|
select into schemaoid OID from pg_catalog.pg_namespace where |
||||
|
nspname=$1; |
||||
|
select into co description from pg_catalog.pg_description where |
||||
|
objoid=schemaoid; |
||||
|
|
||||
|
return co; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function get_constraint_comment(text) |
||||
|
returns text as ' |
||||
|
DECLARE |
||||
|
co text; |
||||
|
conoid pg_catalog.pg_stat_database.datid%TYPE; |
||||
|
BEGIN |
||||
|
select into conoid OID from pg_catalog.pg_constraint where |
||||
|
conname=$1; |
||||
|
select into co description from pg_catalog.pg_description where |
||||
|
objoid=conoid; |
||||
|
|
||||
|
return co; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
-- CREATE FUNCTION jdbc_clean(text) RETURNS text AS' |
||||
|
-- /* |
||||
|
-- * Brauchte ich aufgrund eines Bugs im jdbc Treiber, der LATIN1 nicht |
||||
|
-- * korrekt in UNICODE umwandelte. |
||||
|
-- * Jetzt ist dies Funktion obsolet. |
||||
|
-- * |
||||
|
-- */ |
||||
|
-- DECLARE |
||||
|
-- ret text; |
||||
|
-- BEGIN |
||||
|
-- SELECT INTO ret replace($1, ''\\\\344'', ''ä''); |
||||
|
-- SELECT INTO ret replace(ret, ''\\\\366'', ''ö''); |
||||
|
-- SELECT INTO ret replace(ret, ''\\\\374'', ''ü''); |
||||
|
-- SELECT INTO ret replace(ret, ''\\\\337'', ''\ß''); |
||||
|
-- SELECT INTO ret replace(ret, ''\\\\304'', ''Ä''); |
||||
|
-- SELECT INTO ret replace(ret, ''\\\\326'', ''Ö''); |
||||
|
-- SELECT INTO ret replace(ret, ''\\\\334'', ''Ü''); |
||||
|
-- |
||||
|
-- RETURN ret; |
||||
|
-- END; |
||||
|
--' LANGUAGE 'plpgsql' |
||||
|
-- ] |
||||
|
-- allgemeine Funktionen -- |
||||
@ -0,0 +1,259 @@ |
|||||
|
-- allgemeine Funktionen zu Konten -- |
||||
|
-- [ |
||||
|
create function konto_typ_min_len() |
||||
|
returns int4 as ' |
||||
|
DECLARE |
||||
|
len int4; |
||||
|
BEGIN |
||||
|
select INTO len bit_length(mask) from fibu.konten_typen; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
len := 0; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN len; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function konto_typ(text, int4) |
||||
|
returns bit varying as ' |
||||
|
/* |
||||
|
* konto_typ(name, output_len) |
||||
|
* |
||||
|
* ermittelt den konto_typ zu einem entsprechenden namen. |
||||
|
* |
||||
|
* dies existierem hauptsaechlich zur besseren lesbar machung von |
||||
|
* querys bezueglich konten, folgende query ist verstaendlicher, |
||||
|
* wenn auch etwas laenger: |
||||
|
* select * from konto where |
||||
|
* konto_typ=konto_typ(''AKTIVA''); |
||||
|
* als: |
||||
|
* select * from konto where |
||||
|
* konto_typ=1; |
||||
|
* bei der ersten query sieht man intuitiv das nach allen aktiva-konten |
||||
|
* gesucht wird, waerend das aus der zweiten nur hervorgeht wenn man |
||||
|
* alle Kontentypen im Kopf hat. |
||||
|
* |
||||
|
* returns: NULL: falls der name nicht in konten_typen existiert |
||||
|
* >0: der konten_typ zu dem namen |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
row fibu.konten_typen%ROWTYPE; |
||||
|
min_len int4 := fibu.konto_typ_min_len(); |
||||
|
sel text; |
||||
|
BEGIN |
||||
|
IF $2 < min_len THEN |
||||
|
RAISE EXCEPTION ''len is to short''; |
||||
|
END IF; |
||||
|
|
||||
|
sel := ''select mask::BIT('' || $2 || '')>>'' || |
||||
|
$2-min_len || |
||||
|
'' from fibu.konten_typen where name='' || |
||||
|
quote_literal($1); |
||||
|
|
||||
|
FOR row IN EXECUTE sel LOOP |
||||
|
END LOOP; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN NULL; |
||||
|
ELSE |
||||
|
RETURN row.mask; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "inc_konto_ref_count" (int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* inc_konto_ref_count(kto_nr) |
||||
|
* |
||||
|
* erhoet das Feld used in used_konten um 1, damit wird signalisiert, |
||||
|
* das einmal mehr auf dieses Konto referenziert wird. |
||||
|
* |
||||
|
* returns: -1: Konto passt nicht in aktuellen kontenplan |
||||
|
* 0: Konto noch nicht in Konten, daher kein increment |
||||
|
* >0: Anzahl der Referenzen nach der erhoehung. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ref_count fibu.used_konten.used%TYPE; |
||||
|
konto fibu.konto%ROWTYPE; |
||||
|
BEGIN |
||||
|
select INTO ref_count used from fibu.used_konten where kto_nr=$1; |
||||
|
IF NOT FOUND THEN |
||||
|
return -1; |
||||
|
END IF; |
||||
|
|
||||
|
select INTO konto * from fibu.konto where kto_nr=$1; |
||||
|
IF NOT FOUND THEN |
||||
|
return 0; |
||||
|
END IF; |
||||
|
|
||||
|
ref_count := ref_count + 1; |
||||
|
update fibu.used_konten set used=ref_count where kto_nr=$1; |
||||
|
|
||||
|
RETURN ref_count; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "dec_konto_ref_count" (int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* dec_konto_ref_count(kto_nr) |
||||
|
* |
||||
|
* verringert das Feld used in used_konten um 1, damit wird |
||||
|
* signalisiert, das einmal mehr auf dieses Konto referenziert wird. |
||||
|
* Es existiert ein trigger, der Konto loescht, wenn keine Referenz |
||||
|
* mehr darauf besteht, das koennte zu problemen fuehren, da Konten |
||||
|
* fuer die Buchfuehrung auch erhalten bleiben muessen, wenn die |
||||
|
* Kunden keinerlei Umsatz mehr produzieren, allerdings sollten dann |
||||
|
* auch die Kundeninformationen bestehen bleiben wodurch auch die |
||||
|
* Referenz bleibt. |
||||
|
* |
||||
|
* returns: -1: Konto passt nicht in aktuellen kontenplan |
||||
|
* 0: entweder wurde used gerade auf 0 gesetzt, oder es |
||||
|
* war bereits 0. |
||||
|
* >0: Anzahl der Referenzen nach der verringerung. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ref_count fibu.used_konten.used%TYPE; |
||||
|
konto fibu.konto%ROWTYPE; |
||||
|
BEGIN |
||||
|
select INTO ref_count used from fibu.used_konten where kto_nr=$1; |
||||
|
IF NOT FOUND THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
IF ref_count = 0 THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
ref_count := ref_count - 1; |
||||
|
update fibu.used_konten set used=ref_count where kto_nr=$1; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN ref_count; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "chk_konto" (int4,text,bit varying,varchar(8),text, text) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* chk_konto(kto_nr, name, konto_typ, blz, b_kto_nr, b_name) |
||||
|
* |
||||
|
* ueberpruefen ob das Konto schon in der DB gespeichert ist und |
||||
|
* ob es in dem sinne gueltig ist, das in den existierenden |
||||
|
* kontenplan passt. |
||||
|
* |
||||
|
* returns: -1: falsche Parameter |
||||
|
* -2: Inkonsistenz endeckt. Es existiert bereits ein |
||||
|
* Konto mit dem der Schluessel, aber nicht alle der |
||||
|
* Parameter übereinstimmen |
||||
|
* -3: Inkonsistenz, Konto passt nicht in den Kontenplan |
||||
|
* 0: Konto existiert noch nicht in der DB |
||||
|
* >0: Konto existiert bereits, gibt id_person zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idk fibu.konto%ROWTYPE; |
||||
|
kot fibu.konto.konto_typ%TYPE; |
||||
|
BEGIN |
||||
|
IF $1 IS NULL OR $1 < 0 THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
select INTO kot konto_typ from fibu.used_konten where kto_nr = $1; |
||||
|
IF NOT FOUND OR kot != $3 THEN |
||||
|
RETURN -3; |
||||
|
END IF; |
||||
|
|
||||
|
select INTO idk * from fibu.konto where |
||||
|
kto_nr = $1; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF idk.name <> $2 OR idk.konto_typ <> $3 OR |
||||
|
idk.blz <> $4 OR idk.b_kto_nr <> $5 OR |
||||
|
idk.b_name <> $5 THEN |
||||
|
RETURN -2; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN idk.kto_nr; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function ins_konto(int4,text,bit varying,varchar(8),text,text) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* ins_konto(kto_nr, name, konto_typ, blz, b_kto_nr, b_name) |
||||
|
* |
||||
|
* fügt eine Konto in die DB ein sofern es nicht schon existiert, |
||||
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast |
||||
|
* sind. |
||||
|
* Es muss nur konto_typ angegeben werden, alle anderen Werte koennen |
||||
|
* NULL sein. |
||||
|
* Ist kto_nr NULL, dann ermittelt die Funktion einen freie Kontonummer |
||||
|
* aus dem zu konto_typ gehoerenden Nummernbereich. Dann wird das Konto |
||||
|
* angelegt. |
||||
|
* Ist sie nicht NULL so wird geprueft ob die zu dem konto_typ gehoert, |
||||
|
* wenn das so ist, dann wird chk_konto aufgerufen um zu pruefen |
||||
|
* ob das Konto bereits existiert, ist das nicht der Fall dann wird |
||||
|
* es angelegt, wenn ein Konto existiert, das nicht zu den gemachten |
||||
|
* Angeben passt, dann wird eine Fehlermeldung zurueckgegeben. |
||||
|
* ACHTUNG: Hier wird natuerlich noch nicht inc_ref_count_erhoeht, |
||||
|
* da noch keine referenz auf das konto existiert. |
||||
|
* Das heißt, wenn ein naechster update auf used_konten |
||||
|
* nicht den ref_count (used) auf mindestens eins setzt |
||||
|
* wird das Konto wieder unmittelbar geloescht. |
||||
|
* |
||||
|
* returns: 0: wenn die Person nicht eingefuegt werden kann |
||||
|
* >0: wenn die Person eingefuegt werden konnte oder bereits |
||||
|
* existierte, gibt id_person zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ktn fibu.konto.kto_nr%TYPE; |
||||
|
row fibu.used_konten%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF $1 IS NOT NULL THEN |
||||
|
select INTO ktn fibu.chk_konto($1,$2,$3,$4,$5,$6); |
||||
|
|
||||
|
IF ktn < 0 THEN |
||||
|
RETURN 0; |
||||
|
END IF; |
||||
|
ELSE |
||||
|
ktn := 0; |
||||
|
|
||||
|
PERFORM * from fibu.konten_typen where mask=$3; |
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
IF ktn = 0 THEN |
||||
|
IF $1 IS NULL THEN |
||||
|
select INTO row * from fibu.used_konten where |
||||
|
konto_typ=$3 and used=0; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
ktn := row.kto_nr; |
||||
|
END IF; |
||||
|
ELSE |
||||
|
ktn := $1; |
||||
|
END IF; |
||||
|
|
||||
|
insert into fibu.konto |
||||
|
(kto_nr,name,konto_typ,blz,b_kto_nr,b_name) values |
||||
|
(ktn,$2,$3,$4,$5,$6); |
||||
|
END IF; |
||||
|
|
||||
|
RETURN ktn; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende allgemeine Funktionen -- |
||||
@ -0,0 +1,4 @@ |
|||||
|
-- allgemeine Funktionen zu Kunden -- |
||||
|
-- [ |
||||
|
-- ] |
||||
|
-- Ende allgemeine funktionen zu Kunden -- |
||||
@ -0,0 +1,164 @@ |
|||||
|
-- Funktionen um Laender zu verwalten -- |
||||
|
-- [ |
||||
|
create function "chk_land" (text,varchar(3),varchar(4)) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* chk_land(land, lnd_kz, vorwahl_l) |
||||
|
* |
||||
|
* ueberpruefen ob das Land schon in der DB gespeichert ist. |
||||
|
* |
||||
|
* returns: -1: falsche Parameter |
||||
|
* -2: Inkonsistenz endeckt. Es existiert bereits ein |
||||
|
* Land mit dem einer, aber nicht alle der Parameter |
||||
|
* uebereinstimmen |
||||
|
* 0: Land existiert noch nicht in der DB |
||||
|
* >0: Land existiert bereits, gibt id_land zurueck. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idl adresse.land%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF $1 IS NULL OR $1 = '''' OR |
||||
|
$2 IS NULL OR $2 = '''' OR |
||||
|
$3 IS NULL OR $3 = '''' THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
/* |
||||
|
* Jeder der Teile is unique, existiert also einer der Teile |
||||
|
* schon aber mit anderen Partnern dann is ein Fehler aufgetreten. |
||||
|
*/ |
||||
|
select INTO idl * from adresse.land where |
||||
|
land = $1 or |
||||
|
lnd_kz = $2 or |
||||
|
vorwahl_l = $3; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF idl.land <> $1 OR idl.lnd_kz <> $2 OR |
||||
|
idl.vorwahl_l <> $3 THEN |
||||
|
RETURN -2; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN idl._id_; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "ins_land" (text,varchar(3),varchar(4)) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* ins_land(land, lnd_kz, vorwahl_l) |
||||
|
* |
||||
|
* fuegt ein Land in die DB ein sofern es nicht schon existiert, |
||||
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast |
||||
|
* sind. |
||||
|
* |
||||
|
* returns: 0: wenn das Land nicht eingefuegt werden kann |
||||
|
* >0: wenn das Land eingefuegt werden konnte oder bereits |
||||
|
* existierte, gibt id_land zurueck. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
id_land adresse.land._id_%TYPE; |
||||
|
BEGIN |
||||
|
/* |
||||
|
* Daten ueberpruefen (siehe chk_land) |
||||
|
*/ |
||||
|
select INTO id_land adresse.chk_land($1, $2, $3); |
||||
|
|
||||
|
IF id_land < 0 THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF id_land = 0 THEN |
||||
|
insert into adresse.land (land, lnd_kz, vorwahl_l) |
||||
|
values ($1, $2, $3); |
||||
|
|
||||
|
select INTO id_land adresse.chk_land($1, $2, $3); |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN id_land; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "id_land_by_land" (text) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* get_id_land_by_land(land) |
||||
|
* |
||||
|
* Ermittelt die id (id_land) eines in der DB enthaltenen Landes |
||||
|
* anhand seiner Bezeuchnung (land.land) |
||||
|
* |
||||
|
* returns: 0: wenn das Land nicht eingefuegt werden kann |
||||
|
* >0: wenn das Land gefunden wurde, gibt id_land zurueck. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idl adresse.land._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO idl _id_ from adresse.land where |
||||
|
land = $1; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
RETURN idl; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "id_land_by_lnd_kz" (varchar(3)) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* get_id_land_by_lnd_kz(lnd_kz) |
||||
|
* |
||||
|
* Ermittelt die id (id_land) eines in der DB enthaltenen Landes |
||||
|
* anhand des internationalen Kennzeichens (land.lnd_kz) |
||||
|
* |
||||
|
* returns: 0: wenn das Land nicht eingefuegt werden kann |
||||
|
* >0: wenn das Land gefunden wurde, gibt id_land zurueck. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idl adresse.land._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO idl _id_ from adresse.land where |
||||
|
lnd_kz = $1; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
RETURN idl; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "id_land_by_vorwahl_l" (varchar(4)) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* get_id_land_by_vorwahl_l(vorwahl_l) |
||||
|
* |
||||
|
* Ermittelt die id (id_land) eines in der DB enthaltenen Landes |
||||
|
* anhand die internationalen Laendervorwahl (land.land_kz) |
||||
|
* |
||||
|
* returns: 0: wenn das Land nicht eingefuegt werden kann |
||||
|
* >0: wenn das Land gefunden wurde, gibt id_land zurueck. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idl adresse.land._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO idl _id_ from adresse.land where |
||||
|
vorwahl_l = $1; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
RETURN idl; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende Laender -- |
||||
@ -0,0 +1,101 @@ |
|||||
|
-- Funktionen um Orte zu verwalten -- |
||||
|
-- [ |
||||
|
create function "chk_ort" (text,varchar(10),int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* chk_ort(ort, vorwahl_o, id_land) |
||||
|
* |
||||
|
* ueberpruefen ob der Ort schon in der DB gespeichert ist. |
||||
|
* |
||||
|
* returns: -1: falsche Parameter |
||||
|
* -2: Inkonsistenz endeckt. Es existiert bereits ein |
||||
|
* Ort mit dem einer, aber nicht alle der Parameter |
||||
|
* übereinstimmen |
||||
|
* 0: Ort existiert noch nicht in der DB |
||||
|
* >0: Ort existiert bereits, gibt id_ort zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ido adresse.ort%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF $2 IS NULL OR $2 = '''' OR |
||||
|
$3 IS NULL OR $3 < 1 THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
-- |
||||
|
-- OK, also zu jeder Kombination (vorwahl_o und id_land) kann |
||||
|
-- es nur einen Ort geben. |
||||
|
-- |
||||
|
select INTO ido * from adresse.ort where |
||||
|
vorwahl_o = $2 and |
||||
|
id_land = $3; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF ido.ort <> $1 THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN ido._id_; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "ins_ort" (text,varchar(10),int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* ins_land(ort, vorwahl_o, id_land) |
||||
|
* |
||||
|
* fügt einen Ort in die DB ein sofern es nicht schon existiert, |
||||
|
* Inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast |
||||
|
* sind. |
||||
|
* |
||||
|
* returns: 0: wenn der Ort nicht eingefuegt werden kann |
||||
|
* >0: wenn der Ort eingefuegt werden konnte oder bereits |
||||
|
* existierte, gibt id_ort zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
id_ort adresse.ort._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO id_ort adresse.chk_ort($1, $2, $3); |
||||
|
|
||||
|
IF id_ort = -1 THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF id_ort = 0 THEN |
||||
|
insert into adresse.ort (ort, vorwahl_o, id_land) |
||||
|
values ($1, $2, $3); |
||||
|
|
||||
|
select INTO id_ort adresse.chk_ort($1, $2, $3); |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN id_ort; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "id_ort" (varchar(10),int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* get_id_ort_by_ukey1(vorwahl_o, id_land) |
||||
|
* |
||||
|
* Ermittelt die id (id_ort) eines in der DB enthaltenen Orts |
||||
|
* anhand des Primaerschluessels (vorwahl_o, id_land) |
||||
|
* |
||||
|
* returns: 0: wenn das Land nicht eingefuegt werden kann |
||||
|
* >0: wenn das Land gefunden wurde, gibt id_land zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
ido adresse.ort._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO ido adresse.chk_ort(NULL, $1, $2); |
||||
|
|
||||
|
RETURN ido; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende Orte -- |
||||
@ -0,0 +1,272 @@ |
|||||
|
-- Funktionen um Personen zu verwalten -- |
||||
|
-- [ |
||||
|
create function "chk_person" (varchar(10),text,text,text,text, |
||||
|
varchar(10),varchar(10),varchar(10),varchar(50), |
||||
|
varchar(50), varchar(100)) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* chk_person(anrede, titel, nachname, vorname, geb_dat, |
||||
|
* postfach, telefon, fax, handy, |
||||
|
* email, webpage) |
||||
|
* |
||||
|
* ueberpruefen ob die Person schon in der DB gespeichert ist. |
||||
|
* |
||||
|
* returns: -1: falsche Parameter |
||||
|
* -2: Inkonsistenz endeckt. Es existiert bereits eine |
||||
|
* Person mit dem einer, aber nicht alle der Parameter |
||||
|
* übereinstimmen |
||||
|
* 0: Person existiert noch nicht in der DB |
||||
|
* >0: Person existiert bereits, gibt id_person zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idp person.person%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF $3 IS NULL OR $3 = '''' OR |
||||
|
$4 IS NULL OR $4 = '''' OR |
||||
|
$5 IS NULL OR $5 = '''' THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
select INTO idp * from person.person where |
||||
|
nachname = $3 and vorname = $4 and |
||||
|
geb_dat = $5::date; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF idp.anrede <> $1 OR idp.titel <> $2 OR |
||||
|
idp.postfach <> $6 OR idp.telefon <> $7 OR |
||||
|
idp.fax <> $8 OR idp.handy <> $9 OR |
||||
|
idp.email <> $10 OR idp.webpage <> $11 THEN |
||||
|
RETURN -2; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN idp._id_; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "ins_person" (varchar(10),text,text,text,text, |
||||
|
varchar(10),varchar(10),varchar(10),varchar(50), |
||||
|
varchar(50),varchar(100)) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* ins_person(anrede, titel, nachname, vorname, geb_dat, |
||||
|
* postfach, telefon, fax, handy, |
||||
|
* email, webpage) |
||||
|
* |
||||
|
* fügt eine Person in die DB ein sofern es nicht schon existiert, |
||||
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast |
||||
|
* sind. |
||||
|
* |
||||
|
* returns: 0: wenn die Person nicht eingefuegt werden kann |
||||
|
* >0: wenn die Person eingefuegt werden konnte oder bereits |
||||
|
* existierte, gibt id_person zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idp person.person._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO idp person.chk_person($1,$2,$3,$4,$5,$6,$7,$8,$9, |
||||
|
$10,$11); |
||||
|
|
||||
|
IF idp < 0 THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
IF idp = 0 THEN |
||||
|
insert into person.person (anrede,titel,nachname,vorname, |
||||
|
geb_dat,postfach,telefon,fax, |
||||
|
handy,email,webpage) |
||||
|
values ($1,$2,$3,$4,$5::date,$6,$7,$8,$9,$10,$11); |
||||
|
|
||||
|
select INTO idp person.chk_person($1,$2,$3,$4,$5,$6, |
||||
|
$7,$8,$9,$10,$11); |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN idp; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "ins_person" (varchar(10),text,text,text,text, |
||||
|
varchar(10),varchar(10),varchar(10),varchar(50), |
||||
|
varchar(50),varchar(100),int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* ins_person(anrede, titel, nachname, vorname, geb_dat, |
||||
|
* postfach, telefon, fax, handy, |
||||
|
* email, webpage, id_adresse, id_abteilung) |
||||
|
* |
||||
|
* fügt eine Person in die DB ein sofern es nicht schon existiert, |
||||
|
* inkonsistenzen erzeugt wuerden, oder die Eingabedaten fehlerhast |
||||
|
* sind. |
||||
|
* Außerdem werden schon zuordnugen zu einer Adresse und einem Arbeits |
||||
|
* platz gemacht. |
||||
|
* |
||||
|
* returns: 0: wenn die Person nicht eingefuegt werden kann |
||||
|
* >0: wenn die Person eingefuegt werden konnte oder bereits |
||||
|
* existierte, gibt id_person zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idp person.person._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO idp person.ins_person($1,$2,$3,$4,$5,$6,$7,$8,$9, |
||||
|
$10,$11); |
||||
|
|
||||
|
IF idp = 0 THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
PERFORM person.person_adresse(idp, $12); |
||||
|
/* |
||||
|
* Die Zuordnung zu arbeit erfordert weiter Informationen, |
||||
|
* wie Gehalt, Position u.a. darum ist eine Zuordnung hier |
||||
|
* warscheinlich nicht seht sinnvoll. Trotzdem lasse ich das |
||||
|
* hier nochmal auskommentiert stehen, vielleicht braucht man |
||||
|
* es ja doch... |
||||
|
*/ |
||||
|
--select INTO tmp create_rel_person_abteilung(idp, $13);-- |
||||
|
END IF; |
||||
|
|
||||
|
RETURN idp; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "person_adresse" (int4, int4) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* person_adresse(id_person, id_adresse) |
||||
|
* |
||||
|
* ordnet eine Person einer Adresse zu, dies passiert ueber einen |
||||
|
* Eintrag in der Relation wohnt. Es wird sichergestellt das keine |
||||
|
* inkonstistenzen auftreten (keine doppelten Zuordnungen) |
||||
|
* |
||||
|
* returns: -1: Wenn die Eingabedaten fehlerhaft waren. |
||||
|
* 0: Wenn die Zuordnung nicht gemacht werden konnte. |
||||
|
* 1: Wenn die Zuordnung gemacht wurde. |
||||
|
*/ |
||||
|
|
||||
|
BEGIN |
||||
|
IF $1 IS NULL OR $1 < 1 OR |
||||
|
$2 IS NULL OR $2 < 1 THEN |
||||
|
RETURN -1; |
||||
|
END IF; |
||||
|
|
||||
|
PERFORM * from person.person where _id_ = $1; |
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
END IF; |
||||
|
|
||||
|
PERFORM * from adresse.adresse where _id_ = $2; |
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
END IF; |
||||
|
|
||||
|
PERFORM * from person.wohnt where |
||||
|
id_person = $1 and id_adresse = $2; |
||||
|
IF NOT FOUND THEN |
||||
|
insert into person.wohnt (id_person, id_adresse) |
||||
|
values ($1, $2); |
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN 1; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
-- Da kann ich keinen view draus machen, da ich einen Parameter brauche. |
||||
|
create function "person_wohnt" (int4) |
||||
|
returns SETOF wohnt as ' |
||||
|
/* |
||||
|
* person_wohnt(id_person) |
||||
|
* |
||||
|
* ordnet eine Person einer Adresse zu, dies passiert ueber einen |
||||
|
* Eintrag in der Relation wohnt. Es wird sichergestellt das keine |
||||
|
* inkonstistenzen auftreten (keine doppelten Zuordnungen) |
||||
|
* Wird fuer id_adresse NULL oder ein Wert < 1 eingegeben, so sucht |
||||
|
* die Funktion nach den Ein |
||||
|
* |
||||
|
* Das ist im prinziep das selbe wie |
||||
|
* select * from wohnt where id_person=?? |
||||
|
* ich lass es trotzdem zu anschauungszwecken drin. |
||||
|
* |
||||
|
* returns: -1 (in erstem Element): Wenn die Eingabedaten fehlerhaft |
||||
|
* waren. |
||||
|
* 0 (im ersten Element): Die Person existiert nicht |
||||
|
* >0 (in allen Elementen): Jede Adresse (id_adresse) an der |
||||
|
* die Person wohnt. |
||||
|
* <EMPTY SET>: Keine Adresse gefunden. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idw_curs refcursor; |
||||
|
idw person.wohnt%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF $1 IS NULL OR $1 < 1 THEN |
||||
|
idw.id_person := -1; |
||||
|
idw.id_adresse := -1; |
||||
|
RETURN NEXT idw; |
||||
|
RETURN; |
||||
|
END IF; |
||||
|
|
||||
|
PERFORM * from person.person where id_person = $1; |
||||
|
IF NOT FOUND THEN |
||||
|
idw.id_person := 0; |
||||
|
idw.id_adresse := 0; |
||||
|
RETURN NEXT idw; |
||||
|
RETURN; |
||||
|
END IF; |
||||
|
|
||||
|
/* |
||||
|
* Moeglichkeit 1 |
||||
|
* |
||||
|
* OPEN idw_curs FOR select * from person.wohnt where id_person = $1; |
||||
|
* |
||||
|
* FETCH idw_curs INTO idw; |
||||
|
* WHILE FOUND LOOP |
||||
|
* RETURN NEXT idw; |
||||
|
* FETCH idw_curs INTO idw; |
||||
|
* END LOOP; |
||||
|
*/ |
||||
|
|
||||
|
/* |
||||
|
* Moeglichkeit 2 |
||||
|
*/ |
||||
|
FOR idw IN select * from person.wohnt where id_person = $1 LOOP |
||||
|
RETURN NEXT idw; |
||||
|
END LOOP; |
||||
|
|
||||
|
RETURN; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function "id_person" (text, text, text) |
||||
|
returns int4 as ' |
||||
|
/* |
||||
|
* get_id_person_by_ukey1(nachname, vorname, geb_dat) |
||||
|
* |
||||
|
* Ermittelt die id (id_person) einer in der DB enthaltenen Person |
||||
|
* anhand des Primaerschluessels (nachname, vorname, geb_dat) |
||||
|
* |
||||
|
* returns: 0: wenn die Person nicht eingefuegt werden kann |
||||
|
* >0: wenn die Person gefunden wurde, gibt id_person zurück. |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
idp person.person._id_%TYPE; |
||||
|
BEGIN |
||||
|
select INTO idp _id_ from person.person where |
||||
|
nachname = $1 and vorname = $2 and geb_dat = $3::date; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN 0; |
||||
|
ELSE |
||||
|
RETURN idp; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende Personendaten -- |
||||
@ -0,0 +1,99 @@ |
|||||
|
-- allgemeine Funktionen zu Waren/Warengruppen -- |
||||
|
-- [ |
||||
|
create function produkt_typ_len() |
||||
|
returns int4 as ' |
||||
|
DECLARE |
||||
|
len int4; |
||||
|
BEGIN |
||||
|
select INTO len bit_length(produkt_typ) from waren.produkt_typen; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
len := 0; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN len; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function produkt_typ(text, int4) |
||||
|
returns bit varying as ' |
||||
|
/* |
||||
|
* produkt_typ(name, len) |
||||
|
* |
||||
|
* ermittelt den produkt_typ zu einem entsprechenden namen. |
||||
|
* |
||||
|
* returns: NULL: falls der name nicht in konten_typen existiert |
||||
|
* >0: der konten_typ zu dem namen |
||||
|
*/ |
||||
|
|
||||
|
DECLARE |
||||
|
row waren.produkt_typen%ROWTYPE; |
||||
|
min_len int4 := waren.produkt_typ_len(); |
||||
|
sel text; |
||||
|
BEGIN |
||||
|
IF $2 < min_len THEN |
||||
|
RAISE EXCEPTION ''len is to short''; |
||||
|
END IF; |
||||
|
|
||||
|
sel := ''select produkt_typ::BIT('' || $2 || '')>>'' || |
||||
|
$2-min_len || |
||||
|
'' from waren.produkt_typen where bezeichnung='' || |
||||
|
quote_literal($1); |
||||
|
|
||||
|
FOR row IN EXECUTE sel LOOP |
||||
|
END LOOP; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN NULL; |
||||
|
ELSE |
||||
|
RETURN row.konto_typ; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function get_warengruppe(text) |
||||
|
returns warengruppe as ' |
||||
|
DECLARE |
||||
|
row waren.warengruppe%ROWTYPE; |
||||
|
BEGIN |
||||
|
select INTO row * from waren.warengruppe where name=$1; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN NULL; |
||||
|
ELSE |
||||
|
RETURN row; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function get_warengruppe(int4) |
||||
|
returns warengruppe as ' |
||||
|
DECLARE |
||||
|
row waren.warengruppe%ROWTYPE; |
||||
|
BEGIN |
||||
|
select INTO row * from waren.warengruppe where _id_=$1; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN NULL; |
||||
|
ELSE |
||||
|
RETURN row; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function warengruppe_id(text) |
||||
|
returns int4 as ' |
||||
|
DECLARE |
||||
|
row waren.warengruppe%ROWTYPE; |
||||
|
BEGIN |
||||
|
select INTO row * from waren.warengruppe where name=$1; |
||||
|
|
||||
|
IF NOT FOUND THEN |
||||
|
RETURN NULL; |
||||
|
ELSE |
||||
|
RETURN row._id_; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende allgemeine Funktionen zu Waren/Warengruppen -- |
||||
@ -0,0 +1,201 @@ |
|||||
|
-- Trigger Funktionen zu Kunden -- |
||||
|
-- [ |
||||
|
create function on_insert_create_konten() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''INSERT'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
/* |
||||
|
* Die funktion ins_konto uebernimmt schon alle checks bzgl. |
||||
|
* Des Nummernbereichs, etc. fuer uns. |
||||
|
*/ |
||||
|
NEW.konto1 := fibu.ins_konto(NEW.konto1, TG_ARGV[0], |
||||
|
fibu.konto_typ(TG_ARGV[0]), |
||||
|
NULL, NULL, NULL); |
||||
|
IF NEW.konto1 = 0 THEN |
||||
|
err_msg := TG_NAME || '': cannot create debitor_kto''; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
ELSE |
||||
|
PERFORM fibu.inc_konto_ref_count(NEW.konto1); |
||||
|
END IF; |
||||
|
|
||||
|
NEW.konto2 := fibu.ins_konto(NEW.konto2, TG_ARGV[1], |
||||
|
fibu.konto_typ(TG_ARGV[1]), |
||||
|
NULL, NULL, NULL); |
||||
|
IF NEW.konto2 = 0 THEN |
||||
|
err_msg := TG_NAME || '': cannot create kreditor_kto''; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
ELSE |
||||
|
PERFORM fibu.inc_konto_ref_count(NEW.konto2); |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' LANGUAGE 'plpgsql'; |
||||
|
|
||||
|
create function on_update_update_konten() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
range fibu.kontenplan%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''UPDATE'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
IF NEW.konto1 <> OLD.konto1 THEN |
||||
|
NEW.konto1 := fibu.ins_konto(NEW.konto1,TG_ARGV[0], |
||||
|
fibu.konto_typ(TG_ARGV[0]), |
||||
|
NULL, NULL, NULL); |
||||
|
|
||||
|
IF NEW.konto1 = 0 THEN |
||||
|
err_msg := TG_NAME || '': cannot create debitor_kto''; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
ELSE |
||||
|
PERFORM fibu.inc_konto_ref_count(NEW.konto1); |
||||
|
PERFORM fibu.dec_konto_ref_count(OLD.konto1); |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
IF NEW.konto2 <> OLD.konto2 THEN |
||||
|
NEW.konto2 := fibu.ins_konto(NEW.konto2,TG_ARGV[1], |
||||
|
fibu.konto_typ(TG_ARGV[1]), |
||||
|
NULL, NULL, NULL); |
||||
|
|
||||
|
IF NEW.konto2 = 0 THEN |
||||
|
err_msg := TG_NAME || '': cannot create kreditor_kto''; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
ELSE |
||||
|
PERFORM fibu.inc_konto_ref_count(NEW.konto2); |
||||
|
PERFORM fibu.dec_konto_ref_count(OLD.konto2); |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' LANGUAGE 'plpgsql'; |
||||
|
|
||||
|
create function on_delete_dec_konto_ref_count() |
||||
|
returns TRIGGER as ' |
||||
|
BEGIN |
||||
|
PERFORM fibu.dec_konto_ref_count(OLD.konto1); |
||||
|
PERFORM fibu.dec_konto_ref_count(OLD.konto2); |
||||
|
|
||||
|
RETURN OLD; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
CREATE FUNCTION on_change_one_null() |
||||
|
RETURNS TRIGGER AS ' |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
BEGIN |
||||
|
IF TG_OP = ''INSERT'' THEN |
||||
|
IF (NEW.id_person IS NULL AND NEW.id_firma IS NULL) OR |
||||
|
(NEW.id_person IS NOT NULL AND NEW.id_firma IS NOT NULL) THEN |
||||
|
err_msg := TG_NAME || '': both or none are NULL''; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
ELSE |
||||
|
RETURN NEW; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
/* |
||||
|
* Bei einem update gibt es mehrere Moeglichkeiten: |
||||
|
* 1. weder id_person noch id_firma werden veraendert: |
||||
|
* Dann passiert in dieser Funktion gar nichts. |
||||
|
* 2. entweder id_person oder id_firma wird veraendert: |
||||
|
* - id_person oder id_firma werden gesetzt und das |
||||
|
* jeweils andere Feld wird auf NULL gesetzt. |
||||
|
* - sind nach dem update beide NULL wird das update nicht |
||||
|
* ausgefueht und eine Fehlermeldung ausgegeben. |
||||
|
* 3. beide werden verandert: |
||||
|
* - wird fuer beide Felder ein neuer Wert angegeben, so |
||||
|
* geht diese Funktion davon aus das das bisher NULL |
||||
|
* enthaltende Feld gesetzt werden soll (diese Situation |
||||
|
* sollte allerdings moeglichst immer vom Frontend abgefangen |
||||
|
* werden, ein Kunde kann nur entweder eine Person oder eine |
||||
|
* Firma sein, nicht beides. |
||||
|
*/ |
||||
|
IF TG_OP = ''UPDATE'' THEN |
||||
|
IF OLD.id_person IS NOT NULL AND |
||||
|
NEW.id_firma IS NOT NULL THEN |
||||
|
NEW.id_person := NULL; |
||||
|
END IF; |
||||
|
IF OLD.id_firma IS NOT NULL AND |
||||
|
NEW.id_person IS NOT NULL THEN |
||||
|
NEW.id_firma := NULL; |
||||
|
END IF; |
||||
|
|
||||
|
IF NEW.id_person IS NULL AND NEW.id_FIRMA IS NULL THEN |
||||
|
RAISE EXCEPTION ''change_kunde_trigger: both are NULL''; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END IF; |
||||
|
|
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END; |
||||
|
' LANGUAGE 'plpgsql'; |
||||
|
|
||||
|
CREATE FUNCTION on_change_one_null2() |
||||
|
RETURNS TRIGGER AS ' |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
BEGIN |
||||
|
IF TG_OP = ''INSERT'' THEN |
||||
|
IF (NEW.id_person IS NULL AND |
||||
|
NEW.id_firma IS NULL AND |
||||
|
NEW.id_benutzer IS NULL) OR |
||||
|
(NEW.id_person IS NOT NULL AND |
||||
|
NEW.id_benutzer IS NOT NULL) OR |
||||
|
(NEW.id_firma IS NOT NULL AND |
||||
|
NEW.id_benutzer IS NOT NULL) OR |
||||
|
(NEW.id_firma IS NOT NULL AND |
||||
|
NEW.id_person IS NOT NULL) THEN |
||||
|
err_msg := TG_NAME || '': all or none are NULL''; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
ELSE |
||||
|
RETURN NEW; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
IF TG_OP = ''UPDATE'' THEN |
||||
|
IF OLD.id_person IS NOT NULL AND |
||||
|
(NEW.id_firma IS NOT NULL OR |
||||
|
NEW.id_benutzer IS NOT NULL) THEN |
||||
|
NEW.id_person := NULL; |
||||
|
END IF; |
||||
|
IF OLD.id_firma IS NOT NULL AND |
||||
|
(NEW.id_person IS NOT NULL OR |
||||
|
NEW id_benutzer IS NOT NULL) THEN |
||||
|
NEW.id_firma := NULL; |
||||
|
END IF; |
||||
|
IF OLD.id_benutzer IS NOT NULL AND |
||||
|
(NEW.id_person IS NOT NULL OR |
||||
|
NEW.id_firma IS NOT NULL) THEN |
||||
|
NEW.id_benutzer := NULL; |
||||
|
END IF; |
||||
|
|
||||
|
IF NEW.id_person IS NULL AND |
||||
|
NEW.id_firma IS NULL AND |
||||
|
NEW.id_benutzer IS NULL THEN |
||||
|
RAISE EXCEPTION ''change_kunde_trigger: all are NULL''; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END IF; |
||||
|
|
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END; |
||||
|
' LANGUAGE 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende Triggerfunktionen zu Kunden -- |
||||
@ -0,0 +1,254 @@ |
|||||
|
-- allgemeine Trigger-Funtionen |
||||
|
-- [ |
||||
|
create function set_history() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
usern text; |
||||
|
table_natts int4; |
||||
|
table_col_curs refcursor; |
||||
|
table_schema text; |
||||
|
table_schema_oid int4; |
||||
|
row_oid int4; |
||||
|
oid_bit int4; |
||||
|
oid_varbit int4; |
||||
|
col_name text; |
||||
|
col_names text := ''{''; |
||||
|
col_typ int4; |
||||
|
col_typ_name text; |
||||
|
col_types text := ''{''; |
||||
|
col_val text; |
||||
|
col_vals text := ''{''; |
||||
|
dummy_text RECORD; |
||||
|
dummy_bit RECORD; |
||||
|
query text; |
||||
|
BEGIN |
||||
|
usern := user; |
||||
|
|
||||
|
select into table_natts relnatts from pg_catalog.pg_class where |
||||
|
relname=TG_RELNAME; |
||||
|
select into oid_bit oid from pg_catalog.pg_type where |
||||
|
typname=''bit''; |
||||
|
select into oid_varbit oid from pg_catalog.pg_type where |
||||
|
typname=''varbit''; |
||||
|
select into table_schema_oid relnamespace |
||||
|
from pg_catalog.pg_class where relname=TG_RELNAME; |
||||
|
select into table_schema nspname from pg_catalog.pg_namespace where |
||||
|
oid=table_schema_oid; |
||||
|
|
||||
|
OPEN table_col_curs FOR select attname,atttypid from |
||||
|
pg_catalog.pg_attribute where attrelid=TG_RELID; |
||||
|
|
||||
|
FOR i IN 1..7 LOOP |
||||
|
FETCH table_col_curs INTO col_name,col_typ; |
||||
|
END LOOP; |
||||
|
|
||||
|
FOR i IN 1..table_natts LOOP |
||||
|
FETCH table_col_curs INTO col_name,col_typ; |
||||
|
col_names := col_names || quote_literal(col_name); |
||||
|
|
||||
|
select into col_typ_name typname from pg_catalog.pg_type where |
||||
|
oid=col_typ; |
||||
|
|
||||
|
col_types := col_types || quote_literal(col_typ_name); |
||||
|
|
||||
|
IF col_typ = oid_bit OR |
||||
|
col_typ = oid_varbit THEN |
||||
|
query := ''select '' || col_name || '' as val from '' || |
||||
|
table_schema || ''.'' || TG_RELNAME || |
||||
|
'' where oid=''; |
||||
|
ELSE |
||||
|
query := ''select '' || col_name || ''::text as val '' || |
||||
|
''from '' || table_schema || ''.'' || |
||||
|
TG_RELNAME || '' where oid=''; |
||||
|
END IF; |
||||
|
|
||||
|
IF TG_OP = ''INSERT'' OR |
||||
|
TG_OP = ''UPDATE'' THEN |
||||
|
query := query || NEW.oid; |
||||
|
row_oid := NEW.oid; |
||||
|
ELSE |
||||
|
query := query || OLD.oid; |
||||
|
row_oid := OLD.oid; |
||||
|
END IF; |
||||
|
|
||||
|
IF col_typ = oid_bit OR |
||||
|
col_typ = oid_varbit THEN |
||||
|
FOR dummy_bit IN EXECUTE query LOOP |
||||
|
IF dummy_bit.val IS NOT NULL THEN |
||||
|
col_vals := col_vals || |
||||
|
quote_literal(public.bit2text(dummy_bit.val)); |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
ELSE |
||||
|
FOR dummy_text IN EXECUTE query LOOP |
||||
|
IF dummy_text.val IS NOT NULL THEN |
||||
|
col_vals := col_vals || |
||||
|
quote_literal(dummy_text.val::text); |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
END IF; |
||||
|
|
||||
|
IF i <> table_natts THEN |
||||
|
col_names := col_names || '',''; |
||||
|
col_types := col_types || '',''; |
||||
|
col_vals := col_vals || '',''; |
||||
|
ELSE |
||||
|
col_names := col_names || ''}''; |
||||
|
col_types := col_types || ''}''; |
||||
|
col_vals := col_vals || ''}''; |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
|
||||
|
-- IF query IS NOT NULL THEN |
||||
|
-- insert into public.history (username,time,tab,row_oid,at_time, |
||||
|
-- operation,col_names,col_types, |
||||
|
-- col_vals) |
||||
|
-- values (quote_literal(usern), |
||||
|
-- quote_literal(''now''), |
||||
|
-- quote_literal(TG_RELNAME), |
||||
|
-- quote_literal(row_oid), |
||||
|
-- quote_literal(TG_WHEN), |
||||
|
-- quote_literal(TG_OP), |
||||
|
-- quote_literal(col_names), |
||||
|
-- quote_literal(col_types), |
||||
|
-- quote_literal(col_vals)); |
||||
|
-- END IF; |
||||
|
|
||||
|
query := ''insert into public.history (username,time,tab,'' || |
||||
|
''row_oid,at_time,operation,col_names,col_types,'' || |
||||
|
''col_vals) values ('' || |
||||
|
quote_literal(usern) || '','' || |
||||
|
quote_literal(''now'') || '','' || |
||||
|
quote_literal(TG_RELNAME) || '','' || |
||||
|
quote_literal(row_oid) || '','' || |
||||
|
quote_literal(TG_WHEN) || '','' || |
||||
|
quote_literal(TG_OP) || '','' || |
||||
|
quote_literal(col_names) || '','' || |
||||
|
quote_literal(col_types) || '','' || |
||||
|
quote_literal(col_vals) || '')''; |
||||
|
|
||||
|
IF query IS NOT NULL THEN |
||||
|
EXECUTE query; |
||||
|
ELSE |
||||
|
RAISE NOTICE ''Found null query:''; |
||||
|
RAISE NOTICE ''query: %'', query; |
||||
|
RAISE NOTICE ''user: %'', usern; |
||||
|
RAISE NOTICE ''TG_RELNAME: %'', TG_RELNAME; |
||||
|
RAISE NOTICE ''row_oid: %'', row_oid; |
||||
|
RAISE NOTICE ''TG_WHEN: %'', TG_WHEN; |
||||
|
RAISE NOTICE ''TG_OP: %'', TG_OP; |
||||
|
RAISE NOTICE ''col_names: %'', col_names; |
||||
|
RAISE NOTICE ''col_vals: %'', col_vals; |
||||
|
RAISE NOTICE ''col_types: %'', col_types; |
||||
|
END IF; |
||||
|
|
||||
|
IF TG_OP = ''INSERT'' OR |
||||
|
TG_OP = ''UPDATE'' THEN |
||||
|
RETURN NEW; |
||||
|
ELSE |
||||
|
RETURN OLD; |
||||
|
END IF; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function create_valid_mask_before() |
||||
|
returns TRIGGER as ' |
||||
|
/* |
||||
|
Aufgrund vin beschraenkungen in plpgsql muessen alle Bitmasken |
||||
|
mask heissen....zumindest in den Tabellen fuer die diese Triggerfunc |
||||
|
arbeiten soll....das gilt ebenso fuer jeden weiteren universellen |
||||
|
Trigger, sie koennen immer nur funktionieren wenn die Spalten |
||||
|
name wohldefiniert sind. |
||||
|
*/ |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
new_len int4; |
||||
|
old_len int4; |
||||
|
dummy RECORD; |
||||
|
sel text; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''UPDATE'' AND TG_OP <> ''INSERT'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
new_len := bit_length(NEW.mask); |
||||
|
IF TG_OP = ''UPDATE'' THEN |
||||
|
old_len := bit_length(OLD.mask); |
||||
|
ELSE |
||||
|
sel := ''select public.mask_len('' || |
||||
|
quote_literal(TG_ARGV[0]) || '', '' || |
||||
|
quote_literal(''mask'') || '',NULL) as len''; |
||||
|
FOR dummy IN EXECUTE sel LOOP |
||||
|
EXIT; |
||||
|
END LOOP; |
||||
|
IF NOT FOUND THEN |
||||
|
old_len := 0; |
||||
|
ELSE |
||||
|
old_len := dummy.len; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
IF new_len < old_len THEN |
||||
|
NEW.mask := bit_set_len(NEW.mask, old_len); |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function create_valid_mask_after() |
||||
|
returns TRIGGER as ' |
||||
|
/* |
||||
|
Aufgrund von beschraenkungen in plpgsql muessen alle Bitmasken |
||||
|
mask heissen....zumindest in den Tabellen fuer die diese Triggerfunc |
||||
|
arbeiten soll....das gilt ebenso fuer jeden weiteren universellen |
||||
|
Trigger, sie koennen immer nur funktionieren wenn die Spalten |
||||
|
name wohldefiniert sind. |
||||
|
*/ |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
new_len int4; |
||||
|
old_len int4; |
||||
|
dummy RECORD; |
||||
|
sel text; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''UPDATE'' AND TG_OP <> ''INSERT'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
new_len := bit_length(NEW.mask); |
||||
|
IF TG_OP = ''UPDATE'' THEN |
||||
|
old_len := bit_length(OLD.mask); |
||||
|
ELSE |
||||
|
sel := ''select public.mask_len('' || |
||||
|
quote_literal(TG_ARGV[0]) || '', '' || |
||||
|
quote_literal(''mask'') || '',NULL) as len''; |
||||
|
FOR dummy IN EXECUTE sel LOOP |
||||
|
EXIT; |
||||
|
END LOOP; |
||||
|
IF NOT FOUND THEN |
||||
|
old_len := 0; |
||||
|
ELSE |
||||
|
old_len := dummy.len; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
sel := ''select mask from '' || TG_ARGV[0] || |
||||
|
'' where bit_length(mask)<>'' || new_len; |
||||
|
|
||||
|
FOR dummy IN EXECUTE sel LOOP |
||||
|
EXECUTE ''update '' || TG_ARGV[0] || '' set mask='' || |
||||
|
''mask::BIT('' || new_len || '')>>'' || |
||||
|
new_len-old_len || '' where mask=B'' || |
||||
|
quote_literal(public.bit2text(dummy.mask)); |
||||
|
EXIT; |
||||
|
END LOOP; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
-- ] |
||||
|
-- Ende allgemeine Triggerfunktionen |
||||
@ -0,0 +1,162 @@ |
|||||
|
-- Trigger Funktionen zu Konten -- |
||||
|
-- [ |
||||
|
create function on_ref_count_null_del_konto() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
konto fibu.konto%ROWTYPE; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''UPDATE'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
IF NEW.used = 0 THEN |
||||
|
select INTO konto * from fibu.konto where kto_nr=NEW.kto_nr; |
||||
|
|
||||
|
IF FOUND THEN |
||||
|
delete from fibu.konto where kto_nr=NEW.kto_nr; |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function on_change_kontenplan_check_ranges() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
kontenplan_row fibu.kontenplan%ROWTYPE; |
||||
|
err_msg text; |
||||
|
BEGIN |
||||
|
IF TG_OP = ''INSERT'' THEN |
||||
|
FOR kontenplan_row IN select * from fibu.kontenplan LOOP |
||||
|
IF (NEW.nr_von >= kontenplan_row.nr_von AND |
||||
|
NEW.nr_von <= kontenplan_row.nr_bis) OR |
||||
|
(NEW.nr_bis >= kontenplan_row.nr_von AND |
||||
|
NEW.nr_bis <= kontenplan_row.nr_bis) OR |
||||
|
(NEW.nr_von < kontenplan_row.nr_von AND |
||||
|
NEW.nr_bis > kontenplan_row.nr_bis) THEN |
||||
|
RAISE EXCEPTION ''range violation''; |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END IF; |
||||
|
|
||||
|
IF TG_OP = ''UPDATE'' THEN |
||||
|
FOR kontenplan_row IN |
||||
|
select * from fibu.kontenplan where _id_<>NEW._id_ |
||||
|
LOOP |
||||
|
IF (NEW.nr_von >= kontenplan_row.nr_von AND |
||||
|
NEW.nr_von <= kontenplan_row.nr_bis) OR |
||||
|
(NEW.nr_bis >= kontenplan_row.nr_von AND |
||||
|
NEW.nr_bis <= kontenplan_row.nr_bis) OR |
||||
|
(NEW.nr_von < kontenplan_row.nr_von AND |
||||
|
NEW.nr_bis > kontenplan_row.nr_bis) THEN |
||||
|
RAISE EXCEPTION ''range violation''; |
||||
|
END IF; |
||||
|
END LOOP; |
||||
|
RETURN NEW; |
||||
|
END IF; |
||||
|
|
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function on_insert_kontenplan_create_used_konten() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
i fibu.kontenplan.nr_von%TYPE; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''INSERT'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
FOR i IN NEW.nr_von..NEW.nr_bis LOOP |
||||
|
insert into fibu.used_konten (kto_nr, used, konto_typ) |
||||
|
values (i, 0, NEW.konto_typ); |
||||
|
END LOOP; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function on_update_kontenplan_upd_used_konten() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
von fibu.kontenplan.nr_von%TYPE; |
||||
|
bis fibu.kontenplan.nr_bis%TYPE; |
||||
|
displacement fibu.kontenplan.nr_von%TYPE; |
||||
|
count fibu.kontenplan.nr_von%TYPE; |
||||
|
i fibu.kontenplan.nr_von%TYPE; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''UPDATE'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
displacement := NEW.nr_von - OLD.nr_von; |
||||
|
|
||||
|
IF (NEW.nr_bis - NEW.nr_von) < (OLD.nr_bis - OLD.nr_von) THEN |
||||
|
count := NEW.nr_bis - NEW.nr_von; |
||||
|
von := OLD.nr_von; |
||||
|
bis := von + count; |
||||
|
|
||||
|
FOR i IN von..bis LOOP |
||||
|
update fibu.used_konten set kto_nr=i + displacement, |
||||
|
konto_typ=NEW.konto_typ where kto_nr=i; |
||||
|
END LOOP; |
||||
|
|
||||
|
von := bis + 1; |
||||
|
bis := OLD.nr_bis; |
||||
|
|
||||
|
FOR i IN von..bis LOOP |
||||
|
delete from fibu.used_konten where kto_nr=i; |
||||
|
END LOOP; |
||||
|
ELSE |
||||
|
von := OLD.nr_von; |
||||
|
bis := OLD.nr_bis; |
||||
|
|
||||
|
FOR i IN von..bis LOOP |
||||
|
update fibu.used_konten set kto_nr=i + displacement, |
||||
|
konto_typ=NEW.konto_typ where kto_nr=i; |
||||
|
END LOOP; |
||||
|
|
||||
|
von := bis + 1; |
||||
|
bis := NEW.nr_bis; |
||||
|
|
||||
|
FOR i IN von..bis LOOP |
||||
|
insert into fibu.used_konten (kto_nr, used, konto_typ) |
||||
|
values (i, 0, NEW.konto_typ); |
||||
|
END LOOP; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function on_delete_kontenplan_del_used_konten() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
i fibu.kontenplan.nr_von%TYPE; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''DELETE'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
FOR i IN OLD.nr_von..OLD.nr_bis LOOP |
||||
|
delete from fibu.used_konten where kto_nr=i; |
||||
|
END LOOP; |
||||
|
|
||||
|
RETURN OLD; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende Trigger -- |
||||
@ -0,0 +1,33 @@ |
|||||
|
-- Trigger Funktionen zu Rechten -- |
||||
|
-- [ |
||||
|
create function create_valid_rechte_mask() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
err_msg text; |
||||
|
new_len int4; |
||||
|
old_len int4; |
||||
|
dummy RECORD; |
||||
|
sel text; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''UPDATE'' AND TG_OP <> ''INSERT'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
new_len := bit_length(NEW.maske); |
||||
|
old_len := fibu.konto_typ_min_len(); |
||||
|
|
||||
|
IF new_len < old_len THEN |
||||
|
NEW.maske := bit_set_len(NEW.maske, old_len); |
||||
|
END IF; |
||||
|
|
||||
|
IF old_len < new_len THEN |
||||
|
EXECUTE ''update fibu.konten_typen set konto_typ=konto_typ'' || |
||||
|
''::BIT('' || new_len || '')>>'' || new_len-old_len; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
-- create function on_ref_count_null_del_konto() |
||||
@ -0,0 +1,120 @@ |
|||||
|
-- Triggerfunktionen zu Waren/Warengruppen -- |
||||
|
-- [ |
||||
|
create function create_valid_produkt_typ_mask() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
mask bit varying; |
||||
|
freepos int4 := 0; |
||||
|
err_msg text; |
||||
|
new_len int4; |
||||
|
old_len int4; |
||||
|
BEGIN |
||||
|
IF TG_OP <> ''UPDATE'' AND TG_OP <> ''INSERT'' THEN |
||||
|
err_msg := TG_NAME || '': called for wrong action '' || TG_OP; |
||||
|
RAISE EXCEPTION ''%'', err_msg; |
||||
|
END IF; |
||||
|
|
||||
|
new_len := bit_length(NEW.produkt_typ); |
||||
|
IF TG_OP = ''UPDATE'' THEN |
||||
|
new_len := bit_length(OLD.konto_typ); |
||||
|
ELSE |
||||
|
old_len := fibu.konto_typ_min_len(); |
||||
|
END IF; |
||||
|
|
||||
|
IF new_len < old_len THEN |
||||
|
NEW.konto_typ := NEW.konto_typ::BIT(old_len)>>old_len-new_len; |
||||
|
END IF; |
||||
|
|
||||
|
IF old_len < new_len THEN |
||||
|
EXECUTE ''update fibu.konten_typen set konto_typ=konto_typ'' || |
||||
|
''::BIT('' || new_len || '')>>'' || new_len-old_len; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function set_tiefe() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
BEGIN |
||||
|
IF NEW.parent IS NOT NULL THEN |
||||
|
select INTO NEW.tiefe tiefe+1 from |
||||
|
waren.get_warengruppe(NEW.parent); |
||||
|
|
||||
|
update waren.warengruppe set is_parent=''true'' where |
||||
|
_id_=NEW.parent; |
||||
|
ELSE |
||||
|
NEW.tiefe := 0; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function on_update_delete_check_is_parent() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
i int4; |
||||
|
BEGIN |
||||
|
select INTO i count(*) from waren.warengruppe where |
||||
|
parent=OLD.parent; |
||||
|
|
||||
|
IF i > 0 THEN |
||||
|
update waren.warengruppe set is_parent=''true'' where |
||||
|
_id_=OLD.parent; |
||||
|
ELSE |
||||
|
update waren.warengruppe set is_parent=''false'' where |
||||
|
_id_=OLD.parent; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN OLD; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function on_update_check_tiefe() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
row waren.warengruppe%ROWTYPE; |
||||
|
parent_count int4; |
||||
|
BEGIN |
||||
|
IF NEW.parent IS NULL THEN |
||||
|
NEW.tiefe := 0; |
||||
|
ELSE |
||||
|
IF OLD.parent IS NULL OR |
||||
|
OLD.parent <> NEW.parent THEN |
||||
|
select INTO NEW.tiefe tiefe+1 from |
||||
|
waren.get_warengruppe(NEW.parent); |
||||
|
END IF; |
||||
|
END IF; |
||||
|
|
||||
|
IF NEW.tiefe <> OLD.tiefe THEN |
||||
|
FOR row IN select * from waren.warengruppe where |
||||
|
parent=NEW._id_ |
||||
|
LOOP |
||||
|
update waren.warengruppe set tiefe=NEW.tiefe+1 where |
||||
|
_id_=row._id_; |
||||
|
END LOOP; |
||||
|
END IF; |
||||
|
|
||||
|
RETURN NEW; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
|
||||
|
create function on_delete_new_parent() |
||||
|
returns TRIGGER as ' |
||||
|
DECLARE |
||||
|
row waren.warengruppe%ROWTYPE; |
||||
|
BEGIN |
||||
|
FOR row IN select * from waren.warengruppe where |
||||
|
parent=OLD._id_ |
||||
|
LOOP |
||||
|
update waren.warengruppe set parent=OLD.parent where |
||||
|
_id_=row._id_; |
||||
|
END LOOP; |
||||
|
|
||||
|
RETURN OLD; |
||||
|
END; |
||||
|
' language 'plpgsql'; |
||||
|
-- ] |
||||
|
-- Ende Triggerfunktionen zu Waren/Warengruppen -- |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue