项目上对接的需求,对方系统需要查询NC65的凭证明细,研究了一番,NCC辅助核算关联还是比较复杂的,终于给解决了,贴代码:

查询凭证明细
package nc.impl.baseapp.sum.servicehandler;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import nc.bs.framework.common.NCLocator;
import nc.itf.uap.IUAPQueryBS;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.pub.BusinessException;import com.alibaba.fastjson.JSONObject;/*** 根据业务单据查询凭证* @author dingxm**/
public class QueryVoucherHandler {public Map<String,Object> execute(JSONObject param){Map<String,Object> map = new HashMap<>();String pk_bill = param.getString("pk_bill");//业务单据主键//1、凭证头查询语句StringBuffer sb = new StringBuffer("select a.pk_voucher,c.name orgname,d.name vouchertype,a.year,a.period,a.num,a.prepareddate,").append(" e.user_name prepared,f.user_name casher,g.user_name checker,h.user_name manager").append(" from gl_voucher a inner join fip_relation b on a.pk_voucher = b.des_relationid").append(" left join org_orgs c on a.pk_org = c.pk_org").append(" left join bd_vouchertype d on a.pk_vouchertype = d.pk_vouchertype").append(" left join sm_user e on a.pk_prepared = e.cuserid").append(" left join sm_user f on a.pk_casher = f.cuserid").append(" left join sm_user g on a.pk_checked = g.cuserid").append(" left join sm_user h on a.pk_manager = h.cuserid").append(" where nvl(a.dr,0)=0 and nvl(b.dr,0)=0 and b.src_relationid = '" + pk_bill + "'");List<Map<String,Object>> list = queryList(sb);if(list==null || list.size()==0){map.put("code","100");map.put("msg","查询结果为空");map.put("result", "");return map;}Map<String,Object> resMap = list.get(0);String pk_voucher = resMap.get("pk_voucher").toString();//2、凭证分录查询明细StringBuffer detailSql = new StringBuffer("select a.assid,a.pk_accasoa,a.detailindex,a.explanation,b.dispname,a.debitamount,a.creditamount").append(" from gl_detail a inner join bd_accasoa b on a.pk_accasoa = b.pk_accasoa").append(" where nvl(a.dr,0)=0 and a.pk_voucher='" + pk_voucher + "'").append(" order by a.detailindex asc");List<Map<String,Object>> detailList = queryList(detailSql);//3、查询该凭证分录所有的辅助核算项目及辅助项目对应的数据表IUAPQueryBS query = NCLocator.getInstance().lookup(IUAPQueryBS.class);StringBuffer condition = new StringBuffer();StringBuffer assidCondition = new StringBuffer();for(int i=0;i<detailList.size();i++){Map<String,Object> tmpMap = detailList.get(i);String pk_accasoa = (String) tmpMap.get("pk_accasoa");String assid = (String) tmpMap.get("assid");if(i==0){condition.append("'" + pk_accasoa + "'");assidCondition.append("'" + assid + "'");}else{condition.append(",'" + pk_accasoa + "'");assidCondition.append(",'" + assid + "'");}}Map<String,String> freeTableMap = new HashMap<String,String>();Map<String,String> freeItemMap = new HashMap<String,String>();try {StringBuffer qrySql = new StringBuffer(" select d.defaulttablename,a.pk_entity,c.name from bd_accass a").append(" inner join bd_accasoa b on a.pk_accasoa = b.pk_accasoa").append(" inner join bd_accassitem c on a.pk_entity = c.pk_accassitem").append(" left join md_class d on c.classid = d.id").append(" where nvl(a.dr,0)=0 and nvl(b.dr,0)=0").append(" and b.pk_accasoa in (" + condition + ")");List<Map<String,String>> tmpList = (List<Map<String, String>>) query.executeQuery(qrySql.toString(), new MapListProcessor());for(int i=0;i<tmpList.size();i++){freeTableMap.put(tmpList.get(i).get("pk_entity"), tmpList.get(i).get("defaulttablename"));freeItemMap.put(tmpList.get(i).get("pk_entity"), tmpList.get(i).get("name"));}} catch (BusinessException e) {e.printStackTrace();}//4、查询辅助核算的值Map<String,Map<String,String>> assValueMap = new HashMap<>();try{String assidSql = "select freevalueid,typevalue1,typevalue2,typevalue3,typevalue4,typevalue5,typevalue6,typevalue7,typevalue8,typevalue9 from gl_freevalue where freevalueid in (" + assidCondition + ")";List<Map<String,String>> assidList = (List<Map<String, String>>) query.executeQuery(assidSql, new MapListProcessor());for(int i=0;i<assidList.size();i++){Map<String,String> tmpMap = assidList.get(i);String assid = tmpMap.get("freevalueid");String freevalue1 = tmpMap.get("typevalue1").equals("NN/A")?"":tmpMap.get("typevalue1");String freevalue2 = tmpMap.get("typevalue2").equals("NN/A")?"":tmpMap.get("typevalue2");String freevalue3 = tmpMap.get("typevalue3").equals("NN/A")?"":tmpMap.get("typevalue3");String freevalue4 = tmpMap.get("typevalue4").equals("NN/A")?"":tmpMap.get("typevalue4");String freevalue5 = tmpMap.get("typevalue5").equals("NN/A")?"":tmpMap.get("typevalue5");String freevalue6 = tmpMap.get("typevalue6").equals("NN/A")?"":tmpMap.get("typevalue6");String freevalue7 = tmpMap.get("typevalue7").equals("NN/A")?"":tmpMap.get("typevalue7");String freevalue8 = tmpMap.get("typevalue8").equals("NN/A")?"":tmpMap.get("typevalue8");String freevalue9 = tmpMap.get("typevalue9").equals("NN/A")?"":tmpMap.get("typevalue9");Map<String,String> assitemMap = new HashMap<>();if(!"".equals(freevalue1)){String assItem = freevalue1.substring(0, 20);String pkValue = freevalue1.substring(20);if(!"~".equals(pkValue)){String code = getNameOrCode(freeTableMap.get(assItem),pkValue);assitemMap.put(assItem, code);}}if(!"".equals(freevalue2)){String assItem = freevalue2.substring(0, 20);String pkValue = freevalue2.substring(20);if(!"~".equals(pkValue)){String code = getNameOrCode(freeTableMap.get(assItem),pkValue);assitemMap.put(assItem, code);}}if(!"".equals(freevalue3)){String assItem = freevalue3.substring(0, 20);String pkValue = freevalue3.substring(20);if(!"~".equals(pkValue)){String code = getNameOrCode(freeTableMap.get(assItem),pkValue);assitemMap.put(assItem, code);}}if(!"".equals(freevalue4)){String assItem = freevalue4.substring(0, 20);String pkValue = freevalue4.substring(20);if(!"~".equals(pkValue)){String code = getNameOrCode(freeTableMap.get(assItem),pkValue);assitemMap.put(assItem, code);}}if(!"".equals(freevalue5)){String assItem = freevalue5.substring(0, 20);String pkValue = freevalue5.substring(20);if(!"~".equals(pkValue)){String code = getNameOrCode(freeTableMap.get(assItem),pkValue);assitemMap.put(assItem, code);}}if(!"".equals(freevalue6)){String assItem = freevalue6.substring(0, 20);String pkValue = freevalue6.substring(20);if(!"~".equals(pkValue)){String code = getNameOrCode(freeTableMap.get(assItem),pkValue);assitemMap.put(assItem, code);}}if(!"".equals(freevalue7)){String assItem = freevalue7.substring(0, 20);String pkValue = freevalue7.substring(20);if(!"~".equals(pkValue)){String code = getNameOrCode(freeTableMap.get(assItem),pkValue);assitemMap.put(assItem, code);}}if(!"".equals(freevalue8)){String assItem = freevalue8.substring(0, 20);String pkValue = freevalue8.substring(20);if(!"~".equals(pkValue)){String code = getNameOrCode(freeTableMap.get(assItem),pkValue);assitemMap.put(assItem, code);}}if(!"".equals(freevalue9)){String assItem = freevalue9.substring(0, 20);String pkValue = freevalue9.substring(20);if(!"~".equals(pkValue)){String code = getNameOrCode(freeTableMap.get(assItem),pkValue);assitemMap.put(assItem, code);}}assValueMap.put(assid, assitemMap);}}catch(Exception e){e.printStackTrace();}for(int i=0;i<detailList.size();i++){String assid = (String) detailList.get(i).get("assid");List<Map<String,Object>> freeList = new ArrayList<>();Map<String,String> assValue = assValueMap.get(assid);if(assValue==null){continue;}for(String key:assValue.keySet()){String name = freeItemMap.get(key);String value = assValue.get(key);Map<String,Object> freemap = new HashMap<>();freemap.put("checktype", name);freemap.put("checkvalue", value);freeList.add(freemap);}           detailList.get(i).put("assid", freeList);}resMap.put("detail", detailList);return resMap;}/*** 查询辅助核算值* @param tableName* @param pkValue* @return*/public String getNameOrCode(String tableName,String pkValue){IUAPQueryBS query = NCLocator.getInstance().lookup(IUAPQueryBS.class);String valueField = "code";String pkField = "";if("bd_project".equals(tableName)){valueField = "project_code";pkField = "pk_project";}else if("org_dept".equals(tableName)){valueField = "code";pkField = "pk_dept";}else if("bd_defdoc".equals(tableName)){valueField = "code";pkField = "pk_defdoc";}else if("bd_customer".equals(tableName)){valueField = "code";pkField = "pk_customer";}else if("bd_psndoc".equals(tableName)){valueField = "code";pkField = "pk_psndoc";}else if("bd_bankdoc".equals(tableName)){valueField = "accnum";pkField = "pk_bankdoc";}else if("bd_cust_supplier".equals(tableName)){valueField = "code";pkField = "pk_cust_sup";}else if("bd_cashflow".equals(tableName)){valueField = "code";pkField = "pk_cashflow";}else if("bd_bankaccsub".equals(tableName)){valueField = "code";pkField = "pk_bankaccsub";}else if("bd_supplier".equals(tableName)){valueField = "code";pkField = "pk_supplier";}String querySql = "select " + valueField + " from " + tableName + " where " + pkField + "='" + pkValue + "'";try {String value = (String) query.executeQuery(querySql, new ColumnProcessor());return value;} catch (BusinessException e) {return "";}}public List<Map<String, Object>> queryList(StringBuffer sql) {IUAPQueryBS query = NCLocator.getInstance().lookup(IUAPQueryBS.class);List<Map<String, Object>> list = null;try {list = (List<Map<String, Object>>) query.executeQuery(sql.toString(), new MapListProcessor());} catch (BusinessException e) {e.printStackTrace();}return list;}
}

用友NC65查询凭证明细方法相关推荐

  1. 用友U8审核凭证出现列前缀tempdb无效未指定表名的对话框的解决方法

    用友U8审核凭证出现列前缀tempdb无效未指定表名,U8出现这个问题,是因为你的计算机名出现非法符号,如"-"等,这时就会出现上述问题.更改计算机名的方法,去掉"-&q ...

  2. EBS查询凭证行明细SQL

    EBS查询凭证行明细SQL select l.* from gl_je_headers t, gl_je_lines l where t.external_reference = '101032016 ...

  3. nc65 表空间 linux,用友nc65测试报告.doc

    用友nc65测试报告 用友nc6.5测试报告 篇一:用友NC5[1].x万人测试报告 测试场景简述 本次模拟测试的模块涵盖了大部分常用的功能点,并且包含了部分月末的场景点(记账,结账,薪资计算等),以 ...

  4. 用友nc65 uap开发找产品功能源代码

    用友nc65  uap开发找产品功能源代码 1.目标:在我们开发中,很多时候我们看到产品有的功能二开的时候需要使用相关功能,这个时候怎么去参考产品相关功能源代码呢?如我们需要收款结算录入节点的联查凭证 ...

  5. 【U8】存货核算查询凭证条件界面,会计年度看不到当前的年度。

    [问题现象] 用友U8+,在[存货核算]–[查询凭证]功能下, 查询条件中[会计年度]选择不到当前年度. 例如: 21年总账已经开账结转了.并且存货核算1月份已经制单. 在存货核算–查询凭证 的会计年 ...

  6. 用友nc65 uap开发参照多选三种显示情况总结

    用友nc65 uap开发参照多选三种显示情况总结 总结参照多选后显示在面板上的3中情况. 注意点:1参照属性面板不能存放数组类型, 2.参照字段由元数据产生,可能不能显示出来,此时需要到单据模版初始化 ...

  7. 旺店通·企业奇门对接打通用友BIP查询销售出库单接口与销售订单单个保存接口

    旺店通·企业奇门对接打通用友BIP查询销售出库单接口与销售订单单个保存接口 源系统:旺店通·企业奇门 慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS.SaaS模式,以一体化智能零售 ...

  8. 用友服务器恢复不显示账套,恢复用友账套数据的方法

    恢复用友账套数据的方法 很多会计朋友不懂得如何恢复用友账套数据,yjbys小编下面为你整理了关于恢复用友账套数据的方法,希望对你有所帮助. 一. 既有数据库文件,也有账套备份 1.如果有整个账套备份, ...

  9. 苹果手机官网查询正品的方法!(辨别真伪)

    案例:如何查询苹果手机是否正品和新机? [友友们,从某鱼入手的iPhone手机,怎么查是不是真的?] 苹果公司一直致力于打造高品质的产品,因此其产品价格也相对较高.然而,在市场上也存在着各种仿冒的苹果 ...

最新文章

  1. 通信信号处理中为什么要分为I、Q两路
  2. 用WPF做了几个小游戏
  3. 一个jeecg整合activiti的学习例子,源码下载
  4. java工厂到接口_Java基础——接口简单工厂
  5. java通达信_通达信公式转换JAVA
  6. EditText属性详情
  7. [RK3288][Android7.1]调试笔记 --- 内置高版本的APK编译User版本出错解决
  8. php502 html正常访问,php-fpm 正常启动,nginx也正常启动,但是为什么访问PHP是502
  9. git restore 和 git restore --staged 的区别
  10. 为什么要有Git暂存区
  11. 数学之美——信息的度量
  12. NSGA-II改进之种群初始化
  13. simulink中MUX
  14. 内网渗透之跨路由访问
  15. ElementUI表单校验rules封装
  16. 用计算机写作文主题,用计算机写作文》——学习智能ABC输入法
  17. 均值滤波计算_均值滤波器
  18. 软件优化(速度问题)
  19. 【可爱动物壁纸☆U☆好盟好天真哦】
  20. 7-1 时间换算(15分)

热门文章

  1. 软件测试能干多久?测试员能干到多大年龄?
  2. Windows系统下Qt代码的QMake和CMake简单说明
  3. UTF8 中文占几个字节
  4. 工控系统设计(八)组态功能开发
  5. 什么是 jQuery?
  6. 靠java_基础不牢靠,何以争朝夕?Java基础面试82道详细解析!(一)
  7. JAVAweb连接不上数据库原因及解决办法
  8. 使用Spring 定时器 + selenium打卡
  9. 服务器丢包的原因及解决方法
  10. 视觉SLAM十四讲CH10代码解析及课后习题详解