2

在 SharePoint MOSS 2007 中,我创建了一个将应用于文档库的自定义内容类型。其中一个必填字段是“收货日期”,另一个是“截止日期”。

截止日期总是从收货日期算起 10 个工作日。接收日期是收发室收到信件的时间,不一定是文件被邮寄到图书馆的时间。

从这里:http: //msdn.microsoft.com/en-us/library/bb862071.aspx

=DATE(YEAR([Incoming Date]),MONTH([Incoming Date]),DAY([Incoming Date])+10)

增加10天,但我怎样才能增加10个工作日?根据我们共享点推出的治理计划,我也没有 VS.NET 的奢侈。

假设一个人负责数据输入,但我想让他们更容易。

4

4 回答 4

4

对于非常具体的“10 天”要求来说,这是多余的,但这应该计算从任何 start date 开始的任何天数的到期日期。

我编写它是为了匹配 Excel 的 WORKDAY 函数的结果(考虑到计算字段中的每个函数都是 Excel 函数,它几乎应该是一个东西)。它经过了 1 到 146 天的“完成天数”、一周中的每一天以及多年的测试,没有任何不一致的迹象。除非我从 Excel 复制它时打错字,否则它应该像宣传的那样工作。唯一的缺点是它不做假期,但如果用户习惯了 SharePoint,他们无论如何也不会有期望。完全没有。任何形式的。为了任何东西。或者希望。或者他们脸上曾经负责微笑的肌肉。或者看着一个孩子的能力,除了死亡枯萎的凄凉确定性之外,还能看到任何东西。所以,如果他们的任务是在圣诞节到期,这没什么大不了的。它也比它可能需要的更草率。

=[Start Date]+[Days to Complete] 
+ ROUNDDOWN([Days to Complete]/5,0)*2 
+ IF(WEEKDAY([Start Date])+MOD([Days to Complete],5)>=7,2,0)
- ROUNDDOWN(WEEKDAY([Start Date])/7,0) 
+ IF(AND(MOD([Days to Complete],5)=0,WEEKDAY([Start Date])=1),-2,0)  
+ IF(AND(MOD([Days to Complete],5)=0,WEEKDAY([Start Date])=7),-2,0)  

第一行是……很明显。第二行增加了周末。并且接下来的 4 行针对第二行的不足进行了调整。

于 2013-04-24T15:50:42.447 回答
2

首先,我应该指出,您正在努力研究该公式,这将起到同样的作用。

=[入境日期] + 10

从您发现 10 个工作日 (MF) 将始终有 2 个周末的评论中,您可以使用它

=[入境日期] + 14

但这仍然没有考虑到假期

如果没有工作流程中的一些自定义代码,或者可能没有一些javascript 'hack'和您所在地区的假期数据库,您将无法做到这一点。

一种可能性是将您的到期日期默认为创建记录后的 10 个工作日

=今天+14

如果该期间有假期,请依靠您的用户手动更改此日期。

在我刚刚写的博客条目中对此有更多详细信息 - SharePoint 计算列中的工作日、周末和假期

于 2008-11-21T15:23:52.547 回答
0

也许您可以通过使用工作流(可能是自定义的)来管理截止日期来解决这个限制?截止日期意味着它是一个可操作的项目,无论如何都应该分配给某人。

请注意,VS.NET 不一定是奢侈品——您可以免费使用它。

于 2008-11-20T19:59:29.510 回答
0

我相信我已经找到了一种相当可靠的方法来计算 10 个工作日的最后期限,其中包括假期和周末。1) 计算 2 周期间是否为星期一,如果是,则仅添加 11 天(假设开始日算作 10 天期间的第 1 天)。否则,将 13 加到 10 个工作日加上两个周末(请记住,开始日期已经算作第 1 天;如果您没有将开始日期算作第 1 天,您的变量将是 12 和 14)。2) 为每个假期创建一个唯一的计算列,如果假期在该范围内,则返回值 1。3) 通过将值(周末和节假日)添加到您的开始日期来确定您的“总日期”。4) 确定您的总日期是在周六还是周日,如果是,请返回适当的天数以推迟到周一。

注意:我在这里看到的唯一挑战是假期是否将截止日期推到周末,然后将截止日期推到恰好是另一个假期的星期一。这在我的假期安排中没有发生,但它可能在你的安排中发生。此外,您每年都需要不断添加新的假期,因此需要您从头开始重新创建列数组以获得长期运行的列表。或者,您可以每年开始一个新列表。

C_Wknd  =IF(TEXT(WEEKDAY([Complaint Created On]),"ddd")="Mon",11,13)

C_NYDay =IF(AND([Complaint Created On]<=DATE(2009,1,1),([Complaint Created On])+C_Wknd>=DATE(2009,1,1)),"1","0")

C_MLKDay    =IF(AND([Complaint Created On]<=DATE(2009,1,19),([Complaint Created On])+C_Wknd>=DATE(2009,1,19)),"1","0")

C_MemDay    =IF(AND([Complaint Created On]<=DATE(2009,5,25),([Complaint Created On])+C_Wknd>=DATE(2009,5,25)),"1","0")

C_PresDay   =IF(AND([Complaint Created On]<=DATE(2009,2,16),([Complaint Created On])+C_Wknd>=DATE(2009,2,16)),"1","0")

C_IndDay    =IF(AND([Complaint Created On]<=DATE(2009,7,4),([Complaint Created On])+C_Wknd>=DATE(2009,7,4)),"1","0")

C_LabDay    =IF(AND([Complaint Created On]<=DATE(2009,9,7),([Complaint Created On])+C_Wknd>=DATE(2009,9,7)),"1","0")

C_ColDay    =IF(AND([Complaint Created On]<=DATE(2009,10,12),([Complaint Created On])+C_Wknd>=DATE(2009,10,12)),"1","0")

C_VetDay    =IF(AND([Complaint Created On]<=DATE(2009,11,11),([Complaint Created On])+C_Wknd>=DATE(2009,11,11)),"1","0")

C_ThxDay    =IF(AND([Complaint Created On]<=DATE(2009,11,26),([Complaint Created On])+C_Wknd>=DATE(2009,11,26)),"1","0")

C_XmsDay    =IF(AND([Complaint Created On]<=DATE(2009,12,25),([Complaint Created On])+C_Wknd>=DATE(2009,12,25)),"1","0")

C_GrossDte  =[Complaint Created On]+C_Wknd+C_NYDay+C_MLKDay+C_MemDay+C_PresDay+C_IndDay+C_LabDay+C_ColDay+C_VetDay+C_ThxDay+C_XmsDay

C_EndSat    =IF(TEXT(WEEKDAY(C_GrossDte),"ddd")="Sat",2,0)

C_EndSun    =IF(TEXT(WEEKDAY(C_GrossDte),"ddd")="Sun",1,0)

Resolution Due  =C_GrossDte+C_EndSat+C_EndSun
于 2009-03-06T22:42:47.700 回答