| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1810 人关注过本帖
标题:ucdos7.0 程序在 vfp6.0 下打印无法对齐
只看楼主 加入收藏
qq156059757
Rank: 1
等 级:新手上路
帖 子:77
专家分:9
注 册:2010-5-15
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:19 
ucdos7.0 程序在 vfp6.0 下打印无法对齐
各位大侠
公司的工资打印系统是在 ucdos7.0下编写的 都用了10几年了   还必须是在win98下运行  可98太落后了 用起来很不方便
于是在xp下搞了个98的虚拟机  勉强用着
最近想在vfp6.0下运行打印程序,可是程序在 vfp6.0 下打印无法对齐
还请各位大侠帮帮忙,看看哪里需要修改(以下为ucdos7.0下的打印程序源码),不胜感激!
红色部分老是对不齐,
标准格式
|基分| 生活费|岗位工资| 加 班 |年功|中夜餐|福 利|交通通讯|独子费|书报费|级别|保健费|
|280 | 68.00 |1259.00 | 536.00| 50 |100.00|17.00| 50.00  |5.00  |17.00 |50  |60    |
对不齐的格式
|基分| 生活费|岗位工资| 加 班 |年功|中夜餐|福 利|交通通讯|独子费|书报费|级别|保健费|
|280 | 68.00|1259.00|536.00| 50|100.00|17.00| 50.00|5.00  |17.00 |50  |60  |

源码
SET PRIN OFF
SET TALK OFF
SET DATE ANSI
wbh=0
QYH=1
ZYH=99
SELE 1
USE XTZK   &&如果修改XTZK.DBF中 BH 的类型,程序将出错.
do while .t.
  clear
  @8,20 say '是否已执行JS3B程序?'
  @12,20 SAY '编号为99时退出打印'
  @13,20 say '单位编号:' GET WBH PICT '99'
  READ
  @16,20 say '开始页号:' GET QYH PICT '99'
  @17,20 SAY '终止页号:' GET ZYH PICT '99'
  READ
  IF WBH=99
    EXIT
  ENDIF
  SELE 1
  LOCATE FOR BH=WBH
  IF EOF()
    @18,20 SAY '该单位不存在!'
      ?CHR(7)+CHR(7)
    LOOP
  ENDIF
  IF WBH<10
    I=STR(WBH,1)
  ELSE
    I=STR(WBH,2)
  ENDIF
  WNAME=NAME
  WHD1=HD1
  WHD2=HD2
  @19,20 SAY '正在打印'+WNAME+'工资表'
  SELE 2
  USE GZZ&I
  SET DEVICE TO PRINT
  SET CONS OFF
  SET PRINT ON
  HH=1
* WQYH=17*(QYH-1)+1  && 一页打印 18 行
  WQYH=24*(QYH-1)+1  &&打印 25 行
  GO WQYH     &&指向库中WQYH的记录
  DO WHILE .NOT.EOF().AND.QYH<=ZYH
    IF HH=1
      do cr32401
*     ?chr(27)+'IA'
      ?SPACE(30)+LTRIM(TRIM(WNAME))+'工资表'
      DO CR32402
*     ?CHR(27)+'IA'  
      ?SPACE(10)+'打印日期:'
      do tm
      ??'12'+SPACE(160)+'第'+STR(QYH,2)+'页'
    ENDIF
    ?'...................................................................................................................................................................................................'
    ?yh1+' |基分| 生活费|岗位工资| 加 班 |年功|中夜餐|福 利|交通通讯|独子费|书报费|级别|保健费| '
    ??subs(whd1,1,10)+'|房水电|病事假|失业金|新工险|养老金|医  保| 个  税 |'
    ??SUBS(WHD2,1,6)+'|暖气费| 补  贴|实 发 数|'
    ?xm+space(12)+'|'
    @prow(),pcol() say jf pict '@Z 9999'  
    ??'|'
    @prow(),pcol() say SHF pict '@Z 9999.99'
    ??'|'
    @prow(),pcol() say FDGZ pict '@Z 99999.99'
    ??'|'
    @prow(),pcol() say JBF pict '@Z 9999.99'   
    ??'|'
    @prow(),pcol() say GLGZ pict '@Z 9999'
    ??'|'
    @prow(),pcol() say ZYC pict '@Z 999.99'
    ??'|'
    @prow(),pcol() say FLF pict '@Z 99.99'
    ??'|'
    @prow(),pcol() say CB pict '@Z  99999.99'
    ??'|'
    @prow(),pcol() say DZF pict '@z 999.99'
    ??'|'
    @prow(),pcol() say SBF pict '@Z 999.99'
    ??'|'
    @prow(),pcol() say JIBGZ pict '@Z 9999'
    ??'|'
    @prow(),pcol() say BJF pict '@Z 999.99'
    ??'|'
    @prow(),pcol() say FJ pict '@Z999.99'  &&烤火费
    ??' |'
    @prow(),pcol() SAY FZSD pict '@Z 999.99'
    ??'|'
   && @prow(),pcol() SAY CX pict '@Z 9999'
   && ??'|'
    @prow(),pcol() SAY BSJ pict '@Z 999.99'
    ??'|'
    @prow(),pcol() SAY BXJ pict '@Z 999.99'  &&失业保险金
    ??'|'
    @prow(),pcol() SAY YYF pict '@Z 999.99'   &&
    ??'|'
    @prow(),pcol() SAY YLJ pict '@Z 999.99'
    ??'|'
    @prow(),pcol() say hd3 pict '@z 999.99'   
    ??'|'
    @prow(),pcol() say hd7 pict '@z 99999.99'  &&个税
    ??'|'
  &&@prow(),pcol() say lc pict '@z 9999.99'
  &&??'|'
    @prow(),pcol() SAY HD2 pict '@Z 999.99'
    ??'|'
    @PROW(),PCOL() SAY HD4 PICT '@Z 999.99'
    ??'|'
    @PROW(),PCOL() SAY HD5 PICT '@Z 9999.99'
    ??'|'
    @prow(),pcol() SAY SFGZ pict '@Z 99999.99'
    ??'|'

    HH=HH+1
    IF HH=25     
      HH=1
      ?'.....................................................................................................................................................................................................'
      ?' '
      QYH=QYH+1

      EJEC
    ENDIF
    SKIP
  ENDDO
  set print off
  sum BJF,shf,fdgz,jbf,glgz,zyc,flf,cb,dzf,sbf,hd1,fzsd,bsj,bxj,hd2,sfgz,JIBGZ,yyf,ylj,fj;
  to BJF1,shf1,fdgz1,jbf1,glgz1,zyc1,flf1,cb1,dzf1,sbf1,hd11,fzsd1,bsj1,bxj1,hd21,sfgz1,JIBGZ1,YYF1,ylj1,fj1
  SUM HD3,HD4,HD5 TO HD31,HD41,HD51
  sum hd6,hd7,hd8,lc to hd61,hd71,hd81,lc1
  set print on
  ?'....................................................................................................................................................................................................'
  ?' 合计数  '+SPACE(11)+STR(SHF1,12,2)+'   '+STR(JBF1,14,2)+STR(ZYC1,10,2)+STR(CB1,14,2)+'    '+STR(SBF1,12,2)+' '+str(bjf1,10,2)+str(fj1,10,2)+'         '+str(bxj1,14,2)+' '+str(ylj1,13,2)+str(HD31,7,2)+'  '+str(hd41,17,2)+STR(sfgz1,19,2)
  ?space(22)+sTR(FDGZ1,19,2)+'    '+STR(GLGZ1,10,2)+STR(FLF1,10,2)+STR(DZF1,16,2)+STR(jibgz1,15,2)+'            '+STR(fzsd1,10,2)+STR(bsj1,10,2)+str(yyf1,11,2)+'       '+str(hd71,16,2)+str(hd21,8,2)+'  '+stR(HD51,12,2)
  ?' '
  EJEC
  SET DEVI TO SCRE
  SET PRINT OFF
  SET CONS ON
ENDDO
RETURN&&
*
*?
搜索更多相关主题的帖子: 打印 
2010-05-15 20:39
wzxc
Rank: 9Rank: 9Rank: 9
来 自:齐鲁大地
等 级:贵宾
威 望:39
帖 子:985
专家分:1296
注 册:2006-4-25
收藏
得分:0 
@prow(),pcol() say SHF pict '@Z 9999.99'
把打印列的位置改动一下,pcol()+1或者不断调试加多少。

这样的程序太古老了。重新开发比较好。

认真看书学习,弄通Fox主义。
2010-05-15 21:21
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 
哈哈,好熟悉的代码啊!!!今天上午还和人聊起DOS下的打印问题。
本人认为,这应该是系统字体问题所导致的,如果您使用DOS+UCDOS就不会出现这个问题,但您是在VFP6.0下,也就是在Windows系统下运行,所以字体环境不同了。不才估计其原因是,UCDOS使用的是点阵字库,而Windows使用的是矢量字库。
VFP的向下兼容是指命令、函数等的向下兼容,在输出界面(包括显示和打印)上虽然可以兼容(可以运行,不会死机),但效果却完全不一样,不信您把2.5的菜单拿到6.0上试试:可以运行、也可以执行,但界面却十分恶心。
建议您如楼上所说,重新开发更好,如果光是打印,把上面的程序改成报表将是十分简单的事。
需要补充的是,楼主的提法有问题:UCDOS是系统软件,而VFP6.0是应用软件,在DOS+UCDOS下可以基于不用的应用软件开发出很多应用程序,如BASIC、C、Dbase、Foxpro等……

[ 本帖最后由 啸凡 于 2010-5-15 22:30 编辑 ]

两人行已有我师……
2010-05-15 22:18
qq156059757
Rank: 1
等 级:新手上路
帖 子:77
专家分:9
注 册:2010-5-15
收藏
得分:0 
回复 2楼 wzxc
你好 wzxc
谢谢,回头试试
不过个人感觉,不能从根本上解决问题
 
重新开发的话 ,太费时间,不知有何可行性建议,还请赐教
2010-05-15 22:21
qq156059757
Rank: 1
等 级:新手上路
帖 子:77
专家分:9
注 册:2010-5-15
收藏
得分:0 
回复 3楼 啸凡
你好
谢谢回复
我是初学者,对这方面不是很了解
弱弱的问一下,您所说的重新开发,是指在vfp下重新编写打印程序吗
2010-05-15 22:29
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:10 
不用编写打印程序,使用报表设计器,就和用笔来画表格差不多。搞好后保存为报表文件,用Report from调用即可

两人行已有我师……
2010-05-15 22:31
qq156059757
Rank: 1
等 级:新手上路
帖 子:77
专家分:9
注 册:2010-5-15
收藏
得分:0 
回复 3楼 啸凡
补充一下
问这个问题的目的主要是:实现vfp打印的工资表达到ucdos7.0下的打印工资表的效果
2010-05-15 22:31
qq156059757
Rank: 1
等 级:新手上路
帖 子:77
专家分:9
注 册:2010-5-15
收藏
得分:0 
回复 6楼 啸凡
噢 ……那回头再研究研究报表
我们的工资系统打印出来的大概有24个字段
要打在差不都a3大小的三联链式打印纸上,一张纸打印24个人的工资,页首行是部门名称
大约有70个部门,如果用报表方便吗
而且每个部门的每个字段都需要有小计
2010-05-15 22:36
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 

下述代码, 是我从早期 ucdos+foxbas 软件模块中脱胎过来的, 现在还在用着(vfp6.0/9.0版本)~  供你参考吧~

proc 打印.click
     if val(thisform.zlim2.value)<1 .or.val(thisform.zlim2.value)<val(thisform.zlim1.value)
        thisform.activate
        retu
     endif
     lsfor="betw(val(页号),val(thisform.zlim1.value),val(thisform.zlim2.value))"
     acti wind win99
     clea
     sele 1
     use &temp\lsprin excl
     copy to &temp\ls for .not.empt(页号) .and.(&lsfor)
     use &temp\ls excl
     go bott
     lspge=allt(页号)
     go top
     lspgs=allt(页号)
     @ 3,0 say " >> 打单中...   起讫页码: &lspgs →&lspge"
                        
     set prin on
     set devi to prin
     jgrow =iif(rowpp=40, 1.15,1.4)
     jgleft=4
     scan
        if mxh+"期"$ztxt
           set prin font "黑体",10
           @ 2, 4 say trim(ztxt)
           loop
        endif
        set prin font "黑体",11
        @ prow()+jgrow,jgleft say trim(ztxt)
     endscan
     set devi to scre
     set prin off
     go bott
     set prin font "宋体",2
     disp off fiel " " to prin
     clos data
     ls=inke(8)
     deac wind win99
     thisform.release   
2010-05-16 01:05
sywzs
Rank: 10Rank: 10Rank: 10
来 自:辽宁
等 级:贵宾
威 望:15
帖 子:508
专家分:1725
注 册:2009-5-13
收藏
得分:0 
回复8楼,你说的情况用VFP的报表应该是很容易解决的。
2010-05-16 04:48
快速回复:ucdos7.0 程序在 vfp6.0 下打印无法对齐
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032833 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved