注册 登录
编程论坛 VFP论坛

能否使用VFP实现这个功能

excel6687 发布于 2020-10-24 22:22, 3838 次点击
只有本站会员才能查看附件,请 登录
18 回复
#2
gs25367856782020-10-25 08:16
难了
#3
吹水佬2020-10-25 09:00
变动栏目打印也可以的,但有页面宽度限制,超过限制就要分页。
#4
xuminxz2020-10-25 14:08
用mod()构建一个新表,如果每页显示10个人,就分别构建出10个姓名、部门……字段
#5
sdta2020-10-25 14:26
楼主是自找烦恼
#6
excel66872020-10-26 14:49
回复 5楼 sdta
这个任务是工作需要,我仅仅了解VFP,没办法
#7
wengjl2020-10-26 16:47
这个报表可以转置一下吗?

如果可以,是很容易实现的
#8
excel66872020-10-26 17:07
回复 7楼 wengjl
关键就是这个固定格式,如果转置就容易多了
#9
excel66872020-10-26 18:26
以下是引用gs2536785678在2020-10-25 08:16:40的发言:

难了



这种格式的报表,很久很久以前我用VFP的前身FoxBase版本实现过,后来就没有深入学习VFP了
#10
wcx_cc2020-10-26 20:42
如果只限于楼主给的样式,问题还是较容易解决! 原程序,报表都不要动.只是在报表中再增添一点点打印条件即可,条件就是:针对线条的显示和打印.用数据源中各条记录,在报表中所对应的'行'中的线条,进行打印控制.另外,vfp报表功能也是比较强的,允许有重叠附加,那个部门名称,时间,还有下面的2个字段的值,都可能是较长的,可以在各写上打印条件后,与其它字段值重合放置在报表的细节里.( 注:我说的报表,是有细节中报表,仅供参考)





[此贴子已经被作者于2020-10-26 21:08编辑过]

#11
wcx_cc2020-10-27 00:56
(一个简单例子仅供参考)
只有本站会员才能查看附件,请 登录
#12
vfpzhu2020-10-28 17:10
1. 可以实现。但存在一个问题,当部们人数增加后,报表将超出打印宽度,分页处理怎么要求?
2. 你的数据是存在哪的。从excel(原始数据)到excel表?excel到vfp报表?vfp形成vfp报表?

[此贴子已经被作者于2020-10-28 17:12编辑过]

#13
excel66872020-10-28 17:38
回复 12楼 vfpzhu
1、如果人员较多,则自动进行分页处理,如果该页人员不满则打印空白栏目,但是每页最后的汇总项目不能少
2、目前的数据是EXCEL格式,数据是可以相互转换的
#14
excel66872020-10-28 17:45
回复 11楼 wcx_cc
感谢你那么晚还给我回帖,并且提供了很好的思路
#15
excel66872020-10-28 17:46
回复 12楼 vfpzhu
能否具体说说如何实现
#16
吹水佬2020-10-28 18:59
回复 13楼 excel6687
“如果该页人员不满则打印空白栏目”
这样就简单,第页分别取一定的栏目数据到临时表统计打印
#17
vfpzhu2020-10-28 19:30
我做的话思路这样:
1. 建立一个A数据表,比excel数据多一个A字段。
2. 用select 语句以部门分组,生成组别表。
3. 从组别表第一个记录开始读取组别名称。
4. 在数据表A字段中输入标记(第一个循环,前6个记录;第二个循环,7到第12记录...)
5. 对A字段、组别名称进行筛选,A表结果的内容就是:同一组别、不大于6个记录。
6. 定义变量 或 变量组(设为字符型,初值为:''),存放最多59个数据(6*9=54 + 4 +1=59,从A表中不超过6个记录中读取 )。
7. 每一张报表(完整表式),加上59个数据(相应变量写在报表中)。
在同一组的A表中,每6个记录一次循环,直到表中记录全部输出。
在组别表中:从第一个记录,到最后一个记录。

或者:建一张与打印报表一样的表 B表
从1 到 5 同上
6. 把筛选的A表数据 相应地移到 B 表中,然后 循环打印B表。

[此贴子已经被作者于2020-10-28 20:49编辑过]

#18
吹水佬2020-10-28 20:01
回复 16楼 吹水佬
示例:
第1页
只有本站会员才能查看附件,请 登录

第2页
只有本站会员才能查看附件,请 登录

程序代码:
CREATE CURSOR bb (b1 I,b2 I,b3 I,hj I)
CREATE CURSOR tt (f1 I,f2 I,f3 I,f4 I,f5 I)
INSERT INTO tt VALUES (1,2,3,4,5)
INSERT INTO tt VALUES (21,22,23,24,25)
INSERT INTO tt VALUES (31,32,33,34,35)

cf = FIELD(1,"tt")
nf = 2
DO WHILE nf <= FCOUNT("tt")
    cf = cf + ",f"+TRANSFORM(nf)
    IF nf%3 == 0    && 假设每页3个栏目
        print_bb(cf)
        nf = nf + 1
        cf = FIELD(nf,"tt")
    ENDIF
    nf = nf + 1
ENDDO
IF !EMPTY(cf)
    print_bb(cf)
ENDIF
RETURN

FUNCTION print_bb(cf)
    SELECT tt
    COPY TO ARRAY arr FIELDS &cf
    SELECT bb
    ZAP
    APPEND FROM ARRAY arr
    REPLACE ALL hj WITH b1+b2+b3
    BROWSE    && 这句改为报表输出
ENDFUNC
#19
excel66872020-10-28 22:12
回复 18楼 吹水佬
非常棒,好好学习一下
1