G
Grrr
Вопрос, который уже не раз обсуждался, прошу помочь разобраться.. Итак идея такая.. Сущ-ет база, в которой созданы документы по форме com, com2, comresp (ответ на ответ). Хочу сделать отбор всех (!) документов за определённый период, для этого создал форму поиска (SearchForm), там поля даты ну и соответственно с форума(за что спасибо) выдрал кодик. Выглядит всё примерно так:
1. Не напутал ли я со смыслом и формулой?
2. Хотел спросить про свойство папки "Отображать ответные документы в виде иерархии". При выставленном флажке лотус ругается мол надо переносить документы верхнего уровня, без галочки всё окей.
3. И в том, и в другом случае часть документов в папке вываливаются с ошибкой "[Конфликт при репликации или сохранении]", wtf? Как от этого избавиться?? Добавил первый столбец со значением @IsResponseDoc, получаю "0" - документы, "1" - ответы (среди которых присутствуют документы, с той же ошибкой), может просто удалить эти ответы? Их важность непонятна, видимо, придётся их учитывать и выводить в отчёт.. Подскажите как разрулить.
Add: поиск решения в хелпе.. Получилось убрать ответы таким скриптом со столбцом @IsResponseDoc.
Пока что всё. Спасибо за ответы.
Теперь вопросы.. Правильно ли я понимаю, что если не указывать форму поиска, то поиск будет выполнен по всем документам в базе? Т.е. кодик поиска по периоду выглядит так:Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim searchDoc As NotesDocument
Dim dc As notesdocumentcollection
Dim doc As notesdocument
Dim find As String
Dim askme As Integer
Set searchDoc = New NotesDocument(session.CurrentDatabase)
If ws.DialogBox("SearchForm", True, True, False, False, False, False, "Search", searchDoc , True) Then
find = {(Form = "commission")}
find = find + {&(ctbDateCreated >= @TextToTime("} + searchDoc.Date1(0) + {"))}
find = find + {&(ctbDateCreated <= @TextToTime("} + searchDoc.Date2(0) + {"))}
Messagebox find
Set dc = session.CurrentDatabase.Search(find, Nothing, 0)
If dc.Count = 0 Then
Call ws.ViewRefresh
Messagebox "Ничего не найдено"
Exit Sub
Else
Messagebox dc.count
Call dc.PutAllInFolder("PrivateFolder", False)
Call ws.ViewRefresh
End If
askme = ws.Prompt (PROMPT_YESNO, _
"Запрос выполнен, найдено " + Cstr(dc.Count) + " документов", "Создать лист Excel с выгруженными данными?")
If askme = 1 Then
Set xl=CreateObject("Excel.Application")
Set xlWorkbook = xl.Workbooks.Add
Set xlsheet = xl.Workbooks(1).Worksheets(1)
xl.Visible = False
xl.ReferenceStyle = 2
xlsheet.Cells(1,1).Value = "Отчет за период с: " + Cstr(searchDoc.Date1(0)) + " до " + Cstr(searchDoc.Date2(0))
xlsheet.Cells(2,1).Value = "Заголовок"
xlsheet.Cells(2,2).Value = "Статус"
xl.Visible = True
For i = 1 To dc.Count
Set searchDoc = dc.GetNthDocument(i)
xlsheet.Cells(i+2,1).Value = searchDoc.Subject(0)
xlsheet.Cells(i+2,2).Value = searchDoc.Executor(0)
Next
Set xl = Nothing
Call ws.ViewRefresh
End If
End If
End Sub
?find = {(ctbDateCreated >= @TextToTime("} + searchDoc.Date1(0) + {"))}
find = find + {&(ctbDateCreated <= @TextToTime("} + searchDoc.Date2(0) + {"))}
1. Не напутал ли я со смыслом и формулой?
2. Хотел спросить про свойство папки "Отображать ответные документы в виде иерархии". При выставленном флажке лотус ругается мол надо переносить документы верхнего уровня, без галочки всё окей.
3. И в том, и в другом случае часть документов в папке вываливаются с ошибкой "[Конфликт при репликации или сохранении]", wtf? Как от этого избавиться?? Добавил первый столбец со значением @IsResponseDoc, получаю "0" - документы, "1" - ответы (среди которых присутствуют документы, с той же ошибкой), может просто удалить эти ответы? Их важность непонятна, видимо, придётся их учитывать и выводить в отчёт.. Подскажите как разрулить.
Add: поиск решения в хелпе.. Получилось убрать ответы таким скриптом со столбцом @IsResponseDoc.
4. Покажет ли след. код действительно созданные документы за период? (в начале был отбор по некоторому полю)Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim vc As NotesViewEntryCollection
Dim ws As New NotesUIWorkspace
Set db = session.CurrentDatabase
Set view = db.GetView("PrivateFolder")
Set vc = view.GetAllEntriesByKey(1)
Call vc.RemoveAllFromFolder("PrivateFolder")
Call ws.ViewRefresh
5. Как правильно составить условие просроченности выполнения документа? Т.е. существует поле, в котором хранится дата "исполнить до", как по ней сделать отбор? Как представляю, добавить поле "просроченные на " + какая то переменная времени. А потом оперировать этой датой и текущей? Каким будет условие на LS?find = find + {&(@Created>= @TextToTime("} + searchDoc.Date1(0) + {"))}
find = find + {&(@Created<= @TextToTime("} + searchDoc.Date2(0) + {"))}
Пока что всё. Спасибо за ответы.