夜雨聆风学习资料网

ARTICLE · 1119194

Excel联网版VBA系统:多维度排班系统的实现逻辑

Excel联网版VBA系统:多维度排班系统的实现逻辑
。

导读

自动一键排班, 批量二次调整, 单独调整个别人, 排班颗粒度由粗到细, 由大大小, 完全由系统一键完成, 支持连上休1, 支持最大休息人数限制, 支持指定每周/每月固定休息日, 同部门错峰排休, 节假日出勤设置, 排班结果跨月关联......, 让排班更透明, 让轮休更公平, 老板再也不用绞尽脑汁地安排谁出勤谁休息, 只需1秒即可出结果, 这就是联网版VBA系统实现的多维度排班功能。

实现原理: 根据自动排班规则一键自动排班, 根据个性化规则二次排班调整, 根据特别员工单独排班调整, 实现多维度,立体化,无死角,一站式一键式排班. 

这里有几个重点也是难点需要克服:1. 排版规则的逻辑设计; 2. 不同规则间发生冲突时的排他设计; 3. 排班规则间的优先级设计; 4. 关联表结构间的设计

本文重点介绍核心逻辑的核心事件.

步骤1: 窗体设计

通用排班规则窗体
排班结果窗体
二次调整规则窗体

个体排班结果单独调整窗体

步骤2: 保存自动排版规则

将当前勾选和填写的规则保存到数据库逻辑:

① 判定保存对象(优先员工,其次部门,其次全局)

② 校验输入合法性

③ 先删后插,避免重复

④ 分别写入4类规则

⑤ 刷新界面回显

步骤3:自动排班

自动排班算法是核心中的核心,被拆分成了如下几块儿, 主体方法是计算相位

步骤4:计算相位方法

该方法是"同一个部门内、不同员工之间"错开休息日"的关键机制, 相位即部门内每个员工比第1个人"晚休几天"的偏移量, 原理是按部门内员工序号(0、1、2……)对周期取模,得到 0~周期-1 的相位, 其核心作用是让同部门员工休息日错开,避免全员同日休导致部门瘫痪.

步骤5:二次排班(即重排)

即根据手动规则,重新排班选中员工, 支持三种场景:

  A. 指定具体休息日:手动休息日 → 强制休(占用上6休1的"1")

  B. 指定周几休息:手动休息日 → 强制休(占用上6休1的"1")

  C. 指定节假日上班:手动上班日 → 强制上班(顺延连上计数)

其它仍按原规则排, 结果不受影响.

步骤6: 单独排班

基于已经排好的结果再次进行微调, 相对于自动排和二次调整,单独排的范围将大大缩小, 多用于对个别人员个别时间的调整.

步骤7:排班结果展示

该环节充分利用了mysql自身的优势,因为通过前述步骤的操作,排班结果已经存储在数据库中,只不过存储结构和需要显示的格式不太一致, 而sql命令可以很灵活的按需要的格式对原始数据进行组装, vba只需要调用并显示出来即可.

通过看打到日志文件中的sql命令会更直观.

因为涉及情况比较多, 所以看起来比较长,执行一下就一目了然了.

虽然在查询方面msyql直接处理比通过VBA来处理效率要高得多,但也不总是这样.

比如,一开始的时候自动排班是通过msyql的存储过程实现的(见下图),最终效果虽然和上面一样,但执行效率却低得多,大概需要15秒,而把这个逻辑写到VBA中则耗时不到1秒钟.

如果你想进一步了解差别如此之大的原因, 可以去问问AI

视频效果演示:
#VBA匠人 #vba编程 #左手Excel右手Vba
猜您喜欢
往期精选▼

VBA工具合集,复杂工作一键搞定

Excel VBA伙同Mysql把专业仓储系统逼到墙角

Excel + MySQL 混搭,竟搭出钢轨探伤"黑科技"

花50万买的科研平台,不如我Excel+MySQL 

MySQL+Excel+VBA让我卸载了所有金融终端

小团队根本不用买系统,Excel VBA反而更管用

我用Excel VBA,手搓了一套中英泰三语种ERP

别笑我用Excel记账,你的财务软件未必比我快

Excel VBA+ MySQL炼成的薪资管理神器

Excel VBA搭上MySQL,跑出一套生产管理ERP

这个绿油油的Excel界面,让老板放弃进销存软件

识别二维码

关注视频号

VBA匠人

长按

关注

立即添加星标

每天学好教程

相关学习资料