Directum. Как отловить закрытие записи справочника

Создаем программно справочник в Directum. Нужно отловить, что пользователь нажал отмену и cделать что-то.

Я добавляла запись справочника из обработчика детального раздела данных(событие Выбор из справочника):

Приведу сразу весь код обработчика. Я завела сразу функцию:

//ShowMessage('событие Выбор из справочника')
  ddsnewRef = aObject.DetailDataset(aDetailDataSetNum)
  BookMark = ddsnewRef.Bookmark 
  ReqCode = aRequisite.Value
  ReqName = aRequisite.Name
//открываем сразу карточку
  if (not VarIsNull(aRequisite.Value))
    LinkedReferenceName = aRequisite.ReferenceName
    EmplRefFactory  = References.ReferenceFactory(LinkedReferenceName)
    EmplRec = EmplRefFactory.GetObjectByCode(ReqCode)
    if (not VarIsNull(EmplRec))
      EmplRec.Form.Show
    endif
  else
      newRef = CreateReference(aChildRef)   
      newRef.AddWhere('1=0')  
      newRef.Open()
      newRef.Append()//добавим новую запись  
      newRef.Requisites(aParentRefReq).Value = Object.Код
      newRef.Form.Show()
      if newRef.RecordCount = 0
         ddsnewRef.Requisites(ReqName).Value = ''
         ddsnewRef.Delete()         
         ShowMessage('Отменено пользователем')
      else
        ddsnewRef.Requisites(ReqName).Value = newRef.Requisites(SYSREQ_CODE).Value      
        ShowMessage('Запись создана') 
      endif     

  endif
  Object.Save()

Карточка функции:

Стырено Читать

Directum. Две базы на одном сервере.

Как развернуть две базы на одном сервере в  Directum.

Мне это нужно было для разработки нового модуля в системе Directum (новых справочников и прочего). С целью ведения разработки не на рабочей базе.  Новую тестовую базу я создала и  восстановила из бэкапа рабочей средствами MSSQL. Чтобы зацепиться к ней, необходимо в окошке ввода пароля Directum просто указать другую базу данных. Чтобы была возможность редактировать сервер и базу при входе - запускаем ярлык  "Запуск произвольной системы" из Пуск->Программы->Directum.

Ну и еще, в тестовой базе нужно поменять кое-что в соответствии с этой статьей.

 

Directum. Пользовательский выбор из справочника. Ссылка на самого себя

Расскажу про пользовательский выбор из справочника, когда в справочнике используется ссылка на самого себя (тот же справочник) в табличном разделе. Ну нужно мне так 🙂

Есть два варианта реализации:
1. Выводить предупреждение, когда пользователь выбирает тот же справочник, что у нас уже открыт (ссылку на самого себя).
2. Переопределить выбор из справочника, исключив из вывода текущий справочник.

Итак, реализуем:

1. В событии нашего справочника Карточка.Открытие пишем:

  if not Sender.Inserted //если это не новая запись
//  запишем в переменную окружения(используется при выборе детального раздела, если юзер неверно выбрал подобъект) 
  if (Object.DetailExists(1))
    ODS = Obje

Читать

Directum. Проверка заполненности реквизитов справочников

Directum. Проверка заполненности реквизитов справочников.

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

Решение такое, добавляем в обработчик Сохранение.Возможность это:

//Для представления Представление проверим реквизит Реквизит1 на заполненность 
  CNTRCT_VIEW_NAME = "Представление"
  if СпрТекПредст() == CNTRCT_VIEW_NAME
    Requisite = Object.FindRequisite("Реквизит1")
    if (Requisite.Required or (VarIsNull(Requisite.Value) or trim(Requisite.AsString) == ''))
      Raise(CreateExcep

Читать

Directum. Как организовать блокировку записей справочника?

Спёрто тут

В системе DIRECTUM по умолчанию на записи справочника не устанавливаются блокировки. Например, Ольга Петровна открывает запись справочника "Входящие РКК", в это же время Михаил Андреевич открывает эту же запись. Оба пользователя вносят изменения. Ольга Петровна нажимает кнопку "Сохранить" раньше Михаила Андреевича. В этом случае все изменения Ольги Петровны сохранены не будут, а запись справочника "Входящие РКК" заполниться значениями, которые указал Михаил Андреевич.

Для того, чтобы подобной ситуации не возникало, необходимо программно реализовать механизм блокировки записей справочников, для этого:

1. В событии "Карточка \ Открытие" нужного справочника необходимо поместить вычисления, которые установят блокировку:
if Object.AccessInfo.CanUpdate
if not Object.GlobalLock.TryLockObject
Object.GlobalLock.Locked
Raise(CreateException(''; Format('Запись с ИД = %s за
Читать

Функции отображения в карточке справочника связанных справочников

Тут написано как отобразить в карточке справочника связанные документы или задачи в cистеме Directum.
Я немного модернизировала эти функции с тем, чтобы отобразить связанные справочники таким же образом.

Алгоритм работы функций:
1. В функции передаются нужные параметры;
2. Формируется HTML-документ, в котором отображается таблица с связаными справочниками;
3.
Читать

Directum. Не ведется история записей справочников

В Directum не ведется история записей справочников. База была тестовая, копирнутая с рабочей.

Нужно в тестовой базе в таблицах XIni и XObj подправить название базы и сервера на новые (в данном случае тестовые). Например, рабочий сервер и база назывались server1 и directum, а тестовые - server2 и directumdev.

Соответственно, нужно заменить server1 на server2, а directum на directumdev.

Добавлено. Код системы менять не нужно. Потом иначе гиперссылки не пашут по CreateHyperLink

Directum. Событие справочника. Функция Exit. Глюк. Или моя ошибка?

Ни в коем случае не использовать функцию exit в событии справочника Карточка.Открытие.
Вся фишка в том, что оно все нормально вроде бы. Но только до некоторых пор.

Разъясню на примере. Пусть у нас есть справочники Ref1 и Ref2. Ref2 содержит реквизит типа Справочник, ссылающийся на Ref1. Пусть реквизит будет называтья rRef1. Так вот, если у нас в событии Карточка.Открытие будет функуия exit (ну например, я, как человек, мигрироваший с других языков, предпочитаю конструкцию:

    
if (VarIsNull(Form)) 
  exit()
endif

этой:

    
if (not VarIsNull(Form)) 
  ...
  что-то делаем...
  ...
endif

,то все будет ок, пока мы не добавим обработчик вычисления в справочник Ref2 для реквизита rRef1(например, для автозаполнения полей), использующий справочник Ref1.
Для наглядности пример:

   

Читать

Разработка справочников в Directum

Только начинаю осваивать Directum. Вот с разработки справочников, пожалуй, и начну свою первую коротенькую заметку.
Пусть нам нужен справочник Договора. Для этого необходимо запустить компоненту Типы справочников (в разделе Утилиты разработчика) и добавить новую запись.

Заполним поля в открывшейся карточке нового типа справочника. В поле Имя нужно указать уникальное имя справочника, которое будет использоваться при программном обращении к справочнику. В имени справочника рекомендуется использовать только буквы, цифры и символ "_". Назовём наш справочник Contracts.
В поле Заголовок в ед. числе в создаваемом справочнике пишем Договор.
Перейдя на вкладку Реквизиты, мы увидим, что наш тип справочника уже содержит предопределённые реквизиты. Добавим необходимые нам дополнительные реквизиты.
Теперь сформируем карточку типа справочника, то есть её внешний вид. Для этого сохраним тип справочника, после сохранения типа справочника разблокируется кнопка Форма, по нажатию на неё откроется редактор формы. В левой части окна мы увидим дерево реквизитов, из которого нужно перенести реквизиты на форму. Перенесём нужные реквизиты методом Drag & Drop и настроим их расположение на форме. Сохраняем форму.
Про настройку прав пока рассказывать не буду.
У каждого справочника есть события, код которых выполняется после, до или при выполнении определенных действий с данными. События являются предопределенными, разработчик не может добавлять или удалять их, но есть возможность отключать события. События могут относиться к набору данных, записи, операции, форме-карточки, таблице, реквизиту. В коде событий можно использовать предопределенные переменные, так, например, в событии Карточка. На любое действие в форме можно навесить свое событие. Подробнее о событиях можно почитать в справке.
Сохраняем.
Теперь нам необходимо отобразить справочник в дереве папок. Создадим новую папку компонент Документы, например в уже существующей папке Компоненты. Теперь заходим в Утилиты Разработчика->Настройка вариантов запуска компонент. Слева в дереве выбираем созданную до этого папку Документы и нажимаем кнопку Создать->вариант запуска компоненты. Выбираем наш справочник из списка. Нажимаем кнопку Сохранить. Вуаля! Теперь мы видим наш справочник в нужной нам папке. 🙂
Кажется, вышло сумбурно)).