一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-入库业务结尾工作-演示单据的打印

回顾与说明

     首先给大家说声抱歉,上一周忙了一些其他的事,博客也就差不多一周没有更新,让关注AgileEAS.NET平台的朋友们久等了,希望大家能继续关注AgileEAS.NET平台,关注AgileEAS.NET平台所采用的架构设计实践和AgileEAS.NET平台背后的一些软件工程实践思考。

     前面我用了至少两篇直接的文章对“商品入库”模块进行了详细的说明,我想大家已经很清楚的知道商品入库处理的流程、技术特别以及特别查询的缓存查询技术。为什么我要在这么一个简单的模块费多少大的口舌呢?

    因为,“商品入库”是一个在管理信息系统(MIS)之中非常典型的应用场景,在这个很小的应用场景之中,我们涉及到了字典信息查询、中间结果保存、事务处理以及马上要进行的“票据打印”,可以说基本是一个信息系统中在线事务处理或者数据采集应用的一个缩影,当我们能熟练的能使用AgileEAS.NET平台开发这样的应用的时候,那么MIS系统将在我们面前没有一些难度。

本文的内容

     前面的文章,我已经把“商口入库”模块之中的字典查询以及其中使用的缓存技术、中间数据记录、业务的处理及事务等进行了详细的介绍,今天本文的重点是入库单(票据)打印业务。

     那么这是一个什么场景呢,当我们点击“入库”按钮完成入库今年的保存之后,我们需要点击“打印”按钮完成入库票据的打印,或者当我们完成入库按钮之后完成入库之后即打印本次业务的业务票据,操作界面上有“直接输出打印机”的选项,如果选中则不显示打印预览对话框。

准备报表,以备调用

      首先我们制做报表,打开报表设计器ReportDesigner.Start.exe,通过菜单“文件”-->“新建”-->“对象报表”,打开“新建数据对象报表”对话框,然后选择“数据对象”Tab页,点击“浏览”选择编译目标目录中的“Product.DAL.SQLServer.dll”,在类型下接列表之选择Product.DAL.SQLServer.ProductInList:

       现在我们单击“确定”按钮,使用报表设计器调整报表格式,达到以下样式:

        我们可以在报表设计器中预览一下,注意:因为是基于数据对象的报表不能连接数据库,所以数据都是随机生成的,用于模拟显示。

        现在报表已经做好,我们把报表定义保存在编译目标目录的Report文件夹中,名称为“商品入库单据.rdl”。

修改程序,控制打印

      报表已经制作好了,现在的任务就是在程序中加载报表,并且绑定要打印的数据,那么数据从那来呢,我们已经完成了商品的入库并且我们知道刚刚完成的入库单号,我们可以通过入库单号来查询入库表,从来得到指定入库单中的入库记录,要达到这样的需求,我们需要在DAL层接口项目Product.DAL.Interface中的IProductInList中增加一个方法:

 1  /// <summary>
 2  /// 表接口 IProductInList(产品入库)。
 3  /// </summary>
 4  public partial interface IProductInList
 5    {
 6  /// <summary>
 7  /// 根据入库票据号查询入库明细。
 8  /// </summary>
 9  /// <param name="billCode">入库票据号。</param>
10  void GetProductInList(string billCode);
11    }

     同时需要在DAL层SQLService实现项目Product.DAL.SQLServer中的ProductInList类中实现这个方法:

 1  /// <summary>
 2  /// 表对象 ProductInList(产品入库)。
 3  /// </summary>
 4  public partial class ProductInList:EAS.Data.ORM.Table, IProductInList
 5    {
 6  public void GetProductInList(string billCode)
 7        {
 8            Condition condition = this.CreateCondition();
 9            condition.AddElement("BILLCODE", billCode);
10  this.Query(condition);
11        }
12    }

     接下来我们来写“打印”按钮的事件处理代码,实现数据提取与报表打印:

 1  private void btnPrint_Click(object sender, EventArgs e)
 2         {
 3             IProductInList productInList = DALHelper.DALManager.CreateProductInList();
 4             productInList.GetProductInList(this.previouBillCode);
 5 
 6  if (productInList.Rows.Count == 0)
 7             {
 8                 MessageBox.Show("没有需要打印的数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
 9  return;
10             }
11 
12  if (this.printForm == null)
13  this.printForm = new RDLViewDialog();
14 
15  //
16             System.IO.TextReader textReader = null;
17  try
18             {
19  string fileName = Path.Combine(Application.StartupPath, "Reports\\商品入库单据.rdl");
20                 textReader = new System.IO.StreamReader(fileName);
21  this.printForm.SourceRdl = textReader.ReadToEnd();
22             }
23  finally
24             {
25  if (textReader != null)
26                     textReader.Close();
27             }
28 
29  this.printForm.DataObject = productInList;
30 
31  if (this.cbPrinter.Checked)
32  this.printForm.Print(); //直接打印
33  else
34  this.printForm.PrintPreview();  //打印预览
35         }

  现在,商品入库单-票据打印就解决了,我们来看一下效果吧:

      注意:在实际应用中,在需要频繁的使用单根打印的过程之中会直接输出到打印机而不会使用打印预览对话框,比如在银行、电信、电力、医疗等各行业的窗口业务模块。

     至此,“商品入库”模块的相关处理就此结束,接下来演示两个查询类模块“库存查询”与“入库信息查询”。对这东西感兴趣的朋友呢,可以下载了完整代码之后自己看看,有问题请及时的和我联系。

      有关本例所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本例完整代码下载:Product.Demo.rar

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android 开发者

开发者也是用户 — 第一部分:构建更具可用性的 UI 与 API 的 5 个方针

20420
来自专栏程序员历小冰

数据库内部存储结构探索

 本文是左耳耗子推荐的Medium上的一篇关于MySQL的文章Some study on database storage internals,本人觉得文章十分...

35020
来自专栏程序员互动联盟

Android上学习ARM指令集系列第一篇

打算为入门ARM指令集写点初级文章,没什么远大理想,写到哪里算哪里,权当娱乐罢了。工作中经常碰到crash的问题,如果是debug版本,那还好, 调...

36980
来自专栏来自地球男人的部落格

python中scrapy点击按钮

最初遇到的问题的是在用scrapy爬取微博时需要按照指定关键字来爬取特定微博,主要还是解决需要输入关键字然后点击搜索按钮的问题。于是: 首先 找了scrapy的...

45770
来自专栏生信技能树

SSH的一些稀奇古怪的报错

这次我没有去谷歌搜索就想到了解决方法,很明显报错解释的很清楚,是我的 /home/jianmingzeng/.ssh/known_hosts 文件里面之前记录的...

24620
来自专栏Play & Scala 技术分享

PlayScala 2.5.x - 实现完全异步非阻塞的流数据导出

29940
来自专栏社区的朋友们

HBase 学习分享

有些时候你可曾面对产品看似普通且合理的需求,例如:1、能否让网页活动拉取用户的游戏好友关系链从而更精准的推送Tips? 2、判断用户是否在所有大区都没有角色这类...

82900
来自专栏前端大白专栏

基于mpvue开发微信小程序(项目已开源)

30960
来自专栏happyJared

用Python统计你的简书数据

  说来也巧,之前有一次无意间留意到简书好像没有做文章总阅读量的统计(准确的说法应该叫展示),刚好最近有时间,趁这个机会就用Python写了这么个功能,既是学习...

18510
来自专栏前端大白专栏

基于mpvue开发微信小程序(项目已开源)

花了两周时间,我的微信小程序终于开发完了(平时上班,基本上都是业余时间开发的). 下面来介绍一下项目的功能以及结构. 用到的技术栈 vue2+weui+es6;...

57790

扫码关注云+社区

领取腾讯云代金券