企业成本核算添加子分录成本分解结构过滤逻辑

This commit is contained in:
xuhaihui 2025-11-25 17:35:17 +08:00
parent 5bfdca9099
commit 549aa0dda2
1 changed files with 40 additions and 12 deletions

View File

@ -5,10 +5,15 @@ import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType; import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
import kd.bos.dataentity.resource.ResManager; import kd.bos.dataentity.resource.ResManager;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.events.BeforeDoOperationEventArgs; import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.form.operate.FormOperate; import kd.bos.form.operate.FormOperate;
import kd.bos.list.ListShowParameter;
import kd.bos.orm.query.QCP; import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter; import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
@ -21,12 +26,15 @@ import java.util.*;
* 企业成本核算表单插件 * 企业成本核算表单插件
* 说明1点击自动取数按钮获取核算余额表 * 说明1点击自动取数按钮获取核算余额表
* 2子分录成本分解结构跟随父分录成本分解结构赋值 * 2子分录成本分解结构跟随父分录成本分解结构赋值
* 3子分录成本分解结构过滤逻辑
* 工序即为成本分解结构 * 工序即为成本分解结构
*/ */
public class EntCostSplitBillPlugin extends AbstractBillPlugIn { public class EntCostSplitBillPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener {
@Override @Override
public void registerListener(EventObject e) { public void registerListener(EventObject e) {
super.registerListener(e); super.registerListener(e);
BasedataEdit cbs = (BasedataEdit) this.getControl("zcgj_cbs");
cbs.addBeforeF7SelectListener(this);
} }
@Override @Override
@ -47,6 +55,28 @@ public class EntCostSplitBillPlugin extends AbstractBillPlugIn {
} }
} }
public void beforeF7Select(BeforeF7SelectEvent arg0) {
String name = arg0.getProperty().getName();
if (StringUtils.equals(name, "zcgj_cbs")) {
//成本核算维度明细-成本分解结构
int row = arg0.getRow();
ListShowParameter parameter = (ListShowParameter) arg0.getFormShowParameter();
arg0.setCancel(true);
DynamicObject project = (DynamicObject) this.getModel().getValue("zcgj_project", row);//成本核算维度明细-成本分解结构
if (project == null) {
this.getView().showMessage(ResManager.loadKDString("请先选择工程项目。", "EntCostSplitEditPlugin_0", "ec-ecco-formplugin", new Object[0]));
arg0.setCancel(true);
return;
}
QFilter qFilter = new QFilter("project", "=", project.getPkValue());
qFilter = qFilter.and(new QFilter("isleaf", "=", true));
parameter.getListFilterParameter().setFilter(qFilter);
parameter.setFormId("bos_listf7");
this.getView().showForm(parameter);
}
}
public void beforeDoOperation(BeforeDoOperationEventArgs args) { public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args); super.beforeDoOperation(args);
FormOperate formOperate = (FormOperate) args.getSource(); FormOperate formOperate = (FormOperate) args.getSource();
@ -172,19 +202,13 @@ public class EntCostSplitBillPlugin extends AbstractBillPlugIn {
} }
} }
// 如果成本项为null则跳过该行
if (costType == null) {
continue;
}
String uniqueKey = ""; String uniqueKey = "";
if (processName != null && !processName.isEmpty()) { if (processName != null && !processName.isEmpty()) {
// 存在工序时按照工序+成本项+二级分类去重 // 存在工序时按照工序+成本项+二级分类去重
uniqueKey = "PROCESS_" + processName + "_" + costType.toString() + "_" + (secType != null ? secType.toString() : ""); uniqueKey = "PROCESS_" + processName + "_" + (costType != null ? costType.toString() : "") + "_" + (secType != null ? secType.toString() : "");
} else { } else {
// 如果没有工序则按照成本项+二级分类去重 // 如果没有工序则按照成本项+二级分类去重
uniqueKey = "NONE_" + costType.toString() + "_" + (secType != null ? secType.toString() : ""); uniqueKey = "NONE_" + (costType != null ? costType.toString() : "") + "_" + (secType != null ? secType.toString() : "");
} }
DynamicObject existingEntry = summaryMap.get(uniqueKey); DynamicObject existingEntry = summaryMap.get(uniqueKey);
@ -270,14 +294,18 @@ public class EntCostSplitBillPlugin extends AbstractBillPlugIn {
Integer sortValue2 = COST_TYPE_SORT_MAP.get(str2); Integer sortValue2 = COST_TYPE_SORT_MAP.get(str2);
if (sortValue1 == null && sortValue2 == null) return 0; if (sortValue1 == null && sortValue2 == null) return 0;
if (sortValue1 == null) return 1; if (sortValue1 == null) return -1;
if (sortValue2 == null) return -1; if (sortValue2 == null) return 1;
return sortValue1.compareTo(sortValue2); return sortValue1.compareTo(sortValue2);
}); });
// 按排序后的顺序添加数据 // 按排序后的顺序添加数据且跳过成本项为空的分录行
for (DynamicObject entry : sortedEntries) { for (DynamicObject entry : sortedEntries) {
Object costtype = entry.get("costtype");
if (costtype == null) {
continue;
}
entryCollection.add(entry); entryCollection.add(entry);
} }