连续10小时的战斗
昨天从下午2点到晚上12点,我用了接近10个小时(吃饭+洗澡半小时)去解决一个一键打印的功能。而之所以会这么郁闷,完全是因为制造各种称的大头托利自身散粮称保存数据的模式有点神,说不准他们为什么一定得这么干,这有什么好处,但显然可能这是由来已久的问题。也正是因为这样,过去十年来,我们单位都在默默忍受着这种神奇,而没有像地磅那样,早就已经忍不住要改掉,因为散粮称要比地磅复杂很多。下午我用了几乎一整个上班时间在我的电脑上用模拟的数据研究该怎么去做。在整了两个多小时以后,我总算OK了,当我带着优盘去中控室实战的时候,我知道肯定还会有意外。因为数据模式这种东西,我实在很难预测。去到中控室的时候,基本已经是白班的下班时间。在那里,我把自己折腾了一个下午的方法套进去,套到你一半我就发现这样是不行的。我在那里停留了两个小时,没什么思路,大概是因为饿了,于是我把数据拷走一部分做测试,在回办公楼的路上一直在思考。从那时开始,我就已经有了个念头,我要重新从结构开始,重新规划。因为他们每一个ID流程号的第一条数据每次都会存在净重跟上一个ID流程号最后一条完全一致,但实际上这个第一条他们是不计入新ID总重量的。从前我不明白为什么他们的数据库里面有一列叫做最后一称。在我没到现场,去看这个问题的时候,我会猜想会不会他们把所有数量都跟这个最后一称拉上关系?如果他们把普通的设为1,第一称设为0,所有净重都和这个系数相乘然后累加得出的数是它们的总重量,这就不成问题。但从数据库看来,不是这回事。
在模拟数据的时候,我是可以在表里选择日期的第一条记录或者日期的最小值,获得正确的数据,但实际上在他们的表格里日期的最小值和日期的第一条记录不是一回事。日期的第一条记录不对,我可还可以用日期的最小值,但是如果在做净重的时候,第一条记录无法使用,我没办法用最小值去代替。晚上我又折腾了一两个小时去考虑这个问题,最终我的网友告诉我,表的存储没有时间先后的顺序。所有顺序都是要靠自己手动排序,听了他的那句话以后,我有个灵感就是要把原始的表用一个查询重新按照我希望的顺序排列,最终做到的效果是日期的最小值和日期第一条记录一致。做到了这一步以后,我终于得到了正确信息的条目。我的做法是筛选出每个ID的第一条记录,然后取负数,用那个负数跟原表做一个联合查询,也就是把他们的数据放在一个查询表里。把这个查询作为流水数据的修正版,然后再用之前的筛选方式和联结模式查询。以上我已经在昨晚做到,对比数据,90%已经一致,不一致的部分估计跟操作员的某些操作有关。今天早上我又在早餐前把斗数也修正了。在排列数据的时候我以计数净重的方式生成一个叫做斗数的条目,然后在筛选ID第一条记录的时候同时把斗数设为负数,联合查询操作加入斗数列,最后汇总计算的时候斗数的计算方式从之前的净重计数变成净重求和。这样操作下来,连真算入总重量的斗数也都一同修正了。
10个小时不算多,但对一个普通人来说,这很变态了。我觉得收获满满,虽然只是做了那么一件很简单的事而已。在Excel之后我觉得自己总算有点儿入门Access了。