UDN-企业互联网技术人气社区

板块导航

浏览  : 904
回复  : 45

[答疑专区] #报表穿透单据#自由报表预置根据查询得数据穿透到单据

[复制链接]
南柯一梦点的头像 楼主
发表于 2017-7-12 10:56:55 | 显示全部楼层 |阅读模式
NC633通过语义模型、自由报表预置做的报表,能做到穿透对应单据吗?

南柯一梦点的头像 楼主
发表于 2017-7-18 10:49:23 | 显示全部楼层
已解决,通过代码编写完成报表,再调用穿透功能!
使用道具 举报

回复

发表于 2017-8-24 09:59:41 | 显示全部楼层
南柯一梦点 发表于 2017-7-18 10:49
已解决,通过代码编写完成报表,再调用穿透功能!

能分享一下吗
点评 ( 1 ) 收起 / 展开点评

南柯一梦点 2017年12月21日 09:31 详情 回复

还需要吗?

使用道具 举报

回复

南柯一梦点的头像 楼主
发表于 2017-12-21 09:31:03 | 显示全部楼层

还需要吗?
使用道具 举报

回复

发表于 2017-12-23 01:38:01 | 显示全部楼层

分享一波吧
点评 ( 1 ) 收起 / 展开点评

南柯一梦点 2017年12月25日 09:54 详情 回复

初始化一个界面,还需要配置这个节点的查询模板、报表模板,最后把之间关联起来

使用道具 举报

回复

南柯一梦点的头像 楼主
发表于 2017-12-25 09:52:59 | 显示全部楼层
  1. /**
  2. *
  3. */
  4. package nc.ui.report;

  5. import java.util.ArrayList;

  6. import javax.swing.table.TableColumnModel;

  7. import nc.bs.framework.common.NCLocator;
  8. import nc.bs.logging.Logger;
  9. import nc.itf.uap.iuapQueryBS;
  10. import nc.jdbc.framework.processor.BeanListProcessor;
  11. import nc.md.model.MetaDataException;
  12. import nc.md.persist.framework.MDPersistenceService;
  13. import nc.ui.fdcpm.report.h9065.ReportCtroller;
  14. import nc.ui.pub.ButtonObject;
  15. import nc.ui.pub.ClientEnvironment;
  16. import nc.ui.pub.beans.MessageDialog;
  17. import nc.ui.pub.bill.BillItem;
  18. import nc.ui.pub.link.BillLinkOneNodeCenter;
  19. import nc.ui.pubapp.uif2app.query2.IQueryConditionDLGInitializer;
  20. import nc.ui.pubapp.uif2app.query2.QueryConditionDLGDelegator;
  21. import nc.ui.trade.report.controller.IReportCtl;
  22. import nc.vo.cmp.bill.RecBillAggVO;
  23. import nc.vo.fdcpm.dynamiccost.SplitKeyReportVO;
  24. import nc.vo.pub.BusinessException;
  25. import nc.vo.pub.CircularlyAccessibleValueObject;
  26. import nc.vo.pub.query.ConditionVO;
  27. import nc.vo.querytemplate.TemplateInfo;
  28. /**
  29. * 创建人 wk
  30. * 时间 :2017-07-12 17:18:29
  31. * 功能:一键拆分报表
  32. */
  33. @SuppressWarnings("serial")
  34. public class SplitKeyReportUI extends nc.ui.trade.report.detail.DetailReportBaseEx implements IQueryConditionDLGInitializer {
  35.         private ArrayList<BillItem> bodyitemList = new ArrayList<BillItem>();
  36.         public BillItem[] items1 = null;//源模板字段
  37.         private QueryConditionDLGDelegator queryDlg = null;
  38.         private String pk_project = "";
  39.         private String pk_org = "";
  40.         @Override
  41.         public String getModuleCode() {
  42.                 return "H103109099";
  43.         }
  44.        
  45.         @Override
  46.         public IReportCtl getUIControl() {
  47.                 return new ReportCtroller("H103109099");
  48.         }
  49.        
  50.         public SplitKeyReportUI() {
  51.                 initReportUI();
  52.         }
  53.         /**
  54.          * 描述:
  55.          * 修改/创建人 wk
  56.          * 时间:2017-5-17下午8:59:47
  57.          * 返回值:void
  58.          * @param billform
  59.          */
  60.         private void initReportUI() {
  61.                 getReportBase().setShowNO(true);//显示行号
  62.                 getReportBase().setShowMenuBar(true);
  63.                 getReportBase().getBillTable().setSortEnabled(false);
  64.                 getReportBase().getBodyPanel().removeTableSortListener();//zlh add 2016-11-9 17:33:51 去除鼠标排序事件
  65.                 startHeadBody();
  66.                 initButton(true);// 初始化按钮
  67.                 getReportBase().getBodyPanel().updateUI();
  68.         }

  69.         /**
  70.          * 描述:
  71.          * 修改/创建人 wk
  72.          * 时间:2017-5-17下午8:59:47
  73.          * 返回值:void
  74.          * @param billform
  75.          */
  76.         private void startHeadBody() {
  77.                 bodyitemList.clear();//重新加载表头
  78.                
  79.                 if(null == items1 )
  80.                         items1 = getReportBase().getBillModel().getBodyItems();
  81.                 getReportBase().getBillModel().setBodyItems(items1);
  82.                 getReportBase().getBodyPanel().setTableModel(getReportBase().getBillModel());
  83.                 getReportBase().getBillData().setBillModel(getReportBase().getBillModel());
  84.                 getReportBase().getBillData().setBodyItems(getReportBase().getBillModel().getBodyItems());
  85.                
  86.                 TableColumnModel model = getReportBase().getBodyPanel().getTable().getColumnModel();
  87.                 String[] items = new String[]{"project_code","project_name","vtrantypecode","billcode","billname","fstatusflag","user_name"};
  88.                 for(int i=0;i<items.length;i++){
  89.                         int width = getReportBase().getBodyColByKey(items[i]);
  90.                         model.getColumn(width).setPreferredWidth(200);
  91.                 }
  92.                 getReportBase().getBillTable().setSortEnabled(false);
  93.                 getReportBase().getBodyPanel().removeTableSortListener();
  94.         }
  95.        
  96.        
  97.         public QueryConditionDLGDelegator getQueryDlg() {
  98.                 if (this.queryDlg == null) {
  99.                         TemplateInfo tempinfo = new TemplateInfo();
  100.                         tempinfo.setPk_Org(ClientEnvironment.getInstance().getGroupId());
  101.                         tempinfo.setFunNode(getUIControl()._getModuleCode());
  102.                         tempinfo.setUserid(getUIControl()._getOperator());
  103.                         tempinfo.setNodekey(null);
  104.                         this.queryDlg = new QueryConditionDLGDelegator(this, tempinfo);
  105.                 }
  106.                 initQueryConditionDLG(queryDlg);
  107.                 return this.queryDlg;
  108.         }

  109.         @Override
  110.         public void initQueryConditionDLG(QueryConditionDLGDelegator queryconditiondlgdelegator) {
  111.                 ContractPlanQueryCondition qc = null;// 使用【目合约规划明细表】查询面板的查询联动类
  112.                 if (qc == null)
  113.                         qc = new ContractPlanQueryCondition();
  114.                 qc.initQueryConditionDLG(queryconditiondlgdelegator);
  115.         }
  116.        
  117.         @Override
  118.         protected void onQuery() throws Exception {
  119.                 if(getQueryDlg().showModal() == 1 ){
  120.                         final ConditionVO[] conditionVOs = getQueryDlg().getQueryConditionDLG().getQryCondEditor().getGeneralCondtionVOs();
  121.                         final SplitKeyReportUI splitKeyUI = this;
  122.                         loadBodyData(conditionVOs);
  123.                         startHeadBody();
  124.                 }
  125.         }
  126.         private ButtonObject m_linkBill = new ButtonObject("穿透单据", "穿透单据", 1, "穿透单据");
  127.        
  128.         private void initButton(boolean b){
  129.                 ButtonObject[] objects = getSysButtons();
  130.                 ButtonObject[] objTemp = new ButtonObject[2];
  131.                 objTemp[0] = objects[0];
  132.                 ButtonObject[] childerVO = null;
  133.                 m_linkBill.setChildButtonGroup(childerVO);
  134.                 m_linkBill.setVisible(b);
  135.                 m_linkBill.setEnabled(b);
  136.                 objTemp[1] = m_linkBill;
  137.                 setButtons(objTemp);
  138.                 updateButtons();
  139.         }

  140.         @Override
  141.         protected void updateAllButtons() {
  142.                 updateButtons();
  143.         }
  144.         @Override
  145.         public void onButtonClicked(ButtonObject btn) {
  146.                 if(null == btn)
  147.                         return;
  148.                
  149.                 super.onButtonClicked(btn);
  150.                 try {
  151.                         if(m_linkBill.equals(btn)){
  152.                                 int selectRow = getReportBase().getBillTable().getSelectedRow();
  153.                                 if(selectRow < 0){
  154.                                         MessageDialog.showHintDlg(this, "操作提示", "请选择数据在进行穿透!");
  155.                                         return;
  156.                                 }
  157.                                 CircularlyAccessibleValueObject[] data = getReportBase().getBodyDataVO();
  158.                                 String billType = (String) data[selectRow].getAttributeValue("billtype");
  159.                                 String billPk = (String) data[selectRow].getAttributeValue("billpk");
  160.                                
  161.                                 if(null != billType && !"".equals(billType) && null != billPk && !"".equals(billPk) ){
  162.                                         RecBillAggVO billvo =  MDPersistenceService.lookupPersistenceQueryService().queryBillOfVOByPK(RecBillAggVO.class, billPk, false);
  163.                                         BillLinkOneNodeCenter.linkQuery_Dialog(SplitKeyReportUI.this, billType, new String[]{billPk}, new Object[]{ billvo }, true);
  164.                                 }
  165.                         }else if ("刷新".equals(btn.toString())) {
  166.                                 initReportUI();
  167.                         }
  168.                 } catch (Exception e) {
  169.                         // TODO 自动生成的 catch 块
  170.                         e.printStackTrace();
  171.                 };
  172.         }       
  173.        

  174.         /**
  175.          * 描述:
  176.          * 修改/创建人 wk
  177.          * 时间:2017-5-17下午8:59:47
  178.          * 返回值:void
  179.          * @param billform
  180.          */
  181.         private void loadBodyData(ConditionVO[] conditionVOs) {
  182.                 if(null != conditionVOs && conditionVOs.length > 0){
  183.                         for(ConditionVO conditionVO : conditionVOs){
  184.                                 if("pk_project".equals(conditionVO.getFieldCode())){
  185.                                         pk_project = conditionVO.getValue();
  186.                                 }else if("pk_org".equals(conditionVO.getFieldCode())){
  187.                                         pk_org = conditionVO.getValue();
  188.                                 }
  189.                         }
  190.                 }
  191.                 String sql = getSql(pk_org , pk_project);
  192.                 iuapQueryBS iuapQuery = (iuapQueryBS) NCLocator.getInstance().lookup(iuapQueryBS.class.getName());
  193.                 ArrayList<SplitKeyReportVO> splitKeyVOs = new ArrayList<SplitKeyReportVO>();
  194.                 try {
  195.                         splitKeyVOs = (ArrayList<SplitKeyReportVO>) iuapQuery.executeQuery(sql, new BeanListProcessor(SplitKeyReportVO.class));
  196.                 } catch (BusinessException e) {
  197.                         Logger.error("查询数据失败!");
  198.                         e.printStackTrace();
  199.                 }
  200.                 if( null != splitKeyVOs && splitKeyVOs.size() > 0){
  201.                         getReportBase().setBodyDataVO(splitKeyVOs.toArray(new SplitKeyReportVO[0]));
  202.                         getReportBase().updateUI();
  203.                         return;
  204.                 }else{
  205.                         getReportBase().setBodyDataVO(null);
  206.                         getReportBase().updateUI();
  207.                         return;
  208.                 }
  209.         }

  210.         /**
  211.          * 描述:
  212.          * 修改/创建人 wk
  213.          * 时间:2017-5-17下午8:59:47
  214.          * 返回值:void
  215.          * @param billform
  216.          */
  217.         private String getSql(String pk_org, String pk_project) {
  218.                 StringBuffer sqlstr=new StringBuffer("");
  219.                 。。。。。。。。。。。。
  220.                 return sqlstr.toString();
  221.         }
  222. }
复制代码
使用道具 举报

回复

南柯一梦点的头像 楼主
发表于 2017-12-25 09:54:39 | 显示全部楼层

初始化一个界面,还需要配置这个节点的查询模板、报表模板,最后把之间关联起来
使用道具 举报

回复

发表于 2018-1-2 17:38:43 | 显示全部楼层
南柯一梦点 发表于 2017-12-25 09:54
初始化一个界面,还需要配置这个节点的查询模板、报表模板,最后把之间关联起来 ...

感谢
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部