起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1682|回复: 6

[结贴] Grid的html列不能读取其它行的值,ro/ed都可以

[复制链接]

10

主题

33

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
发表于 2016-7-21 22:54:16 | 显示全部楼层 |阅读模式
版本: X5.2.7 小版本号:
数据库: Oracle 服务器操作系统: Windows 应用服务器: Tomcat
客户端操作系统: Windows 7 浏览器: Chrome
1.grid的html列是data的计算关系字段(模型没有),其它为模型中的字段。现在是需要对grid部分字段求和,前者只能取到当前行的数据,后者能够读取所有行的数据。
2.如下图:

设计器

设计器

yunxing.jpg

效果说明:
  上图中:grid中的要求和的是在dataDetail中,
               “本行价税合计”是模型中的,基表字段,在grid中type是ro。
               “金额”是非基表字段,为计算关系。                   type=html
              “税额”同“金额”
3.1 方法1代码:
mainActivity.dataDetailValueChanged = function(event){
。。。。。
                //calcHeJiJe();
                var sumBHS = justep.XData.sum('dataDetail', 'BUHANSHJ');
        var dMaster = justep.xbl('dataMaster');
        dMaster.setValue('HEJIJEBHS', sumBHS);
                var sumS = justep.XData.sum('dataDetail', 'ZengZhiSHJ');
        var dMaster = justep.xbl('dataMaster');
        dMaster.setValue('ZENGZHISHJ', sumS);
                var sumJE = justep.XData.sum('dataDetail', 'JINE');
        var dMaster = justep.xbl('dataMaster');
        dMaster.setValue('HEJIJE', sumJE);

3.2 方法2代码:
//计算合计金额
function calcHeJiJe(){
        debugger;
        for(var i=0;i<dataDetail.getCount();i++){
                var cid = dataDetail.getID(i);
                var jine0=dataDetail.getValue("ZengZhiSHJ",cid );
                var jine1=dataDetail.getValue("BUHANSHJ",cid );
                var jine2=dataDetail.getValue("JINE",cid );
                var tmpjine0 = 0,tmpjine1 = 0,tmpjine2 = 0;
               
                if(!!jine0 && !isNaN(jine0)){
                        tmpjine0 = parseFloat(jine0);
                }
                cnt0 = cnt0 + tmpjine0;
                if(!!jine1 && !isNaN(jine1)){
                        tmpjine1 = parseFloat(jine1);
                }
                cnt1 = cnt1 + tmpjine1;
                if(!!jine2 && !isNaN(jine2)){
                        tmpjine2 = parseFloat(jine2);
                }
                cnt2 = cnt2 + tmpjine2;
        }       
        justep.xbl("dataMaster").setValue("ZENGZHISHJ",parseFloat(cnt0).toFixed(2));
        justep.xbl("dataMaster").setValue("HEJIJEBHS",parseFloat(cnt1).toFixed(2));
        justep.xbl("dataMaster").setValue("HEJIJE",parseFloat(cnt2).toFixed(2));




10

主题

33

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
 楼主| 发表于 2016-7-21 23:07:13 | 显示全部楼层

补充图片

补充图片

回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35920
发表于 2016-7-22 09:47:50 | 显示全部楼层
html列是data的计算关系字段值是怎么来的?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

10

主题

33

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
 楼主| 发表于 2016-7-22 10:57:44 | 显示全部楼层
本帖最后由 gzestar_luo 于 2016-7-22 11:00 编辑

关系

关系

2 :代码
mainActivity.grid1_BUHANSHJRender = function(event){
var SHENHESL =event.cell.getValueByColId("SHENHESL");
var DANJIA =event.cell.getValueByColId("DANJIA");
var p1=parseFloat(SHENHESL*DANJIA).toFixed(2);
return parseFloat(p1).toFixed(2);
};
3、4、4.2:修改“数量、单价”等后:
mainActivity.dataDetailValueChanged = function(event){
var column = event.column;
if(column=='SHENHESL' || column=='DANJIA' || column=='ZENGZHISL'){
  //debugger;
  var dataDetail =justep.xbl("dataDetail");
  var shenhesl = dataDetail.getValue("SHENHESL");
  var danjia = dataDetail.getValue("DANJIA");
  var zengzhisl = dataDetail.getValue("ZENGZHISL");
  var p1 =parseFloat(danjia);
  var p3 = parseFloat(shenhesl);
  if (!!zengzhisl && !isNaN(zengzhisl)){
   var p2 = parseFloat(zengzhisl);
   }
  else{
   var p2=parseFloat(0.00);
   }
  var p4 =parseFloat(p3*p1).toFixed(2);//不含税小计--金额
  var p5 =parseFloat((1+p2)*p1).toFixed(2);//含税单价--以含税单价打印增值税票
  if (!!zengzhisl && !isNaN(zengzhisl)){
   var p6 =parseFloat(p5*p3).toFixed(2);//价税合计=含税单价*数量
   }
  else{
   var p6=p4;
  }
  var p7 =parseFloat(p6-p4).toFixed(2);//增值税合计=价税合计-不含税小计
  var sum2 =parseFloat(danjia*p2).toFixed(8);//增值税(单价的)--不显示
  dataDetail.setValue("ZENGZHIS", sum2);
  dataDetail.setValue("BUHANSHJ", p4);//不含税小计--金额
  dataDetail.setValue("DANJIA_HS", p5);//含税单价--不显示
  dataDetail.setValue("ZengZhiSHJ", p7);//增值税合计--税额
  dataDetail.setValue("JINE", p6);
  //calcHeJiJe();
  var sumBHS = justep.XData.sum('dataDetail', 'BUHANSHJ');
        var dMaster = justep.xbl('dataMaster');
        dMaster.setValue('HEJIJEBHS', sumBHS);
  var sumS = justep.XData.sum('dataDetail', 'ZengZhiSHJ');
        var dMaster = justep.xbl('dataMaster');
        dMaster.setValue('ZENGZHISHJ', sumS);
  var sumJE = justep.XData.sum('dataDetail', 'JINE');
        var dMaster = justep.xbl('dataMaster');
        dMaster.setValue('HEJIJE', sumJE);


回复 支持 反对

使用道具 举报

10

主题

33

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
 楼主| 发表于 2016-7-22 11:11:33 | 显示全部楼层
本帖最后由 gzestar_luo 于 2016-7-22 11:16 编辑

调试以下函数:
1.用遍历grid各行取值,ro列(基表列“本行价税合计”)可以取到每一行的值,汇总正确。
2.        html列(计算关系,非基表列“税额”、“金额”两列),只能取当前行的值,但如果某行修改过,即使不是当前行,也可以取到值(即非当前行没有修改过,则取不到html列值)。用justep.XData.sum方法也一样。以下是遍历取值、计算、赋值的函数
function calcHeJiJe(){
//只能逐行简单累计,不得重新计算
        var dataDetail = justep.xbl("dataDetail");
        var cnt0 =0,cnt1=0,cnt2=0;
        debugger;
        for(var i=0;i<dataDetail.getCount();i++){
                var cid = dataDetail.getID(i);
                var jine0=dataDetail.getValue("ZengZhiSHJ",cid );
                var jine1=dataDetail.getValue("BUHANSHJ",cid );
                var jine2=dataDetail.getValue("JINE",cid );
                var tmpjine0 = 0,tmpjine1 = 0,tmpjine2 = 0;
               
                if(!!jine0 && !isNaN(jine0)){
                        tmpjine0 = parseFloat(jine0);
                }
                cnt0 = cnt0 + tmpjine0;
                if(!!jine1 && !isNaN(jine1)){
                        tmpjine1 = parseFloat(jine1);
                }
                cnt1 = cnt1 + tmpjine1;
                if(!!jine2 && !isNaN(jine2)){
                        tmpjine2 = parseFloat(jine2);
                }
                cnt2 = cnt2 + tmpjine2;
        }        
        justep.xbl("dataMaster").setValue("ZENGZHISHJ",parseFloat(cnt0).toFixed(2));
        justep.xbl("dataMaster").setValue("HEJIJEBHS",parseFloat(cnt1).toFixed(2));
        justep.xbl("dataMaster").setValue("HEJIJE",parseFloat(cnt2).toFixed(2));
}
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35920
发表于 2016-7-22 14:21:38 | 显示全部楼层
可以直接用
var SHENHESL =event.cell.getValueByColId("SHENHESL");
var DANJIA =event.cell.getValueByColId("DANJIA");
var p1=parseFloat(SHENHESL*DANJIA).toFixed(2);
return parseFloat(p1).toFixed(2);

的方式去计算,onRender中渲染的应该是渲染的时候可以获取到,渲染后能操作的应该是当前行的


计算关系的值可以用计算关系的方式去设置值,不是在onRender中去设置值
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

10

主题

33

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
 楼主| 发表于 2016-7-23 18:02:12 | 显示全部楼层
没办法,计算关系列不能取值汇总,只能增加基表列(增加表的冗余字段)解决。
结贴吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-1 07:33 , Processed in 0.122846 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表