问答题 假设科目发生额/余额汇总文件为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”)。
【答案解析】