目录
前言
功能需求:
自动计算单据表体数量、金额合计值到表头总数量,总金额。
说明:
因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");
}
}
}