回 帖 发 新 帖 刷新版面

主题:高手帮忙,怎么用程序编工资单报表。

整个题目是这样的。
1.    建立下面的数据库.文件名:z1.dbf
编号    姓名    性别    出生日期    基本工资
A01    张国立    男    1940/04/21    900.00
B01    李平    男    1951/10/01    800.00
A02    李庆    女    1942/10/01    850.00
C01    刘流    男    1946/12/02    900.00
B02    朱季    女    1963/09/09    600.00
C02    王胜利    女    1966/06/01    570.00
A03    赵四    男    1970/03/22    540.00
2.    建立第二个数据库.文件名:z2.dbf
编号    基本工资    岗位津贴    应发合计    房租    水电    扣款合计    实发工资
A01    0.00    300.00    0.00    100.00    80.00    0.00    0.00
B01    0.00    250.00    0.00    80.00    82.50    0.00    0.00
A02    0.00    270.00    0.00    95.00    75.00    0.00    0.00
C01    0.00    280.00    0.00    100.00    83.25    0.00    0.00
B02    0.00    240.00    0.00    80.00    70.00    0.00    0.00
C02    0.00    220.00    0.00    70.00    65.00    0.00    0.00
A03    0.00    200.00    0.00    75.00    68.30    0.00    0.00
合计                            

2.编程(编程环境:vfp6.0)
    (1)对z2中的“基本工资”、“应发工资”、“扣款合计”、“实发工资”、“合计”进行计算。
    (2)显示每工资单报表,格式为:

                           工 资 单   年 月 日
编号  姓名 基本工资    岗位津贴    应发合计 房租 水电 扣款合计 实发工资
                        
                        
                        
第二个第一问程序是
open data zz
sele 1 
use z1
sele 2
use z2
do while not eof()
a=z2.编号
sele z1
loca for z1.编号=a
if foun()
gz=基本工资
sele z2
repl 基本工资 with gz,应发合计 with gz+岗位津贴, 扣款合计 with 房租+水电,实发工资 with gz+岗位津贴-房租-水电
else
exit
endi
sele 2
skip
endd
clos all
怎么用程序实现报表工资单,急。。

回复列表 (共2个回复)

沙发

书上没有找到用程序实现报表的例子。

板凳


以下是本人编的一段工资单打印程序,不知对你是否有帮助。

set talk off
hh1=printstatus()
do while .not.hh1
  MESSAGEBOX( "打印机未准备好,请准备好打印机",48+0,'信息')
  hh1=printstatus()
ENDDO
clear
SET PRINTER FONT '宋体', 9
USE gzb_file IN 0  &&工资表临时文件
SELECT gzb_file
n1=AFIELDS(aArray)
n2=1
PUBLIC FIELD1(1,n1),FIELD2(1,n1),FIELD3(n1)
FOR i=1 TO n1
  FIELD1(1,i)=aArray(i,1) &&字段名
  FIELD2(1,i)=aArray(i,3) &&字段宽度
  IF FIELD2(1,i)<6
    FIELD2(1,i)=8
  ELSE  
    FIELD2(1,i)=8
  ENDIF 
ENDFOR
i1=1
i2=1
i3=1
i4=1
r1 = 1 
set device TO  PRINTER
SET PRINT ON
do while not eof() 

************************************************************
&&以下为一条记录打印格式
SCATTER TO  FIELD3
  i = 1
  col1 = 1
  do WHILE i <=12 &&显示表头的第一行
    if i=1
       @r1,col1 say "┌"+replicate("─",4)
    else
      if i=12 &&n1
        @r1,col1 say "┬"+replicate("─",4)+"┐"
      else
        @r1,col1 say "┬"+replicate("─",4)
      endif
    endif
    col1=col1+10
    i=i+1
  ENDDO 
  
do while n2<=n1
i=1 &&显示字段名行
r1 =r1+0.5
col1=1
do while i<=12 
  if i=1
     @r1,col1 say "∣"+ALLTRIM(FIELD1(1,i1)+replicate(" ",8-len(FIELD1(1,i1))))
  else
     if i=12 .or. i1=n1
        @r1,col1 say "∣"+ALLTRIM(FIELD1(1,i1)+replicate(" ",8-len(FIELD1(1,i1))))
        @r1,col1+10 say "∣"
        IF i1=n1
         EXIT
        ENDIF 
     else
        @r1,col1 say "∣"+ALLTRIM(FIELD1(1,i1)+replicate(" ",8-len(FIELD1(1,i1))))
     endif
  endif
  col1=col1+10
  i1=i1+1
  i=i+1
ENDDO

i = 1
r1 =r1+0.5
col1 = 1
do WHILE i <=12 &&n1
  if i=1
    @r1,col1 say "├"+replicate("─",4)
  else
    if i=12 &&n1
      @r1,col1 say "┼"+replicate("─",4)+"┤"
    else
      @r1,col1 say "┼"+replicate("─",4)
    endif
  endif
  col1=col1+10
  i=i+1
enddo 

i=1 &&显示记录行
r1 =r1+0.5
col1=1
do while i<=12 
  IF TYPE('FIELD3(i2)')='N'
     FIELD3(i2)=STR(FIELD3(i2),8,2)
  ELSE 
     FIELD3(i2)=SUBSTR(FIELD3(i2),1,8)
  ENDIF 
  if i=1
     @r1,col1 say "∣"+ALLTRIM(FIELD3(i2)+replicate( ' ',8-len(FIELD3(i2))))
  else
     if i=12 .or. i2=n1
        @r1,col1 say "∣"+ALLTRIM(FIELD3(i2)+replicate(' ',8-len(FIELD3(i2))))
        @r1,col1+10 say "∣"
        IF i2=n1
         EXIT
        ENDIF 
     else
        @r1,col1 say "∣"+ALLTRIM(FIELD3(i2)+replicate(' ',8-len(FIELD3(i2))))
     endif
  endif
  col1=col1+10
  i2=i2+1
  i=i+1
ENDDO
IF i2=n1
  EXIT
ENDIF   

i = 1
r1 =r1+0.5
col1 = 1
do WHILE i <=12 &&n1
  if i=1
    @r1,col1 say "├"+replicate("─",4)
  else
    if i=12 &&n1
      @r1,col1 say "┼"+replicate("─",4)+"┤"
    else
      @r1,col1 say "┼"+replicate("─",4)
    endif
  endif
  col1=col1+10
  i=i+1
enddo

n2=n2+12
col1=col1+10
ENDDO
i = 1
r1 =r1+0.5
col1 = 1
do WHILE i <=12 &&显示数据库结束的最后一行
  if i=1
    @r1,col1 say "└"+replicate("─",4)
  else
    if i=12 &&n1
      @r1,col1 say "┴"+replicate("─",4)+"┘"
    else
      @r1,col1 say "┴"+replicate("─",4)
    endif
  endif
  col1=col1+10
  i=i+1
ENDDO
**************************************************************** 
 i3=i3+1
 IF i3=8 &&当打印的记录超过 7条时,就自动换页
    @r1+2,80 say "页码:"+ALLTRIM(STR(i4))
    i3=1
    i4=i4+1
    r1=1
    EJECT
 ELSE 
    r1 =r1+2
 ENDIF
i1=1
i2=1
n2=1
SKIP
 
ENDDO
@r1+2,80 say "页码:"+ALLTRIM(STR(i4))
i4=1
set print off
set device to screen
SET  PRINTER  TO 
MESSAGEBOX( "即将进行打印,请稍候...........!",64+0,'信息')
CLOSE TABLES
DELETE FILE gzb_file.*
return

我来回复

您尚未登录,请登录后再回复。点此登录或注册