问答题
假设科目发生额/余额汇总文件为ZWHZ.DBF,其文件结构如下表所示:
序号 | 字段名 | 类型 | 长度 | 小数位 |
1 | 科目代码 | C | 11 | |
2 | 科目级次 | N | 1 | |
3 | 余额方向 | C | 2 | |
4 | 年初余额 | N | 12 | 2 |
5 | 月01借方 | N | 12 | 2 |
6 | 月01贷方 | N | 12 | 2 |
7 | 月02借方 | N | 12 | 2 |
8 | 月02贷方 | N | 12 | 2 |
| vdots | vdots | vdots | vdots |
27 | 月12借方 | N | 12 | 2 |
28 | 月12贷方 | N | 12 | 2 |
其中,“余额方向”表示该科目年初余额的方向,取值规定为:值为“借”表示该科目年初余额为借方,值为“贷”表示该科目年初余额为贷方;“月01借方”、“月01贷方”……分别表示该科目从第1期到第12期的借、贷合计数。假定截止到本期(其期间值放在变量BQS中)所有科目(包括明细科目)的有关数据都已完整地存放在这个文件中。试编写一自定义函数XJ(BQS,KMDM),该函数可以返回某个指定科目(科目代码为KMDM)的所有下属明细科目属于BQS期间的期末余额为借方的余额之和。并用写好的函数来表达应收账款(科目代码为“1131”)第10期下属明细期末余额为借方的余额合计数(写出表达式即可)。
【正确答案】(1) 该函数对应的程序(程序文件名为XJ.PRG)如下:
PARAMETER BBBQS,DQKMDM
IF USED(“ZWHZ”)
SELE ZWHZ
ELSE
SELE 0
USE ZWHZ ALIAS ZWHZ
ENDIF
INDEX ON科目代码TO ZWHZ.IDX
GO TOP
SEEK DQKMDM
IF!FOUND()
RET_VAL=0
ELSE
KMJC=ZWHZ.科目级次
RET_VAL=0
DOWHILE(.NOT.EOF()).AND.科目级次=KMJC+1.AND.科目代码=TRIM(DQKMDM)
NCYE=ZWHZ.年初余额
I=1
STORE 0.00 TO M.JFHJ,M.DFHJ
DO WHILE I<=BBBQS
IF I<10
JF=“月”+“0”+STR(I,1)+“借方”
DF=“月”+“0”+STR(I,1)+“贷方”
ELSE
JF=“月”+STR(I,2)+“借方”
DF=“月”+STR(I,2)+“贷方”
ENDIF
M.JFHJ=M.JFHJ+&JF
M.DFHJ=M.DFHJ+&DF
I=I+1
ENDD0
IF ZWHZ.余额方向=“借”
QMYE=NCYE+M.JFHJ-M.DFHJ
ELSE
QMYE=NCYE+M.DFHJ-M.JFHJ
ENDIF
IF ZWHZ.余额方向=“借”.and.QMYE>0
RET_VAL=RET_VAL+QMYE
ENDIF
IF ZWHZ.余额方向=“贷”.and.QMYE<0
RET_VAL=RET_VAL+ABS(QMYE)
ENDIF
SKIP
ENDDO
ENDIF
USE
RETURN RET_VAL
(2) 用定义好的函数表达应收账款(科目代码为“1131”)第10期下属明细期末余额为借方的余额合计数的函数:XJ(10,“1131”)。
【答案解析】