设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 5885|回复: 10
打印 上一主题 下一主题

[模块/函数] 【Access小品】哥德巴赫折腾--关于工厂日历的示例

[复制链接]
跳转到指定楼层
1#
发表于 2010-10-10 20:59:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 todaynew 于 2010-10-11 17:22 编辑

   版友yanwei82123300连发两贴求问关于工厂日历的问题。大意是工厂的财政年度为每年的10月1日开始到次年的9月30日,从所发的表格和图示来看,每月的结账日大约在月末的某个周五。版友yanwei82123300同志几番解释均不得要领,于是便引起了若干好事者(包括鄙人)进行哥德巴赫猜想。几经分析,在下以为这样的设计相对合理:会计的结账日期一般应在20前后,且低于20日的日数应该相对操过20日的日数要少很多,也就是说最早的结账日不应该低于18日。按照这个思路帮助版友yanwei82123300写了一个函数。为了进一步拓展版友yanwei82123300的思维,又按照倒数第二个周五为月末结账日写了一个函数。其实也不知道是否真的符合该同志的需要。

  由这个问题可以看出,在程序的设计和开发过程中,需要对既有的管理习惯进行一个规范,使之具有规律,并且可以用程序体现出这个规律来。这个问题估计是开发中最难的事情,改变人的习惯很不容易。





又仔细看了一下图示,发现该图的规律应该为每季中月度的周数是按照445分配的(1月和12月除外),按照此规律,编写万年历如下:






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
11#
 楼主| 发表于 2010-10-11 17:23:33 | 只看该作者
todaynew ;老师辛苦了!真是大公无私!!
yanwei82123300 发表于 2010-10-11 16:21

版主都是活雷锋。

10#
发表于 2010-10-11 16:21:51 | 只看该作者
todaynew ;老师辛苦了!真是大公无私!!
9#
发表于 2010-10-11 13:35:10 | 只看该作者
学习
谢谢分享

点击这里给我发消息

8#
发表于 2010-10-11 13:21:44 | 只看该作者
不容易呀,老汉辛苦了!
7#
发表于 2010-10-11 09:47:28 | 只看该作者
还得向TODAYNEW学习写自定义函数!
6#
 楼主| 发表于 2010-10-11 06:51:52 | 只看该作者
我觉得楼主的猜想还是有点距离
aslxt 发表于 2010-10-10 22:42

有道理,应该是第三个示例:





Function Calendar3(Ddate As Date) As String
'功能:每季度按445周的的工厂日历
Dim Mydate As Date
Dim str As String
Dim i As Long, j As Long, m
Mydate = DateSerial(Ddate - 1, 10, 1)
str = str & 1 & ";" & Mydate & ";"
If Weekday(Mydate, vbMonday) <> 6 Then
    Mydate = DateAdd("d", 21, Mydate)
    For j = 1 To 7
        If Weekday(Mydate, vbMonday) = 5 Then
                Exit For
        End If
        Mydate = DateAdd("d", 1, Mydate)
    Next
Else
    Mydate = DateAdd("d", 20, Mydate)
End If
str = str & Mydate & ";"
m = 0
For i = 1 To 4
    For j = 1 To 3
        m = m + 1
        If m = 12 Then Exit For
        If m <> 1 Then
            str = str & m & ";" & DateAdd("d", 1, Mydate) & ";"
            If j <> 3 Then
                Mydate = DateAdd("d", 28, Mydate)
            Else
                Mydate = DateAdd("d", 35, Mydate)
            End If
            str = str & Mydate & ";"
        End If
    Next
    If m = 12 Then Exit For
Next
str = str & m + 1 & ";" & DateAdd("d", 1, Mydate) & ";" & DateSerial(Ddate, 9, 30)
Calendar3 = str
End Function

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
发表于 2010-10-11 00:09:07 | 只看该作者
恭喜todaynew !!!
4#
发表于 2010-10-10 22:42:47 | 只看该作者

我觉得楼主的猜想还是有点距离
3#
发表于 2010-10-10 22:39:55 | 只看该作者
佩服啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-11 06:05 , Processed in 0.094191 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表