diff --git a/src-modules/module/rpta/conf/includes.txt b/src-modules/module/rpta/conf/includes.txt
index 832114b..f290124 100644
--- a/src-modules/module/rpta/conf/includes.txt
+++ b/src-modules/module/rpta/conf/includes.txt
@@ -5,6 +5,7 @@ images/icons/magic.svg
WEB-INF/conf/edustore/db/module/rpta/schluesseltabellen/sx_stylesheets_einfuegen.sql
WEB-INF/lib/superx-rpta.jar
WEB-INF/reports/simple_table.jrtx
+WEB-INF/reports/48110_leistungen_und_studiengaenge.jrxml
xml/tabelle_jrxml_a4_quer.xsl
xml/tabelle_jrxml_book_without_cover.xsl
xml/tabelle_xls_48140.xsl
diff --git a/src-modules/module/rpta/conf/rpta.xml b/src-modules/module/rpta/conf/rpta.xml
index 93eaf2f..98cb2d1 100644
--- a/src-modules/module/rpta/conf/rpta.xml
+++ b/src-modules/module/rpta/conf/rpta.xml
@@ -497,6 +497,7 @@ scriptfile="" database=""/>
+
@@ -541,6 +542,7 @@ scriptfile="" database=""/>
+
diff --git a/src-modules/module/rpta/masken/48000_felderinfo.unl b/src-modules/module/rpta/masken/48000_felderinfo.unl
index 1fcc33c..ff8ee17 100644
--- a/src-modules/module/rpta/masken/48000_felderinfo.unl
+++ b/src-modules/module/rpta/masken/48000_felderinfo.unl
@@ -22,6 +22,8 @@ and R.systeminfo_id=7) and uniquename='sos_stud_astat_rsz';^
48011^Stichtag^23^330^-1^130^100^1^sql^30^1^1^<> select tid, name from sos_stichtag where stichtagsart='Studierende';^ ^<> select tid, name from sos_stichtag where stichtagsart='Studierende' and appl_key='0';^
48012^Hörerstatus^200^330^-1^140^150^1^sql^30^0^1^<> select apnr, eintrag from hoererstatus order by 2^ ^<> select apnr, eintrag from hoererstatus where eintrag='alle';^
48013^Jahr^110^0^0^140^80^1^integer^30^0^13^ ^ ^ ^
+48014^Filter Studierende^100^0^0^140^150^1^sql^20^0^1^<> SELECT id,caption from sx_repository where aktiv =1 and today() between gueltig_seit and gueltig_bis and art='SOS_STUD_FILTER' order by 2;^^^
+48015^Nur Endsemester^21^0^0^140^80^1^integer^30^0^1^<> select 1,'ja' from xdummy^Eintrag^ ^
48018^Köpfe oder Fälle ?^0^0^0^140^150^1^sql^70^0^1^<> select apnr, eintrag from koepfe_oder_faelle order by 2^ ^<> select apnr, eintrag from koepfe_oder_faelle where eintrag = 'Fälle';^
48022^Geschlecht^110^0^0^140^80^1^integer^30^0^1^<> SELECT apnr,druck FROM cif where key = 9003 and apnr between 1 and 4 order by 1;^ ^ ^
48023^Spalten^3001^0^0^150^190^10^char^30^0^1^<>\
diff --git a/src-modules/module/rpta/masken/48000_masken_felder_bez.unl b/src-modules/module/rpta/masken/48000_masken_felder_bez.unl
index d472300..1fdfeef 100644
--- a/src-modules/module/rpta/masken/48000_masken_felder_bez.unl
+++ b/src-modules/module/rpta/masken/48000_masken_felder_bez.unl
@@ -12,6 +12,8 @@
48000^48011^
48000^48012^
48000^48013^
+48000^48014^
+48000^48015^
48000^48018^
48000^48022^
48000^48023^
diff --git a/src-modules/module/rpta/masken/48000_maskeninfo.unl b/src-modules/module/rpta/masken/48000_maskeninfo.unl
index 6bfddb3..ffd8c86 100644
--- a/src-modules/module/rpta/masken/48000_maskeninfo.unl
+++ b/src-modules/module/rpta/masken/48000_maskeninfo.unl
@@ -75,9 +75,19 @@ order by CL.sortnr\
<#assign jahr_filter=jahr_filter + ")" />\
#if>\
\
-<#assign filter="<>\
+<#assign semester_filter ="1=1\
/* and sem_rueck_beur_ein >= <> */\
/* and sem_rueck_beur_ein <= <> */\
+" />\
+<#if "<>"="1" || "<>"="2">\
+<#assign semester_filter = semester_filter+ " and substring('' || sem_rueck_beur_ein from 5 for 1)='<>'" />\
+#if>\
+<#if "<>"="1">\
+--nur Endsemester\
+/* <#assign semester_filter = semester_filter+ " and 1=1 and sem_rueck_beur_ein = '<>'" /> */\
+#if>\
+\
+<#assign filter="<>\
/* and sem_rueck_beur_ein = <> */\
/* and stichtag = <> */\
/* and <> */\
@@ -86,10 +96,14 @@ order by CL.sortnr\
/* and geschlecht = <> */\
/* and fach_sem_zahl <= <> */\
/* and substring('' || sem_rueck_beur_ein from 5 for 1)='<>' */\
+/* and ${<>} */\
" />\
\
<#assign filter= filter + " and " + jahr_filter />\
\
+<#assign filter= filter + " and " + semester_filter />\
+\
+\
<#assign filter = filter + " and 's_' || tid_stg in "+Studiengang.allNeededKeysList /> \
/* <#assign filter = filter + " and '' || ca12_staat in "+Staatsangehörigkeit.allNeededKeysList /> --<> */\
/* <#assign filter = filter + " and stg in "+Fächer.allNeededKeysList /> --<> */\
diff --git a/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_lab_pord_pruef_fuellen.sql b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_lab_pord_pruef_fuellen.sql
new file mode 100644
index 0000000..3a1b3be
--- /dev/null
+++ b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_lab_pord_pruef_fuellen.sql
@@ -0,0 +1,545 @@
+--freemarker template
+
+
+select count(*) from rpta_resultset where uniquename='sos_lab_pord_ppruef';
+
+
+select uniquename from rpta_resultset where uniquename='sos_lab_pord_ppruef';
+
+
+<#assign rpta_column_layouts = [ {"uniquename":"sos_lab_pord_ppruef_modul",
+"caption":"Modulprüfungen und Prüfer_innen Einzeldaten",
+"rpta_resultset":"sos_lab_pord_ppruef",
+"whereclause":"is_modul=1",
+"description":"Modulprüfungen und Prüfer_innen"
+},
+{"uniquename":"sos_lab_pord_ppruef_thesis",
+"caption":"Abschlussarbeiten und Betreuer_innen Einzeldaten",
+"rpta_resultset":"sos_lab_pord_ppruef",
+"whereclause":"labnr in (select labnr from sos_dipl_pos_swf)",
+"description":"Abschlussarbeiten und Betreuer_innen"
+}]
+ />
+
+<#assign rpta_columns = [
+
+{"uniquename":"matrikel_nr",
+"srcfieldname":"matrikel_nr",
+"column_type":"physicalColumn",
+"format_code":"INT_NO_SEP",
+"is_aggregate":0,
+"caption":"Matrikel-Nr.",
+"is_visible":"1",
+"visible_size":5},
+
+ {"uniquename":"sourcesystem",
+"srcfieldname":"sourcesystem",
+"column_type":"physicalColumn",
+"format_code":"",
+"is_aggregate":0,
+"caption":"Quellsystem",
+"is_visible":"0",
+"is_aggregate":0,
+"visible_size":5},
+
+ {"uniquename":"labnr",
+"srcfieldname":"labnr",
+"column_type":"physicalColumn",
+"format_code":"",
+"is_aggregate":0,
+"caption":"ID der Prüfung",
+"is_visible":"0",
+"is_aggregate":0,
+"visible_size":5},
+
+{"uniquename":"sem_der_pruefung",
+"srcfieldname":"sem_der_pruefung",
+"column_type":"physicalColumn",
+"format_code":"INT_NO_SEP",
+"is_aggregate":0,
+"caption":"Semester",
+"is_visible":"0",
+"is_aggregate":0,
+"visible_size":5},
+
+{"uniquename":"sem_rueck_beur_ein_max",
+"srcfieldname":"sem_rueck_beur_ein_max",
+"targetfieldname":"sos_lab_sem_rueck_beur_ein_max",
+"column_type":"lookupColumn",
+"format_code":"INT_NO_SEP",
+"is_aggregate":0,
+"caption":"Letztes Semester",
+"is_visible":1,
+"visible_size":5,
+"col_function":"select sem_rueck_beur_ein from sos_sos S where S.matrikel_nr=tmp_sos_lab_pord_ppruef.matrikel_nr"}
+,
+{"uniquename":"status",
+"srcfieldname":"status",
+"column_type":"lookupColumn",
+"is_aggregate":0,
+"caption":"Status",
+"is_visible":1,
+"is_aggregate":0,
+"visible_size":5,
+ "col_function":"select ST.apnr from sos_k_status ST where val(ST.astat)=kz_rueck_beur_ein"},
+
+{"uniquename":"hrst",
+"srcfieldname":"hrst",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Hörerstatus",
+"is_visible":1,
+"visible_size":5},
+
+{"uniquename":"vorname",
+"srcfieldname":"vorname",
+"column_type":"lookupColumn",
+"is_aggregate":0,
+"caption":"Vorname",
+"is_visible":1,
+"is_aggregate":0,
+"visible_size":5,
+ "col_function":"select A.firstname from sos_stud_address A where A.matrikel_nr=tmp_sos_lab_pord_ppruef.matrikel_nr"},
+
+{"uniquename":"nachname",
+"srcfieldname":"nachname",
+"column_type":"lookupColumn",
+"is_aggregate":0,
+"caption":"Nachname",
+"is_visible":1,
+"is_aggregate":0,
+"visible_size":5,
+ "col_function":"select A.surname from sos_stud_address A where A.matrikel_nr=tmp_sos_lab_pord_ppruef.matrikel_nr"},
+
+{"uniquename":"res1",
+"srcfieldname":"res1",
+"column_type":"lookupColumn",
+"is_aggregate":0,
+"caption":"Austauschstudierende/Doppelabsolventen",
+"is_visible":1,
+"visible_size":5,
+"col_function":"select min(attributevalue) from personattribute A where tmp_sos_lab_pord_ppruef.sem_der_pruefung between A.semester_von and A.semester_bis and A.personattributetype_id="+K_SOS_PERSATTR_AUSTAUSCH+" and A.matrikel_nr=tmp_sos_lab_pord_ppruef.matrikel_nr"},
+
+{"uniquename":"stg",
+"srcfieldname":"dim_studiengang_stg",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Fach",
+"is_visible":1,
+"visible_size":5},
+
+{"uniquename":"abschluss",
+"srcfieldname":"dim_studiengang_abschluss",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Abschluss",
+"is_visible":1,
+"visible_size":5}
+
+{"uniquename":"fach_sem_zahl",
+"srcfieldname":"fach_sem_zahl",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Fachsemester",
+"is_visible":1,
+"visible_size":5},
+
+{"uniquename":"stgnr",
+"srcfieldname":"stgnr",
+"column_type":"logicalColumn",
+"is_aggregate":0,
+"caption":"Studiengangnr.",
+"is_visible":1,
+"visible_size":5,
+"col_function":"'''' || studiengang_nr || fach_nr"},
+
+ {"uniquename":"part",
+"srcfieldname":"part",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Prüfungsart",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"pnr_pos",
+"srcfieldname":"pnr",
+"column_type":"physicalColumn",
+"format_code":"INT_NO_SEP",
+"is_aggregate":0,
+"caption":"Prüfungsnummer POS",
+"is_visible":0,
+"visible_size":5},
+
+{"uniquename":"elementnr",
+"srcfieldname":"",
+"targetfieldname":"elementnr",
+"column_type":"logicalColumn",
+"is_aggregate":0,
+"caption":"Prüfungsnummer",
+"is_visible":1,
+"visible_size":5,
+"col_function":"pktxt"},
+
+
+ {"uniquename":"pversuch",
+"srcfieldname":"pversuch",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Prüfungsversuch",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"prueck",
+"srcfieldname":"prueck",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Rücktritt",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"pversion_ktxt",
+"srcfieldname":"pversion_ktxt",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"PO-Version",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"pstatus",
+"srcfieldname":"pstatus",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Prüfungsstatus",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"d_abg_pruefung",
+"srcfieldname":"d_abg_pruefung",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Prüfungsdatum",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"note",
+"srcfieldname":"note",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Note",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"sos_lab_panerk",
+"srcfieldname":"sos_lab_panerk",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Anerkennung",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"pvermerk",
+"srcfieldname":"pvermerk",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Vermerk",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"pform",
+"srcfieldname":"pform",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Prüfungsform",
+"is_visible":1,
+"visible_size":5},
+
+{"uniquename":"pdtxt",
+"srcfieldname":"pdtxt",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"PO-Element Name",
+"is_visible":1,
+"visible_size":5},
+
+ {"uniquename":"ppruef1",
+"srcfieldname":"sos_lab_ppruef1",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Erstprüfer_in Schlüssel",
+"is_visible":0,
+"visible_size":5},
+
+{"uniquename":"ppruef1_str",
+"srcfieldname":"ppruef1",
+"targetfieldname":"sos_lab_ppruef1_str",
+"column_type":"lookupColumn",
+"is_aggregate":0,
+"caption":"Erstprüfer_in",
+"is_visible":1,
+"visible_size":5,
+"col_function":"select replace(C.druck,'','','''') from cifx C where C.key=9011 and C.apnr=tmp_sos_lab_pord_ppruef.sos_lab_ppruef1"},
+
+ {"uniquename":"ppruef2",
+"srcfieldname":"sos_lab_ppruef2",
+"column_type":"physicalColumn",
+"is_aggregate":0,
+"caption":"Zweitprüfer_in",
+"is_visible":0,
+"visible_size":5},
+
+{"uniquename":"ppruef2_str",
+"srcfieldname":"ppruef2",
+"targetfieldname":"sos_lab_ppruef2_str",
+"column_type":"lookupColumn",
+"is_aggregate":0,
+"caption":"Zweitprüfer_in",
+"is_visible":1,
+"visible_size":5,
+"col_function":"select replace(C.druck,'','','''') from cifx C where C.key=9011 and C.apnr=tmp_sos_lab_pord_ppruef.sos_lab_ppruef2"}
+,
+{"uniquename":"sem_d_abg_pruefung",
+"srcfieldname":"sem_d_abg_pruefung",
+"targetfieldname":"sos_lab_sem_d_abg_pruefung",
+"column_type":"logicalColumn",
+"format_code":"INT_NO_SEP",
+"is_aggregate":0,
+"caption":"Semester der Prüfung",
+"is_visible":1,
+"visible_size":5,
+"col_function":"sem_der_pruefung"}
+
+
+
+ ] />
+
+ ---ab hier nicht mehr ändern:
+
+CREATE temp TABLE tmp_rpta_column
+(
+ uniquename varchar(255) NOT NULL,
+ caption varchar(255),
+ srcfieldname varchar(255),
+ targetfieldname varchar(255),
+ column_type integer,
+ col_function text,
+ is_visible smallint,
+ visible_size smallint,
+ is_aggregate smallint,
+ resultset_id integer,
+ sortnr integer,
+ description TEXT,
+ format_code_uniquename varchar(255),
+ format_code_id integer
+);
+
+CREATE temp TABLE tmp_rpta_column_layout
+(
+ uniquename varchar(255) NOT NULL,
+ caption varchar(255),
+ resultset_id integer,
+ whereclause text,
+ description text
+);
+
+
+<#foreach rpta_column_layout in rpta_column_layouts>
+
+insert into tmp_rpta_column_layout(
+resultset_id,
+uniquename,
+caption,
+whereclause,
+ description
+)
+select tid,
+'${rpta_column_layout.uniquename}',
+'${rpta_column_layout.caption}',
+'${rpta_column_layout.whereclause}',
+'${rpta_column_layout.description}'
+FROM rpta_resultset
+where uniquename='${rpta_column_layout.rpta_resultset}';
+
+#foreach >
+
+<#assign sortnr=0 />
+<#foreach column in rpta_columns>
+<#assign sortnr=sortnr +1 />
+
+INSERT INTO tmp_rpta_column
+(resultset_id,
+ uniquename,
+ caption,
+ srcfieldname,
+ targetfieldname,
+ column_type,
+ col_function,
+ is_visible,
+ visible_size,
+ is_aggregate,
+ sortnr,
+ description,
+ format_code_uniquename
+ )
+select R.tid,
+'${column.uniquename}',
+'${column.caption}',
+'${column.srcfieldname}',
+<#if !column.targetfieldname?exists || column.targetfieldname=="">null::varchar <#else>'${column.targetfieldname}' #if>,
+T.tid as column_type,
+<#if column.col_function?exists>'${column.col_function}'<#else>null::varchar #if>,
+${column.is_visible},
+${column.visible_size},
+${column.is_aggregate},
+${sortnr*10},
+<#if column.description?exists>'${column.description}'<#else>null::varchar #if>,
+<#if column.format_code?exists>'${column.format_code}'<#else>null::varchar #if>
+FROM rpta_resultset R, rpta_column_type T
+where R.uniquename='${rpta_resultset}'
+and T.uniquename='${column.column_type}';
+
+#foreach>
+
+update tmp_rpta_column set format_code_id=C.tid
+from rpta_format_code C
+where C.uniquename=tmp_rpta_column.format_code_uniquename
+and format_code_uniquename is not null;
+
+
+select * into temp tmp_rpta_column2layout
+from rpta_column2layout
+where layout_id in (select L.tid
+from rpta_column_layout L,rpta_resultset R
+where R.tid=L.resultset_id
+and R.uniquename='${rpta_resultset}'
+and L.uniquename in (
+<#foreach rpta_column_layout in rpta_column_layouts>
+'${rpta_column_layout.uniquename}',
+#foreach>'xy')
+)
+;
+
+select * into temp tmp_rpta_column_layout_target
+from rpta_column_layout
+where resultset_id in (select tid
+FROM rpta_resultset
+where uniquename='${rpta_resultset}')
+and uniquename in (select uniquename from tmp_rpta_column_layout)
+;
+
+insert into rpta_column_layout
+(uniquename,
+ caption,
+ resultset_id,
+ whereclause,
+ description)
+ select uniquename,
+ caption,
+ resultset_id,
+ whereclause,
+ description
+FROM tmp_rpta_column_layout T
+where 0=(select count(*) from tmp_rpta_column_layout_target T2
+where T.uniquename=T2.uniquename);
+
+drop table tmp_rpta_column_layout_target;
+
+delete from rpta_column2layout
+where layout_id in (select L.tid
+from rpta_column_layout L,rpta_resultset R
+where R.tid=L.resultset_id
+and R.uniquename='${rpta_resultset}'
+and L.uniquename in (
+<#foreach rpta_column_layout in rpta_column_layouts>
+'${rpta_column_layout.uniquename}',
+#foreach>'xy')
+)
+;
+
+select * into temp tmp_rpta_column2
+from tmp_rpta_column T
+where (resultset_id,uniquename) not in
+(select resultset_id,uniquename from rpta_column);
+
+INSERT INTO rpta_column
+(resultset_id,
+ uniquename,
+ caption,
+ srcfieldname,
+ targetfieldname,
+ column_type,
+ col_function,
+ is_aggregate,
+ description,
+ custom
+ )
+ select
+resultset_id,
+ uniquename,
+ caption,
+ srcfieldname,
+ targetfieldname,
+ column_type,
+ col_function,
+ is_aggregate,
+ description,
+ 0 as custom
+from tmp_rpta_column2;
+
+--evtl. neuen Satz einfügen, dann alle updaten
+
+update rpta_column set ( caption,
+ srcfieldname,
+ targetfieldname,
+ column_type,
+ col_function,
+ is_aggregate,
+ description)
+ = (select caption,
+ srcfieldname,
+ targetfieldname,
+ column_type,
+ col_function,
+ is_aggregate,
+ description
+ from tmp_rpta_column T
+ where T.resultset_id=rpta_column.resultset_id
+ and T.uniquename=rpta_column.uniquename)
+ where custom=0
+ and (resultset_id,uniquename) in
+(select T.resultset_id,T.uniquename
+from tmp_rpta_column T)
+;
+
+drop table tmp_rpta_column2;
+
+insert into rpta_column2layout(column_id,
+ layout_id,
+ sortnr,
+ is_visible,
+ visible_size,
+ caption,
+ description,
+ format_code_id)
+select C.tid as column_id,
+ L.tid as layout_id,
+ T.sortnr,
+ T.is_visible,
+ T.visible_size,
+ T.caption,
+ T.description,
+ T.format_code_id
+FROM rpta_column C, rpta_column_layout L, tmp_rpta_column T
+where C.uniquename=T.uniquename
+and C.resultset_id=T.resultset_id
+and L.uniquename in (
+<#foreach rpta_column_layout in rpta_column_layouts>
+'${rpta_column_layout.uniquename}',
+#foreach>'xy')
+and L.resultset_id=T.resultset_id
+ ;
+drop table tmp_rpta_column;
+drop table if exists tmp_rpta_column2;
+drop TABLE tmp_rpta_column_layout;
+drop table tmp_rpta_column2layout;
+
+