1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

  1. Sandro

    Sandro Гость

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


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

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

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

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

    alik86 Well-Known Member
    Lotus team

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

    Sandro Гость

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

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

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

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

    alik86 Well-Known Member
    Lotus team

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

    Sandro Гость

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

    alik86 Well-Known Member
    Lotus team

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

    Sandro Гость

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

    wowa Well-Known Member

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

    и т.д.
     
  9. nvyush

    nvyush Well-Known Member
    Lotus team

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

    leiba Well-Known Member
    Lotus team

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

    wowa Well-Known Member

    Репутация:
    0
    Регистрация:
    1 фев 2007
    Сообщения:
    845
    Симпатии:
    0
    что-то типа
    Код:
    _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

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

    Sandro Гость

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

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

    nvyush Well-Known Member
    Lotus team

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

    Sandro Гость

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

    Partizanka Гость

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

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

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

    nvyush Well-Known Member
    Lotus team

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

    Репутация:
    0
    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Если религия не запрещает использовать циклы в собаках, то можно как-то так:
    Код:
    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 Гость

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

    Поправьте, если что не так :))
     
Загрузка...
Похожие Темы - Вьюшка по периодам
  1. xKlonx
    Ответов:
    4
    Просмотров:
    2.663
  2. Xalet
    Ответов:
    40
    Просмотров:
    11.421
  3. yerke
    Ответов:
    2
    Просмотров:
    2.435
  4. recrut
    Ответов:
    12
    Просмотров:
    96
  5. mz111
    Ответов:
    5
    Просмотров:
    121

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