财务模块功能中的凭证预览功能

当ERP的财务模块与生产,供应链模块集成时,这些模块过帐时会产生会计凭证。如果能在产生会计凭证前可预览一下凭证,那对用户而言是一个很友好的设计。如下图所示,贷项通知单过帐前,可通过预览凭证,知晓即将产生的会计凭证。

点击预览凭证按钮,可看到即将产生的会计凭证:

为达到此目的,分享一下对系统的修改。

首先是业务单据重写按钮事件,

protected override void OnPreviewVoucher(Dictionary<string, VoucherEntity> voucherList)
{
     base.OnPreviewVoucher(voucherList);

     if (_expenseRemibursementEntity.Amount > 0)
     {
         VoucherEntity voucher = _expenseRemibursementManager.CreateExpenseRemibursementVoucherForPreview( _expenseRemibursementEntity);
         if (voucher != null)
             voucherList.Add(VOUCHER_KEY, voucher);
     }
}

通过重写这个方法,基类可获取当前业务单据产生的会计凭证。产生会计凭证的方法原型如下:

public VoucherEntity CreateExpenseRemibursementVoucherForPreview(ExpenseRemibursementEntity ExpenseRemibursement)
{
     VoucherEntity voucher = null;

     using (DataAccessAdapter adapter = GetCompanyDataAccessAdapter(sessionId))
     {
          try
          {
              adapter.StartTransaction(IsolationLevel.ReadCommitted, "CreateExpenseRemibursementVoucherForPreview");

              ExpenseRemibursementEntity clonedAdjustment = (ExpenseRemibursementEntity)Shared.CloneEntity(ExpenseRemibursement);

              IFiscalPeriodManager fiscalPeriodManager = ClientProxyFactory.CreateProxyInstance<IFiscalPeriodManager>();
              ExcludeIncludeFieldsList fieldsList = new ExcludeIncludeFieldsList(false);
              fieldsList.Add(FiscalPeriodFields.Period);
              fieldsList.Add(FiscalPeriodFields.FiscalYear);
              fieldsList.Add(FiscalPeriodFields.PeriodNo);
              FiscalPeriodEntity fiscalPeriod = fiscalPeriodManager.GetValidFiscalPeriod(sessionId, clonedAdjustment.AppliedDate, fieldsList, true);

              clonedAdjustment.Period = fiscalPeriod.Period;
              clonedAdjustment.FiscalYear = fiscalPeriod.FiscalYear;
              clonedAdjustment.PeriodNo = fiscalPeriod.PeriodNo;

              voucher=GenerateVoucher(sessionId, clonedAdjustment);
            }
            finally
            {
                adapter.Rollback();
            }
      }
      return voucher;
}

这里有一个细节是并没有对当前的业务实体(business object)直接操作,而是对它的一个深拷贝进行操作。这样对这个拷贝的对象进行的操作都不会影响到原来的业务实体。

其次,需要增加一个MDI界面,主界面用于承载会计凭证界面,子窗体为会计凭证界面。为达到这个目的,我们将会计凭证界面作为子窗体载入到一个新创建的MDI主窗体界面中:

standardFunctionForm = null;
Form form = ComponentCommon.MainForm.GetStandardFunctionForm(primaryKeys[0]);
if (form != null)
  standardFunctionForm = form as FunctionFormBase;

standardFunctionForm.Owner = this;
standardFunctionForm.TopLevel = false;
standardFunctionForm.AutoScroll = true;
standardFunctionForm.HideBindingNavigator = true;
standardFunctionForm.HideStatusStrip = true;
standardFunctionForm.AllowAdd = false;
standardFunctionForm.AllowDelete = false;
standardFunctionForm.AllowEdit = false;
standardFunctionForm.AllowPost = false;
standardFunctionForm.SupportAdd = false;
standardFunctionForm.SupportDelete = false;
standardFunctionForm.SupportEdit = false;
standardFunctionForm.SupportApproval = false;
standardFunctionForm.SupportPost = false;
standardFunctionForm.SupportImport = false;
standardFunctionForm.SupportExport = false;
standardFunctionForm.Show();
standardFunctionForm.SaveLayoutOnClose = SaveLayouts.Never;

Dictionary<string, string> refNo = new Dictionary<string, string>();
refNo.Add(primaryKeys[1], RefNo);
standardFunctionForm.FindAndLoadData(refNo);

这里面可以看到,为什么要用一个MDI主界面来载入会计凭证窗体,是为了在不破坏原有功能的情况下,可定制它的部分功能。比如这个预览凭证窗体,不需要保存数据或过帐等操作,于是看到上面的代码中,我们将SupportEdit=false表示不需要编辑功能。

最后三句是MDI子窗体载入数据,通过传入键值对来完成数据的加载。FindAndLoadData方法会调用内部LoadData:

protected override EntityBase2 LoadData(Dictionary<string, string> refNo)
{
    base.LoadData(refNo);
    string RefNo = string.Empty;
    if (refNo.TryGetValue("RefNo", out RefNo))
    {
         IPrefetchPath2 prefetchPath = new PrefetchPath2((int)EntityType.ExpenseRemibursementEntity);
         prefetchPath.Add(ExpenseRemibursementEntity.PrefetchPathExpenseRemibursementDetail);
         _expenseRemibursementEntity = _expenseRemibursementManager.GetExpenseRemibursement(Shared.CurrentUserSessionId, RefNo, prefetchPath);
    }
    else
    {
        _expenseRemibursementEntity = new ExpenseRemibursementEntity();
    }
    return _expenseRemibursementEntity;
}

这样我们就完成了财务模块的凭证预览功能。

时间: 2024-10-12 22:06:29

财务模块功能中的凭证预览功能的相关文章

如何在HiWork中进行文件预览

周一,忙碌的一周又开始了. 今天来跟大家说说HiWork(www.hiwork.cc)中的文件预览功能 文件预览很重要很方便,在进行团队即时沟通的同时,不用下载文件就可以很方便的进行各类文件的预览.而给机器上没有安装相应软件的操作者带来更多便利. HiWork(www.hiwork.cc)为用户提供了非常完备的文件预览功能,包括txt.word.excel.ppt.pdf.rar.zip文件以及部分音频和视频文件.下面我们仅以word文档为例,说说在HiWork(www.hiwork.cc)中如

nodejs实现本地上传图片并预览功能

Express为:4.13.1  multyparty: 4.1.2 代码主要实现本地图片上传到nodejs服务器的文件下,通过取图片路径进行图片预览 写在前面:计划实现图片上传预览功能,但是本地图片上传所获得路径为 C:\fakepath\"+文件名的形式,得不到文件真实路径,所以无法直接预览,于是采用将图片上传至服务器,传回服务器路径,实现预览.前端采用通过ajax方式上传文件,使用FormData进行ajax请求  ,nodejs端采用multiparty模块 相关查看文档: 通过Ajax

自己动手开发更好用的markdown编辑器-04(预览功能)

这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/25/hexomd-04/ 程序打包 文章目录 1. 打开新窗口 2. 预览功能 3. 优化体验 3.1. 滚动条随动 3.2. 样式美化 3.3. 代码块高亮 3.4. 关闭主程序前先自动关闭预览窗口 4. 总结 5. 附件 上一篇我们实现了系统模块的一些功能,对angular的使用更深入了一点. 今天这篇我们要实现实时预览的功能,将学习到如何使用nw.js打开额外新窗

利用 ICEpdf 快速实现 pdf 文件预览功能

之前工作中,需要实现一个在线预览pdf的功能,一开始用的的 jQuery-media 插件来实现的,后来感觉有点慢,就继续寻找更好的替代品,直到遇见了 ICE pdf... ICEpdf (官网:http://www.icesoft.org/java/home.jsf) 原理是基于 Java SE 中的 Swing 实现的 (谁说 Swing 没有用武之地了...) ,将一个 PDF 文件作为一个 Document 对象,调用封装的方法,将该文件的每一页生成一张图片! 关键代码如下: publi

Mac预览怎么用 Mac预览功能实用技巧大全

Mac预览怎么用?有很多的用户以为Mac自带的预览功能只具有简单的图片浏览功能,其实不然,其实"预览"是一款强大的看图.修图.改图软件,也同时是一款多功能的 PDF 阅读与编辑工具,接下来Pc6苹果小编给大家详细介绍一下Mac预览功能实用技巧. 目前的 Mac 预览程式可以支持 TIFF. PNG. JPEG. GIF. BMP. PDF 等主要文件格式的浏览与编辑,而单纯预览上也可以支持像是 Photoshop 等专业图像处理软件. Office 等专业文书处理软件所产生的特殊文件格

window下实现在线预览功能

window下实现在线预览功能 最近用到文档在线预览功能,之前没接触过,一切从零开始,整了一段时间终于实现,现在把方法分享给大家! 一.主要思路 先将其他格式的文档(office文档.txt.图片等等)通过OpenOffice转换成PDF格式文档,然后通过swftools(http://www.swftools.org/)将PDF格式文档转换为swf格式文档,最后通过flexpaper显示swf格式的文档,从而实现预览多种格式的文档. 使用到的工具自己从网上下载,很好找的. 二.实现过程 1.其

Java实现图片裁剪预览功能

Java实现图片裁剪预览功能 在项目中,我们需要做些类似头像上传,图片裁剪的功能,ok看下面文章! 需要插件:jQuery Jcrop 后端代码: package org.csg.upload; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import 

iOS UIPickerController 调用相机,选择图片上传,带预览功能

在.h中加入delegate @interface ViewController : UIViewController<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate> //实现按钮事件 -(IBAction)chooseImage:(id)sender { UIActionSheet *sheet; <p> // 判断是否支持相机 </p> if(

Windows下实现php在线预览功能

最近用到文档在线预览功能,之前没接触过,一切从零开始,整了一段时间终于实现,现在把方法分享给大家! 一.主要思路 先将其他格式的文档(office文档.txt.图片等等)通过OpenOffice转换成PDF格式文档,然后通过swftools(http://www.swftools.org/)将PDF格式文档转换为swf格式文档,最后通过flexpaper显示swf格式的文档,从而实现预览多种格式的文档. 使用到的工具自己从网上下载,很好找的. 二.实现过程 1.其他文档转为PDF 用命令启动Op