J
juk-777
Доброго времени суток, уважаемые! Помогите пожалста разобраться...
Существует документ-родитель, к которому создается дочерний (документ правда не совсем "дочерний", а имеет поле UniRoditelya, в которое я заношу UniversalID родительского дока. Ну и потом по этому полю я строю необходимую мне иерархию во встроенных вьюхах).
Это была маленькая прелюдия, а проблема в следующем: в родительском доке имеется RT-поле History, в которое я хочу вносить каждое действие, которое совершает пользователь по редактированию/созданию новых дочерних документов.
Так вот, мне надо чтобы после сохранения дочки, которая открыта или создана из родителя, открытый родитель переоткрывался в режиме просмотра. Долго я бился над кодом, который сейчас выложу... Он работает, но как-то не стабильно. Не стабильность в том, что то нормально закрывает все открытые доки и открывает для чтения родителя, то отставляет "старого" родителя открытым и открывает "нового" для чтения. То дочку оставляет открытой для редактирования (
Прошу помочь в решении проблемы, может туплю по-страшному где-то).
В событии QuerySave дочки идет проверка: на заполнение необходимых полей на форме и запись в историю родителя:
Continue=ProverkaPeople(Source.Document)
Теперь приведу выборочный код самой проверки ProverkaPeople.
сразу чуть поясню по коду:
nd - это получаемый функцией дочерний документ
pardoc - это получаемый из дочки родительский документ
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код проверки ProverkaPeople</div></div><div class="sp-body"><div class="sp-content">
Function ProverkaPeople (nd As NotesDocument) As Boolean
'здесь идет объявление переменных...
ProverkaPeople = True
On Error GoTo err1
'тут идет проверка на заполнение полей в форме...
'после проверки на заполнение полей оставляю код как в ориггинале, чтобы было легче понять что к чему
mes=nd.UniRoditelya(0)
Set pardoc = db.GetDocumentByUNID(mes)
If pardoc Is Nothing Then
ProverkaPeople = False
Exit Function
End If
Set NameItm=New NotesName(session.UserName)
formul$="" + Date$ + " " + Time() + " - " + CStr(NameItm.Abbreviated) +_
". " + nd.PeopleRol(0) +_
". ФИО: " + nd.PeopleFIO(0) +_
". Год рождения: " + nd.PeopleGodRozh(0) +_
". Место жительства: " + nd.PeopleMestoZhit(0) +_
". Место работы: " + nd.PeopleMestoRab(0) + "."
Set RTItm=pardoc.getFirstItem("HistoryUD")
Call RTItm.Appendtext(formul$)
Call RTItm.Addnewline(1,True)
Call pardoc.Save(1,0)
Call pardoc.ReplaceItemValue("SAVEOPTIONS","0")
If nd.Isnewnote Then
nd.Form="FormPeople"
Call nd.Save(1,0)
Call nd.ReplaceItemValue("SAVEOPTIONS","0")
End If
Set uidoc = ws.Currentdocument
Call uidoc.Close
Call ws.URLOpen(pardoc.NotesURL)
Set uidoc = ws.Currentdocument
Call uidoc.Close
Call ws.EditDocument(false, pardoc)
Exit Function
err1:
Print "Ошибка в функции ProverkaPeople. Err=" & Err & ", Error=" & Error & ", Line=" & Erl
ProverkaPeople = False
Exit Function
End Function
Существует документ-родитель, к которому создается дочерний (документ правда не совсем "дочерний", а имеет поле UniRoditelya, в которое я заношу UniversalID родительского дока. Ну и потом по этому полю я строю необходимую мне иерархию во встроенных вьюхах).
Это была маленькая прелюдия, а проблема в следующем: в родительском доке имеется RT-поле History, в которое я хочу вносить каждое действие, которое совершает пользователь по редактированию/созданию новых дочерних документов.
Так вот, мне надо чтобы после сохранения дочки, которая открыта или создана из родителя, открытый родитель переоткрывался в режиме просмотра. Долго я бился над кодом, который сейчас выложу... Он работает, но как-то не стабильно. Не стабильность в том, что то нормально закрывает все открытые доки и открывает для чтения родителя, то отставляет "старого" родителя открытым и открывает "нового" для чтения. То дочку оставляет открытой для редактирования (
Прошу помочь в решении проблемы, может туплю по-страшному где-то).
В событии QuerySave дочки идет проверка: на заполнение необходимых полей на форме и запись в историю родителя:
Continue=ProverkaPeople(Source.Document)
Теперь приведу выборочный код самой проверки ProverkaPeople.
сразу чуть поясню по коду:
nd - это получаемый функцией дочерний документ
pardoc - это получаемый из дочки родительский документ
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код проверки ProverkaPeople</div></div><div class="sp-body"><div class="sp-content">
Function ProverkaPeople (nd As NotesDocument) As Boolean
'здесь идет объявление переменных...
ProverkaPeople = True
On Error GoTo err1
'тут идет проверка на заполнение полей в форме...
'после проверки на заполнение полей оставляю код как в ориггинале, чтобы было легче понять что к чему
mes=nd.UniRoditelya(0)
Set pardoc = db.GetDocumentByUNID(mes)
If pardoc Is Nothing Then
ProverkaPeople = False
Exit Function
End If
Set NameItm=New NotesName(session.UserName)
formul$="" + Date$ + " " + Time() + " - " + CStr(NameItm.Abbreviated) +_
". " + nd.PeopleRol(0) +_
". ФИО: " + nd.PeopleFIO(0) +_
". Год рождения: " + nd.PeopleGodRozh(0) +_
". Место жительства: " + nd.PeopleMestoZhit(0) +_
". Место работы: " + nd.PeopleMestoRab(0) + "."
Set RTItm=pardoc.getFirstItem("HistoryUD")
Call RTItm.Appendtext(formul$)
Call RTItm.Addnewline(1,True)
Call pardoc.Save(1,0)
Call pardoc.ReplaceItemValue("SAVEOPTIONS","0")
If nd.Isnewnote Then
nd.Form="FormPeople"
Call nd.Save(1,0)
Call nd.ReplaceItemValue("SAVEOPTIONS","0")
End If
Set uidoc = ws.Currentdocument
Call uidoc.Close
Call ws.URLOpen(pardoc.NotesURL)
Set uidoc = ws.Currentdocument
Call uidoc.Close
Call ws.EditDocument(false, pardoc)
Exit Function
err1:
Print "Ошибка в функции ProverkaPeople. Err=" & Err & ", Error=" & Error & ", Line=" & Erl
ProverkaPeople = False
Exit Function
End Function