销售订单 支持生成凭证 二开指导原创
金蝶云社区-KFL
KFL
0人赞赏了该文章 575次浏览 未经作者许可,禁止转载编辑于2021年08月31日 17:00:12

业务场景:

    销售订单支持生成凭证


具体开发内容:

1. 执行脚本,销售订单后台表新增字段:记账标识、凭证id

IF NOT EXISTS (SELECT * FROM KSQL_USERCOLUMNS WHERE KSQL_COL_NAME ='FFIVOUCHERED' AND KSQL_COL_TABNAME='T_SD_SALEORDER')
ALTER TABLE T_SD_SALEORDER ADD FFIVOUCHERED INT;
 
IF NOT EXISTS (SELECT * FROM KSQL_USERCOLUMNS WHERE KSQL_COL_NAME ='FVOUCHERID' AND KSQL_COL_TABNAME='T_SD_SALEORDER')
ALTER TABLE T_SD_SALEORDER ADD FVOUCHERID nvarchar(255);


2. 放开ui 生成凭证、删除凭证 按钮

新增类SaleOrderEditUICTEx 继承com.kingdee.eas.scm.sd.sale.client.SaleOrderEditUI(编辑界面)

新增类 SaleOrderListUICTEx 继承com.kingdee.eas.scm.sd.sale.client.SaleOrderListUI(序时簿)

分别重写 onload的方法,在super.onload(); 后面设置按钮的可见、可用:

           btnVoucher.setVisible(true); //生成凭证按钮

           btnVoucher.setEnabled(true);

           btnDelVoucher.setVisible(true); //删除凭证按钮

           btnDelVoucher.setEnabled(true);

注意 ui二开类需以标准产品类名 + CTEx 命名,系统在加载类时会优先加载该命名方式的类


3. 后台类逻辑重写

新增类SaleOrderControllerBeanCTEx

继承com.kingdee.eas.scm.sd.sale.app.SaleOrderControllerBean

重写_getCompanyOrgUnit _deleteVoucher 方法:

protected CompanyOrgUnitInfo _getCompanyOrgUnit(Context ctx, IObjectPK pk) throws BOSException, EASBizException {
          
           CompanyOrgUnitInfo companyOrgUnitInfo = null;
           SaleOrderInfo saleOrderInfo = getSaleOrderInfo(ctx, pk);
           if (saleOrderInfo != null) {
                    IOrgUnitRelation iOrgUnitRelation = OrgUnitRelationFactory.getLocalInstance(ctx);
 
                    OrgUnitCollection orgUnitCollection = iOrgUnitRelation.getToUnit(saleOrderInfo.getSaleOrgUnit().getId().toString(), OrgType.SALE_VALUE, OrgType.COMPANY_VALUE);
 
                    if (orgUnitCollection != null && orgUnitCollection.size() > 0) {
                             companyOrgUnitInfo = (CompanyOrgUnitInfo) orgUnitCollection.get(0);
                    }
           }
           return companyOrgUnitInfo;
}
 
 
@Override
protected boolean _deleteVoucher(Context ctx, IObjectPK sourceBillPk) throws BOSException, EASBizException {
           String sql = "select FVOUCHERID from T_SD_SALEORDER where fid ='"+sourceBillPk.toString()+"' and FFIVOUCHERED = 1 ";
           IRowSet rs = DbUtil.executeQuery(ctx, sql);
           try {
                    if (!rs.next()) {
                             return false;
                    }
                    String fvoucherid = rs.getString("FVOUCHERID");
                    ObjectUuidPK pk = new ObjectUuidPK(fvoucherid);
                    VoucherInfo voucherInfo = (VoucherInfo) VoucherFactory.getLocalInstance(ctx).getValue(pk);
                    IVoucher iVoucher = VoucherFactory.getLocalInstance(ctx);
                    iVoucher.delete(pk);
 
                    IDAPTransformer dapTransformer = DAPTransformerFactory.getLocalInstance(ctx);
                    dapTransformer.undoTransformFromVoucher(voucherInfo);
           } catch (SQLException e) {
                    throw new BOSException(e);
           }
           return true;
 }


4.Dep 配置后台类

image.png


5.配置BOTP 规则

具体规则根据具体业务制定


赞 0