经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 职业生涯 » 查看文章
花了一天时间帮财务朋友开发了一个实用小工具
来源:cnblogs  作者:程序员晓凡  时间:2024/8/19 15:44:34  对本文有异议

大家好,我是晓凡。

写在前面

不知道大家有没有做财务的朋友,我就有这么一位朋友就经常跟我抱怨。一到月底简直就是噩梦,总有加不完的班,熬不完的夜,做不完的报表。

来自朋友的抱怨

一听到这儿,这不就一活生生的一个“大表哥”么,这加班跟我们程序员有得一拼了,忍不住邪恶一笑,心里平衡了很多。

身为牛马,大家都不容易啊。我不羡慕你数钱数到手抽筋,你也别羡慕我整天写CRUD 写到手起老茧??

吐槽归吐槽,饭还得吃,工作还得继续干。于是乎,真好赶上周末,花了一天的时间,帮朋友写了个小工具

一、功能需求

跟朋友吹了半天牛,终于把需求确定下来了。就一个很简单的功能,通过名字,将表一和表二中相同名字的金额合计。

具体数据整合如下图所示

数据整合

虽然一个非常简单的功能,但如果不借助工具,数据太多,人工来核对,整合数据,还是需要非常消耗时间和体力的。

怪不得,这朋友到月底就消失了,原来时间都耗在这上面了。

二、技术选型

由于需求比较简单,只有excel导入导出,数据整合功能。不涉及数据库相关操作。

综合考虑之后选择了

  • PowerBuilder
  • Pbidea.dll

使用PowerBuilder开发桌面应用,虽然界面丑一点,但是开发效率挺高,简单拖拖拽拽就能完成界面(对于前端技术不熟的小伙伴很友好)

其次,由于不需要数据库,放弃web开发应用,又省去了云服务器费用。最终只需要打包成exe文件即可跑起来

Pbidea.dll 算是Powerbuilder最强辅助开发,没有之一。算是PBer们的福音吧

三、简单界面布局

界面布局1

界面布局2

界面布局3

四、核心代码

① 导入excel

  1. string ls_pathName,ls_FileName //路径+文件名,文件名
  2. long ll_Net
  3. long rows
  4. dw_1.reset()
  5. uo_datawindowex dw
  6. dw = create uo_datawindowex
  7. dw_1.setredraw(false)
  8. ll_Net = GetFileSaveName("请选择文件",ls_pathName,ls_FileName,"xlsx","Excel文(*.xlsx),*.xlsx")
  9. rows = dw.ImportExcelSheet(dw_1,ls_pathName,1,0,0)
  10. destroy dw
  11. dw_1.setredraw(true)
  12. MessageBox("提示信息","导入成功 " + string(rows) + "行数据")

② 数据整合

  1. long ll_row,ll_sum1,ll_sum2
  2. long ll_i,ll_j
  3. long ll_yes
  4. string ls_err
  5. //重置表三数据
  6. dw_3.reset()
  7. //处理表一数据
  8. ll_sum1 = dw_1.rowcount( )
  9. if ll_sum1<=0 then
  10. ls_err = "表1 未导入数据,请先导入数据"
  11. goto err
  12. end if
  13. for ll_i=1 to ll_sum1
  14. ll_row = dw_3.insertrow(0)
  15. dw_3.object.num[ll_row] =ll_row //序号
  16. dw_3.object.name[ll_row]=dw_1.object.name[ll_i] //姓名
  17. dw_3.object.salary[ll_row]=dw_1.object.salary[ll_i] //工资
  18. dw_3.object.endowment[ll_row]=dw_1.object.endowment[ll_i] //养老
  19. dw_3.object.medical[ll_row]=dw_1.object.medical[ll_i] //医疗
  20. dw_3.object.injury[ll_row]=dw_1.object.injury[ll_i] //工伤
  21. dw_3.object.unemployment[ll_row]=dw_1.object.unemployment[ll_i] //失业
  22. dw_3.object.publicacc[ll_row]=dw_1.object.publicacc[ll_i] //公积金
  23. dw_3.object.annuity[ll_row]=dw_1.object.annuity[ll_i] //年金
  24. next
  25. //处理表二数据
  26. ll_sum2 = dw_2.rowcount( )
  27. if ll_sum2<=0 then
  28. ls_err = "表2未导入数据,请先导入数据"
  29. goto err
  30. end if
  31. for ll_j =1 to ll_sum2
  32. string ls_name
  33. ls_name = dw_2.object.name[ll_j]
  34. ll_yes = dw_3.Find("name = '"+ ls_name +"' ",1,dw_3.rowcount())
  35. if ll_yes<0 then
  36. ls_err = "查找失败!"+SQLCA.SQLErrText
  37. goto err
  38. end if
  39. if ll_yes = 0 then //没有找到
  40. ll_row = dw_3.InsertRow (0)
  41. dw_3.ScrollToRow(ll_row)
  42. dw_3.object.num[ll_row] = ll_row //序号
  43. dw_3.object.name[ll_row] = dw_1.object.name[ll_j] //姓名
  44. dw_3.object.salary[ll_row] = dw_1.object.salary[ll_j] //工资
  45. dw_3.object.endowment[ll_row] = dw_1.object.endowment[ll_j] //养老
  46. dw_3.object.medical[ll_row] = dw_1.object.medical[ll_j] //医疗
  47. dw_3.object.injury[ll_row] = dw_1.object.injury[ll_j] //工伤
  48. dw_3.object.unemployment[ll_row] = dw_1.object.unemployment[ll_j] //失业
  49. dw_3.object.publicacc[ll_row] = dw_1.object.publicacc[ll_j] //公积金
  50. dw_3.object.annuity[ll_row] = dw_1.object.annuity[ll_j] //年金
  51. end if
  52. if ll_yes >0 then //找到
  53. dec{2} ld_salary,ld_endowment,ld_medical,ld_injury,ld_unemployment,ld_publicacc,ld_annuity
  54. ld_salary = dw_3.object.salary[ll_yes] + dw_2.object.salary[ll_j]
  55. ld_endowment = dw_3.object.endowment[ll_yes] + dw_2.object.endowment[ll_j]
  56. ld_medical = dw_3.object.medical[ll_yes] + dw_2.object.medical[ll_j]
  57. ld_injury = dw_3.object.injury[ll_yes] + dw_2.object.injury[ll_j]
  58. ld_unemployment = dw_3.object.unemployment[ll_yes] + dw_2.object.unemployment[ll_j]
  59. ld_publicacc = dw_3.object.publicacc[ll_yes] + dw_2.object.publicacc[ll_j]
  60. ld_annuity = dw_3.object.annuity[ll_yes] + dw_2.object.annuity[ll_j]
  61. dw_3.object.salary[ll_yes]= ld_salary //工资
  62. dw_3.object.endowment[ll_yes]=ld_endowment //养老
  63. dw_3.object.medical[ll_yes]=ld_medical //医疗
  64. dw_3.object.injury[ll_yes]=ld_injury //工伤
  65. dw_3.object.unemployment[ll_yes]=ld_unemployment //失业
  66. dw_3.object.publicacc[ll_yes]=ld_publicacc //公积金
  67. dw_3.object.annuity[ll_yes]=ld_publicacc //年金
  68. end if
  69. next
  70. return 0
  71. err:
  72. messagebox('错误信息',ls_err)

③ excel导出

  1. string ls_err
  2. string ls_pathName,ls_FileName //路径+文件名,文件名
  3. long ll_Net
  4. if dw_3.rowcount() = 0 then
  5. ls_err = "整合数据为空,不能导出"
  6. goto err
  7. end if
  8. uo_wait_box luo_waitbox
  9. luo_waitbox = create uo_wait_box
  10. luo_waitBox.OpenWait(64,RGB(220,220,220),RGB(20,20,20),TRUE,"正在导出 ", 8,rand(6) - 1)
  11. long rows
  12. CreateDirectory("tmp")
  13. uo_datawindowex dw
  14. dw = create uo_datawindowex
  15. ll_Net = GetFileSaveName("选择路径",ls_pathName,ls_FileName,"xlsx","Excel文(*.xlsx),*.xlsx")
  16. rows = dw.ExportExcelSheet(dw_3,ls_pathName,true,true)
  17. destroy dw
  18. destroy luo_waitbox
  19. MessageBox("提示信息","成功导出 " + string(rows) + " 行数据")
  20. return 0
  21. err:
  22. messagebox('错误信息',ls_err)

五、最终效果

财务辅助系统

这次分享就到这吧,★,°:.☆( ̄▽ ̄)/$:.°★ 。希望对您有所帮助,也希望多来几个这样的朋友,不多说了, 蹭饭去了

我们下期再见ヾ(?ω?`)o (●'?'●)

原文链接:https://www.cnblogs.com/xiezhr/p/18366585

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号