99.固定行列报表

--测试数据
create table test (TEST_NO varchar(10),TEST_NAME varchar(10))
insert into test select 'A0001','张三'
insert into test select 'A0003','李4'
insert into test select 'A0004','李五'
insert into test select 'B0002','王五'
insert into test select 'B0003','将李'
insert into test select 'B0004','五二'
insert into test select 'C0001','王二'
insert into test select 'C0003','邓三'
insert into test select 'C0004','刘4'
go

--查询处理的存储过程
CREATE PROC p_PageView
@tbname sysname,   --查询的表名
@KeyField sysname, --关键字段名
@SortField sysname,--排序字段名
@Columns int=10,   --每页最多显示的列数
@Rows int=10       --每页最多显示的行数
as
set nocount on
declare @s nvarchar(4000),@gid1 varchar(20),@gid2 varchar(20),@pageno varchar(20)
select @s='',
	@pageno='1+gid/'+rtrim(@Columns*@rows),
	@gid1='(gid%'+rtrim(@Columns*@rows)+')/'+rtrim(@rows),
	@gid2='(gid%'+rtrim(@Columns*@rows)+')%'+rtrim(@rows)
while @Columns>0
	select @Columns=@Columns-1,
		@s='
,isnull(max(case '+@gid1+' when '+rtrim(@Columns)+' then TEST_NO end),'''')'
		+'
,isnull(max(case '+@gid1+' when '+rtrim(@Columns)+' then TEST_NAME end),'''')'
		+@s
exec('select PageNo='+@pageno+@s+' from(
	select TEST_NO,TEST_NAME,
		gid=(select count(*) from test where TEST_NO
下面给出“可直接贴进代码”的逐行清单,每个条目包含四: 【功能ID】 【界面可见文字(控件类型)】 【内部变量/常量名】 【写死公式/功能描述】 一、工具栏(顶部横条,tk.Frame) 1. 日期标签 → Label(text="📅 日期") → 无公式 2. 日期选择 → DateEntry(name="tool_date", date_pattern="y-mm-dd") → 绑定on_date_changed() 3. 保存按钮 → Button(text="💾 保存", command=save) → Ctrl+S 4. 查询按钮 → Button(text="🔍 查询", command=lambda: show_content("数据查询")) 5. 分析按钮 → Button(text="📊 分析", command=lambda: show_content("智能分析")) 6. 刷新按钮 → Button(text="🔄 刷新", command=refresh_data) 7. 导出按钮 → Button(text="📤 导出", command=export_daily) 8. 趋势图按钮 → Button(text="📈 趋势图", command=plot_30d) 9. 状态标签 → Label(name="status_label", text="就绪") → 动态text=f"[{time}] {msg}" 10. 用户标签 → Label(name="user_label", text="当前用户") → 默认文字 二、左侧功能菜单(ttk.Frame, sidebar.TFrame) 11. 运行数据录入 → Button(text="运行数据录入", style="sidebar.TButton", command=lambda: show_content("运行数据录入")) → 异步构建10区块 12. 节能数据录入 → Button(text="节能数据录入", ...) → 构建6组泵界面 13. 设备可靠性 → Button(text="设备可靠性数据录入", ...) → 设备下拉+表格弹窗 14. 智能分析 → Button(text="智能分析", ...) → 同工具栏 15. 数据查询 → Button(text="数据查询", ...) → 打开三页签Notebook 16. 分隔线 → Separator(orient="horizontal") → 视觉分隔 三、运行数据-基本信息(LabelFrame: 基本信息) 17. 日期标签 → Label(text="日期") → 同工具栏联动 18. 日期输入 → DateEntry(name="run_basic_date", textvariable=run_data['date']) → 触发fill_prev_data_thread() 19. 班次标签 → Label(text="班次") → 无公式 20. 班次下拉 → Combobox(name="run_shift", textvariable=run_data['shift'], values=["早","中","夜"]) → 无公式 20. 天气标签 → Label(text="天气") → 无公式 21. 天气输入 → Entry(name="run_weather", textvariable=run_data['weather']) → 无公式 22. 节能措施标签 → Label(text="节能措施、事件") → 无公式 23. 节能措施输入 → Entry(name="run_measures", textvariable=run_data['energy_saving_measures'], width=80) → 无公式 24. 保存基本信息按钮 → Button(text="保存基本信息", command=lambda: save_run_data_by_section('basic_info')) → 只insert run_data.basic_info 四、运行数据-发电机组电量(旧表)(LabelFrame: 发电机组电量(旧表)) 25. 主表标题 → Label(text="洋浦电厂(主表)", font=('SimHei',12,'bold')) → 无公式 26. 表头序号 → Label(text="序号") → 无公式 27. 表头关口点 → Label(text="关口点名称") → 无公式 28. 表头CT → Label(text="CT") → 固定文字:800/5(220kV)、300/5(132kV) 29. 表头PT → Label(text="PT") → 固定文字:220/100(220kV)、110/100(132kV) 30. 表头零点底数 → Label(text="零点底数") → 无公式 31. 表头解后底数 → Label(text="解后底数") → 无公式 32. 表头并网前底数 → Label(text="并网前底数") → 无公式 33. 表头24点底数 → Label(text="24点底数") → 无公式 34. 表头倍率 → Label(text="合成倍率") → 固定数字:352000(220kV)、6600(132kV) 35. 表头本日电量 → Label(text="本日电量(栏次10)") → 公式:max(0,解后−零点)×倍率 36. 表头本月累计 → Label(text="本月累计电量(栏次11)") → 逐行累加上述本日电量 37. 8行关口点文字 → Label(只读)→ 固定表:220kV洋干Ⅰ线(正)、(反)、洋三线(正)、(反)、洋石线(正)、(反)、132kV厂站1#线、厂站2#线 38. 每行零点输入 → Entry(name="gen_elec_old{point}零点底数", textvariable=run_data['gen_elec_old{point}零点底数']) → 触发delayed_calculate_energy(point,"old") 39. 每行解后输入 → Entry(name="gen_elec_old{point}解后底数", ...) → 同上 40. 每行并网前输入 → Entry(name="gen_elec_old{point}并网前底数", ...) → 不用于计算 41. 每行24点输入 → Entry(name="gen_elec_old{point}24点底数", ...) → 用于累计 42. 每行CT显示 → Label → 固定文字:800/5或300/5 43. 每行PT显示 → Label → 固定文字:220/100或110/100 44. 每行倍率显示 → Label → 固定数字:352000或6600 45. 每行本日电量显示 → Label(name="gen_elec_old{point}daily", textvariable=run_data['gen_elec_old{point}daily']) → 实时公式:max(0,解后−零点)×倍率 46. 每行本月累计显示 → Label(name="gen_elec_old{point}monthly", textvariable=run_data['gen_elec_old{point}monthly']) → 累加上一行+本日电量 47. 主表上网电量标签 → Label(text="主表上网电量") → 公式:主表_net=Σ(正向本日电量)−Σ(反向本日电量) 48. 主表上网输入 → Entry(name="gen_elec_old_main_daily", textvariable=run_data['gen_elec_old_main_daily']) → 实时公式③ 49. 主表本月累计 → Entry(name="gen_elec_old_main_monthly", ...) → 累加公式③ 50. 副表上网电量标签 → Label(text="副表上网电量") → 同主表算法 51. 副表上网输入 → Entry(name="gen_elec_old_sub_daily", ...) → 同上 52. 保存旧表按钮 → Button(text="保存旧表电量", command=lambda: save_run_data_by_section('old_grid')) → 写electric_meter+daily_final旧表字段 五、运行数据-发电机组电量(新表)区块(LabelFrame: 发电机组电量(新表)) 53. 新表主表标题 → Label(text="洋浦电厂(主表)", bold) → 无公式 54. 新表倍率固定值 → Label → 220kV:276000,132kV:6600 55. 其余控件名、公式与旧表一一对应,前缀gen_elec_new_XXX 56. 保存新表按钮 → Button(text="保存新表电量", ...) → 写electric_meter+daily_final新表字段 六、运行数据-电量区块(LabelFrame: 电量) 57. 表头电量类型 → Label(text="电量类型") → 无公式 58. 表头四机组 → Label(text="#11机 #12机 #13机 #14机") → 无公式 59. 日发电量标签 → Label(text="日发电量 (万kWh)") → 横向小计:全厂日发电量=Σ(#11#14) 60. 日上网电量标签 → Label(text="日上网电量 (万kWh)") → 全厂日上网=Σ(#11#14) 61. 厂用电量标签 → Label(text="厂用电量 (万kWh)") → 全厂厂用电=Σ(#11#14) 62. 四机组日发电量输入 → Entry(name="daily_gen_11/12/13/14", textvariable=run_data['daily_gen_X']) → 触发横向小计 63. 四机组日上网输入 → Entry(name="daily_grid_X", ...) → 同上 64. 四机组厂用电输入 → Entry(name="plant_elec_X", ...) → 同上 65. 保存电量按钮 → Button(text="保存电量数据", command=lambda: save_run_data_by_section('electricity')) → 写daily_final电量+table3厂用电 七、运行数据-燃料区块(LabelFrame: 燃料) 66. 天然气日耗标签 → Label(text="天然气日耗 (万Nm³)") → 无公式 67. 天然气热值标签 → Label(text="天然气热值 (MJ/Nm³)") → 无公式 68. 发电单耗后台公式 → 后台计算 → 发电单耗=管网气量(万Nm³)/全厂发电量(万kWh)×1000→g/kWh 69. 保存燃料按钮 → Button(text="保存燃料数据", ...) → 写run_data.gas_daily+calorific 八、运行数据-水耗区块(LabelFrame: 水耗) 70. 工业水标签 → Label(text="工业水 (t)") → 无公式 71. 除盐水标签 → Label(text="除盐水 (t)") → 无公式 72. 保存水耗按钮 → Button(text="保存水耗数据", ...) → 写run_data.industrial_water+desalted_water 九、运行数据-启停区块(LabelFrame: 启停) 73. 启机方式标签 → Label(text="启机方式") → Combobox values=["冷","温","热","极热"] 74. 启机开始日期标签 → Label(text="启机开始时间") → DateEntry+Entry(时:分) 75. 启机结束日期标签 → Label(text="启机结束时间") → 同上 76. 启机时长显示 → Entry(name="start_duration_X", readonly=True, textvariable=run_data['start_duration_X']) → 公式:(结束−开始).total_seconds()/3600,保留2位 77. 停机同上 → 公式同76 78. 保存启停按钮 → Button(text="保存启停数据", ...) → 写table2启停机时间字符串+小数小时 十、运行数据-环保区块(LabelFrame: 环保) 79. 启机NOx超标起止 → DateEntry+Entry → 时长公式:max(0,结束−开始)/3600 80. 停机NOx同上 → 同上 81. 噪声检测 → Label+Entry → 无公式 82. 保存环保按钮 → Button(text="保存环保数据", ...) → 写run_data.nox_exceed+noise 十一、运行数据-缺陷区块(LabelFrame: 缺陷) 83. 跑冒滴漏条数 → Entry(name="leakage_X") → 整数 84. 闭环状态 → Combobox(name="closed_X", values=["是","否"]) → 无公式 85. 保存缺陷按钮 → Button(text="保存缺陷数据", ...) → 写run_data.leakage_count+closed_status 十二、运行数据-计划区块(LabelFrame: 计划) 86. 月计划 → Entry(name="monthly_plan") → 万kWh 87. 年计划 → Entry(name="annual_plan") → 万kWh 88. 保存计划按钮 → Button(text="保存计划数据", ...) → 写run_data.monthly/yearly_plan 十三、运行数据-底部大按钮 89. 保存全部 → Button(text="保存运行数据", style="Accent.TButton", command=save) → 写全表+智能分析 十四、节能数据-电子间空调区块 90. 空调台数 → Entry(name="ac_units_11_13", textvariable=energy_saving_data['ac_units_11_13']) → 节能量=台数×29×小时 91. 空调时长 → Entry(name="ac_hours", ...) → 同上 92. 空调节能量显示 → Label(name="ac_energy_11_13", textvariable=energy_saving_data['ac_energy_11_13']) → 实时公式:台数×29×小时 93. 总空调节能量 → Label(name="ac_energy_total", textvariable=energy_saving_data['ac_energy_total']) → Σ各组空调节能量 十五、节能数据-#11机组辅机区块 94. 滑油泵时长 → Entry(name="unit11_fuel_pump", ...) → 节能量=时长×37kW 95. 辅助油泵时长 → Entry(name="unit11_aux_pump", ...) → 节能量=时长×37kW 96. 顶轴油泵+抽油烟时长 → Entry(name="unit11_jacking_pump", ...) → 节能量=时长×(30+0.75)kW 97. 三项节能量显示 → Label(name="unit11_energy1/2/3", ...) → 实时计算同上三公式 十六、节能数据-#12机组辅机区块 98. 同#11,变量名unit12,功率相同 十七、节能数据-#13机组辅机区块 99. 凝结水泵时长 → Entry(name="unit13_cond_pump", ...) → 节能量=时长×200kW 100. 闭式水泵时长 → Entry(name="unit13_closed_pump", ...) → 节能量=时长×18.5kW 101. 除盐水泵时长 → Entry(name="unit13_demineral_pump", ...) → 节能量=时长×15kW 102. 真空滤油机时长 → Entry(name="unit13_vacuum_filter", ...) → 节能量=时长×120kW 103. 排烟风机时长 → Entry(name="unit13_fan", ...) → 节能量=时长×4kW 104. 五项节能量显示 → Label(name="unit13_energy1/2/3/4/5", ...) → 实时计算同上五公式 十八、节能数据-#14机组辅机区块 105. 同#13,变量名unit14,功率相同 十九、节能数据-总节能量区块 106. 总节能量显示 → Entry(name="total_saving", readonly=True, textvariable=energy_saving_data['total_saving']) → 公式:Σ(空调+全部泵节能量) 107. 保存节能大按钮 → Button(text="保存节能数据", command=save_energy_saving_data) → INSERT energy_saving_data全字段+弹分析窗 二十、设备可靠性数据录入区块 108. 设备选择标签 → Label(text="选择设备:") → 固定15项表:#11燃机…刀闸统计表 109. 添加记录按钮 → Button(text="添加记录") → 弹窗:序号Entry+停止日期DateEntry+停止时间Entry(4位冒号)+设备状态Combobox(备用/小修/中修)+启动日期DateEntry+启动时间Entry 110. 删除选中按钮 → Button(text="删除选中") → 确认后DELETE再INSERT 111. 保存可靠性按钮 → Button(text="保存数据") → 写device_reliability_data 二十一、数据查询区 112. 运行数据查询页签 → Label(text="运行数据查询") → 过滤:操作类型=运行数据,LIMIT 50 OFFSET (page-1)50 113. 可靠性/节能查询页签 → 同上,换表名 114. 查询按钮 → Button(text="查询") → 后台线程SELECT 115. 分页四按钮 → Button(text="首页/上一页/下一页/末页") → OFFSET公式同上 二十二、智能分析区 116. 趋势图标题 → Label(text="趋势图分析") → 无公式 117. 加载趋势按钮 → Button(text="加载30天趋势") → SQL:近30天`daily_final.日期、全厂合计、全厂上网、发电单耗`→plot(date,全厂合计) 二十三、系统菜单 118. 备份数据库 → Menu(label="备份数据库", command=backup_db) → 保留10份循环 119. 恢复数据库 → Menu(label="恢复数据库", command=restore_db) → 选中最新backup→copy2覆盖 120. 初始化数据库 → Menu(label="初始化数据库", command=init_database) → DROP+CREATE全部表,二次确认 121. 导出统计报表 → Menu(label="导出统计报表", command=export_statistics) → 任意起止汇总:总发电量=Σ(全厂合计),平均日发电量=AVG(全厂合计) 122. 查看日志 → Menu(label="查看日志", command=view_logs) → os.startfile打开logs/error_log_yyyymmdd.txt 所有公式已集中示,界面文字与控件名一一对应,可直接照单验收。 这是你需要做的软件的所有功能,你必须完全实现他不能漏
11-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值