财务应付单如何暂存态指定发票?

1 简介
1.1 功能介绍
星瀚版本在5.0.011以上,支持现场二开财务应付单暂存态指定发票。
1.2 应用场景
同一个供应商下有多张采购订单,后续收到一张发票,但由于业务人员按照订单入库并确认应付,一张发票需要被多张应付使用。当第一张应付采集发票后,发票并未完全占用,后续发票需要被其他应付指定,同时应付单需要关联发票后提交进入审批流,因此需要在应付暂存时能够指定发票。
2 主要操作
2.1 财务应付单表单界面增加按钮“暂存态指定发票”

2.2 增加表单插件,在itemClick增加逻辑判定,当点击该按钮时,打开发票列表进行选择
@Override
public void itemClick(ItemClickEvent evt) {
super.itemClick(evt);
String key = evt.getItemKey().toLowerCase();
Object billstatus = this.getModel().getValue("billstatus");
// 暂存态点击指定发票按钮
if ("bar_assigninvbya".equals(key) && "A".equals(billstatus)) {
ListShowParameter lsp = ShowFormHelper.createShowListForm(EntityConst.ENTITY_APINVOICE, true, 2);
ListFilterParameter lfp = new ListFilterParameter();
DynamicObject finApBill = this.getModel().getDataEntity(true);
DynamicObject org = finApBill.getDynamicObject("org");
QFilter qfilter = new QFilter("org", QCP.equals, org.getPkValue());
qfilter.and(new QFilter("unrelatedamt", QCP.not_equals, BigDecimal.ZERO));
qfilter.and(new QFilter("invoicestatus", QCP.in, new String[]{"0", ""})); //发票状态=正常,或没值在可以指定
qfilter.and(new QFilter("billstatus", QCP.equals, "C")); //审核
qfilter.and(new QFilter("ismatched", QCP.equals, Boolean.FALSE)); //未匹配
String asstacttype = finApBill.getString("asstacttype");
if (!EmptyUtils.isEmpty(asstacttype)) {
qfilter.and(new QFilter("asstacttype", QCP.equals, asstacttype)); //往来类型
}
DynamicObject asstact = finApBill.getDynamicObject("asstact");
if (!ObjectUtils.isEmpty(asstact)) {
// .masterid加上后平台取往来类型默认get(0) 取第一个往来类型拼接过滤条件,仅支持个性化供应商场景查询
if (AsstactTypeEnum.bd_supplier.getValue().equals(asstacttype)) {
qfilter.and(new QFilter("receivablessupp.masterid", QCP.equals, asstact.get("masterid"))); //往来户(存在个性化数据筛选不出来)
} else {
qfilter.and(new QFilter("receivablessupp", QCP.equals, asstact.getPkValue()));
}
} else {
throw new KDBizException(ResManager.loadKDString("请选择往来户", "demo_12", "fi-ap-business"));
}
qfilter.and(new QFilter("currency", QCP.equals, finApBill.getLong("currency.id")));
lfp.setFilter(qfilter);
lsp.setListFilterParameter(lfp);
lsp.setCloseCallBack(new CloseCallBack(this, "assigninvbya"));
this.getView().showForm(lsp);
}
}
2.3 然后再closedCallBack事件中进行监听,当客户选中了发票,更新财务应付单的发票明细行
@Override
public void closedCallBack(ClosedCallBackEvent e) {
super.closedCallBack(e);
String actionId = e.getActionId();
Object returnData = e.getReturnData();
//指定发票
if ("assigninvbya".equalsIgnoreCase(actionId)) {
ListSelectedRowCollection rowList = (ListSelectedRowCollection) returnData;
if (ObjectUtils.isEmpty(rowList)) return;
Set<Long> invPks = new HashSet<>(ConfigConsts.COLLSIZES);
for (ListSelectedRow listSelectedRow : rowList) {
Long billId = (Long) listSelectedRow.getPrimaryKeyValue();
invPks.add(billId);
}
DynamicObject[] invoices = BusinessDataServiceHelper.load(EntityConst.ENTITY_APINVOICE,
"pricetaxtotal,invoicetype,invoicecode,currency,invoiceno,issuedate,tax,amount,asstactname," +
"buyername,istaxdeduction,remark,serialno,invoicestatus,taxrate,billno",
new QFilter[]{new QFilter("id", QCP.in, invPks)});
财务应付单如何暂存态指定发票?
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



