***请高手解决舍位平衡问题!(100分)

  • 主题发起人 主题发起人 dash
  • 开始时间 开始时间
D

dash

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在做一个报表软件,需有舍位平衡功能,那位大虾做过请不吝指教,起码给点资料啊。
 
  华表构件有简单的舍位平衡功能,不过好象处理单个报表的。我们现在做的一
个项目,其中有要改造的旧的系统有多报表的,它用FOXPRO 编写,听说当时别人做
的时候是专门请了一个教授花了半年时间来做的,花了多少 M 就不知道。程序很长,
我没有仔细去研究过。舍位平衡的处理有很多经验在里面,首先你得知道他们手工
做时是怎么处理的。[:)]
 
请不吝赐给点资料吧,我不吝送分啊。!
 
大虾啊,给点资料行么?我多给100还不行吗?
 
对不起,很久不来了。不知你是想要现成的东东还是想自己做?现成的东东我这儿是没有的,
如果想自己做,也不知你是想做多表的还是单表间的平衡?单表的我有一个简单的想法,就是
不知合不合你用了。
 
blueboy老兄早来啊,我等的不行了。赶快把想法告诉我吧,单表的也行,能把行
和列调平就行,不知那位老教授搞的那个程序代码能否发来一看,不胜感激,100
分双手奉上。我的邮箱:vancou@263.net
 
老教授的舍位平衡已发到你的E里了,你先看看吧,不知对你有没有用?
刚出差回来,有点累。
给你一点小建议: 我觉得你提问题时写得太简单,真正做过舍位平衡的人或许不多,
但如果你把要求写出来了,或许大家也能帮你找到比较好的算法呢,你的帖子也会热
闹一些啦。所以呀发帖子也得花点力气才行,特别是有所求人时。[:)]
 
兄弟说的对,不过你发给我的附件格式是.msg的我打不开啊,是我的outlook不好用么?用写字版打开都不成样了,还
得麻烦老兄粘成文字了。先谢了。
 
msg其实是DBF文件,老教授把它的扩展名给改啦,哈哈,真是可爱的老头!
 
这段文字在swphmsg.prg程序中也有,这是我从那儿COPY过来的:

S(1) = ' '
S(2) = ' FoxPro 2.5 数据库舍位平衡模块使用说明 '
S(3) = ' '
S(4) = ' 在日常的报表处理中, 由于计量单位的改变, 于是要求数据作相'
S(5) = '应的舍位处理. 但是舍位处理后,原平衡的数据会出现不平衡的现象,'
S(6) = '这就要求对舍位后的数据作相应的平衡调整(即舍位平衡处理). 舍位'
S(7) = '平衡处理后, 由于对数据调整的条件不同, 原来表与表之间要求相符'
S(8) = '的数据, 也会出现不平衡的现象, 这又要求对这些不平衡的数据作相'
S(9) = '应的调整(即表表平衡处理). '
S(10) = ' '
S(11) = ' 本程序正是为了解决用 FoxPro 2.5 来处理上述报表问题而开发'
S(12) = '并在京粤-0530V型机下调式通过. '
S(13) = ' '
S(14) = ' FoxPro 2.5 数据库舍位平衡模块(SWPH模块),共分八个功能. 可'
S(15) = '对数据库分别进行成批或单一的报表舍位平衡处理和平衡检查, 也可'
S(16) = '对数据库进行报表与报表之间的平衡检查和平衡处理. 这些操作比较'
S(17) = '简单, 下面主要对公式的建立说明一下. '
S(18) = ' '
S(19) = ' 建立公式属于本模块的第二个功能, 能方便地对所需的公式进行'
S(20) = '建立, 修改, 删除, 查阅和打印. 在建立或修改公式时, 系统提供了'
S(21) = '很方便的全屏幕操作. 因此要求在建立公式时, 不允许修改公式的标'
S(22) = '记和编号. 在修改公式时, 不允许修改公式的标记, 但可以修改公式'
S(23) = '的编号, 从而在修改的过程中产生新的公式. '
S(24) = ' '
S(25) = ' 根据需要, 公式分三种类型. AUTO:型为根据 FILE: 型公式自动'
S(26) = '成批处理报表的舍位平衡或平衡检查;
而FILE: 型为报表舍位平衡处'
S(27) = '理和平衡检查;
FILE-TB:型为表表之间平衡处理和平衡检查. 各种公'
S(28) = '式的格式及说明如下: '
S(29) = ' '
S(30) = ' AUTO:型公式 '
S(31) = ' 格式: AUTO:编号 '
S(32) = ' 编号1 '
S(33) = ' 编号2 '
S(34) = ' . '
S(35) = ' . '
S(36) = ' . '
S(37) = ' 编号n '
S(38) = ' END '
S(39) = ' '
S(40) = ' 在公式中,AUTO:为自动型标记,冒号后的编号为该公式的 '
S(41) = ' 编号.在AUTO:与END之间(即语句体)的编号1至编号n,为FILE: '
S(42) = ' 型公式的对应编号.当执行AUTO:型公式时,系统将自动地执行 '
S(43) = ' 编号1至编号n所列的FILE:型公式, 这样就能一次处理一批舍 '
S(44) = ' 位平衡公式. 如果所列的某编号n,在FILE:型公式中不存在, '
S(45) = ' 将自动忽略该编号n. '
S(46) = ' '
S(47) = ' 为书写的公式清析,美观,可以在语句中任意插入空格,可 '
S(48) = ' 以大小写混合书写,在语句后可用"*"号作注释. '
S(49) = ' '
S(50) = ' '
S(51) = ' FILE:型公式 '
S(52) = ' 格式: FILE:编号 [* [说明] [<提示信息>]] '
S(53) = ' DB: [路经] <数据库1> [ => [路经] <数据库2>] '
S(54) = ' Z: <舍掉整数位数> '
S(55) = ' T: [路经] <数据库1> (行范围) (栏范围) [;] '
S(56) = ' = [路经] <数据库2> (行范围) (栏范围) '
S(57) = ' L: 栏号 [,栏号] [,栏号..栏号] [,(栏范围)] '
S(58) = ' L1: 栏号 = 栏号 [+栏号] [+栏号..栏号] '
S(59) = ' . '
S(60) = ' . '
S(61) = ' . '
S(62) = ' L层号n: '
S(63) = ' H: 行号 [,行号] [,行号..行号] [,(行范围)] '
S(64) = ' H1: 行号 = 行号 [+行号] [+行号..行号] '
S(65) = ' . '
S(66) = ' . '
S(67) = ' . '
S(68) = ' H层号n: '
S(69) = ' END '
S(70) = ' 公式中:方括号中的项为可选项,尖括号中的项为必选项. '
S(71) = ' FILE:编号的作用为系统认别该公式并调用之,编号为 '
S(72) = ' 用户自己所定,长度没有限制. '
S(73) = ' DB:定义对某数据库进行舍位平衡处理或平衡检查,若 '
S(74) = ' 存在 [ => [路经] <数据库2>] 任选项, 则表示 '
S(75) = ' 对数据库1进行舍位平衡,其结果送入数据库2,这 '
S(76) = ' 时数据库1中原数据将保持不变.若没有该选则项,'
S(77) = ' 就对数据库1进行舍位平衡,其结果仍送回数据库1'
S(78) = ' 这时数据库1中原数据将不存在.在平衡检查中, '
S(79) = ' 只对数据库1进行平衡检查. '
S(80) = ' Z:去掉整数的位数. 如 Z:3 表示去掉整数三位,若原 '
S(81) = ' 数数据计量单位为元,舍位平衡后就为千元数. '
S(82) = ' T:该类型语句是在舍位的同时,将数据库2的行栏数据 '
S(83) = ' 对应地送入数据库1中,然后再进行舍位后的平衡 '
S(84) = ' 处理.这时要求数据库1的文件名应与 DB:型的结 '
S(85) = ' 果数据库同名,不然就失掉了T:型语句的作用.这 '
S(86) = ' 种T:型语句可写若干条,也可以没有.行栏范围中 '
S(87) = ' 行号与行号,栏号与栏号用 "," 或 ".." 连接. '
S(88) = ' L:其栏号表示该栏参加舍位.没有用括号"(",")"括起 '
S(89) = ' 的栏号存在栏平衡关系而不存在行平衡关系. 用 '
S(90) = ' 括号括起的栏号不存在行栏平衡关系, 而只参加 '
S(91) = ' 舍位处理.栏范围中,栏号与栏号用 "," 和 ".." '
S(92) = ' 连接. '
S(93) = ' L层号:行平衡语句.表示某行存在这样一种关系,即某 '
S(94) = ' 栏是由以下各栏相加所得,并存在一种层次关系. '
S(95) = ' 层号从第 1层开始, 写完所有属于第 1层的语句 '
S(96) = ' 后才写第 2层, ... 以此类推. 栏范围中, 栏号 '
S(97) = ' 与栏号用 "+" 和 ".." 连接. '
S(98) = ' H:其行号表示该行参加舍位.没有用括号"(",")"括起 '
S(99) = ' 的行号存在行平衡关系而不存在栏平衡关系. 用 '
S(100) = ' 括号括起的行号不存在行栏平衡关系, 而只参加 '
R = 1
do
while R<=KK
append blank
replace HELP with S(R)
R = R+1
enddo
S(1) = ' 舍位处理.行范围中,行号与行号用 "," 和 ".." '
S(2) = ' 连接. '
S(3) = ' H层号:栏平衡语句.表示某栏存在这样一种关系,即某 '
S(4) = ' 行是由以下各行相加所得,并存在一种层次关系. '
S(5) = ' 层号从第 1层开始, 写完所有属于第 1层的语句 '
S(6) = ' 后才写第 2层, ... 以此类推. 行范围中, 行号 '
S(7) = ' 与行号用 "+" 和 ".." 连接. '
S(8) = ' END 表示该公式结束. '
S(9) = ' '
S(10) = ' 几个名词解释: '
S(11) = ' 1.行平衡: 即某行的平衡,它由各栏组成的一种平衡关系.'
S(12) = ' 2.栏平衡: 即某栏的平衡,它由各行组成的一种平衡关系.'
S(13) = ' '
S(14) = ' 语句体(即FILE:与END之间的语句)的书写顺序: '
S(15) = ' 第 1句为 DB:型. 第 2句为Z:型. 然后可以先写T:型语 '
S(16) = ' 句或 LH 型语句, L型语句或 H型语句应作为一个整体, '
S(17) = ' 中间不能插入T:型语句. 书写 LH 型语句时,应先写L型 '
S(18) = ' 语句,然后再写H型语句(其中: L:型语句应写在 L层号: '
S(19) = ' 型语句前,H:型语句应写在 H层号:型语句前). '
S(20) = ' '
S(21) = ' 为书写的语句清析,美观,可以在语句中任意插入空格,可 '
S(22) = ' 以大小写混合书写,在语句后可用"*"号作注释,对T:型语句, '
S(23) = ' 一行写不完可以用分号";"分隔作两行书写, 还可在标记行将 '
S(24) = ' 注释用一对尖括号("<",">")括起来, 括起的文字作为运行提 '
S(25) = ' 示,可以清楚地知道程序的运行状态. '
S(26) = ' '
S(27) = ' 为保证数据的正确性, 避免数据的重复进位,必须由高层 '
S(28) = ' 到低进行舍位后的平衡调整,层号由小到大.其规则为: '
S(29) = ' 1.没有层次关系的语句, 不能出现等号"=", 只能用逗号 '
S(30) = ' ","或".."连接行号或栏号. '
S(31) = ' 2.有层次关系的语句: '
S(32) = ' (1).等号左边只能有一个行号或一个栏号. '
S(33) = ' (2).等号右边只能用 "+" 或 ".." 连接行号或栏号,其'
S(34) = ' 中: 符号 ".." 表示连加. '
S(35) = ' (3).高层次语句中等号左边的行号或栏号必须是在次高'
S(36) = ' 层次语句中等号右边出现过的行号或栏号. '
S(37) = ' 3.行号或栏号不能重复出现. '
S(38) = ' '
S(39) = ' 为保证系统的正常运行,出现下列情况之一者,系统将自动'
S(40) = ' 终止 FILE: 型的运行: '
S(41) = ' 1.公式中无 END 语句. '
S(42) = ' 2.第 1句为非 DB:型语句或没有定义数据库或定义的数 '
S(43) = ' 据库不存在. '
S(44) = ' 3.第 2句为非 Z: 型语句或定义去掉的整数位数小于零. '
S(45) = ' 4.没有行平衡语句或没有栏平衡语句. '
S(46) = ' 5.行平衡语句都出错或栏平衡语句都出错. '
S(47) = ' '
S(48) = ' 为保证系统的正常运行,出现下列情况之一者,系统将自动'
S(49) = ' 忽略 FILE: 型公式中该语句的处理: '
S(50) = ' 1.语句中漏掉冒号":". '
S(51) = ' 2.有平衡关系的层次语句中漏掉等号"=". '
S(52) = ' 3.没有平衡关系的层次语句中(L:型或H:型)出现非数字 '
S(53) = ' 或非",",".."连接符. '
S(54) = ' 4.有平衡关系的层次语句中(L层号:型或H层号:型)出现 '
S(55) = ' 非数字或非"+",".."连接符. '
S(56) = ' 5.语句中出现重复行号或重复栏号 '
S(57) = ' 6.语句中参加舍位的行号或栏号超出数据库的行栏范围, '
S(58) = ' 或行栏号出现零的情况. '
S(59) = ' 7.语句中参加舍位的栏号出现非数字型字段. '
S(60) = ' '
S(61) = ' 出现下列情况之一者,系统自动忽略 FILE: 型公式中T: '
S(62) = ' 型语句的处理: '
S(63) = ' 1.没有 T: 型语句. '
S(64) = ' 2.T:型语句中漏掉等号"=". '
S(65) = ' 3.T:型语句中定义的数据库不存在. '
S(66) = ' 4.T:型语句中行栏范围出现非数字或非",",".."连接符. '
S(67) = ' 5.T:型语句中等号两边的行数或栏数不匹配. '
S(68) = ' 6.T:型语句中行号或栏号超出数据库行栏范围. '
S(69) = ' 7.T:型语句中栏号出现非数字型字段. '
S(70) = ' 8.T:型语句中数据库1与数据库2对应的数据值相差太大. '
S(71) = ' '
S(72) = ' 出现上述错误, 在运行过程中, 系统将给出相应的错误提'
S(73) = ' 示. 并可根据错误提示,检查该语句,将其修改至正确. '
S(74) = ' '
S(75) = ' 由于存在 T: 型语句, 要求数据库1与数据库2对应的数据'
S(76) = ' 值不能相差太大(差值应小于数据库1的"N"型字段数), 否则系'
S(77) = ' 统会自动忽略该 T: 型语句的执行. 而失掉T:型语句的作用, '
S(78) = ' 因此, 在操作时, 应注意 FILE: 型公式的执行顺序. '
S(79) = ' '
S(80) = ' 程序在运行过程中, 只对行和栏平衡语句中出现过的行和'
S(81) = ' 栏进行舍位平衡处理, 产生的结果数据库的结构中, 参加舍位'
S(82) = ' 的字段的小数位数定为零, 没有出现的行和栏将保持原数据内'
S(83) = ' 容不变. '
S(84) = ' '
S(85) = ' 程序在运行过程中, 对舍位后的平衡处理, 其调整的原则'
S(86) = ' 是: 首先对舍位后的数据按去掉的位数进行四舍五入, 根据平'
S(87) = ' 衡语句, 若出现不平衡, 就进行调整. 需要加一的, 其余数最'
S(88) = ' 大的优先加一, 需要减一的, 其余数最小的优先减一, 余数为'
S(89) = ' 零, 不允许进行加一或减一, (这里的余数 = 原数据 - ROUND'
S(90) = ' ((原数据 / 10 ^ 去掉位数) , 0 ) * 10 ^ 去掉位数). 对所'
S(91) = ' 有符合条件的数据都进行调整后, 仍无法调平时, 系统会在屏'
S(92) = ' 幕给出相应的提示. 这时为保证数据的正确性, 应进行适当的'
S(93) = ' 手工调整, 使用时请注意! '
S(94) = ' '
S(95) = ' '
S(96) = ' FILE-TB:型公式 '
S(97) = ' 格式: FILE-TB:编号 [* [说明] [<提示信息>]] '
S(98) = ' DB1: [路经] <数据库1 [.$$$]> '
S(99) = ' DB2: [路经] <数据库2 [.$$$]> '
S(100) = ' . '
R = 1
do
while R<=KK
append blank
replace HELP with S(R)
R = R+1
enddo
S(1) = ' . '
S(2) = ' . '
S(3) = ' DBn: [路经] <数据库n [.$$$]> '
S(4) = ' TB: DBn(行范围)(栏范围)=DBn(行范围)(栏范围)[;]'
S(5) = ' [ <运算符> DBn(行范围)(栏范围)] ... '
S(6) = ' . '
S(7) = ' . '
S(8) = ' . '
S(9) = ' TB: DBn(行范围)(栏范围)=DBn(行范围)(栏范围)[;]'
S(10) = ' [ <运算符> DBn(行范围)(栏范围)] ... '
S(11) = ' END '
S(12) = ' '
S(13) = ' 公式中: 方括号中的项为可选项,尖括号中的项为必选项. '
S(14) = ' FILE-TB:编号的作用为系统认别该公式并调用之, 编'
S(15) = ' 号为用户自己所定,长度没有限制. '
S(16) = ' DB1:至DBn:定义参加表间平衡处理或表间平衡检查的'
S(17) = ' 数据库文件名. 若数据库名有 [.$$$] 任选项, '
S(18) = ' 则该数据的扩展名待定, 系统运行时将在屏幕提'
S(19) = ' 示输入待定扩展名. '
S(20) = ' TB:型语句,表示进行这样一种运算, 按等号右边所列'
S(21) = ' 的数据库, 根据运算符, 按对应的行号和栏号进'
S(22) = ' 行运算, 运算的结果送入等号左边数据库的对应'
S(23) = ' 行栏中. 这里的运算符为(+,-,*,/)四种,行栏范'
S(24) = ' 围中, 行号与行号,栏号与栏号之间用逗号",", '
S(25) = ' 或".."连加符连接.TB:型语句可根据需要写若干'
S(26) = ' 条. '
S(27) = ' END 表示该公式结束. '
S(28) = ' '
S(29) = ' FILE-TB:公式语句体(FILE-TB:与END之间的语句),没有书'
S(30) = ' 写的顺序关系, 但为了使公式清析,美观, 提倡先完写 DBn:型'
S(31) = ' 语句后再写 TB:型语句. '
S(32) = ' '
S(33) = ' 为书写的语句清析,美观,可以在语句中任意插入空格, 可'
S(34) = ' 以大小写混合书写,在语句后可用"**"号作注释.TB:型语句中,'
S(35) = ' 一行写不完可以用分号";"分隔,作多行书写, 还可在标记行将'
S(36) = ' 注释用一对尖括号("<",">")括起来, 括起的文字作为运行提 '
S(37) = ' 示,可以清楚地知道程序的运行状态. '
S(38) = ' '
S(39) = ' 为保证程序的正确运行,没有TB:型语句,系统将自动返回,'
S(40) = ' 出现下列情况之一者, 系统将自动忽略 FILE-TB: 公式中的 '
S(41) = ' 该DBn:型语句或该TB:语句的处理: '
S(42) = ' 1.DBn:型语句中漏掉数据库名. '
S(43) = ' 2.TB:型语句中使用的数据库没有用DBn:型定义. 或该数 '
S(44) = ' 据库不存在. '
S(45) = ' 3.TB:型语句中漏掉等号"="运算符. '
S(46) = ' 4.TB:型语句中运算符出现非("+","-","*","/")运算符. '
S(47) = ' 5.TB:型语句中只使用了一个数据库,造成无意义. '
S(48) = ' 6.TB:型语句中使用了多于十个不同的数据库. '
S(49) = ' 7.TB:型语句中括号出错或括号不匹配. '
S(50) = ' 8.TB:型语句中行或栏范围出现非数字或非逗号","或非 '
S(51) = ' ".."连接符 '
S(52) = ' 9.TB:型语句中各数据库的行号与行号,栏号与栏号之间没'
S(53) = ' 有对应的匹配. '
S(54) = ' 10.TB:型语句中某数据库的行号或栏号出现零的情况. '
S(55) = ' 11.TB:型语句中某数据库的行号或栏号超出该库的范围. '
S(56) = ' 12.TB:型语句中某数据库的栏号出现非数字型字段. '
S(57) = ' '
S(58) = ' 出现上述错误, 在运行过程中, 系统将给出相应的错误提'
S(59) = ' 示. 并可根据错误提示,检查该语句,将其修改至正确. '
S(60) = ' '
S(61) = ' 程序在运行过程中, 写在先的 TB:型语句先执行, 写在后'
S(62) = ' 的后执行. 在一条 TB:型语句中, 运算符不分优先级别, 按运'
S(63) = ' 算项顺序进行运算. 若 TB:型语句中用到除号 ("/"), 除数又'
S(64) = ' 为零, 运算结果作零处理, 遇到这种情况, 系统将在屏幕给出'
S(65) = ' 提示, 使用时请注意! '
S(66) = ' '
S(67) = ' 在建立或修改公式时, 应按照上述要求的格式及说明进行. 本系'
S(68) = '统在使用过程中, 发现有什么问题或改进性建议, 请与桂林地区国家'
S(69) = '税务局微机室李雁联系, 在此表示感谢! 电话: 0773-2831405. '
S(70) = ' '
S(71) = ' 一九九二年四月 '
 
大哥,能不能也发我一份,maochan@263.net
 
哇,好象不要钱一样!!!
等等。。。。。。OK,你也去看看吧。
 
我先看看吧,不一定管用,不行我再送分,呵呵
 
TO: buluboy
能否发给我一份? 奉送300两纹银如何? 价钱好商量. tseug@263.net.
 
都想要啊,为什么dash的帖子挂在这儿几天了都没有人说几句,我还以为没有人在做舍位平衡呢!
.....你的也发啦,这个是最后一个了,下不为例。[:)]
 
就是嘛,希望做舍维平衡的多来交流一下。
 
后退
顶部