1.支出财务确认单生成发票

This commit is contained in:
zhangzhiguo 2025-11-07 16:26:56 +08:00
parent 3aafce3628
commit 80e310deea
3 changed files with 173 additions and 77 deletions

View File

@ -118,7 +118,7 @@ public class OutContractFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i
} }
filter1.and(new QFilter("zcgj_isbind", "=", false)); filter1.and(new QFilter("zcgj_isbind", "=", false));
ListShowParameter param = ShowFormHelper.createShowListForm("ec_in_invoice_f7", true); ListShowParameter param = ShowFormHelper.createShowListForm("ec_in_invoice_f7", true);
// param.getListFilterParameter().setFilter(filter.or(filter1)); param.getListFilterParameter().setFilter(filter.or(filter1));
param.setMultiSelect(true); param.setMultiSelect(true);
param.setCloseCallBack(new CloseCallBack(this, entryType)); param.setCloseCallBack(new CloseCallBack(this, entryType));
param.getOpenStyle().setShowType(ShowType.Modal); param.getOpenStyle().setShowType(ShowType.Modal);
@ -351,26 +351,6 @@ public class OutContractFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i
public void bindInvoice(List<DynamicObject> invArr,String status){ public void bindInvoice(List<DynamicObject> invArr,String status){
Object pkValue = this.getModel().getDataEntity(true).getPkValue(); Object pkValue = this.getModel().getDataEntity(true).getPkValue();
log.info("OutContractFinaceConfirmeInvoicePlugin:发票绑定-"+pkValue); log.info("OutContractFinaceConfirmeInvoicePlugin:发票绑定-"+pkValue);
/*for (DynamicObject invoiceData : invArr) {
}
Object billno = this.getModel().getValue("billno");
String par = "{" +
" \"messageType\": \"billSave\"," +
" \"messageId\": \"202511051701\"," +
" \"data\": {\n" +
" \"billId\": "+pkValue+"," +
" \"billNo\": "+billno+"," +
" \"billType\": \"zcgj_ec_out_finaceconfirm\"," +
" \"status\": \"60\"," +
" \"resource\": \"4\"," +
" \"invoiceData\": [" +
" {" +
" \"serialNo\": "+invArr.get(0).getString("serialno") +
" }" +
" ]" +
" }" +
"}";*/
StringBuilder invoiceDataBuilder = new StringBuilder("["); StringBuilder invoiceDataBuilder = new StringBuilder("[");
for (int i = 0; i < invArr.size(); i++) { for (int i = 0; i < invArr.size(); i++) {
DynamicObject invoiceData = invArr.get(i); DynamicObject invoiceData = invArr.get(i);
@ -398,7 +378,6 @@ public class OutContractFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i
+ "\"invoiceData\": " + invoiceDataBuilder + "\"invoiceData\": " + invoiceDataBuilder
+ "}" + "}"
+ "}"; + "}";
Gson gson = new Gson(); Gson gson = new Gson();
//String json = gson.toJson(balanceQueryParamApi); //String json = gson.toJson(balanceQueryParamApi);
Map<String, Object> params = gson.fromJson(par, Map<String, Object> params = gson.fromJson(par,
@ -407,47 +386,6 @@ public class OutContractFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i
OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/rim/message/service", params); OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/rim/message/service", params);
log.info("OutContractFinaceConfirmeInvoicePlugin:发票绑定-"+balanceData.getMessage()); log.info("OutContractFinaceConfirmeInvoicePlugin:发票绑定-"+balanceData.getMessage());
System.out.println(); System.out.println();
//当前单据id
/*Object pkValue = this.getModel().getDataEntity(true).getPkValue();
log.info("OutContractFinaceConfirmeInvoicePlugin:发票绑定-"+pkValue);
Object billno = this.getModel().getValue("billno");
for (DynamicObject invoiceData : invArr) {
DynamicObject bindData = BusinessDataServiceHelper.newDynamicObject("rim_expense_relation");
bindData.set("resource","4");//报销单来源
bindData.set("view_page","zcgj_ec_out_finaceconfirm");//详情页面
bindData.set("entityid","zcgj_ec_out_finaceconfirm");//报销单实体id
bindData.set("expense_id",pkValue);//报销单id
bindData.set("expense_num",billno);//报销单编号
log.info("OutContractFinaceConfirmeInvoicePlugin:发票绑定- billno-"+billno);
bindData.set("serial_no",invoiceData.getString("serialno"));//发票流水号
log.info("OutContractFinaceConfirmeInvoicePlugin:发票绑定- serialno-"+invoiceData.getString("serialno"));
if(invoiceData.getBoolean("candeduct")){
bindData.set("deduction_flag",1);//是否可抵扣
bindData.set("effective_tax_amount",invoiceData.getBigDecimal("totaltax"));//可抵扣税额-税额
}else{
bindData.set("deduction_flag",0);
}
bindData.set("deduction_amount",invoiceData.getBigDecimal("totaltax"));//入账税额-税额
bindData.set("expense_amount",invoiceData.getBigDecimal("totaloftaxamount"));//报销金额-价税合计
bindData.set("status","60");//报销单状态
bindData.set("output_amount",invoiceData.getBigDecimal("totaltax"));//转出金额-税额
bindData.set("use_type",1);//使用类型
bindData.set("billtaxamount",invoiceData.getBigDecimal("totaltax"));//本次报账税额
SaveServiceHelper.saveOperate("rim_expense_relation", new DynamicObject[]{bindData}, null);//支出合同实体
}*/
}
public void deleteInvoiceBind(DynamicObject[] invArr){
/*Long pkValue = (Long)this.getModel().getDataEntity(true).getPkValue();
for (DynamicObject invData : invArr) {
String serialno = invData.getString("serialno");
QFilter idFilter = new QFilter("expense_id", QCP.equals,pkValue);
QFilter serialnoFilter = new QFilter("serial_no", QCP.equals,serialno);
//DynamicObject[] loadInvoiceData = BusinessDataServiceHelper.load("rim_expense_relation", "serial_no", new QFilter[]{idFilter,serialnoFilter});
DeleteServiceHelper.delete("rim_expense_relation", new QFilter[]{idFilter.and(serialnoFilter)});
}*/
} }
} }

View File

@ -1,7 +1,13 @@
package zcgj.zcdev.zcdev.pr.plugin.form; package zcgj.zcdev.zcdev.pr.plugin.form;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.db.DB; import kd.bos.db.DB;
import kd.bos.db.DBRoute; import kd.bos.db.DBRoute;
import kd.bos.db.tx.TX;
import kd.bos.db.tx.TXHandle;
import kd.bos.entity.EntityMetadataCache; import kd.bos.entity.EntityMetadataCache;
import kd.bos.entity.MainEntityType; import kd.bos.entity.MainEntityType;
import kd.bos.ext.fi.ai.AbstractDapWriteBackImpl; import kd.bos.ext.fi.ai.AbstractDapWriteBackImpl;
@ -9,11 +15,16 @@ import kd.bos.ext.fi.ai.Voucher;
import kd.bos.ext.fi.ai.VoucherOperation; import kd.bos.ext.fi.ai.VoucherOperation;
import kd.bos.logging.Log; import kd.bos.logging.Log;
import kd.bos.logging.LogFactory; import kd.bos.logging.LogFactory;
import kd.bos.openapi.common.result.OpenApiResult;
import kd.bos.openapi.common.util.OpenApiSdkUtil;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import java.util.ArrayList; import java.time.LocalDate;
import java.util.List; import java.time.ZoneId;
import java.util.Map; import java.time.format.DateTimeFormatter;
import java.util.Set; import java.util.*;
/** /**
* 支出合同财务确认凭证反写插件 * 支出合同财务确认凭证反写插件
@ -54,7 +65,7 @@ public class OutContractFinaceConfirmeVoucherPlugin extends AbstractDapWriteBack
@Override @Override
public void writeBack(VoucherOperation operation, String billEntityNumber, Map<Long, Voucher> billToVch) { public void writeBack(VoucherOperation operation, String billEntityNumber, Map<Long, Voucher> billToVch) {
MainEntityType mt = EntityMetadataCache.getDataEntityType(billEntityNumber); MainEntityType mt = EntityMetadataCache.getDataEntityType(billEntityNumber);
Set<Long> keySet = billToVch.keySet(); Set<Long> keySet = billToVch.keySet();//业务单据id set集合
log.info("AbstractDapWriteBackImpl#keySet:" + keySet); log.info("AbstractDapWriteBackImpl#keySet:" + keySet);
if (VoucherOperation.Create.equals(operation)) { if (VoucherOperation.Create.equals(operation)) {
log.info("AbstractDapWriteBackImpl#开始执行生成凭证反写:" + operation); log.info("AbstractDapWriteBackImpl#开始执行生成凭证反写:" + operation);
@ -64,6 +75,7 @@ public class OutContractFinaceConfirmeVoucherPlugin extends AbstractDapWriteBack
log.info("AbstractDapWriteBackImpl#生成凭证的单据ID" + me); log.info("AbstractDapWriteBackImpl#生成凭证的单据ID" + me);
Voucher voucher=billToVch.get(me);//凭证 Voucher voucher=billToVch.get(me);//凭证
String voucherNo = voucher.getVoucherNo(); String voucherNo = voucher.getVoucherNo();
long voucherId = voucher.getId();
//这里处理的是一个单据只有一个凭证的时候如果是多个凭证可以先获取已经生成的凭证号再拼接上字符串 //这里处理的是一个单据只有一个凭证的时候如果是多个凭证可以先获取已经生成的凭证号再拼接上字符串
Object[] param = new Object[] { vchStatusField,voucherNo, me };// Object[] param = new Object[] { vchStatusField,voucherNo, me };//
params.add(param); params.add(param);
@ -76,6 +88,9 @@ public class OutContractFinaceConfirmeVoucherPlugin extends AbstractDapWriteBack
log.info("AbstractDapWriteBackImpl#结束执行生成凭证反写SQL"); log.info("AbstractDapWriteBackImpl#结束执行生成凭证反写SQL");
params.clear(); params.clear();
} }
//反写凭证号到发票全票池
updateInvoice(me,voucher,operation);
} }
log.info("AbstractDapWriteBackImpl#最后#开始执行生成凭证反写SQL"); log.info("AbstractDapWriteBackImpl#最后#开始执行生成凭证反写SQL");
log.info("AbstractDapWriteBackImpl#最后#mt.getAlias()" + mt.getAlias()); log.info("AbstractDapWriteBackImpl#最后#mt.getAlias()" + mt.getAlias());
@ -103,6 +118,9 @@ public class OutContractFinaceConfirmeVoucherPlugin extends AbstractDapWriteBack
params.clear(); params.clear();
log.info("AbstractDapWriteBackImpl#结束执行删除凭证反写SQL"); log.info("AbstractDapWriteBackImpl#结束执行删除凭证反写SQL");
} }
Voucher voucher=billToVch.get(me);//凭证
updateInvoice(me,voucher,operation);
} }
log.info("AbstractDapWriteBackImpl#最后#开始执行删除凭证反写SQL"); log.info("AbstractDapWriteBackImpl#最后#开始执行删除凭证反写SQL");
log.info("AbstractDapWriteBackImpl#最后#mt.getAlias()" + mt.getAlias()); log.info("AbstractDapWriteBackImpl#最后#mt.getAlias()" + mt.getAlias());
@ -132,6 +150,7 @@ public class OutContractFinaceConfirmeVoucherPlugin extends AbstractDapWriteBack
log.info("AbstractDapWriteBackImpl#结束执行提交凭证反写SQL"); log.info("AbstractDapWriteBackImpl#结束执行提交凭证反写SQL");
params.clear(); params.clear();
} }
updateInvoice(me,voucher,operation);
} }
log.info("AbstractDapWriteBackImpl#最后#开始执行提交凭证反写SQL"); log.info("AbstractDapWriteBackImpl#最后#开始执行提交凭证反写SQL");
log.info("AbstractDapWriteBackImpl#最后#mt.getAlias()" + mt.getAlias()); log.info("AbstractDapWriteBackImpl#最后#mt.getAlias()" + mt.getAlias());
@ -144,4 +163,112 @@ public class OutContractFinaceConfirmeVoucherPlugin extends AbstractDapWriteBack
} }
} }
/**
* 反写凭证号到发票全票池
* @param billId 业务单据id
* @param voucher 生成的凭证
* @param operation 操作
*/
public void updateInvoice(Long billId, Voucher voucher,VoucherOperation operation){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String voucherNo = voucher.getVoucherNo();
long voucherId = voucher.getId();
DynamicObject outFinaceconfirm = BusinessDataServiceHelper.loadSingle("zcgj_ec_out_finaceconfirm", "id,unitprice,zcgj_entryentity,zcgj_entryentity.zcgj_invoice",
new QFilter[]{new QFilter("id","=",billId)});
DynamicObjectCollection invoiceentryentity = outFinaceconfirm.getDynamicObjectCollection("zcgj_entryentity");
List<String> serialnoList = new ArrayList<>();
if(invoiceentryentity != null){
for (DynamicObject dynamicObject : invoiceentryentity) {
DynamicObject zcgjInvoice = dynamicObject.getDynamicObject("zcgj_invoice");
if(zcgjInvoice != null){
Long invoiceId = zcgjInvoice.getLong("id");
DynamicObject inInvoice = BusinessDataServiceHelper.loadSingle("ec_in_invoice", "id,serialno",
new QFilter[]{new QFilter("id","=",invoiceId)});
if(inInvoice != null){
serialnoList.add(inInvoice.getString("serialno"));
}
}
}
}
//vouch_no 凭证号
if(!serialnoList.isEmpty()){
DynamicObject voucherData = QueryServiceHelper.queryOne("gl_voucher", "id,bookeddate,bizdate",
new QFilter[]{new QFilter("id", "=", voucherId)});
try (TXHandle tx = TX.requiresNew("updateInvoice")) {
try{
StringBuilder invoiceDataBuilder = new StringBuilder("[");
for (int i = 0; i < serialnoList.size(); i++) {
String serialNo = serialnoList.get(i);;
invoiceDataBuilder.append(" \"").append(serialNo).append("\"");
if (i < serialnoList.size() - 1) {
invoiceDataBuilder.append(",");
}
}
invoiceDataBuilder.append("],");
log.info("OutContractFinaceConfirmeVoucherPlugin:反写发票池-"+billId);
if(voucherData != null){
String par = "";
if(VoucherOperation.Submit.equals(operation) || VoucherOperation.Create.equals(operation)){
par = "{" +
" \"messageType\": \"voucherSave\"," +
" \"messageId\": \""+System.currentTimeMillis()+"\"," +
" \"data\": {" +
" \"vouchId\": \""+voucherId+"\"," +
" \"vouchNo\": \""+voucherNo+"\"," +
" \"accountDate\": \""+dateToLocalDate(voucherData.getDate("bookeddate")).format(formatter)+"\"," +
" \"accountTime\": \""+dateToLocalDate(voucherData.getDate("bookeddate")).format(formatter)+"\"," +
" \"businessDate\": \""+dateToLocalDate(voucherData.getDate("bizdate")).format(formatter)+"\"," +
" \"resource\": \""+voucherId+"4\"," +
" \"serialNoArray\": " +invoiceDataBuilder+
" \"expenseIdArray\": [\""+billId+"\"]" +
" }" +
"}";
}
log.info("OutContractFinaceConfirmeVoucherPlugin:反写发票池-par"+par);
Gson gson = new Gson();
Map<String, Object> params1 = gson.fromJson(par,
new TypeToken<Map<String, Object>>() {
}.getType());
OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/rim/message/service", params1);
log.info("OutContractFinaceConfirmeVoucherPlugin:反写发票池-"+balanceData.getMessage());
}else{
String par = "";
if(VoucherOperation.Delete.equals(operation)){
par = "{" +
" \"messageType\": \"voucherDel\"," +
" \"messageId\": \""+System.currentTimeMillis()+"\"," +
" \"data\": {" +
" \"vouchId\": \""+voucherId+"\"," +
" \"resource\": \""+voucherId+"4\"" +
" }" +
"}";
log.info("OutContractFinaceConfirmeVoucherPlugin:反写发票池-删除-par"+par);
Gson gson = new Gson();
Map<String, Object> params1 = gson.fromJson(par,
new TypeToken<Map<String, Object>>() {
}.getType());
OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/rim/message/service", params1);
log.info("OutContractFinaceConfirmeVoucherPlugin:反写发票池-删除-"+balanceData.getMessage());
}
}
}catch (Exception ee){
tx.markRollback();
}
}
}
}
public static LocalDate dateToLocalDate(Date date) {
if (date == null) {
throw new IllegalArgumentException("日期不能为 null");
}
return date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
}
} }

View File

@ -1,9 +1,13 @@
package zcgj.zcdev.zcdev.pr.plugin.operate; package zcgj.zcdev.zcdev.pr.plugin.operate;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.entity.LocaleString; import kd.bos.dataentity.entity.LocaleString;
import kd.bos.db.tx.TX;
import kd.bos.db.tx.TXHandle;
import kd.bos.entity.operate.OperateOptionConst; import kd.bos.entity.operate.OperateOptionConst;
import kd.bos.entity.operate.result.OperationResult; import kd.bos.entity.operate.result.OperationResult;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
@ -15,6 +19,8 @@ import kd.bos.message.api.MessageChannels;
import kd.bos.metadata.dao.MetaCategory; import kd.bos.metadata.dao.MetaCategory;
import kd.bos.metadata.dao.MetadataDao; import kd.bos.metadata.dao.MetadataDao;
import kd.bos.metadata.form.FormMetadata; import kd.bos.metadata.form.FormMetadata;
import kd.bos.openapi.common.result.OpenApiResult;
import kd.bos.openapi.common.util.OpenApiSdkUtil;
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;
@ -26,6 +32,7 @@ import kd.bos.workflow.engine.msg.info.MessageInfo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 支出财务确认单删除时删除发票绑定关系 * 支出财务确认单删除时删除发票绑定关系
@ -36,6 +43,7 @@ public class OutFinaceconfirmDelInvoiceBindOp extends AbstractOperationServicePl
//OperationResult result = OperationServiceHelper.executeOperate("submit", "ec_out_contract_settle", new DynamicObject[]{outContractSettle}, option); //OperationResult result = OperationServiceHelper.executeOperate("submit", "ec_out_contract_settle", new DynamicObject[]{outContractSettle}, option);
// //
public void onPreparePropertys(PreparePropertysEventArgs e) { public void onPreparePropertys(PreparePropertysEventArgs e) {
e.getFieldKeys().add("billno"); //支出财务确认单编号
e.getFieldKeys().add("zcgj_ec_out_contractid"); //支出结算单id e.getFieldKeys().add("zcgj_ec_out_contractid"); //支出结算单id
e.getFieldKeys().add("zcgj_entryentity"); //发票分录 e.getFieldKeys().add("zcgj_entryentity"); //发票分录
e.getFieldKeys().add("zcgj_entryentity.zcgj_invoice"); //发票 e.getFieldKeys().add("zcgj_entryentity.zcgj_invoice"); //发票
@ -59,6 +67,7 @@ public class OutFinaceconfirmDelInvoiceBindOp extends AbstractOperationServicePl
public void deleteInvoiceBind(DynamicObject[] dataEntities){ public void deleteInvoiceBind(DynamicObject[] dataEntities){
for (DynamicObject dataEntity : dataEntities) { for (DynamicObject dataEntity : dataEntities) {
long pkValue = dataEntity.getLong("id");//支出合同确认单id long pkValue = dataEntity.getLong("id");//支出合同确认单id
String billno = dataEntity.getString("billno");//支出合同确认单id
List<Long> delInvoiceIds = new ArrayList<>(); List<Long> delInvoiceIds = new ArrayList<>();
DynamicObjectCollection invoiceCollection = dataEntity.getDynamicObjectCollection("zcgj_entryentity"); DynamicObjectCollection invoiceCollection = dataEntity.getDynamicObjectCollection("zcgj_entryentity");
@ -68,28 +77,50 @@ public class OutFinaceconfirmDelInvoiceBindOp extends AbstractOperationServicePl
delInvoiceIds.add( zcgjInvoice.getLong("id")); delInvoiceIds.add( zcgjInvoice.getLong("id"));
} }
} }
// StringBuilder invoiceDataBuilder = new StringBuilder("[");
DynamicObject[] invoices = BusinessDataServiceHelper.load("ec_in_invoice", "isinvoiceclaim,isclaimed,contract,project,connecttype,serialno,zcgj_isbind", DynamicObject[] invoices = BusinessDataServiceHelper.load("ec_in_invoice", "isinvoiceclaim,isclaimed,contract,project,connecttype,serialno,zcgj_isbind",
new QFilter[]{new QFilter("id", "in", delInvoiceIds)}); new QFilter[]{new QFilter("id", "in", delInvoiceIds)});
List<String> invoiceserialno = new ArrayList<>(); //for (DynamicObject invData : invoices) {
for (DynamicObject invData : invoices) { for (int i = 0; i < invoices.length; i++) {
DynamicObject invData = invoices[i];
invData.set("isclaimed", false); invData.set("isclaimed", false);
invData.set("contract", (Object)null); invData.set("contract", (Object)null);
invData.set("project", (Object)null); invData.set("project", (Object)null);
invData.set("connecttype", "null"); invData.set("connecttype", "null");
invData.set("zcgj_isbind", false); invData.set("zcgj_isbind", false);
String serialno = invData.getString("serialno");
invoiceserialno.add(serialno);
} }
if(!delInvoiceIds.isEmpty()){ if(!delInvoiceIds.isEmpty()){
SaveServiceHelper.save(invoices); //
SaveServiceHelper.save(invoices);
try (TXHandle tx = TX.requiresNew("clearInvoice")) {
try{
log.info("OutContractFinaceConfirmeInvoicePlugin:单据删除-"+pkValue);
String par ="{\n" +
" \"messageType\": \"billDel\"," +
" \"messageId\": \""+System.currentTimeMillis()+"\"," +
" \"data\": {" +
" \"billId\": \"" + pkValue + "\"," +
" \"resource\": \"4\"" +
" }" +
"}";
Gson gson = new Gson();
//String json = gson.toJson(balanceQueryParamApi);
Map<String, Object> params = gson.fromJson(par,
new TypeToken<Map<String, Object>>() {
}.getType());
OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/rim/message/service", params);
log.info("OutContractFinaceConfirmeInvoicePlugin:单据删除-"+balanceData.getMessage());
System.out.println();
}catch (Exception ee){
tx.markRollback();
}
}
} }
QFilter idFilter = new QFilter("expense_id", QCP.equals,pkValue);
QFilter serialnoFilter = new QFilter("serial_no", QCP.in,invoiceserialno);
//DynamicObject[] loadInvoiceData = BusinessDataServiceHelper.load("rim_expense_relation", "serial_no", new QFilter[]{idFilter,serialnoFilter});
DeleteServiceHelper.delete("rim_expense_relation", new QFilter[]{idFilter.and(serialnoFilter)});
} }
} }