1.2.6 表格的本体表示法

1.2.6 表格的本体表示法

(1)页、行、列

信息处理本体中间件基于两个最基本的事实,即:

①表格是各类信息处理最基本、最广泛的载体,它具有唯一标识的表代码,任何其他形式的载体都可以转化到表格;

②表格应该是三维的,但不排斥二维表作为一个简化了的三维格式在实际中大量存在并得到普遍和广泛的使用。

从这两个最基本的事实出发,本体中间件系统所有处理均以表格为对象,即以表格变量(简称表变量)为其低代码处理的基本单位

既然是表格,而且是三维表格,就存在页、行、列的表示方法,在中间件系统中,页、行、列的排列顺序一般情况下依次为页、行、列,相互之间以“,”分开。如“1,2,3”表示第1页第2行第3列,二维表省略页维,如“1,2”表示第1行第2列,这里讲的三维表就是前面所说的非规整表,而二维表就是前面所说的规整表,这里讲的列有时也被称为栏或栏目。

如果某一维不能以一个常数确定下来,比如二维表中的第6列,那么到底是第几行呢?其实是所有行,因此需要进一步规定三个维的泛指符号,我们规定以“!”表示所有页,以“?”表示所有行,以“:”表示所有列。这样一来,三维表的第5页就可以表示成“5,?,:”,而二维表中的第6列就可以表示成“?,6”,更进一步,三维表的全部页、行、列(全部表格)表示为“!,?,:”,而二维表中的全部行列(整个一张表格)可表示成“?,:”。

在另外一些场合中,比如录入自动计算的时候,需要确定是某页某行某列,但又无法用常数表示,而是指当前页、当前行、当前列,这时,我们就用在页行列的泛指符号前加一个小数点的方法表示,即以“.!”表示当前页,以“.?”表示当前行,以“.:”表示当前列,于是三维表的当前页就可以表示成“.!,?,:”,二维表中的当前列就可以表示成“?,.:”,三维表的当前页、当前行、当前列就可以表示成“.!,.?,.:”,而二维表中的当前行、当前列就可以表示成“.?,.:”。

同样在一些场合中需要确定的是最后页、最后行、最后列,我们就用在页、行、列的泛指符号前加一个“E”的方法来表示,即“E!”表示最后页,“E?”表示最后行,“E:”表示最后列,于是三维表的最后页就可以表示成“E!,?,:”,二维表的最后行就可以表示成“E?,:”。

如果我们需要将表栏题目作为条件,比如“栏目名称为合计的”之类的条件就要用到一个特殊的行变量:第0行,表示为“0,:”。

!,?,:,.!,.?,.:,E!,E?,E:九个符号单独使用时分别表示它们的页号、行号和列号,比如?<E?,表示行小于最后一行,也就是“最后一行除外”的意思。

另外,在一些计算命令中,页、行、列的表示还会有其他的特殊含义,我们将结合具体的命令予以介绍。

(2)本表和别表

本表是指在中间件系统主界面的报表菜单下选择进入的那张表,即当前进入的表格。本表一律以花括号({})将页、行、列括起来表示。如{1,2,3}为本表第1页第2行第3列,{0,:}为本表第0行,即屏幕显示中的栏目名称一行。

别表是指非当前进入的表,这既包括了其他业务报表,也包括了与本表同一代码的其他周期的表。比如本表是这个月的工资表,那么上个月的、去年当月的工资报表都应称为别表。别表的表示法有许多种,基本上是由表代码+表时期+“[”+页行列+“]”(方括号)组成。具体有以下几种方法:

①相对表示法

此表示法可根据该表的周期计算出此前若干周期的表,如月报SCYB01[1,2,3]表示代码为SCYB的上月表,如SCYB为年报,则为上年表,半年报则为上一个半年的表,余类推。如果SCYB是永恒表,则任何相对时期量都是等效的。

如果在时期后面带点(.),则表示该时期的表格不存在时,允许向前追溯。比如日报处理,一般情况下,当月的累计数是上一天的累计数加上本日数,但当该日为星期一时,其上一天的日报因是休息日而不存在,那么定义成SCYB01.[1,2,3]时,系统会自动从前一天的表格中去取所需的数。这样定义后,前面即使是春节或是假期,系统也会自动追溯,追溯的时期量是100个周期(如100日、100月、100年等),在此范围内不会影响数据的正确计算。

②绝对表示法

此表示法直接定义该表为某一周期(如某年某月某日)的表,同时必须将年月日的阿拉伯数字按1234567890对应替换成ABCDEFGHIO,如日报SCYB(IDOBOA)[1,2,3]表示代码为SCYB的1994(ID)年2(OB)月1(OA)日表,如是年报,则为1994年年报,其后的OBOA不起作用,半年报则为1994年下半年的表格,其后的OA不起作用,余类推。如果SCYB是永恒表,则任何绝对时期量都是等效的。

上述变换中,21世纪等奇数世纪中的年的绝对表示要将1234567890对应替换成RSTUVWXYZQ,月、日仍不变,如日报SCYB(QUOBOA)[1,2,3]表示代码为SCYB的2004(QU)年2(OB)月1(OA)日表。这种表示方法,可以将信息处理本体中间件的处理时间跨度追溯到两个世纪,即200年。

③绝对相对混合表示法

此表示法将绝对法和相对法结合,在年、月、日中,以阿拉伯数字表示相对时期,以1234567890对应替换成ABCDEFGHIO(偶数世纪的年或月、日)或RSTUVWXYZQ(奇数世纪的年)表示绝对时期,如日报SCYB(01AB01)[1,2,3]表示代码为SCYB的上一年12(AB)月的上一日表。如是年报,则其后的AB01不起作用,余类推。

④动态表示法

动态表示法是在混合表示法基础上加以改进的,因此格式和混合表示法完全一样,区别在于年、月、日的表示上可能要使用以下动态变量:

_CTY:表示操作日期中指定的年

_CTM:表示操作日期中指定的月

_CTD:表示操作日期中指定的日

这种表示法通常在进度台账一类报表的计算公式中要用到。比如,某销售进度台账是一月一张的,即月报,但它上面的内容却是逐日登记的,因此进入该月的台账后,需要登记哪一天的销售数据,要由操作日期决定(当然也可定义报表周期类型为月报日做,即MD,这时可由报告期决定),操作日期一定,要从哪一天的销售发票中取数据才能确定,所以在台账计算中确定从哪一天的发票(日报)中取数是一个动态时间,这就要用到动态表示法。如日报XSRB(00_CTM_CTD)[1,2,3]表示代码为XSRB的当年操作日期所指定月、日的那一天的表。

⑤区间表示法

此表示法分别以混合表示法或动态表示法定义起始、终止时期(起始时期一般早于终止时期),表示在这一时期区间内的一系列表。如日报SCYB(01ABOA-01ABAE)[1,2,3]表示代码为SCYB的从去年12月1日至15日的所有日报表。请注意,这种表示法不能用于计算公式的左边被赋值,只能在公式右边用于获取值。

对于在时期后加(.)的追溯情况,终止时期应当早于起始时期,表示当起始时期表示的表不存在时,一直向前追溯到终止时期为止。如日报SCYB(01ABOA-01AAOA).[1,2,3]表示代码为SCYB的去年12月1日表不存在时,就一直向前追溯,直至去年11月1日为止。