diff --git a/src-modules/module/rpta/conf/rpta.xml b/src-modules/module/rpta/conf/rpta.xml
index 1952928..feb4861 100644
--- a/src-modules/module/rpta/conf/rpta.xml
+++ b/src-modules/module/rpta/conf/rpta.xml
@@ -615,6 +615,7 @@
+
@@ -685,6 +686,7 @@
+
diff --git a/src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql b/src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql
index 5c1ea53..11ede97 100644
--- a/src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql
+++ b/src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql
@@ -49,12 +49,17 @@ R.uniquename as rpta_name
<#if basetable.is_virtual==0>
<#foreach rpta_clause in rpta_clauses>
+
+<#assign whereclauseTemplate= "<#assign whereclause=\""+rpta_clause.whereclause +"\">"/>
+<#assign t2=whereclauseTemplate?interpret />
+<@t2/>
+
<#if rpta_clause.rpta_uniquename=basetable.uniquename>
<#if rpta_clause.joinclause?exists && rpta_clause.joinclause !=''>
-<#assign sqlString = "select current_timestamp as creation_date, " + rpta_clause.fieldclause + " from " + rpta_clause.joinclause + " where 1=1 " + rpta_clause.whereclause />
+<#assign sqlString = "select current_timestamp as creation_date, " + parseRepoVars(rpta_clause.fieldclause) + " from " + rpta_clause.joinclause + " where 1=1 " + parseRepoVars(rpta_clause.whereclause) />
<#else>
-<#assign sqlString = "select current_timestamp as creation_date, " + rpta_clause.fieldclause + " where 1=1 " + rpta_clause.whereclause />
+<#assign sqlString = "select current_timestamp as creation_date, " + parseRepoVars(rpta_clause.fieldclause) + " where 1=1 " + parseRepoVars(rpta_clause.whereclause) />
#if>
diff --git a/src-modules/module/rpta/masken/48000_maskeninfo.unl b/src-modules/module/rpta/masken/48000_maskeninfo.unl
index 2d7c9d9..2cf3709 100644
--- a/src-modules/module/rpta/masken/48000_maskeninfo.unl
+++ b/src-modules/module/rpta/masken/48000_maskeninfo.unl
@@ -167,11 +167,17 @@ limit 1;\
<#if basetable.is_virtual==1>\
\
create temp table ${basetable.runtime_tablename} as\
-select ${rpta_resultset.fieldclause} \
+select ${parseRepoVars(rpta_resultset.fieldclause)} \
from ${rpta_resultset.joinclause} \
where 1=1\
<#if rpta_resultset.whereclause != ""> \
-${rpta_resultset.whereclause} #if>\
+--damit Repo Variablen interpretiert werden:\
+<#assign whereclauseTemplate= "<#assign whereclause=\\""+rpta_resultset.whereclause +"\\">"/>\
+<#assign t2=whereclauseTemplate?interpret />\
+<@t2/>\
+\
+${whereclause} \
+#if>\
and ${filter}\
;\
#if>\
diff --git a/src-modules/module/rpta/masken/48250_felderinfo.unl b/src-modules/module/rpta/masken/48250_felderinfo.unl
index b380023..38a930d 100644
--- a/src-modules/module/rpta/masken/48250_felderinfo.unl
+++ b/src-modules/module/rpta/masken/48250_felderinfo.unl
@@ -24,6 +24,7 @@ and R.systeminfo_id=6)\
order by sortnr, caption\
limit 1 \
;^
+48261^ProfGruppe^1000^0^0^200^150^1^char^30^0^12^<>select tid,type,name,sortnr from sichten where art in ('SVA-PBV-Gruppe-Sicht') and aktiv=1 order by sortnr,type,name;^^^
48262^Dienstart^3^350^-1^150^150^3^char^30^0^12^<>select tid,type,name from sichten where art ='SVA Dienstart' and aktiv=1 order by type,name;^hidden^^
48264^BVL-Gruppe^80^350^-1^150^120^10^char^30^0^12^<>select tid,type,name from sichten where art ='SVA BVL-Gruppen' and aktiv=1 order by type,name;^hidden^^
48267^Personalkategorie^310^0^0^100^200^3^char^30^0^1^<> select id,caption from sx_repository where art='SVA_PERSONALKATEGORIE' and aktiv=1 and gueltig_seit<=date_val(<>) and gueltig_bis>=date_val(<>) order by sort1^hidden^^
diff --git a/src-modules/module/rpta/masken/48250_masken_felder_bez.unl b/src-modules/module/rpta/masken/48250_masken_felder_bez.unl
index 7d60b28..2ab41ae 100644
--- a/src-modules/module/rpta/masken/48250_masken_felder_bez.unl
+++ b/src-modules/module/rpta/masken/48250_masken_felder_bez.unl
@@ -9,6 +9,7 @@
48250^48258^
48250^48259^
48250^48260^
+48250^48261^
48250^48262^
48250^48264^
48250^48267^
diff --git a/src-modules/module/rpta/masken/48250_maskeninfo.unl b/src-modules/module/rpta/masken/48250_maskeninfo.unl
index fcdc6c0..bcee439 100644
--- a/src-modules/module/rpta/masken/48250_maskeninfo.unl
+++ b/src-modules/module/rpta/masken/48250_maskeninfo.unl
@@ -106,7 +106,7 @@ and ${filter}\
#if>\
\
\
-<@rpta_interpret_column_layout nonvirtualTableFilter=filter />\
+<@rpta_interpret_column_layout nonvirtualTableFilter=filter />\
\
#if> --wenn columns?has_content^--Freemarker Template\
XIL List\
diff --git a/src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql b/src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql
index 0841186..bdcce47 100644
--- a/src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql
+++ b/src-modules/module/rpta/schluesseltabellen/absolvierende_datenblatt_virtuell.sql
@@ -217,7 +217,7 @@ joinclause='${fact_table_source}
<#foreach added_table in added_tables>
left outer join ${added_table.name} on (${added_table.joinclause})
#foreach>',
-whereclause='and stichtag=(select ST.tid from sos_stichtag ST where ST.appl_key=''2'') and abschnitt=2 and pstatus=''BE''';
+whereclause='and abschnitt=2 and pstatus=''BE''';
select * into temp tmp_rs1
from rpta_resultset
diff --git a/src-modules/module/rpta/schluesseltabellen/fm_templates.unl b/src-modules/module/rpta/schluesseltabellen/fm_templates.unl
index e948575..c74753a 100644
--- a/src-modules/module/rpta/schluesseltabellen/fm_templates.unl
+++ b/src-modules/module/rpta/schluesseltabellen/fm_templates.unl
@@ -288,8 +288,10 @@ drop TABLE tmp_rpta_column2layout;\
null::varchar(255) as ${column.targetfieldname},\
<#elseif column.coltype=="physicalColumn">\
${column.srcfieldname} as ${column.targetfieldname},\
+ <#elseif column.coltype=="logicalColumn" && column.colfunction!="">\
+ ${parseRepoVars(column.colfunction)} as ${column.targetfieldname},\
<#elseif column.coltype=="logicalColumn">\
- ${column.colfunction} as ${column.targetfieldname},\
+ null::varchar(255) as ${column.targetfieldname},\
<#elseif column.coltype=="preparingColumn">\
${column.colfunction} as ${column.targetfieldname},\
<#elseif column.coltype=="lookupColumn">\
@@ -303,8 +305,13 @@ drop TABLE tmp_rpta_column2layout;\
from ${basetable.runtime_tablename}\
where 1=1 \
<#if rpta_column_layout.whereclause !="">\
- and ${rpta_column_layout.whereclause}\
- #if>\
+ \
+ --damit Repo Variablen interpretiert werden:\
+ \
+ <#assign whereclauseTemplate= "<#assign whereclause=\\""+rpta_column_layout.whereclause +"\\">"/>\
+ <#assign t2=whereclauseTemplate?interpret />\
+ <@t2/>\
+ and ${whereclause} #if>\
<#if basetable.is_virtual==0>\
and ${nonvirtualTableFilter}\
#if>\
@@ -323,7 +330,7 @@ drop TABLE tmp_rpta_column2layout;\
<#elseif column.is_aggregate==0 && column.coltype=="processingColumn"> \
<#assign groupby=groupby+1 />\
<#if column.colfunction?has_content>\
- ${column.colfunction} as ${column.targetfieldname},\
+ ${parseRepoVars(column.colfunction)} as ${column.targetfieldname},\
<#else>\
${column.srcfieldname} as ${column.targetfieldname},\
#if>\
@@ -334,9 +341,10 @@ drop TABLE tmp_rpta_column2layout;\
-- computedColumns ausgeschlossen, da später im finalen select verarbeitet\
<#foreach column in columns>\
<#if column.is_aggregate==1 \
- && column.colfunction?has_content \
+ && column.colfunction?has_content\
+ && column.colfunction !=""\
&& column.coltype=="processingColumn"> \
- ${column.colfunction} as ${column.targetfieldname},\
+ ${parseRepoVars(column.colfunction)} as ${column.targetfieldname},\
<#elseif column.is_aggregate==1 \
&& (column.coltype == "logicalColumn" || column.coltype == "lookupColumn" || column.coltype == "physicalColumn")> \
sum(${column.targetfieldname}) as ${column.targetfieldname},\
@@ -507,7 +515,7 @@ drop TABLE tmp_rpta_column2layout;\
<#assign colnr=colnr+1 />\
<#assign myfieldclause=column.targetfieldname />\
<#if column.coltype=="computedColumn">\
- <#assign myfieldclause=column.colfunction />\
+ <#assign myfieldclause=parseRepoVars(column.colfunction) />\
#if>\
<@format_code2sql selectclause=myfieldclause format_code_uniquename=column.format_uniquename format_sql=column.format_sql /> as ${column.targetfieldname}\
\
@@ -875,6 +883,7 @@ where rpta_column_layout.uniquename=(select uniquename from tmp_rpta_column_layo
\
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\
@@ -981,4 +990,14 @@ ${selectclause}\
<#else>\
${selectclause}${format_sql}\
#if>\
-#macro>^Makros zum Umgang mit Spaltenlayouts^ ^1^
+#macro>\
+\
+<#function parseRepoVars inputClause>\
+<#if inputClause?exists && inputClause !="">\
+ --damit Repo Variablen interpretiert werden:\
+ <#assign inputClauseTemplate= "<#assign inputClauseParsed=\\""+inputClause +"\\">"/>\
+ <#assign t2=inputClauseTemplate?interpret />\
+ <@t2/>\
+ <#return inputClauseParsed /> \
+<#else><#return "" /> #if>\
+#function>^Makros zum Umgang mit Spaltenlayouts^ ^1^
diff --git a/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen.sql b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen.sql
new file mode 100644
index 0000000..ec05b88
--- /dev/null
+++ b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen.sql
@@ -0,0 +1,58 @@
+--freemarker template
+<#include "RPTA-Makros"/>
+
+
+select count(*) from rpta_resultset where uniquename='sos_stud_astat';
+
+
+<#assign rpta_column_layout = {"uniquename":"sos_stud_astat_hssem_1_repo",
+"caption":"Studierende / 1. HS",
+"rpta_resultset":"sos_stud_astat",
+"whereclause":"${SOS_HH_NH_ZH}",
+"description":"Haupt- und Nebenhörer_innen"
+}
+ />
+
+<#assign rpta_columns = [
+{"uniquename":"dim_studiengang_stg_str",
+"caption_der_spalte":"Studienfach",
+"caption_in_ergebnistabelle":"Studienfach",
+"srcfieldname":"dim_studiengang_stg_str",
+"column_type":"physicalColumn",
+"col_function":"",
+"is_visible":"1",
+"visible_size":"10",
+"is_aggregate":"0",
+"description":""
+},
+{"uniquename":"sos_stud_astat_hssem1",
+"caption_der_spalte":"Summe erstes Hochschulsemester",
+"caption_in_ergebnistabelle":"Summe erstes Hochschulsemester",
+"srcfieldname":"",
+"targetfieldname":"sos_stud_astat_hssem1",
+"column_type":"logicalColumn",
+"col_function":"case when ${SOS_HSSEM_1} then summe else 0 end",
+"is_visible":"1",
+"visible_size":"10",
+"is_aggregate":"1",
+"description":""
+},
+{"uniquename":"summe",
+"caption_der_spalte":"Summe der Studierenden",
+"caption_in_ergebnistabelle":"Summe der Studierenden",
+"srcfieldname":"summe",
+"column_type":"physicalColumn",
+"col_function":"sum",
+"is_visible":"1",
+"visible_size":"5",
+"is_aggregate":"1",
+"description_der_spalte":"Summe der Studierenden",
+"description_in_ergebnistabelle":"Summe der Studierenden"
+
+}
+]
+ />
+
+
+
+<@rpta_column_layout_fuellen />
diff --git a/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql
new file mode 100644
index 0000000..5b3a6b8
--- /dev/null
+++ b/src-modules/module/rpta/schluesseltabellen/rpta_column_layout_sos_stud_hssem1_repo_fuellen_generated.sql
@@ -0,0 +1,313 @@
+--automatically created by SuperX/Freemarker for Postgres (27.04.2026 07:38:19)
+
+
+
+
+CREATE temp TABLE tmp_rpta_column
+(
+ uniquename varchar(255) NOT NULL,
+ caption varchar(255),
+ caption_in_ergebnistabelle 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,
+ description_in_ergebnistabelle 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,
+ sortclause text,
+ description text,
+ is_virtual smallint default 1
+);
+
+insert into tmp_rpta_column_layout(
+resultset_id,
+uniquename,
+caption,
+whereclause,
+ description
+)
+select tid,
+'sos_stud_astat_hssem_1_repo',
+'Studierende / 1. HS',
+'${SOS_HH_NH_ZH}',
+'Haupt- und Nebenhörer_innen'
+FROM rpta_resultset
+where uniquename='sos_stud_astat';
+
+
+INSERT INTO tmp_rpta_column
+(resultset_id,
+ uniquename,
+ caption,
+ caption_in_ergebnistabelle,
+ srcfieldname,
+ targetfieldname,
+ column_type,
+ col_function,
+ is_visible,
+ visible_size,
+ is_aggregate,
+ sortnr,
+ description,
+ description_in_ergebnistabelle,
+ format_code_uniquename
+ )
+select R.tid,
+'dim_studiengang_stg_str',
+'Studienfach',
+'Studienfach',
+'dim_studiengang_stg_str',
+'dim_studiengang_stg_str' ,
+T.tid as column_type,
+'',
+1,
+10,
+0,
+10,
+'',
+'',
+null::varchar
+FROM rpta_resultset R, rpta_column_type T
+where R.uniquename='sos_stud_astat'
+and T.uniquename='physicalColumn';
+
+
+INSERT INTO tmp_rpta_column
+(resultset_id,
+ uniquename,
+ caption,
+ caption_in_ergebnistabelle,
+ srcfieldname,
+ targetfieldname,
+ column_type,
+ col_function,
+ is_visible,
+ visible_size,
+ is_aggregate,
+ sortnr,
+ description,
+ description_in_ergebnistabelle,
+ format_code_uniquename
+ )
+select R.tid,
+'sos_stud_astat_hssem1',
+'Summe erstes Hochschulsemester',
+'Summe erstes Hochschulsemester',
+'',
+'sos_stud_astat_hssem1' ,
+T.tid as column_type,
+'case when ${SOS_HSSEM_1} then summe else 0 end',
+1,
+10,
+1,
+20,
+'',
+'',
+null::varchar
+FROM rpta_resultset R, rpta_column_type T
+where R.uniquename='sos_stud_astat'
+and T.uniquename='logicalColumn';
+
+
+INSERT INTO tmp_rpta_column
+(resultset_id,
+ uniquename,
+ caption,
+ caption_in_ergebnistabelle,
+ srcfieldname,
+ targetfieldname,
+ column_type,
+ col_function,
+ is_visible,
+ visible_size,
+ is_aggregate,
+ sortnr,
+ description,
+ description_in_ergebnistabelle,
+ format_code_uniquename
+ )
+select R.tid,
+'summe',
+'Summe der Studierenden',
+'Summe der Studierenden',
+'summe',
+'summe' ,
+T.tid as column_type,
+'sum',
+1,
+5,
+1,
+30,
+'Summe der Studierenden',
+'Summe der Studierenden',
+null::varchar
+FROM rpta_resultset R, rpta_column_type T
+where R.uniquename='sos_stud_astat'
+and T.uniquename='physicalColumn';
+
+
+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='sos_stud_astat'
+and L.uniquename='sos_stud_astat_hssem_1_repo'
+)
+;
+
+select uniquename into temp tmp_rpta_column_layout_target
+from rpta_column_layout
+where resultset_id in (select tid
+FROM rpta_resultset
+where uniquename='sos_stud_astat')
+and resultset_id in (select tid
+FROM rpta_resultset
+where uniquename='sos_stud_astat')
+;
+--falls neu
+insert into rpta_column_layout
+(uniquename,
+ caption,
+ resultset_id,
+ whereclause,
+ sortclause,
+ description,
+ is_virtual)
+ select uniquename,
+ caption,
+ resultset_id,
+ whereclause,
+ null::text as sortclause,
+ description,
+ is_virtual
+FROM tmp_rpta_column_layout T
+where not exists (select T2.uniquename from tmp_rpta_column_layout_target T2
+where T2.uniquename=T.uniquename);
+
+--falls geändert, uniquename muss bleiben
+update rpta_column_layout
+set (caption, resultset_id, whereclause,sortclause, description, is_virtual)
+= ( select caption, resultset_id,
+ whereclause,
+ null::text as sortclause,
+ description,
+ is_virtual
+FROM tmp_rpta_column_layout T
+where T.uniquename=rpta_column_layout.uniquename)
+where rpta_column_layout.uniquename=(select uniquename from tmp_rpta_column_layout);
+
+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='sos_stud_astat'
+and L.uniquename='sos_stud_astat_hssem_1_repo'
+)
+;
+
+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_in_ergebnistabelle,
+ T.description_in_ergebnistabelle,
+ 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='sos_stud_astat_hssem_1_repo'
+and L.resultset_id=T.resultset_id
+ ;
+drop table tmp_rpta_column;
+drop TABLE tmp_rpta_column_layout;
+drop TABLE tmp_rpta_column2layout;
diff --git a/superx/xml/rpta_templates.xsl b/superx/xml/rpta_templates.xsl
index f5a8e80..3dc89eb 100644
--- a/superx/xml/rpta_templates.xsl
+++ b/superx/xml/rpta_templates.xsl
@@ -29,6 +29,7 @@ xmlns="http://jasperreports.sourceforge.net/jasperreports">
+
@@ -262,10 +263,12 @@ and not(starts-with(f_name,'next')) ]">
-
-
-
-
+
+
+
+
+
+