Oracle Apex:经典报表中的动态计算
Oracle Apex: Dynamic Calculation in Classic Report
我有一个应用程序,我在其中创建了基于 SQL 查询
的经典报告
Select summary_id,
APEX_ITEM.HIDDEN(1,summary_id)||
APEX_ITEM.TEXT(2,attribute5) attribute5
from summary;
这里summary_id和属性5是数字数据类型。
我有七(7 行)条记录,其中列中的第 5 行和第 7 行是 sub_total 和总值。
我想根据前几行值的变化动态计算 sub_total 和总数。
第5行是第1、2、3、4行的总和,第7行是第1、2、3、4、6行的总和
如果需要提供任何其他信息以了解问题,请告诉我。
谢谢。
Oracle apex 4.2 版本。
我假设您知道如何使用浏览器的 Inspect element
功能获取 attribute5 列下文本框的名称属性。它类似于 "f01"、"f02" 或更高,请检查一下。
另一个假设(基于您给定的数据)是第 5 行包含第 1 行到第 4 行的总和,第 7 行包含第 5 行和第 6 行的总和。
获得名称后,将此函数粘贴到您页面的 "Function and Global Variable Declaration" 属性:
function setTotals(itemname){
var v_subtotal=0;
var v_total=0;
for(i=0;i<4;i++){
v_subtotal = Number(v_subtotal) + Number(document.getElementsByName(itemname)[i].value);
}
v_total = Number(v_subtotal) + Number(document.getElementsByName(itemname)[5].value);
document.getElementsByName(itemname)[4].value = v_subtotal;
document.getElementsByName(itemname)[6].value = v_total;
}
function setOnChangeEvent(itemname){
for(i=0;i<4;i++){
document.getElementsByName(itemname)[i].setAttribute("onchange","setTotals(\"" + itemname + "\")");
}
$("[name=" + itemname + "]").eq(5).change(function(){
$("[name=" + itemname + "]").eq(6).val(Number($("[name=" + itemname + "]").eq(4).val()) + Number($("[name=" + itemname + "]").eq(5).val()));
});
$("[name=" + itemname + "]").eq(4).attr("disabled","disabled");
$("[name=" + itemname + "]").eq(6).attr("disabled","disabled");
}
然后在你页面的"Execute when Page Loads"属性中,输入下面一行代码:
setTotals(itemname );
setOnChangeEvent(itemname );
一个例子是
setTotals("f02");
setOnChangeEvent("f02");
这里简单解释一下代码:
函数 "setTotals" 执行以下操作:
它设置小计框的值是你在参数 which s "f02" 中提供的名称下的第 1 到第 4 个文本框的总和。
它还根据第 6 个文本框的总和和为小计文本框计算的值设置总计框的值。
函数 "setOnChangeEvent" 执行以下操作:
它将框 1 到 4 的 onchange 事件设置为 setTotals("f02") 因此,如果您要检查上述框之一,它现在看起来像这样:
<input onchange="setTotals('f02')" name="f02" size="20" maxlength="2000" value="5" type="text">
它还设置了第 6 个框的更改事件。(我认为它的更改事件发生的事情是不言自明的,只要看看代码)
此函数的最后一部分禁用第 4 个和第 7 个文本框。
我有一个应用程序,我在其中创建了基于 SQL 查询
的经典报告Select summary_id,
APEX_ITEM.HIDDEN(1,summary_id)||
APEX_ITEM.TEXT(2,attribute5) attribute5
from summary;
这里summary_id和属性5是数字数据类型。
我有七(7 行)条记录,其中列中的第 5 行和第 7 行是 sub_total 和总值。
我想根据前几行值的变化动态计算 sub_total 和总数。
第5行是第1、2、3、4行的总和,第7行是第1、2、3、4、6行的总和
如果需要提供任何其他信息以了解问题,请告诉我。
谢谢。
Oracle apex 4.2 版本。
我假设您知道如何使用浏览器的 Inspect element
功能获取 attribute5 列下文本框的名称属性。它类似于 "f01"、"f02" 或更高,请检查一下。
另一个假设(基于您给定的数据)是第 5 行包含第 1 行到第 4 行的总和,第 7 行包含第 5 行和第 6 行的总和。
获得名称后,将此函数粘贴到您页面的 "Function and Global Variable Declaration" 属性:
function setTotals(itemname){
var v_subtotal=0;
var v_total=0;
for(i=0;i<4;i++){
v_subtotal = Number(v_subtotal) + Number(document.getElementsByName(itemname)[i].value);
}
v_total = Number(v_subtotal) + Number(document.getElementsByName(itemname)[5].value);
document.getElementsByName(itemname)[4].value = v_subtotal;
document.getElementsByName(itemname)[6].value = v_total;
}
function setOnChangeEvent(itemname){
for(i=0;i<4;i++){
document.getElementsByName(itemname)[i].setAttribute("onchange","setTotals(\"" + itemname + "\")");
}
$("[name=" + itemname + "]").eq(5).change(function(){
$("[name=" + itemname + "]").eq(6).val(Number($("[name=" + itemname + "]").eq(4).val()) + Number($("[name=" + itemname + "]").eq(5).val()));
});
$("[name=" + itemname + "]").eq(4).attr("disabled","disabled");
$("[name=" + itemname + "]").eq(6).attr("disabled","disabled");
}
然后在你页面的"Execute when Page Loads"属性中,输入下面一行代码:
setTotals(itemname );
setOnChangeEvent(itemname );
一个例子是
setTotals("f02");
setOnChangeEvent("f02");
这里简单解释一下代码:
函数 "setTotals" 执行以下操作:
它设置小计框的值是你在参数 which s "f02" 中提供的名称下的第 1 到第 4 个文本框的总和。 它还根据第 6 个文本框的总和和为小计文本框计算的值设置总计框的值。
函数 "setOnChangeEvent" 执行以下操作:
它将框 1 到 4 的 onchange 事件设置为 setTotals("f02") 因此,如果您要检查上述框之一,它现在看起来像这样:
<input onchange="setTotals('f02')" name="f02" size="20" maxlength="2000" value="5" type="text">
它还设置了第 6 个框的更改事件。(我认为它的更改事件发生的事情是不言自明的,只要看看代码) 此函数的最后一部分禁用第 4 个和第 7 个文本框。