# FineReport - 常用样式

# 控件显示值拼接数据集多个字段

在帆软报表中,控件的显示值往往需要拼接数据库中某业务值的代码及其中文描述等,因此可以使用 VALUE 函数,将数据集中的代码和中文描述两个字段拼接作为控件的显示值,显示值设置公式如下:

VALUE("costTitle", 2, 1, $$$) + "-" + $$$

# 日期处理

## 上月
date (year (today ()),MONTH (today ())-1,day (today ()))

# 前置条件切换日期控件显示级别

业务需求是根据某个条件控件来控制日期控件格式为 年月日 或者 年月 等不同的级别,从而实现在同一张报表上根据选择的条件来展示不同维度下的数据,而不用切换 sheet 页或者报表,减少用户对于其他报表参数的操作,提升用户体验。

以下业务场景是在成本报表中,根据两种时间维度的数据类型来控制日期控件格式,其中 ACAX 类型为月成本数据,则日期控件格式为 年月 ,而 ADAE 类型则为日成本数据,日期控件格式为 年月日 ,并调整报表中相关单元格获取对应日期控件的值。

// 在前置条件的控件中添加 JS 事件
var form = this.options.form;
var p1Widget = form.getWidgetByName ("会计区间月"); 
var p2Widget = form.getWidgetByName ("Label 会计区间月");
var p3Widget = form.getWidgetByName ("会计区间日");
var p4Widget = form.getWidgetByName ("Label 会计区间日");
var value = this.getValue (); 
if (value == "AC" || value == "AX") {
	p1Widget.setVisible (true);
	p2Widget.setVisible (true);
	p3Widget.setVisible (false);
	p4Widget.setVisible (false);
} else if (value == "AD" || value == "AE" ) {
	p1Widget.setVisible (false);
	p2Widget.setVisible (false);
	p3Widget.setVisible (true);
	p4Widget.setVisible (true);
} else {
	p1Widget.setVisible (false);
	p2Widget.setVisible (false);
	p3Widget.setVisible (false);
	p4Widget.setVisible (false);
}

报表单元格中的日期表头显示调整:

// 报表表头中的日期显示
' 公司产品成本表(' + IF (OR ($ 数据类型 == "AC", 数据类型 == "AX"), $ 会计区间月,IF (OR ($ 数据类型 == "AD", 数据类型 == "AE"), $ 会计区间日,"")) + ')'
// 日期表头
IF (OR ($ 数据类型 == "AC", 数据类型 == "AX"), "本月", IF (OR ($ 数据类型 == "AD", 数据类型 == "AE"), "本日",""))
// 日期字段值
${if (OR (数据类型 =="AC", 数据类型 =="AX"),"AND ACCOUNT_PERIOD = '" + 会计区间月 + "'","")}
${if (OR (数据类型 =="AD", 数据类型 =="AE"),"AND ACCOUNT_PERIOD = '" + 会计区间日 + "'","")}