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

Тема в разделе "Lotus - Программирование", создана пользователем Sandro, 11 янв 2011.

  1. Sandro

    Sandro Гость

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


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

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

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

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

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Что такое вьюшка формата?
    Категоризация по дате (по году, месяцу) не подойдет?
     
  3. Sandro

    Sandro Гость

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

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

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

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

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Ну так в формулу отбора впишите, что @Year(DateField) = 2011 & @Month(DateField) <= 4 -- подробней сами разберетесь.
    Во вьюшке тоже никто не мешает завести поле с формулой, высчитывающей квартал под который попадает дата из DateField.
     
  5. Sandro

    Sandro Гость

    Может я туплю ))) Но года то разные могут быть, не только 2011
     
  6. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Если Вам надо вьюшка только за один год, то в формуле отбора @Year(DateField) = 2011 и т.п., если по всем годам, то делаете категоризованую колонку @Year(DateField), дальше категоризованую колонку кварталов, месяцев ну или чего там еще...
     
  7. Sandro

    Sandro Гость

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

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Sandro , лично мне ничего не понятно что вы хотите....
    получи месяц из даты(поля),
    далее, если Янв,Февр, Март, то это Q1
    если Апр,Май.... Q2

    и т.д.
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если я правильно понял, то Sandro нужно, чтобы документ попадал во все категории между Дата1 и Дата2, причём даты могут быть в разных годах.
    Кроме танцев вокруг @Explode(dateRange) (сервер повесится) либо циклов ничего на ум не приходит. Может поглядеть в сторону календарных представлений?
     
  10. leiba

    leiba Lotus team
    Lotus team

    Регистрация:
    18 июн 2010
    Сообщения:
    47
    Симпатии:
    0
    Sandro
    А в какие категории должен попасть документ если даты периода из разных кварталов?
     
  11. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    что-то типа
    Код (Text):
    _month = @Month(DateField);
    Quarter := @if(_month = 1;"Q1";
    _month = 2;"Q1";
    _month = 3;"Q1";
    .........................
    _month = 12;"Q4"
    );
    @year(DateField) + Quarter
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    логично - в оба (многозначная колонка)
     
  13. Sandro

    Sandro Гость

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

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Так может проще научить пользователя пользоваться поиском? В крайнем случае поисковую форму сделать. Если же очень надо именно такое категоризованное представление, то, кмк, лучше в самом документе "растиражировать" месяцы и кварталы в многозначных полях, чтобы не грузить сервер никчемной работой. Для новых документов вычислять в Querysave, для старых пройтись агентом.
     
  15. Sandro

    Sandro Гость

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

    Partizanka Гость

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Зачем разбивать по годам, если можно сразу по кварталам?
    @Adjust'ом в цикле прибавляем по три месяца.
     
  18. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    А кварталы, собственно, причём? Если нужно отобразить документы за период, кмк, будет проще отобрать их в коллекцию и положить в приватную папку, внедрённую на форму. Как работать с приватными папками на форуме не одна тема.
     
  19. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Если религия не запрещает использовать циклы в собаках, то можно как-то так:
    Код (Text):
    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
    Поле на форме - уменьшает нагрузку на индексер, но увеличивает сложность: вы должны контролировать синхронность полей. Если начало периода поменялось в бекенде, нужно там же обновить поле со списком кварталом. В общем вам решать...
     
  20. Partizanka

    Partizanka Гость

    Спасибо всем большое! Попробовала и так, и так. Все работает :))
    Вот мой код (на 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

    Поправьте, если что не так :))
     
Загрузка...

Поделиться этой страницей