"Открыть из файла" или документы без заморочек.

8 2

Приветствую уважаемые члены сообщества!

Сегодня я хочу предложить Вам метод, который с одной стороны очень упрощает жизнь и делает Директум более дружелюбной к пользователю, а с другой стороны подрывает принципы классификации документов и наверное вызовет бурю негодования у "правильных" разработчиков. И так ближе к делу.

Код предложенный ниже, просто без всяких забот и хлопот, открывает окно проводника для выбора файла, КАК ЭТО ПРИВЫКЛИ ДЕЛАТЬ ВСЕ, а не так как предлагают нам "Директумовцы" =). Код автоматически заполняет указанную карточку, поределяет вид документа и редактор. Так же что не мало важно складывает все файлики в конкретную папку в системе!

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

// Код зап.
RRCCode = Object.Requisites(SYSREQ_CODE).AsString
// передаю параметры в карточку электронного документа.
FName = ФайлВыбрать()
Наименование = ExtractFileName(FName)
Расширение = ExtractFileExt(FName)
КодПриложения = ServiceFactory.GetEditorByExtension(Расширение).Code  
//-----------------------------------------------------------------------------
//вместо жестких значений Д000047 лучше завести константу и хранить в ней значения
// и обращаться к константам с помощью функций: 
// Конст()      - для записи значений
// КонстЗнач()  - для чтения значений
EDoc = EDocuments.CreateNewFromFile('РЕГДОГ_СОГЛАСОВАТЬ_ДОГОВОР';'Д000047';КодПриложения;FName ) // Вот где мы задаем наши значения для карточки, по порядку: Тип карточки(Имя), Вид эл. док(код). 

//-----------------------------------------------------------------------------
// заполнить реквизиты карточки электронного документа
EDocDataSet = EDoc.DataSet
EDocDataSet.Requisites("ISBEDocName").Value = Наименование
EDocDataSet.Requisites("ДОГОВОР_Согласование").Value = RRCCode

// права доступа
full = EDoc.AccessRights.Managers
gr = ServiceFactory.GetGroupByName("ВСЕ") 
if (EDoc.AccessRights.IsManager(gr)) or (EDoc.AccessRights.IsReader(gr)) or (EDoc.AccessRights.IsWriter(gr))
else
  full.add(gr)
EndIf

// сохранить изменения в карточке электронного документа
EDocDataSet.ApplyUpdates

// поместить документ в определенную папку

// и обращаться к константам с помощью функций: 
// Конст()      - для записи значений
// КонстЗнач()  - для чтения значений
IDFolder = 103069 // указать ид папки

if IDFolder <<>> ''
  SearchFolder = Searches.CreateNew(ckFolder)
  SearchCriteria = SearchFolder.SearchCriteria
  IDFolderCr = SearchCriteria.Add("ИД")
  IDFolderCr.AddSingleValue(IDFolder;vtEqual)
  FolderList = Searches.Execute(SearchFolder)
  if FolderList.Count <<>> 0
    FolderList.Reset
    Folder = FolderList.Value
    if not VarIsNull(Folder)
      Folders.PasteToFolder(Folder;EDoc.Info)
    endif
  endif
endif

// связать документ с карточкой справочника
EDocuments.BindTo(Object.Info;EDoc.Info)

// Показать связанные эл. документы 
BoundEDocumentsSearchDescr = Searches.Load("BOUND_EDOCUMENT_SEARCH")
BoundEDocumentsSearchDescr.InitializeSearch(Object.Info)
Searches.Show(BoundEDocumentsSearchDescr)
Дмитрий Тарасов

Тут где-то уже проскакивала идея использовать директум как виртуальный диск,  похоже начало уже положено :)

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