【C#】打印模板收集工具

系列文章


【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号)
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/129129787](https://blog.csdn.net/youcheng_ge/article/details/129129787)

【C#】日期范围生成器(开始日期、结束日期)
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/129040663](https://blog.csdn.net/youcheng_ge/article/details/129040663)

【C#】组件化开发,调用dll组件方法
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/129492112](https://blog.csdn.net/youcheng_ge/article/details/129492112)

【C#】单据审批流方案
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/128972545](https://blog.csdn.net/youcheng_ge/article/details/128972545)

【C#】条码管理操作手册
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/126589496](https://blog.csdn.net/youcheng_ge/article/details/126589496)

【C#】IIS平台下,WebAPI发布及异常处理
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/126539836](https://blog.csdn.net/youcheng_ge/article/details/126539836)

【C#】代码模板生成工具
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/126890673](https://blog.csdn.net/youcheng_ge/article/details/126890673)

【C#】MySQL数据库导入工具(批量Excel插入)
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/126427323](https://blog.csdn.net/youcheng_ge/article/details/126427323)

【C#】简单二维码制作和打印工具
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/126884228](https://blog.csdn.net/youcheng_ge/article/details/126884228)

【C#】最全单据打印(打印模板、条形码&二维码、字体样式、项目源码)
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/129415723](https://blog.csdn.net/youcheng_ge/article/details/129415723)

【C#】Windows服务(Service)安装及启停方案
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/124053794](https://blog.csdn.net/youcheng_ge/article/details/124053794)

【C#】穿透Session隔离,服务调用外部程序(无窗体界面解决)
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/124053033](https://blog.csdn.net/youcheng_ge/article/details/124053033)

【C#】任务计划实现,使用Quartz类
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/123667723](https://blog.csdn.net/youcheng_ge/article/details/123667723)

【C#】源码解析正则表达式
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/118337074](https://blog.csdn.net/youcheng_ge/article/details/118337074)

【C#】软件版本和文件MD5记录(XML操作)
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/112513871](https://blog.csdn.net/youcheng_ge/article/details/112513871)

【C#】测试网络是否连通
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/110137288](https://blog.csdn.net/youcheng_ge/article/details/110137288)

【C#】根据名称获取编码(Dictionary获取key方法)
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/129816701](https://blog.csdn.net/youcheng_ge/article/details/129816701)

【C#】数据建模,你是使用DataTable还是List?
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/129792726](https://blog.csdn.net/youcheng_ge/article/details/129792726)

【C#】GridControl控件和数据集双向绑定
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/129423755](https://blog.csdn.net/youcheng_ge/article/details/129423755)

【C#】GridControl动态更换DataSource,数据查询异常处理
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/130305424](https://blog.csdn.net/youcheng_ge/article/details/130305424)

【C#】GridControl日期字段显示时分秒
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/130718303](https://blog.csdn.net/youcheng_ge/article/details/130718303)

【C#】GridControl增加选择列(不用二次点击)
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/130763713](https://blog.csdn.net/youcheng_ge/article/details/130763713)

【C#】数据库检查工具(可跨库访问)
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/97172329](https://blog.csdn.net/youcheng_ge/article/details/97172329)

【C#】代码解析--打印数据集
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/131431829](https://blog.csdn.net/youcheng_ge/article/details/131431829)

【C#】代码解析--截取整个方法函数
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/109817809](https://blog.csdn.net/youcheng_ge/article/details/109817809)

【C#】反射机制,动态加载类文件
本文链接:[https://blog.csdn.net/youcheng_ge/article/details/131435110](https://blog.csdn.net/youcheng_ge/article/details/131435110)


前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。

一、问题描述

1.1 Job程序逻辑

流程图

逻辑描述

根据项目类型,获取项目列表List_Project。例如:新昌林泉下面挂载着慈溪固德、新昌林泉、新昌超海、临安东方等项目。

  1. 根据项目类型,获取打印类型List_PrintType(同一套代码,打印类型是一样的)
  2. 遍历项目列表List_Project,获得各个项目的数据库连接串。
  3. 遍历打印列表List_PrintType,获得打印类型名。
  4. 根据数据库连接串、打印类型,获取各个项目的打印模板列表List_PrintMode。
  5. 遍历打印模板列表List_PrintMode,下载打印模板文件。

解析打印模板文件*.rpt,其中<TableDataSource>标签内信息为数据集,<Colum>标签内信息为数据集字段。

采用“正则表达式(?<=\[)([^\[\]]*)(?=\])”,匹配文本中【】里的内容,判断数据集字段是否配置使用。

1.2 数据保存数据,删除模板文件

主程序逻辑

请求型定时器:

周期型定时器:

​​​​​​​逻辑描述

请求型定时器:

  1. 初始化请求任务列表(T_task_request),取未执行的请求。
  2. 每分钟执行一次,遍历请求任务列表m_TaskRequest,得到执行时间。
  3. 判断当前时间,是否等于执行时间,误差一分钟。
  4. 到执行时间,根据job名,加载任务组件*.dll到内存,开启新线程,调用任务组件。
  5. 更新任务请求表(T_task_request)执行标识、执行结果等信息。 

周期型定时器:

  1. 初始化任务周期表(T_task_period),取得所有记录。
  2. 每分钟执行一次,遍历任务周期表l_taskPeriodList,得到下次执行时间和开始时间。
  3. 先判断当前时间,是否等于开始时间(误差一分钟)。
  4. 未到开始时间,再判断当前时间,是否等于下一次执行时间(误差一分钟);到开始时间,立即执行流程5。
  5. 任务请求表(T_task_request)插入一条记录。
  6. 根据job名,加载任务组件*.dll到内存,开启新线程,调用任务组件。
  7. 更新周期表(T_task_period)下次执行时间、最近执行时间等信息。

​​​​​​​​​​​​​​1.3 参数的传递

主程序->任务组件(参数固定):文件路径,任务单号,组件数据库连接串,参数1,参数2,参数3。

任务组件配置参数:参数用户自定义,插入在参数表T_task_param中。

​​​​​​​

解析结果

打印模板里有的字段,但是打印类型里(ERP配置)没有。

做条假数据用于测试:

例如:新昌林泉,打印类型【sale_order_change】,打印模板【合同变更新增】,模板文件【sale_order_change.frx】。

打印模板中有 业务员字段

但是打印类型里,对应ERP数据集设置中已经没有。

打印类型里,对应ERP数据集设置数据还原,打印模板对比结果就为空。

    1. 打印模板里有的字段,但是打印数据集里(代码解析)没有

例如:新昌林泉,打印类型【supply_order】,打印模板【采购合同-钢管】,模板文件【supply_order.rpt】。

打印模板中有 技术条件10~技术条件19字段

代码打印数据集里并没有。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花北城

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值