在用友工作的时候,一般很多人先接触的都是nc6系列的产品,但是目前还是有很多的项目是5系列的,而对于基本的单据制作,nc6和nc5是不一样的,通过来说,nc6是通过建立元数据,然后发布元数,然后发布节点就可以了。很多不是经常做nc5的人对于nc的单据就很陌生了,下面我总结相关的重要步骤:

NC56单据开发

 

  • 建表 数据库表

 

如:-- Create table

create table SHHT812_LK

(

  PK_LK        VARCHAR2(30) not null,

  VBILLCODE    VARCHAR2(30),

  VOPERATORID  VARCHAR2(30),

  DMAKEDATE    CHAR(10),

  VAPPROVEID   VARCHAR2(30),

  DAPPROVEDATE CHAR(10),

  VAPPROVENOTE VARCHAR2(50),

  VBILLSTATUS  NUMBER,

  BILLTYPE     VARCHAR2(20),

  DBILLDATE    CHAR(10),

  DR           NUMBER,

  TS           CHAR(19),

  PK_CORP      VARCHAR2(100),

  VDEF1        NUMBER,

  VDEF2        VARCHAR2(100),

  VDEF3        NUMBER(20,8),

  VDEF4        NUMBER(20,8),

  VDEF5        NUMBER(20,8),

  VDEF6        VARCHAR2(100),

  VDEF7        VARCHAR2(100),

  VDEF8        VARCHAR2(100),

  VDEF9        VARCHAR2(100),

  VDEF10       VARCHAR2(100),

  VDEF11       VARCHAR2(100),

  VDEF12       VARCHAR2(100),

  VDEF13       VARCHAR2(100),

  VDEF14       VARCHAR2(100),

  VDEF15       VARCHAR2(100),

  VDEF16       VARCHAR2(100),

  VDEF17       VARCHAR2(100),

  VDEF18       VARCHAR2(100),

  VDEF19       VARCHAR2(1000),

  VDEF20       VARCHAR2(100),

  VDEF21       VARCHAR2(100),

  VDEF22       VARCHAR2(100),

  VDEF23       VARCHAR2(100),

  VDEF24       VARCHAR2(100),

  VDEF25       VARCHAR2(100),

  VDEF26       VARCHAR2(100),

  VDEF27       VARCHAR2(100),

  VDEF28       VARCHAR2(100),

  VDEF29       VARCHAR2(100),

  VDEF30       VARCHAR2(100),

  GRAPHCODE    VARCHAR2(50),

  GRAPHNAME    VARCHAR2(100),

  NWORKORDER   VARCHAR2(30),

  WXTYPE       VARCHAR2(30),

  QCCGRWL      VARCHAR2(50),

  VNOTE        VARCHAR2(200),

  LKR          VARCHAR2(200),

  LKDEPT       VARCHAR2(200)

)

-- Create table

create table SHHT812_LK_B

(

  PK_LK_B   VARCHAR2(30) not null,

  PK_LK     VARCHAR2(30),

  DR        NUMBER,

  TS        CHAR(19),

  VDEF1     NUMBER(20,8),

  VDEF2     NUMBER(20,8),

  VDEF3     NUMBER(20,8),

  VDEF4     NUMBER(20,8),

  VDEF5     NUMBER(20,8),

  VDEF6     VARCHAR2(100),

  VDEF7     VARCHAR2(100),

  VDEF8     VARCHAR2(100),

  VDEF9     VARCHAR2(100),

  VDEF10    VARCHAR2(100),

  VDEF11    VARCHAR2(100),

  VDEF12    VARCHAR2(100),

  VDEF13    VARCHAR2(100),

  VDEF14    VARCHAR2(100),

  VDEF15    VARCHAR2(100),

  VDEF16    VARCHAR2(100),

  VDEF17    VARCHAR2(100),

  VDEF18    VARCHAR2(100),

  VDEF19    VARCHAR2(100),

  VDEF20    VARCHAR2(100),

  VDEF21    VARCHAR2(100),

  VDEF22    VARCHAR2(100),

  VDEF23    VARCHAR2(100),

  VDEF24    VARCHAR2(100),

  VDEF25    VARCHAR2(100),

  VDEF26    VARCHAR2(100),

  VDEF27    VARCHAR2(100),

  VDEF28    VARCHAR2(100),

  VDEF29    VARCHAR2(100),

  VDEF30    VARCHAR2(100),

  VDEF31    VARCHAR2(100),

  VDEF32    VARCHAR2(100),

  VDEF33    VARCHAR2(100),

  VDEF34    VARCHAR2(100),

  VDEF35    VARCHAR2(100),

  VDEF36    VARCHAR2(100),

  VDEF37    VARCHAR2(100),

  VDEF38    VARCHAR2(100),

  VDEF39    VARCHAR2(100),

  VDEF40    VARCHAR2(100),

  INVCODE   VARCHAR2(100),

  INVNAME   VARCHAR2(100),

  INVNUMBER NUMBER(20,8),

  INVJLDW   VARCHAR2(20),

  INVSPEC   VARCHAR2(50),

  INVTYPE   VARCHAR2(50),

  INVJSTJ   VARCHAR2(50),

  INVZLDJ   VARCHAR2(50),

  INVXXGF   VARCHAR2(50),

  INVFZXS   VARCHAR2(50),

  INVWXCC   VARCHAR2(50),

  INVZYTJ   VARCHAR2(50),

  INVFJXY   VARCHAR2(50),

  INVJDDJ   VARCHAR2(50),

  INVTSSM   VARCHAR2(50),

  INVGYZT   VARCHAR2(50),

  INVNOTE   VARCHAR2(200),

  RESPONSER VARCHAR2(50),

  XQSL      NUMBER(20,8),

  LKSL      NUMBER(20,8),

  LKJE      NUMBER(20,8)

)

 

  • 新增单据模板

客户化---------模板管理--------模板设置---------单据模板设置工具

(注意:所有字段都需要小写)

nc56单据制作步骤

 

  • 生成VO类

 

二次开发工具------UAP集成开发工具-------第一个图标 ------工具与选项-----根据数据源生成VO

nc56单据制作步骤

 

  • 单据类型管理

增加一条单据类型

  • VO对照管理

nc56单据制作步骤

 

  • 单据号管理

nc56单据制作步骤

 

  • 把生成的VO和前台的三个类分别放在public端和client端

 

package nc.ui.shht.z507921;

 

import nc.ui.trade.bill.AbstractManageController;

import nc.ui.trade.businessaction.IBusinessActionType;

import nc.ui.trade.button.IBillButton;

import nc.vo.shht.z507921.AggYDVO;

import nc.vo.shht.z507921.YDBVO;

import nc.vo.shht.z507921.YDVO;

 

public class ClientCtrl extends AbstractManageController{

 

    public String[] getCardBodyHideCol() {

       // TODO Auto-generated method stub

       return null;

    }

 

    public int[] getCardButtonAry() {

       // TODO Auto-generated method stub

       return new int[]{

              IBillButton.Query,

              IBillButton.Add,

              IBillButton.Save,

              IBillButton.Edit,

              IBillButton.Line,

              IBillButton.Delete,

              IBillButton.Cancel,

              IBillButton.Return,

              IBillButton.Refresh,

              //ISHHTButton.LK,

       };

    }

 

    public boolean isShowCardRowNo() {

       // TODO Auto-generated method stub

       return false;

    }

 

    public boolean isShowCardTotal() {

       // TODO Auto-generated method stub

       return false;

    }

 

    public String getBillType() {

       // TODO Auto-generated method stub

       return "YDDJ";

    }

 

    public String[] getBillVoName() {

       // TODO Auto-generated method stub

       return new String[]{

              AggYDVO.class.getName(),

              YDVO.class.getName(),

              YDBVO.class.getName()

       };

    }

 

    public String getBodyCondition() {

       // TODO Auto-generated method stub

       return null;

    }

 

    public String getBodyZYXKey() {

       // TODO Auto-generated method stub

       return null;

    }

 

    public int getBusinessActionType() {

       // TODO Auto-generated method stub

       return IBusinessActionType.BD;

    }

 

    public String getChildPkField() {

       // TODO Auto-generated method stub

       return "pk_yd_b";

    }

 

    public String getHeadZYXKey() {

       // TODO Auto-generated method stub

       return null;

    }

 

    public String getPkField() {

       // TODO Auto-generated method stub

       return "pk_yd";

    }

 

    public Boolean isEditInGoing() throws Exception {

       // TODO Auto-generated method stub

       return null;

    }

 

    public boolean isExistBillStatus() {

       // TODO Auto-generated method stub

       return true;

    }

 

    public boolean isLoadCardFormula() {

       // TODO Auto-generated method stub

       return false;

    }

 

    public String[] getListBodyHideCol() {

       // TODO Auto-generated method stub

       return null;

    }

 

    public int[] getListButtonAry() {

       // TODO Auto-generated method stub

       return new int[]{

              IBillButton.Query,

              IBillButton.Add,

              IBillButton.Save,

              IBillButton.Edit,

              IBillButton.Delete,

              IBillButton.Cancel,

              IBillButton.Card,

              IBillButton.Refresh,

       };

    }

 

    public String[] getListHeadHideCol() {

       // TODO Auto-generated method stub

       return null;

    }

 

    public boolean isShowListRowNo() {

       // TODO Auto-generated method stub

       return false;

    }

 

    public boolean isShowListTotal() {

       // TODO Auto-generated method stub

       return false;

    }

 

}

 

package nc.ui.shht.z507921;

 

import nc.ui.trade.controller.IControllerBase;

import nc.ui.trade.manage.BillManageUI;

import nc.ui.trade.manage.ManageEventHandler;

 

public class ClientEH extends ManageEventHandler{

 

    public ClientEH(BillManageUI billUI, IControllerBase control) {

       super(billUI, control);

       // TODO Auto-generated constructor stub

    }

    @Override

    protected void onBoSave() throws Exception {

       // TODO Auto-generated method stub

       getBillCardPanelWrapper().getBillCardPanel().dataNotNullValidate();//必输项目检测

       super.onBoSave();

    }

   

    @Override

    protected void onBoElse(int intBtn) throws Exception {

       // TODO Auto-generated method stub

//     if (intBtn == ISHHTButton.LK) {

//         //lk();

//     }

    }

}

 

package nc.ui.shht.z507921;

 

 

import org.hibernate.id.SequenceGenerator;

import org.hibernate.util.GetGeneratedKeysHelper;

 

import nc.bs.pub.billcodemanage.BillcodeGenerater;

import nc.ui.pub.bill.BillCardBeforeEditListener;

import nc.ui.pub.bill.BillEditEvent;

import nc.ui.pub.bill.BillEditListener;

import nc.ui.pub.bill.BillItemEvent;

import nc.ui.trade.bill.AbstractManageController;

import nc.ui.trade.manage.BillManageUI;

import nc.ui.trade.manage.ManageEventHandler;

import nc.vo.pub.CircularlyAccessibleValueObject;

import nc.vo.trade.pub.IBillStatus;

 

public class ClientUI extends BillManageUI implements BillEditListener,BillCardBeforeEditListener{

 

    @Override

    protected AbstractManageController createController() {

       // TODO Auto-generated method stub

       return new ClientCtrl();

    }

    protected ManageEventHandler createEventHandler() {

       // TODO Auto-generated method stub

       return new ClientEH(this,getUIControl());

    }

    @Override

    public void setBodySpecialData(CircularlyAccessibleValueObject[] vos)

           throws Exception {

       // TODO Auto-generated method stub

      

    }

 

    @Override

    protected void setHeadSpecialData(CircularlyAccessibleValueObject vo,

           int intRow) throws Exception {

       // TODO Auto-generated method stub

      

    }

 

    @Override

    protected void setTotalHeadSpecialData(CircularlyAccessibleValueObject[] vos)

           throws Exception {

       // TODO Auto-generated method stub

      

    }

 

    @Override

    protected void initPrivateButton() {

       // TODO Auto-generated method stub

       //add by slm 2018-11-1 14:27:22 新增生成利库单按钮

//     nc.vo.trade.button.ButtonVO createLK = nc.ui.shht.button.ButtonFactory

//                .createButtonVO(ISHHTButton.LK, "利库", "利库");

//     addPrivateButton(createLK);

    }

    @Override

    protected void initSelfData() {

       // TODO Auto-generated method stub

       getBillCardPanel().setAutoExecHeadEditFormula(true);//表头加载公式

       getBillListPanel().getBodyBillModel().execLoadFormula();//表体加载公式

    }

 

    @Override

    public void setDefaultData() throws Exception {

       // TODO Auto-generated method stub

       //初始赋值

       getBillCardPanel().setHeadItem("dr", 0);//删除标志

       getBillCardPanel().setHeadItem("billtype", getUIControl().getBillType());//本单据类型

       getBillCardPanel().setHeadItem("vbillstatus", IBillStatus.FREE);//本单据状态

       getBillCardPanel().setHeadItem("pk_corp", _getCorp().getPrimaryKey());//公司主键

       getBillCardPanel().setTailItem("voperatorid", _getOperator());//本单据制单人

       getBillCardPanel().setTailItem("dmakedate", _getDate());//本单据制单日期

       BillcodeGenerater bg=new BillcodeGenerater();

       String billcode_b=bg.getBillCode(getUIControl().getBillType(), _getCorp().getPrimaryKey(), null, null);//本单据号获得

       getBillCardPanel().setHeadItem("vbillcode", billcode_b);//本单据号

       //getBillCardPanel().setHeadItem("pk_yd", "111111");//本单据号

      

      

    }

    @Override

    public void afterEdit(BillEditEvent e) {

      

//         try {

//            afterSetVO(e);

//         } catch (Exception e1) {

//            // TODO Auto-generated catch block

//            e1.printStackTrace();

//         }

       super.afterEdit(e);

    }

    private void afterSetVO(BillEditEvent e) throws Exception {}

   

    public boolean beforeEdit(BillItemEvent e) {

       // TODO Auto-generated method stub

       return false;

    }

 

}

 

  • 功能注册、权限分配、功能节点默认模板设置。

 

这样,一个简单的单据就算是完成了。

相关文章:

  • 2022-12-23
  • 2021-12-28
  • 2022-12-23
  • 2021-11-19
  • 2021-06-18
  • 2022-01-04
  • 2021-06-27
猜你喜欢
  • 2021-11-30
  • 2021-11-17
  • 2021-07-12
  • 2021-10-05
  • 2021-12-05
  • 2021-11-28
  • 2022-12-23
相关资源
相似解决方案