diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..d575d1c
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rsync_to_superx.x b/rsync_to_superx.x
new file mode 100755
index 0000000..2a46819
--- /dev/null
+++ b/rsync_to_superx.x
@@ -0,0 +1,7 @@
+#!/bin/bash
+#Synchronisierung webapp zum Zielpfad
+
+ant -DMODULE_PATH=$MEINMODUL_PFAD -DBASE_DIR=. -DMODULE=meinmodul all
+
+
+
diff --git a/src-modules/module/hierhin bitte das Kuerzel Ihres moduls.txt b/src-modules/module/hierhin bitte das Kuerzel Ihres moduls.txt
new file mode 100644
index 0000000..e69de29
diff --git a/src-modules/module/xcube/conf/excludes.txt b/src-modules/module/xcube/conf/excludes.txt
new file mode 100644
index 0000000..0290a94
--- /dev/null
+++ b/src-modules/module/xcube/conf/excludes.txt
@@ -0,0 +1,5 @@
+**/*log*
+**/*err*
+**/*tmp*
+**/*.alt
+**/*.out
diff --git a/src-modules/module/xcube/conf/includes.txt b/src-modules/module/xcube/conf/includes.txt
new file mode 100644
index 0000000..f69104f
--- /dev/null
+++ b/src-modules/module/xcube/conf/includes.txt
@@ -0,0 +1 @@
+WEB-INF/conf/edustore/db/bin/SQL_ENV_xcube.sam
diff --git a/src-modules/module/xcube/conf/xcube.xml b/src-modules/module/xcube/conf/xcube.xml
new file mode 100644
index 0000000..21c2aa2
--- /dev/null
+++ b/src-modules/module/xcube/conf/xcube.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_felderinfo.unl b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_felderinfo.unl
new file mode 100644
index 0000000..7ea9f5e
--- /dev/null
+++ b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_felderinfo.unl
@@ -0,0 +1,10 @@
+99990031^Ansicht in Ergebniszeilen^200^0^0^150^200^1^char^30^1^1^<> select F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and C.table_name='kenn_vtbu_cube' and is_rowdim=1 order by 1^^<> select F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and C.table_name='kenn_vtbu_cube' and is_rowdim=1 and is_rowdefault=1^
+99990032^Haushaltsjahr^7^0^0^100^50^1^integer^30^1^1^<> SELECT distinct ord,name FROM aggregierung where kategorie='KENN-Jahr' order by 1;^^<> select year(today()) -1 from xdummy;^
+99990033^Zeitraum^10^200^-1^100^100^1^sql^30^0^1^<> select apnr,druck from kenn_quartale order by 1;^^^
+99990034^Ansicht in Ergebnisspalten^300^0^0^150^200^1^char^30^1^1^<> select F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and C.table_name='kenn_vtbu_cube' and is_coldim=1 order by 1;^^<> select F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and C.table_name='kenn_vtbu_cube' and is_coldim=1 and is_coldefault=1^
+99990035^Hochschule^0^0^0^100^200^1^char^30^1^12^<> select tid, type, name , sortnr from sichten where art in ('KENN-Kostenstellen-Sicht', 'KENN-Hochschulen-Sicht') order by sortnr,name;^^^
+99990036^Lehreinheit anzeigen^90^200^-1^100^100^1^char^30^1^1^<> select 'j','Ja' from xdummy union select 'n','Nein' from xdummy;^hidden^<> select 'j','Ja' from xdummy^
+99990037^Kostenträger^1^0^0^100^200^1^char^30^0^12^<> select tid,type,name from sichten where art='KENN-Kostenträger-Sicht' and name_intern like '%lehre%' and aktiv=1 order by type,name^^^
+99990038^Filter auf Ebene^80^0^0^100^20^1^integer^30^0^0^^hidden^^
+99990039^Primär/Sekundär^2^200^-1^100^200^1^char^30^0^1^<> select key,name from joolap_blueprints where blueprint='bluep_kenn_pr_sek' order by 2^ ^ ^
+99990040^Kostenartenblock^100^0^0^100^200^1^char^30^0^1^<>select art2,caption from sx_repository where aktiv=1 and art='KENN_KOA_BLOCK' and art2 not like '_ERL%' order by 2^hidden^^
diff --git a/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maske_system_bez.unl b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maske_system_bez.unl
new file mode 100644
index 0000000..2e7b45c
--- /dev/null
+++ b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maske_system_bez.unl
@@ -0,0 +1 @@
+99990030^109^
diff --git a/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_masken_felder_bez.unl b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_masken_felder_bez.unl
new file mode 100644
index 0000000..9217969
--- /dev/null
+++ b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_masken_felder_bez.unl
@@ -0,0 +1,10 @@
+99990030^99990031^
+99990030^99990032^
+99990030^99990033^
+99990030^99990034^
+99990030^99990035^
+99990030^99990036^
+99990030^99990037^
+99990030^99990038^
+99990030^99990039^
+99990030^99990040^
diff --git a/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maskeninfo.unl b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maskeninfo.unl
new file mode 100644
index 0000000..62c6d35
--- /dev/null
+++ b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maskeninfo.unl
@@ -0,0 +1,188 @@
+99990030^xCube Sekundärkosten^-- Personal nach Finanzierung (der amtl. Statistik)\
+--freemarker template\
+\
+select 'kenn_vtbu_cube' from xdummy\
+>]]>\
+\
+ and ${coldef.foreignkey_cond} #if>\
+ ${coldef.specific_restriction} \
+--ausblenden von Spalten, die gar nicht in konkretem Teilergebnis vorkommen\
+--and ${coldef.foreignkey_col} in (select distinct ${coldef.name} from ${tablename} where\
+--Hier allgemeine Einschränkungen\
+--jahr=<> \
+--)\
+union\
+select 'gesamt','Gesamt',2::smallint as detailgesamtsort,null as ${coldef.sortfield} from xdummy\
+order by detailgesamtsort,${coldef.sortfield},name; \
+]]>\
+\
+\
+\
+\
+>]]>\
+\
+--nur bei wenn Ergzeilen_def nicht vom Typ Sicht relevant\
+\
+select 1::smallint as level, ${rowdef.foreignkey_col}::varchar(255) as key,--hier wird zur Vereinheitlichung mit Sichten Bezeichung "key" für eigentlichen Schluessel benoetigt\
+${rowdef.foreignkey_cap} as name from ${rowdef.foreignkey_tab}\
+where 1=1\
+<#if rowdef.foreignkey_cond!=''> and ${rowdef.foreignkey_cond} #if>\
+ ${rowdef.specific_restriction} \
+union\
+select 2,'gesamt','Gesamt' from xdummy\
+order by level,name; \
+<#else>\
+select 'nicht relevant' from xdummy;#if>\
+]]>\
+\
+\
+\
+<#assign aggrfunction="sum(betrag)"/>\
+\
+\
+\
+create temp table tmp_rohdaten (\
+colattrib varchar(255), <@addcomment comment=coldef.caption/>\
+rowattrib varchar(255), <@addcomment comment=rowdef.caption/>\
+value decimal(17,5));\
+insert into tmp_rohdaten (colattrib,rowattrib,value)\
+select ${coldef.name}::varchar(255), \
+${rowdef.name}::varchar(255), ${aggrfunction}\
+from \
+kenn_vtbu_cube V\
+where \
+ <> = V.jahr \
+/* and V.projnr in <@printkeys Kostenträger.allNeededKeys/> --<> */\
+/* and V.prim_sek =<> */\
+ and V.hs_nr::char(10) in <@printkeys .vars["Hochschule"].allNeededKeys />\
+\
+ group by 1,2;\
+create index ix_tmp_roh1 on tmp_rohdaten (colattrib,rowattrib);\
+\
+create temp table tmp_erg (\
+ebene integer,\
+col1 varchar(255),\
+name varchar(255),\
+<#assign i=0/>\
+<#foreach spalte in ergspalten>\
+ <#assign i=i+1/>\
+ c${i} decimal(17,5) default 0, <@addcomment comment=spalte.name/>\
+ \
+#foreach>\
+sortnr integer\
+) <@informixnolog/>;\
+<#assign sortnr=0/>\
+\
+ \
+<#if rowdef.is_sicht==1> \
+ <#assign zeilendef=.vars[rowdef.caption].elements/> --ermittel des SichtObjekts anhand des Feldnames (aus felderinfo)\
+<#else>\
+ <#assign zeilendef=nichtsicht_ergzeilen/>\
+#if>\
+\
+<#foreach zeile in zeilendef>\
+ <#assign sortnr=sortnr+1/>\
+ insert into tmp_erg (ebene,col1,name,sortnr)\
+ values (${zeile.level},'${zeile.key}','${zeile.name}',${sortnr});\
+ <#assign i=0/>\
+<#foreach spalte in ergspalten>\
+ <#assign i=i+1/>\
+ <@updateval i=i col=spalte row=zeile art='gesamt'/>\
+ \
+ #foreach>\
+#foreach>\
+\
+<#macro updateval i col row art>\
+update tmp_erg T set c${i}=\
+ (select nvl(sum(value),0) from tmp_rohdaten R where 1=1 \
+ <#if col.apnr!='gesamt'>\
+ and R.colattrib='${col.apnr}' \
+ #if>\
+ \
+ <#if rowdef.is_sicht==1>\
+ and R.rowattrib in ${row.subkeys}\
+ <#else>\
+ <#if row.key!='gesamt'> and R.rowattrib='${row.key}' #if>\
+ #if>\
+ ) where T.col1='${row.key}'\
+ ;\
+ #macro>\
+ \
+drop table tmp_rohdaten;\
+\
+\
+ \
+ --Leerzeilen entfernen\
+delete from tmp_erg where\
+<#assign i=0/>\
+<#foreach spalte in ergspalten>\
+ <#assign i=i+1/>\
+ c${i}=0 <#if spalte_has_next> and #if>\
+#foreach>;\
+ \
+<#if "<>"="'institution'">\
+update tmp_erg set name=replace(name,col1||' - ','');\
+update tmp_erg set col1=(select max(uniquename) from organigramm where col1=trim(key_apnr))\
+where substring(col1 from 1 for 1)='_';\
+--vorher war ggfs _3 zu O005030, auch O005030 in Namen ersetzen\
+update tmp_erg set name=replace(name,col1||' - ','');\
+#if> \
+\
+\
+\
+\
+select \
+ <#if rowdef.is_sicht==1>ebene,col1,#if>\
+name,\
+<#assign i=0/>\
+<#foreach spalte in ergspalten>\
+ <#assign i=i+1/>\
+c${i}::integer <#if spalte_has_next>,#if>\
+#foreach>\
+\
+from tmp_erg order by sortnr;^--freemarker Template\
+XIL List\
+ sizable_columns horizontal_scrolling\
+ drop_and_delete movable_columns\
+ white_space_color=COLOR_WHITE fixed_columns=1\
+ min_heading_height=35\
+XIL List\
+ sizable_columns horizontal_scrolling\
+ drop_and_delete movable_columns\
+ white_space_color=COLOR_WHITE fixed_columns=1\
+ min_heading_height=35\
+<#if rowdef.is_sicht==1>\
+Column CID=0 heading_text="Ebene" center_heading\
+ row_selectable heading_platform readonly\
+ width=10 text_size=8\
+Column CID=20 heading_text="${.vars["Ansicht in ErgebniszeilenObject"].selectedItems[0].name}Nr" center_heading\
+ row_selectable heading_platform readonly\
+ width=10 text_size=10\
+#if>\
+Column CID=20 heading_text="${.vars["Ansicht in ErgebniszeilenObject"].selectedItems[0].name}" center_heading\
+ row_selectable heading_platform readonly\
+ width=10 text_size=10\
+<#foreach spalte in ergspalten>\
+Column CID=1 heading_text="${spalte.name}" center_heading\
+ row_selectable heading_platform readonly\
+ width=12\
+#foreach>\
+\
+\
+@@@^^^Kostenwürfel nach Produktbereich^drop table tmp_erg;^^2^600^400^0^1^<> select 'Letzte Lieferung: ' || date_str(max(datum)) from kenn_lieferung where (1 =0 /* or hs_nr::char(10) in (<>) */ /* or hs_nr::char(10) in (select key_apnr from organigramm where parent in (<>)) */ /* or <>='0' */ ) and kennzahl ='KOTN'^
diff --git a/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_sachgeb_maske_bez.unl b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_sachgeb_maske_bez.unl
new file mode 100644
index 0000000..014ec62
--- /dev/null
+++ b/superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_sachgeb_maske_bez.unl
@@ -0,0 +1 @@
+112^99990030^