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

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

Статус темы:
Закрыта.
  1. -Guest-

    -Guest- Гость

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

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Посмотри в хелпе функцию @DocNumber и остальные, которые по ссылкам будут.
    Вот эту функцию надо вставить в столбец.
     
  3. -Guest-

    -Guest- Гость

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

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: -Guest-
    Или через представление отобрать, или через NotesDocument.Responses. Дальше делаешь, что хочешь.
    Также посмотри метод NotesDocumentCollection.StampAll. Меняет одно поле сразу во всей коллекции документов.
     
  5. -Guest-

    -Guest- Гость

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

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: -Guest-
    Можно. Разрешаю. :)

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

    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
     
  8. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Romashka
    Лучше изменять в QuerySave или PostSave.
     
  9. Domino6

    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 - от него и пляши т.е

    Код (Text):
    Set notesdoc=Source.Document
    Set coll=notesdoc.Responses
    3. Поставь проверку на количество респонсов
    Код (Text):
    if coll.Count=0 then exit sub
    Set curResponse=coll.GetFirstDocument
    4. Для установки значения в коллеции применяй StampAll а не перебор документов
     
  10. Romashka

    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
     
  11. Romashka

    Romashka Гость

    Спасибо.
     
  12. -Guest-

    -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.
     
  13. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: -Guest-
    Значит, есть документ, где нет поля Authors или пользователь не внесен туда.
    Ты посмотри документы в коллекции.
     
  14. Domino6

    Domino6 Гость

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

    -Guest- Гость

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

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

    То есть?
     
  16. Guest_Wizard_*

    Guest_Wizard_* Гость

    Вообще это наверное правильнее сделать через агент который подписан администратором. Агент запускать на событие через runonserver и передавать параметром текущий документ.
     
Загрузка...
Похожие Темы - Родительские дочерние документы
  1. Баламут
    Ответов:
    2
    Просмотров:
    3.491
Статус темы:
Закрыта.

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