HFM深入技术学习系列之二--规则

学习的路线

学习如何写规则,从技术的角度看,从以下几点入手:
0 HFM合并报表的基本业务功能
1 规则的入口,即HFM是从哪里调用我们写的规则。
2 规则的基本语法,规则是用VBSCRIPT写的,这里所说的基本语法不是指的VBSCRIPT的语法,其实更多地是说规则里HS这个OBJECT和相关函数如何使用。
3 规则的深入应用

HFM合并报表的基本业务功能

HFM是一个专业性很强的软件,技术人员如果对其涉及到的财务-合并报表的相关知识毫无了解的话,会出现理解不了业务需求的问题,所以对合并报表和HFM软件的功能有个大概了解是十分有必要的。

财务合并报表简介

财务上的合并报表针对的是控制多家公司的集团性质的企业,完成的工作是将财务的相关科目进行合并,抵消,输出合并主表(合并资产负债表,现金流量表等),附表,浮动表。完成合并财务报表要做的工作如下:
1 收集各子公司的财务数据
2 对子公司的个别财务报表进行调整
3 按权益法调整对子公司的长期股权投

4 母公司长期股权投资与子公司所有者权益的抵销
5 母公司投资收益与子公司利润分配的抵销
6 内部债权债务的抵销
7 内部存货交易的抵销
8 内部固定资产交易的抵销
9 内部无形资产交易的抵销
10 合并现金流量表的抵销

HFM合并报表计算过程

HFM的合并过程可以参考官方文档中的这个图。
HFM深入技术学习系列之二--规则_第1张图片主要的过程下:
0 选择了要参加计算的实体的父实体后,开始以下过程
1 所有子实体运行calculation规则
2 如果子实体和父实体的币种不一样,运行折算规则
3 用户可以录入相关的调整分录
4 运行合并功能

规则的入口

规则的入口是几个有名称的子程序,HFM在执行不同的功能时调用这些子程序。下面这个表列出了这些子程序名和HFM在和何时调用,我们要写的规则就是客制化这些子程序,加入自己想要的逻辑。

子程序 执行点 备注
calculate(),dynamic() 执行计算或者合并功能时
translate() 执行折算功能时
allocate() 数据网格中使用分摊选项时
input() 应用被打开时
noinput() 应用被打开时,自动将某些cells设置为不能输入数据
transaciton() 应用被打开时
consolidation() 执行合并功能时

规则的基本语法

HS.Clear"A#Sales"

Financial Management 中的顶层对象是 HS 对象。这意味着在使用 Financial Management 函数时,前三个字符必须是字母 HS 后跟随一个句点.
A# 字符表示帐户维度,A是维度简称,单词 Sales 是帐户维度的成员名称.

维度编码 维度短名称 说明
Account A 科目维度
Entity E 组织维度
Year Y 年维度
Period P 期间维度
View W 视图维度,由于View和Value维度首字母都是V,为了区分使用W
Value V 值维度
ICP I 往来单位
Scenario S 情景维度
Custom1-CustomN C1-Cn 2.1 版本以后,自定义维度支持给自定维度重命名,并且可以大于4个自定维度,比如Custom 1 设置为Report,更加直观

HS.Clear “A#Sales.I#Hardware”

行清除 Sales 帐户和 Hardware ICP 的交叉
这里的’.'表示的两个维度的组交叉(intersection),关于交叉的理解可以参考学习系列之一中的说明,或者理解成一般意义上的组合(combination)也是可以的。

if else

对这段规则解析:
if HS.Year.member()=2020 then
Hs.Exp(“A#N01_90=Y#Prior.P#Last.A#N01_90+A#N01_90CH”)
else
Hs.Exp(“A#N01_90=P#December.Y#Prior.A#N01_90+A#N01_90CH”)
end if

Member 获取以下维度的当前成员名
Y#Prior.P#Last 表示上一年的最后一个期间

关于当前维度成员

可以看出当我们要引用某个cell时,并不是把所有维度都用.连接,这是为什么?因为在HFM规则的语法里,没有用.连接显式写出来的维度实际上取值是当前维度成员的值,在官方文档说明中,当前维度成员指的是
1 点击计算功能时当前鼠标停留的cell对应的维度成员
2 POV中指定的成员
3 合并过程中每次执行CALCULATE时对应的ENTITY和VALUE

关于HS.EXP

HS.EXP相当于赋值,语法如下:
HS.Exp “Destination=Source”,一般都认为这里的destination和source指的是科目表达式(Account Expression),那么问题是科目表达式是什么呢?

Account Expression

Account Expression是指用一个或者多个维度关键字(Dimension KeyWord )表示的数据库中的Cell(这里需要用多维数据库的概念去理解,而不是关系数据库)。

Dimension Keyword

Dimension Keyword就是我们常见到的,例如A#NetIncome,多个维度关键字用’.'分隔,

Destination expression

Exp表达式中的目标表达式(Destination expression)一般是由ACCOUNT,CUSTOM和ICP维度指定,而ENTITY,PERIOD,YEAR,VALUE是由当前的POV或者当前选择的CELL对应的维度决定,
VIEW维度是由当前SCENARIO的缺省VIEW决定,而不是POV里的VIEW

Source Expression

源表达式(Source Expression)可以是任意维度的组合,如果不指定ENTITY,PERIOD,YEAR或者VALUE这几个维度的值,就用当前POV的值或者当前cell的维度值,如果不指定VIEW的值,就用当前SCENARIO的缺省VIEW决定,而不是POV里的VIEW

你可能感兴趣的:(HFM,HFM)