Документы "Приложения"

5 1

Есть документы, смысл которых быть вторичными по отношению к некоторым ведущим документам. Например, протоколы к договорам или приложения к служебным запискам.

Т.к. такие документы являются вторичными, основным реквизитом на карточке должна быть ссылка на ведущий документ, на которой можно найти остальную информацию.

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

Реализация.

1. Копируем Тип карточки электронного документа "Документы произвольной формы".

2. Добавляем 2 строковых реквизита (один под наименование ведущего документа - желательно длинный, второй под ИД ведущего документа).

3. Добавляем Действие: "Открыть".

4. Строим форму (реквизит под ИД на форму не выносим).

5. На событие "Выбор из справочника" реквизита под наименование документа вставляем код:  

СriterionList = CreateList()
     StandardCriterionCount = СriterionList.Count
     СriterionList.Add('ISBEDocKind'; <Код_ведущего_ВЭД>)
     SelectedEDoc = EDocumentSelect(SelectMode; InputValue;
       СriterionList; StandardCriterionCount; Requisite.Name;
       Object.Requisites("<Имя_реквизита_под_ИД>").name; <Строка в шапку окна поиска ведущего документа>)

6. В вычисление действия "Открыть" вставляем следующий код:   

EDocuments.OpenByID(Object.<Имя_реквизита_под_ИД>; True)

8. Создаем новый Вид электронного документа с использованием нового типа карточек.

А теперь интересней, сделаем автопривязывание к ведущему документу.

1. На событие "Карточка / Открытие":

  // =====================================================================
  // Запомним существующую связь
     Object.EnvironmenSetVar("BEFORE_DOGOVOR_ID"; Object.<Имя_реквизита_под_ИД>)
  // ----------------------------------------------------------------------

2. На событие "Карточка / Сохранение после"

  // ======================================================================
  // Привяжемся к ведущему документу
  // ----------------------------------------------------------------------
     // ИД электронного документа, с которым будет производиться связывание.
     EDocumentBindID = Object.<Имя_реквизита_под_ИД>
     // Получить информацию об электронном документе, с которым будет производиться связывание.
     EDocumentBindInfo = EDocuments.ObjectInfo(EDocumentBindID)
 
     // ИД электронного документа, который будет связан с исходным документом.
     EDocumentBindingID = Object.ID
     // Получить информацию о связываемом электронном документе.
     EDocumentBindingInfo = EDocuments.ObjectInfo(EDocumentBindingID)
 
     // Если документ уже связан с другим
     OLD_DOGOVOR_ID = Object.Environment.PopVar("BEFORE_DOGOVOR_ID")
     if not VarIsNull(OLD_DOGOVOR_ID)
       // ИД электронного документа, от которого необходимо отвязаться.
       EDocumentBranchID = OLD_DOGOVOR_ID
       // Получить информацию об электронном документе, от которого будем отвязываться.
       EDocumentBranchInfo = EDocuments.ObjectInfo(EDocumentBranchID)
       EDocuments.Branch(EDocumentBranchInfo; EDocumentBindingInfo)
     endif    
 
     // Связать электронные документы.
     EDocuments.BindTo(EDocumentBindInfo; EDocumentBindingInfo)      
  // -----------------------------------------------------------------------
 
  // =======================================================================
  // Запомним существующую связь
     Object.Environment.SetVar("BEFORE_DOGOVOR_ID"; Object.<Имя_реквизита_под_ИД>)
  // -----------------------------------------------------------------------

И остается только заполнить Наименование:

  DocID = Object.Requisites('<Имя_реквизита_под_ИД>').AsInteger
  EDoc= EDocuments.GetObjectByID(DocID)
  DocName = EDoc.Requisites("ISBEDocName").AsString
  Object.SYSREQ_EDOC_NAME = Format('Дополнение к "%s"'; arrayof(DocName))

В результате получается примерно так:

карточка >

выбор ведущего документа >

связь с ведущим документом >

Алексей Долгих

Можно добавить информационных полей на карточку документа:

1. Добавляем в реквизиты карточки аналогичные реквизиты ведущего документа, выставляем их на форму, делаем только для чтения.
2. Опираясь на ИД выбранного ведущего документа копируем из него информацию в информационные реквизиты.

Авторизуйтесь, чтобы написать комментарий