Родительские/дочерние документы

  • Автор темы -Guest-
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

-Guest-

Подскажите, пожалуйста, просто должно быть, только что-то я уже совсем торможу.

Есть родительский док. (есть форма), имеет несколько дочерних (тоже имеют свои формы).
Во вьювере надо отобразить номер родителя (выз. форма родителя), далее номера дочерних (вызыв. форма каждого дочерн док.)
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Посмотри в хелпе функцию @DocNumber и остальные, которые по ссылкам будут.
Вот эту функцию надо вставить в столбец.
 
G

-Guest-

Подскажите, пожалуйста:

есть родительские и дочерние документы, пользователи могут менять значения полей как в родительских, так и дочерних документах.
При изменении некоторого поля в дочернем документе - должно менятся и поле в родительском - это сделал.
А как наоборот, чтобы при изменеии поля в родителе - менялось этоже поле и в респонсах?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: -Guest-
Или через представление отобрать, или через NotesDocument.Responses. Дальше делаешь, что хочешь.
Также посмотри метод NotesDocumentCollection.StampAll. Меняет одно поле сразу во всей коллекции документов.
 
G

-Guest-

А можно ли сделать следующее:

существует родитель и несколько дочерних, при изменении поля в одном дочернем документе чтобы изменялось поле не только в родителе, но и в остальных дочерних?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: -Guest-
Можно. Разрешаю. :)

Делается так же. Родительский документ найти легко - doc = notesDatabase.GetDocumentByUNID(notesDocument.ParentDocumentUNID).
А дальше понятно.
 
R

Romashka

Как оработать ошибку:
чтобы при изменении родительского документа менялись поля в респонсе на событие Queryclose в родителе повесила код:


Sub Queryclose(Source As Notesuidocument, Continue As Variant)

Dim coll As NotesDocumentCollection
Dim curResponse As NotesDocument

Set coll=notesdoc.Responses
Set curResponse=coll.GetFirstDocument

While Not (curResponse Is Nothing)
curResponse.OrderNo=notesdoc.OrderNo(0)
curResponse.OrderDate=notesdoc.OrderDate(0)
curResponse.Buyer=notesdoc.Buyer(0)
curResponse.WorkShopFrom=notesdoc.WorkShopFrom(0)

Call curResponse.Save(True,True)
Set curResponse=coll.GetNextDocument(curResponse)
Wend

End Sub

Но если пользователь передумает создавать родительский документ или не создаст дочернего, то вылетает ошибка: Object variable not set.
Как ее обрабатывать?

Object variable not set
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: Romashka
Лучше изменять в QuerySave или PostSave.
 
D

Domino6

<!--QuoteBegin-Romashka+1:12:2005, 17:12 -->
<span class="vbquote">(Romashka @ 1:12:2005, 17:12 )</span><!--QuoteEBegin-->Queryclose
[snapback]27890" rel="nofollow" target="_blank[/snapback]​
[/quote]

1. Повесь код на QuerySave2
2. Source - от него и пляши т.е

Код:
Set notesdoc=Source.Document
Set coll=notesdoc.Responses

3. Поставь проверку на количество респонсов
Код:
if coll.Count=0 then exit sub
Set curResponse=coll.GetFirstDocument

4. Для установки значения в коллеции применяй StampAll а не перебор документов
 
R

Romashka

На PostSave тожа самое, на кнопке при вводе документа по форме следующий код:

Sub InputData
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim vw As NotesView
Dim rdoc As NotesDocument

Set db=ses.CurrentDataBase
Set vw=db.GetView("(Respons)")

If uidoc.IsNewDoc Then
Call uidoc.save
End If

Set rdoc=db.CreateDocument
rdoc.Form="Respons"

rdoc.OrderNo=notesdoc.OrderNo(0)
rdoc.OrderDate=notesdoc.OrderDate(0)
rdoc.Buyer=notesdoc.Buyer(0)
rdoc.WorkShopFrom=notesdoc.WorkShopFrom(0)

rdoc.NumPozition=notesdoc.NumPozition_1(0)
rdoc.Detal=notesdoc.Detal_1(0)
rdoc.DetalNo=notesdoc.DetalNo_1(0)
rdoc.SteelGrade=notesdoc.SteelGrade_1(0)
rdoc.NumDet=notesdoc.NumDet_1(0)
rdoc.DetW=notesdoc.DetW_1(0)
rdoc.DetWTotal=notesdoc.DetWTotal_1(0)
rdoc.Price=notesdoc.Price_1(0)
rdoc.Price_2=notesdoc.Price_1_1(0)
rdoc.PriceTotal=notesdoc.PriceTotal_1(0)
rdoc.Period=notesdoc.Period_1(0)
rdoc.Dest=notesdoc.Dest_1(0)
rdoc.ZakazNo=notesdoc.ZakazNo_1(0)
rdoc.Press=notesdoc.Press_1(0)
rdoc.AddInformation=notesdoc.AddInformation_1(0)
rdoc.Notes=notesdoc.Notes_1(0)

Call rdoc.MakeResponse(notesdoc)

Call rdoc.ComputeWithForm(True,True)
Call rdoc.Save(True,True)

Call notesdoc.ComputeWithForm(True,True)

Call uidoc.Refresh
Call vw.Refresh

Call uidoc.FieldSetText("Detal_1","")
Call uidoc.FieldSetText("DetalNo_1","")
Call uidoc.FieldSetText("SteelGrade_1","")
Call uidoc.FieldSetText("NumDet_1","")
Call uidoc.FieldSetText("DetW_1","")
Call uidoc.FieldSetText("Price_1","-")
Call uidoc.FieldSetText("Price_1_1","-")
Call uidoc.FieldSetText("Period_1",Cstr(Today()))
Call uidoc.FieldSetText("ZakazNo_1","")
Call uidoc.FieldSetText("NumPozition_1","")
Call uidoc.FieldSetText("Dest_1","")
Call uidoc.FieldSetText("Press_1","")
Call uidoc.FieldSetText("AddInformation_1","")
Call uidoc.FieldSetText("Notes_1","")

Call uidoc.GotoField("NumPozition_1")

End Sub
 
G

-Guest-

Подскажите, в чем проблема:

когда для изменения родительских/дочерних документов использовал перебор респонсов (GetFirst/NextDocument) - все ок.

При применении StampAll и правами Manager тоже все работает.
Попробовал для пользователей, права - Author, выдает:
Notes error: you are not authorized to perform that operation.
На
Set coll=notesdoc.Responses
If Not coll Is Nothing Then
Call coll.StampAll("Pole", notesdoc.Pole(0))
...

На формах родительского и дочерних документов, есть поле Authors, тип computed.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: -Guest-
Значит, есть документ, где нет поля Authors или пользователь не внесен туда.
Ты посмотри документы в коллекции.
 
D

Domino6

В коллекцию поппадают и документы к которым у пользователя нет доступа(даже на просмотр) состояния объекта NotesDocument Nothing
Учитывай
 
G

-Guest-

Удалил все ранее созданные документы, создаю новый документ, от него один респонс - тоже самое. Но почему тогда работает через Get документ, коллекция то та же самая?
Для Domino6

//состояния объекта NotesDocument Nothing
Учитывай //

То есть?
 
G

Guest_Wizard_*

Вообще это наверное правильнее сделать через агент который подписан администратором. Агент запускать на событие через runonserver и передавать параметром текущий документ.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!