NC6编辑(监听)事件

本文介绍了如何在NC6系列产品的模板中,通过编辑事件解决跨表公式无效的问题,包括功能注册、后台类查找以及修改编辑事件类的具体步骤和代码示例。
摘要由CSDN通过智能技术生成

目录

前言

1、找编辑(监听)事件后台类

1.1 、功能注册

1.2 、XML查找

2、修改编辑(监听)事件类 


前言

功能需求:

  自动计算单据表体数量、金额合计值到表头总数量,总金额。

说明:

  因NC6系列产品模板设置的编辑公式对于跨表不生效,所以在这里我们建议用编辑事件,具体开发步骤如下。

1、找编辑(监听)事件后台类

1.1 、功能注册

  找到我们需要编辑的单据,打开参数注册里的BeanConfigFilePath对应的参数值

 

1.2 、XML查找

  从开发工具(eclipse,uap-studil等)找到对应位置打开其对应XML文件,将参数值“/”替换为“.”,查找类(ctrl+shift+t),如果找不到,可以往前删一部分。在XML文件搜索nc.ui.pubapp.uif2app.model.AppEventHandlerMediator通过此处就可以找到表头编辑事件或表体编辑事件了,找到对应class复制到项目client目录下即可。

参考代码

<!-- 表体字段编辑后事件 -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
    <property name="event"
						value="nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent" />
    <property name="picky" ref="childrenPicky" />
    <property name="handler">
        <bean class="nc.ui.pbm.materialplan.ace.handler.AceBodyAfterEditHandler" />
    </property>
</bean>

2、修改编辑(监听)事件类 

参考代码:

package nc.ui.pbm.materialplan.ace.handler;

import nc.ui.pub.bill.BillCardPanel;
import nc.ui.pubapp.uif2app.event.IAppEventHandler;
import nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent;
import nc.ui.trade.business.HYPubBO_Client;
import nc.uif.pub.exception.UifException;
import nc.vo.bd.taxcode.TaxrateVO;
import nc.vo.pub.lang.UFDouble;

@SuppressWarnings("restriction")
public class AceBodyAfterEditHandler extends Object implements IAppEventHandler<CardBodyAfterEditEvent> {
	public void handleAppEvent(CardBodyAfterEditEvent e) {
		String key = e.getKey();
		BillCardPanel panel = e.getBillCardPanel();
		String pk_org_v = panel.getHeadItem("pk_org_v").getValueObject().toString();
		try {
			String def7 = (String) HYPubBO_Client.findColValue("org_orgs", "def7", "nvl(dr,0) = 0 and pk_vid='" + pk_org_v + "'");
			if(null == def7 || !def7.equals("1")) {
				return;
			}
		} catch (UifException e2) {
			e2.printStackTrace();
		}
		if ("pk_material_v".equals(key) && null != panel.getBodyValueAt(e.getRow(), "pk_material_v")) {
			String pk_material_v = panel.getBodyValueAt(e.getRow(), "pk_material_v").toString();
			// 如果多选的情况
			if(pk_material_v.contains(",")) {
				pk_material_v = pk_material_v.split(",")[0];
			}
			try {
				String pk_mattaxes = (String) HYPubBO_Client.findColValue("bd_material", "pk_mattaxes", "nvl(dr,0) = 0 and pk_material='"
						+ pk_material_v + "'");
				String pk_taxcode = (String) HYPubBO_Client.findColValue("bd_taxcode", "pk_taxcode", "nvl(dr,0) = 0 and mattaxes='"
						+ pk_mattaxes + "'");
				panel.setBodyValueAt(pk_taxcode, e.getRow(), "bdef6");
				TaxrateVO[] taxrateVO = (TaxrateVO[]) HYPubBO_Client.queryByCondition(TaxrateVO.class, "nvl(dr,0) = 0 and pk_taxcode='"+pk_taxcode+"'");
				if(null != taxrateVO && taxrateVO.length >= 1) {
					UFDouble taxrate = taxrateVO[0].getTaxrate();
					panel.setBodyValueAt(taxrate, e.getRow(), "bdef7");
				}
				
			} catch (UifException e1) {
				e1.printStackTrace();
			}
			
		}else if ("nnum".equals(key) || "mater_unit_price".equals(key)
				|| "mater_price".equals(key)
				|| "bdef6".equals(key)
				|| "bdef7".equals(key)
				|| "bdef9".equals(key)
				|| "bdef10".equals(key)
				|| "bdef8".equals(key)
				|| "service_prc_ratio".equals(key)) {
			// 数量
			UFDouble num = (UFDouble) panel.getBodyValueAt(e.getRow(), "nnum") == null ? new UFDouble(0)
			: (UFDouble) panel.getBodyValueAt(e.getRow(), "nnum");
			// 服务价格系数
			UFDouble service_prc_ratio = panel.getBodyValueAt(e.getRow(), "service_prc_ratio") == null ? new UFDouble(1)
			: new UFDouble(panel.getBodyValueAt(e.getRow(), "service_prc_ratio").toString());
			// 无税单价
			UFDouble mater_unit_price = panel.getBodyValueAt(e.getRow(), "mater_unit_price") == null ? new UFDouble(0)
			: new UFDouble(panel.getBodyValueAt(e.getRow(), "mater_unit_price").toString());
			// 税率
			try {
				String pk_taxcode = (String) panel.getBodyValueAt(e.getRow(), "bdef6");// 税码
				TaxrateVO[] taxrateVO = (TaxrateVO[]) HYPubBO_Client.queryByCondition(TaxrateVO.class, "nvl(dr,0) = 0 and pk_taxcode='"+pk_taxcode+"'");
				if(null != taxrateVO && taxrateVO.length >= 1) {
					UFDouble taxrate = taxrateVO[0].getTaxrate();
					panel.setBodyValueAt(taxrate, e.getRow(), "bdef7");
				}
			} catch (UifException e1) {
				e1.printStackTrace();
			}
			UFDouble bdef7 = panel.getBodyValueAt(e.getRow(), "bdef7") == null ? new UFDouble(0)
			: new UFDouble(panel.getBodyValueAt(e.getRow(), "bdef7").toString());
			// 无税总价
			UFDouble mater_price = service_prc_ratio.multiply(mater_unit_price.multiply(num));
			panel.setBodyValueAt(mater_price, e.getRow(), "mater_price");
			// 含税单价
			UFDouble bdef10 = mater_unit_price.multiply(bdef7.div(100).add(1));
			panel.setBodyValueAt(bdef10, e.getRow(), "bdef10");
			// 含税总价
			UFDouble bdef8 = service_prc_ratio.multiply(bdef10.multiply(num));
			panel.setBodyValueAt(bdef8, e.getRow(), "bdef8");
			// 税额
			UFDouble bdef9 = bdef8.sub(mater_price);
			panel.setBodyValueAt(bdef9, e.getRow(), "bdef9");
		}
	}
}

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪仔搬砖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值