JSGS.PRG
上传用户:xue7720
上传日期:2013-01-31
资源大小:1240k
文件大小:2k
源码类别:

行业应用

开发平台:

VFP

  1. *JSgs.prg 报表公式运算
  2. *on key
  3. sele 1
  4. go bott
  5. endrecn=recn()
  6. endzd=fcount()
  7. go top
  8. sele 2
  9. sele 3
  10. go top
  11. do whil !eof()
  12. Rh=h
  13. Rl=l
  14. Rysf=ysf
  15. Rgs=gs
  16. Rh1=h1
  17. Rl1=l1
  18. Rh2=h2
  19. Rl2=l2
  20. sele 1
  21. x=0
  22. sele 1
  23. if RH>endrecn .or. rl>endzd .or. Rh1>endrecn .or. Rh2>endrecn;
  24.   .or. Rl1>endzd .or. Rl2>endzd .or. (rh1<>rh2 .and. rl1<>rl2 .and. Rgs<>'DIV') 
  25.     if RH>endrecn .or. Rh1>endrecn .or. Rh2>endrecn
  26.     ?? chr(7)
  27.     wait '行'+str(rh,2,0)+'公式超长!' window
  28.     endif
  29.     if Rl>endzd .or. Rl1>endzd .or. Rl2>endzd
  30.     ?? chr(7)
  31.     wait '行'+str(rh,2,0)+'公式超宽!' window
  32.     endif
  33.     if rh1<>rh2 .and. rl1<>rl2 
  34.     wait '行'+str(rh,2,0)+'列'+str(rl,2,0)+'公式取数范围无法确定!' window
  35.     endif
  36. else    
  37. *************** 行相等,列不等
  38. DO CASE 
  39.    CASE Rgs='SUM'
  40. if Rh1=Rh2 .and. Rl1<>Rl2
  41.   jsq=rl1
  42.   go rh1
  43.   do whil jsq<=Rl2
  44.    zd1=field(jsq)
  45.     x=x+&zd1
  46.    jsq=jsq+1
  47.   enddo      
  48. else
  49. ***** 列相等,行不等
  50. go rh1
  51. zd1=field(Rl1)
  52. do whil recn()<=rh2
  53.     x=x+&zd1
  54.     skip
  55. enddo 
  56. endif
  57. CASE RGS='DED'
  58. if Rh1=Rh2 .and. Rl1<>Rl2
  59.   jsq=rl1
  60.   go rh1
  61.   do whil jsq<=Rl2
  62.    zd1=field(jsq)
  63.     x=x-&zd1
  64.    jsq=jsq+1
  65.   enddo      
  66. else
  67. ***** 列相等,行不等
  68. go rh1
  69. zd1=field(Rl1)
  70. do whil recn()<=rh2
  71.     x=x-&zd1
  72.     skip
  73. enddo 
  74. endif
  75. CASE RGS='DIV'
  76.  go Rh1
  77.  zd1=field(Rl1)
  78.  x=&zd1
  79.  go Rh2
  80.  zd1=field(rl2)
  81.  if &zd1<>0
  82.     x=x/&zd1
  83.    else
  84.     x=0
  85.  endif 
  86. endcase
  87. ***********************************
  88. go Rh
  89. zd=field(Rl)
  90. do case
  91.     case Rysf='='
  92.          repl &zd with x
  93.     case Rysf='+'
  94.          repl &zd with &zd+x
  95.     case Rysf='-'
  96.          repl &zd with &zd-x
  97.     case Rysf='*'
  98.          repl &zd with &zd*x
  99.     case Rysf='/'
  100.          if x<>0
  101.          repl &zd with &zd/x
  102.          else
  103.         * ?? chr(7)
  104.         * wait "行"+str(Rh,1,2)+"除法运算出错!" window
  105.          endif
  106. endcase             
  107. endif
  108. sele 3
  109. skip
  110. enddo
  111. on key label ESCape do Rquit
  112. retu