Вьюшка по периодам

  • Автор темы Sandro
  • Дата начала
S

Sandro

Гость
#1
Подскажите плиз, может у кого что то подобное есть, сделать нужно как всегда "вчера", а сообразить не могу (((


Как можно сделать вьюшку формата из документов в котором есть 2 поля даты (период)

ГОД
-> Квартал
->Документы

И аналогично,

Год
-> Месяц
->Документы
 
S

Sandro

Гость
#3
Ну я категоризацию и имел в виду, нужно что бы документ попадал в период указанных 2-х дат

То есть , период 01.01.2011 - 01.04.2011

2011
->I квартал
Этот док
->II квартал
Этот док

Ну это в идеале, по минимуму просто по одной дате сделать
 

alik86

Well-Known Member
Lotus team
20.11.2008
465
1
Беларусь, Мiнск
#4
Ну так в формулу отбора впишите, что @Year(DateField) = 2011 & @Month(DateField) <= 4 -- подробней сами разберетесь.
Во вьюшке тоже никто не мешает завести поле с формулой, высчитывающей квартал под который попадает дата из DateField.
 
S

Sandro

Гость
#5
Может я туплю ))) Но года то разные могут быть, не только 2011
 

alik86

Well-Known Member
Lotus team
20.11.2008
465
1
Беларусь, Мiнск
#6
Если Вам надо вьюшка только за один год, то в формуле отбора @Year(DateField) = 2011 и т.п., если по всем годам, то делаете категоризованую колонку @Year(DateField), дальше категоризованую колонку кварталов, месяцев ну или чего там еще...
 
S

Sandro

Гость
#7
:) Да это то понятно, не могу догнать как сделать по периоду (в данном случае годов) , то есть 2 поля с датами задающих период , а как по 2-м сделать? Что б в данном случае по годам попадало если период больше одного года и можно ли так вообще. Сорри если туплю )))
 

wowa

Well-Known Member
01.02.2007
845
0
#8
Sandro , лично мне ничего не понятно что вы хотите....
получи месяц из даты(поля),
далее, если Янв,Февр, Март, то это Q1
если Апр,Май.... Q2

и т.д.
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#9
Если я правильно понял, то Sandro нужно, чтобы документ попадал во все категории между Дата1 и Дата2, причём даты могут быть в разных годах.
Кроме танцев вокруг @Explode(dateRange) (сервер повесится) либо циклов ничего на ум не приходит. Может поглядеть в сторону календарных представлений?
 

leiba

Well-Known Member
Lotus team
18.06.2010
47
0
46
Москва
#10
Sandro
А в какие категории должен попасть документ если даты периода из разных кварталов?
 

wowa

Well-Known Member
01.02.2007
845
0
#11
что-то типа
Код:
_month = @Month(DateField);
Quarter := @if(_month = 1;"Q1";
_month = 2;"Q1";
_month = 3;"Q1";
.........................
_month = 12;"Q4"
);
@year(DateField) + Quarter
 
S

Sandro

Гость
#13
nvy правильно понял, смысл такой, есть документ с периодом действия , период задаётся на форме двумя полями-датами.

Задача вьюхи: Пользователю надо посмотреть определённый период времени (год, месяц, квартал) и увидеть какие документы были действительны на тот период.
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#14
Задача вьюхи: Пользователю надо посмотреть определённый период времени (год, месяц, квартал) и увидеть какие документы были действительны на тот период.
Так может проще научить пользователя пользоваться поиском? В крайнем случае поисковую форму сделать. Если же очень надо именно такое категоризованное представление, то, кмк, лучше в самом документе "растиражировать" месяцы и кварталы в многозначных полях, чтобы не грузить сервер никчемной работой. Для новых документов вычислять в Querysave, для старых пройтись агентом.
 
S

Sandro

Гость
#15
:happy: Я ж не против, для меня Лотус пока "тёмный лес", разбираюсь по тихоньку, думал может есть какие нить "стандартные" способы.
 
P

Partizanka

Гость
#16
Можно темку подниму, т.к. она для меня на данный момент актуальна...
Точно также, как и у автора есть форма с двумя полями (начало и конец периода - могут охватывать несколько лет). Тоже сначала пыталась как-то вьюшку категоризировать - ничего не вышло :)) Поняла, что нужно поле формировать со списком кварталов на форме - но что-то никак не могу сообразить как... ;))
Понятно, что сначала разбиваем по годам, т.е. цикл For i = Year(DateBegin) to Year(DateEnd). В цикле начинаем считать кварталы... вот тут я заблудилась... т.е. получается нужно искать пересечение подмножеств :)) - периода квартала и собственно периода, который в документе задан... КАК??? помогите мыслями, ПОЖАЛУЙСТА!!!!
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#18
А кварталы, собственно, причём? Если нужно отобразить документы за период, кмк, будет проще отобрать их в коллекцию и положить в приватную папку, внедрённую на форму. Как работать с приватными папками на форуме не одна тема.
 
#19
Можно темку подниму, т.к. она для меня на данный момент актуальна...
Точно также, как и у автора есть форма с двумя полями (начало и конец периода - могут охватывать несколько лет). Тоже сначала пыталась как-то вьюшку категоризировать - ничего не вышло :)) Поняла, что нужно поле формировать со списком кварталов на форме - но что-то никак не могу сообразить как... :))
Понятно, что сначала разбиваем по годам, т.е. цикл For i = Year(DateBegin) to Year(DateEnd). В цикле начинаем считать кварталы... вот тут я заблудилась... т.е. получается нужно искать пересечение подмножеств :)) - периода квартала и собственно периода, который в документе задан... КАК??? помогите мыслями, ПОЖАЛУЙСТА!!!!
Если религия не запрещает использовать циклы в собаках, то можно как-то так:
Код:
yearStart := @Year( startDate );
yearEnd := @Year( endDate );
@For( year:=yearStart; year<=yearEnd; year:=year+1;
@Do(
qStart := @If( year = yearStart; @Integer( @Month( startDate ) / 4 ) + 1; 1 ); 
qEnd := @If( year = yearEnd; @Integer( @Month( endDate ) / 4 ) + 1; 4 );
@For(q := qStart; q <= qEnd; q := q + 1;
res:=res:(@Text(q)+ "'" + @Text(year))
)
)
);
@Trim(res);
такая собака возможно не самая оптимальная по производительности. можно убрать перебор полных лет, обрабатывая отдельно три варианта: yearEnd = yearStart , yearEnd = yearStart + 1 , yearEnd > yearStart + 1
Поле на форме - уменьшает нагрузку на индексер, но увеличивает сложность: вы должны контролировать синхронность полей. Если начало периода поменялось в бекенде, нужно там же обновить поле со списком кварталом. В общем вам решать...
 
P

Partizanka

Гость
#20
Спасибо всем большое! Попробовала и так, и так. Все работает :))
Вот мой код (на QuerySave) для заполнения поля с кварталами:

Set v_date_b = New NotesDateTime(doc.DateBegin(0))
Set v_date_e = New NotesDateTime(doc.DateEnd(0))

Do While v_date_b.LSLocalTime < v_date_e.LSLocalTime
v_bLS = v_date_b.LSLocalTime
Select Case Month(v_bLS)
Case 1, 2, 3
v_quart = "1." + Year(v_bLS)
Case 4, 5, 6
v_quart = "2." + Year(v_bLS)
Case 7, 8, 9
v_quart = "3." + Year(v_bLS)
Case 10, 11, 12
v_quart = "4." + Year(v_bLS)
End Select
Call doc.ReplaceItemValue("QuarterActual", Arrays_AppendArray(doc.QuarterActual, v_quart))
Call v_date_b.AdjustMonth(3)
Loop

Поправьте, если что не так :))