Помогите найти ошибку

Тема в разделе "Lotus - Программирование", создана пользователем kilcher, 29 май 2009.

Наш партнер Genesis Hackspace
  1. kilcher

    kilcher Гость

    Всем доброго дня!
    Есть база,в которой отображается список людей(определенный отдел)из справочника организации.База представляет собой что то вроде To do. Т.е. загрузка сотрудников. Представления календарные.
    Мне требуется агент,который будет создавать документики по людям,которых еще нет сегодня в загрузке. И так,например, на месяц вперед.
    Создала настроечный документ(Profile),в котором задаются даты для заполнения.
    вобщем приведу часть моего измученного кода(извиняюсь если он не совсем причесан)



    Dim AltFullName As Variant,FullName1 As Variant
    Dim keys( 1 To 2 ) As String
    Dim gmt As Variant
    Dim dat1 As NotesDateTime
    Dim dat2 As NotesDateTime
    Dim difference As Long
    selection = {Form = "Stru" & kDept = "02" & kServ="2" & AltFullName!=""& work="Проверки"}'люди которые берутся из общего справочника

    Set coll = db1.Search(selection, Nothing, 0)
    Set doc = coll.GetFirstDocument

    While Not doc Is Nothing

    AltFullName=doc.GetItemValue( "AltFullName" )

    Set coll1 = db.Search({Form = "Profile"}, Nothing, 0)'берем данные из настроечного файла
    Set doc1 = coll1.GetFirstDocument

    Set dat1 = New NotesDateTime( doc1.start(0) )
    Set dat2 = New NotesDateTime( doc1.end(0) )
    difference = dat1.TimeDifference( dat2 )

    If difference <0 Then 'создаем документы на все дни
    Do While dat1.TimeDifference( dat2 ) <= 0
    gmt = dat1.LSGMTTime
    keys(1) =gmt 'дата загрузки
    keys(2) =doc.AltFullName(0)' имя сотрудника
    Set view = db.GetView("Загрузка1" )
    Set pdoc = view.GetDocumentByKey( keys )' ищем есть ли данный сотрудник в загрузке на этот день
    If Not ( pdoc Is Nothing ) Then' если нет данного сотрудник,то создаем
    Msgbox("Создаем")
    Set docB = New NotesDocument( db )
    Call docB.AppendItemValue( "Form", "LoadingUser" )
    Call docB.AppendItemValue( "date_loading", gmt)
    Call docB.AppendItemValue( "member", doc.AltFullName(0))
    Call docB.AppendItemValue( "Status", "" )
    Call dat1.AdjustDay( 1 )
    Call docB.Save(True,True,True)
    End If
    Loop
    End If
    Set doc = coll.GetNextDocument(doc)
    Wend
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а шо не так?..

    не знаю, правильно или нет... лениво думать...
    но

    Код (Text):
    Set pdoc = view.GetDocumentByKey( keys )' ищем есть ли данный сотрудник в загрузке на этот день
    If Not ( pdoc Is Nothing ) Then' если нет данного сотрудник,то создаем
    т.е. если документ есть, значит сотрудника нет?.. о.О
     
  3. kilcher

    kilcher Гость

    Если документа нет (с данными параметрами,т.е. с нужной датой загрузки и фамилией сотрудника),то его надо создать. Если пишу просто If pdoc Is Nothing Then,то создает документы по всем сотрудникам,даже если они уже есть.
    Получается задвоение,т.е. сотрудник вроде как занят и не занят :(
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ниче не понял... а если if Not(...) then то как надо работает? )

    тогда надо проверять отсутствие документа If is nothing then
    попробуй еще view.GetDocumentByKey( keys, True )
    и дебагером пройдись, может у тебя keys некорректный?..

    зы: в чем проблема ты так и не написала :(

    вот тут не понял... если документа нет, то какое задвоение?..
     
  5. kilcher

    kilcher Гость

    Вобщем он не выполняет условие отбора Set pdoc = view.GetDocumentByKey( keys,True ) :(
    Если я беру два параметра для поиска, ведь обе колонки во вью должны быть категоризированы? Может в этом проблема.
    Т.е. в моем случае первая колонка-дата,вторая-сотрудник
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    они должны быть сортированы (!), а категоризированные - сортированные...
    иногда с категориями глюкавит (зыбыл только чего и как избавиться), если есть возможность, то вид лучше не категоризировать.
    1-я колонка у тебя дата или текст? тоже может создавать проблемы, если настроено одно, а ищется другое
     
  7. kilcher

    kilcher Гость

    1-я колонка дата
    gmt = dat1.LSGMTTime
    keys(1) =gmt
    2-я колонка текст(сотрудник)
    keys(2) =doc.AltFullName(0)

    Вот по этим двум параметрам и должен искать документ. А он фигушки,не находит.
    Обе категоризованы
     
  8. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    давай сделаем тест.
    что вернет поиск по
    view.GetAllDocumentsByKey(dat1)
    view.GetAllDocumentsByKey(dat1.LSGMTTime)
    view.GetAllDocumentsByKey(cstr(dat1.LSGMTTime))

    потом еще категории попробуй убрать и сравни
     
  9. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    глюк поиска в категоризированной вьюшке в том, что учитываются документы только 1-й подкатегории.
    Лучше искать просто по сортированным, имхо.
     
  10. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    это не лучше, это правильно! :(
    категоризированные вьюхи - это УИ вьюхи, поиск по таким лучше не делать. имхо ;)
     
  11. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    618
    Симпатии:
    5
    а если в сортированной вьюхе есть возможность сортировать по убыванию/возрастанию, то ее тоже лучше не использовать для поиска
     
  12. kilcher

    kilcher Гость


    все три варианта выдают один результат. Т.е. опять заносят всех сотрудников,не исключая тех что уже есть. Сделала колонки некатегоризованными,а просто сортированными. Ничего не изменилось :blink:
     
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ну, вообще-то я хотел, чтобы ты проверила, что именно возвращает указанный мною код, а не результат выполнения твоего кода :)
    попробуй еще раз, отдельным агентом только поиск выполнить по конкретным данным, которые точно есть в виде!


    но, в любом случае, мне кажется, что у тебя некорректно настроен вид для поиска.
    попробуй вместо типа столбца даты указать ему, что он текст.
    потом, отформатируй его определенным образом, например, @Text(@Year(DateFiled)) + "~" + @Text(@Month(DateFiled)) + "~" + @Text(@Day(DateFiled)).
    и выполни снова поиск

    хм... никогда не пытался подобное проверять, возможно, ты прав...
     
  14. kilcher

    kilcher Гость

    Проэксперементировала я с использованием dat1.
    В случае с view.GetAllDocumentsByKey(cstr(dat1.LSGMTTime)), не находит ни одного документа.
    Остальные варианты находят все документы по указанной дате.
    А вот когда добавляю поиск по имени сотрудника,ничего.
    Видимо по двум параметрам поиск неправильный :)
     
  15. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Ключи неправильно типа.
    Код (Text):
    Dim keys( 1 To 2 ) As String
    Замени на Variant.
     
  16. Dimly

    Dimly Гость

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

    Главное чтобы типы совпадали переменных ключа составного и колонок.
     
  17. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.120
    Симпатии:
    301
    не по теме, но рядом
    мобуть сгодица :) (для себя писал):
    Код (Text):
    'вспомогательная ф-ция для преобразования типа
    'для употребления с ф-циями Array...
    Function ConvertToStringArray(xVar As Variant) As Variant
    'преобразование в массив уникальных значений
    Select Case Typename(xVar)
    Case {STRING}, {VARIANT}:
    ConvertToStringArray=Arrayunique(Fulltrim(Split(Cstr(xVar),"")))
    Case {STRING( )}, {VARIANT( )}:
    ConvertToStringArray=xVar
    Case Else
    Error TYPEMISMATCH, CS_TYPEMISMATCH & ":" & Typename(xVar)
    End Select
    End Function
     
  18. kilcher

    kilcher Гость

    Ну прям беда! Вот вроде начал работать,но только если я задаю первый день из списка для проверки. Если задаю в цикле-фигушки. Видать неверно цикл завершаю?
     
  19. kilcher

    kilcher Гость

    Ура!!! Получилось!!! Всем спасибо огромное! :)
     
  20. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    однако, молодец :)
     
Загрузка...
Похожие Темы - Помогите найти ошибку
  1. OlgaZag
    Ответов:
    1
    Просмотров:
    1.299
  2. OlgaZag
    Ответов:
    0
    Просмотров:
    533
  3. Google313
    Ответов:
    0
    Просмотров:
    1.009
  4. Marikd
    Ответов:
    2
    Просмотров:
    1.217
  5. ruivit
    Ответов:
    2
    Просмотров:
    1.338

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