Значения столбца SharePoint по умолчанию - добавьте 10 рабочих дней - PullRequest
2 голосов
/ 20 ноября 2008

В 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 в соответствии с планом управления нашего развертывания на sharepoint.

Предположим, что за ввод данных отвечает человек, но я бы хотел, чтобы им было легче.

Ответы [ 4 ]

4 голосов
/ 24 апреля 2013

Это слишком много для очень специфического требования «10 дней», но при этом следует рассчитать срок оплаты для любого количества дней с любой даты начала .

Я написал его так, чтобы он соответствовал результату функции WORKDAY в Excel (которая, учитывая, что каждая функция в вычисляемом поле является функцией 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 строки исправляют недостатки второй строки.

2 голосов
/ 21 ноября 2008

Во-первых, я должен отметить, что вы усердно работаете над этой формулой, это будет делать то же самое.

= [Дата поступления] + 10

Из комментариев вы выяснили, что 10 рабочих дней (M-F) всегда будут иметь 2 выходных, поэтому вы можете использовать это

= [Дата поступления] + 14

Но это по-прежнему не учитывает праздники

Вы не сможете сделать это без какого-либо специального кода в рабочем процессе или, возможно, с помощью javascript 'hack' и базы данных праздничных дней для вашего региона.

Одной из возможностей будет установка даты исполнения по умолчанию на 10 рабочих дней с момента создания записи

= Сегодня + 14

и затем положитесь на своих пользователей, чтобы вручную изменить эту дату, если в этот период есть праздники.

Подробнее об этом можно прочитать в записи блога, которую я только что написал - Рабочие дни, выходные и праздничные дни в вычисляемых столбцах SharePoint

0 голосов
/ 07 марта 2009

Мне кажется, я нашел достаточно пуленепробиваемый метод для расчета 10-дневного срока, который учитывает праздничные и выходные дни. 1) Рассчитайте, является ли двухнедельный период понедельником, и, если да, добавьте только 11 дней (при условии, что начальный день считается днем ​​1 вашего 10-дневного периода). В противном случае вы добавляете 13 к счету за 10 рабочих дней плюс два выходных (помните, что начальная дата уже считается Днем1; ваши переменные будут 12 и 14, если вы НЕ посчитали начальную дату Днем1). 2) Создайте уникальный рассчитанный столбец для каждого выходного дня и верните значение 1, если выходной попадает в диапазон. 3) Определите свою «валовую дату», добавив значения (выходные и праздничные дни) к дате начала. 4) Определите, выпадает ли ваша общая дата на субботу или воскресенье, и если да, то верните соответствующее количество дней, чтобы отложить до понедельника. 5) Добавьте все выходные, праздничные дни и добавленные значения субботы и воскресенья к дате начала, в которой указана дата оплаты.

ПРИМЕЧАНИЕ. Единственные проблемы, которые я вижу здесь, это то, что выходной день переносит срок оплаты в выходные дни, а затем переносит срок оплаты в понедельник, который, как оказалось, является еще одним выходным днем. Это не произошло в моем графике праздников, но, возможно, в вашем. Кроме того, вам нужно будет добавлять новые праздники каждый год, поэтому вам потребуется заново создавать массивы столбцов для создания длинного списка. Кроме того, вы можете начать новый список каждый год.

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
0 голосов
/ 20 ноября 2008

Возможно, вы можете обойти это ограничение, используя рабочий процесс (возможно, собственный) для управления датой исполнения? Дата исполнения подразумевает, что это действующий элемент, который в любом случае должен быть назначен кому-либо.

Обратите внимание, что VS.NET не должен быть роскошью - вы можете использовать его бесплатно .

...