Все время забываю где выдавать в Directum права доступа на справочники.
Идем в Утилиты администратора->Пользователи-> Компоненты. Всего-то 🙂
Все время забываю где выдавать в 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 (новых справочников и прочего). С целью ведения разработки не на рабочей базе. Новую тестовую базу я создала и восстановила из бэкапа рабочей средствами MSSQL. Чтобы зацепиться к ней, необходимо в окошке ввода пароля Directum просто указать другую базу данных. Чтобы была возможность редактировать сервер и базу при входе - запускаем ярлык "Запуск произвольной системы" из Пуск->Программы->Directum.
Ну и еще, в тестовой базе нужно поменять кое-что в соответствии с
Расскажу про пользовательский выбор из справочника, когда в справочнике используется ссылка на самого себя (тот же справочник) в табличном разделе. Ну нужно мне так 🙂
Есть два варианта реализации:
1. Выводить предупреждение, когда пользователь выбирает тот же справочник, что у нас уже открыт (ссылку на самого себя).
2. Переопределить выбор из справочника, исключив из вывода текущий справочник.
Итак, реализуем:
1. В событии нашего справочника Карточка.Открытие пишем:
if not Sender.Inserted //если это не новая запись // запишем в переменную окружения(используется при выборе детального раздела, если юзер неверно выбрал подобъект) if (Object.DetailExists(1)) ODS = Obje
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 по умолчанию на записи справочника не устанавливаются блокировки. Например, Ольга Петровна открывает запись справочника "Входящие РКК", в это же время Михаил Андреевич открывает эту же запись. Оба пользователя вносят изменения. Ольга Петровна нажимает кнопку "Сохранить" раньше Михаила Андреевича. В этом случае все изменения Ольги Петровны сохранены не будут, а запись справочника "Входящие РКК" заполниться значениями, которые указал Михаил Андреевич.
Для того, чтобы подобной ситуации не возникало, необходимо программно реализовать механизм блокировки записей справочников, для этого:
1. В событии "Карточка \ Открытие" нужного справочника необходимо поместить вычисления, которые установят блокировку:
if Object.AccessInfo.CanUpdate
if not Object.GlobalLock.TryLockObject
Object.GlobalLock.Locked
Raise(CreateException(''; Format('Запись с ИД = %s за
Читать
Я немного модернизировала эти функции с тем, чтобы отобразить связанные справочники таким же образом.
Алгоритм работы функций:
1. В функции передаются нужные параметры;
2. Формируется HTML-документ, в котором отображается таблица с связаными справочниками;
3.
Читать
В Directum не ведется история записей справочников. База была тестовая, копирнутая с рабочей.
Нужно в тестовой базе в таблицах XIni и XObj подправить название базы и сервера на новые (в данном случае тестовые). Например, рабочий сервер и база назывались server1 и directum, а тестовые - server2 и directumdev.
Соответственно, нужно заменить server1 на server2, а directum на directumdev.
Добавлено. Код системы менять не нужно. Потом иначе гиперссылки не пашут по CreateHyperLink
Ни в коем случае не использовать функцию exit в событии справочника Карточка.Открытие.
Вся фишка в том, что оно все нормально вроде бы. Но только до некоторых пор.
Разъясню на примере. Пусть у нас есть справочники Ref1 и Ref2. Ref2 содержит реквизит типа Справочник, ссылающийся на Ref1. Пусть реквизит будет называтья rRef1. Так вот, если у нас в событии Карточка.Открытие будет функуия exit (ну например, я, как человек, мигрироваший с других языков, предпочитаю конструкцию:
if (VarIsNull(Form)) exit() endif
этой:
if (not VarIsNull(Form)) ... что-то делаем... ... endif
,то все будет ок, пока мы не добавим обработчик вычисления в справочник Ref2 для реквизита rRef1(например, для автозаполнения полей), использующий справочник Ref1.
Для наглядности пример:
Только начинаю осваивать Directum. Вот с разработки справочников, пожалуй, и начну свою первую коротенькую заметку.
Пусть нам нужен справочник Договора. Для этого необходимо запустить компоненту Типы справочников (в разделе Утилиты разработчика) и добавить новую запись.
Заполним поля в открывшейся карточке нового типа справочника. В поле Имя нужно указать уникальное имя справочника, которое будет использоваться при программном обращении к справочнику. В имени справочника рекомендуется использовать только буквы, цифры и символ "_". Назовём наш справочник Contracts.
В поле Заголовок в ед. числе в создаваемом справочнике пишем Договор.
Перейдя на вкладку Реквизиты, мы увидим, что наш тип справочника уже содержит предопределённые реквизиты. Добавим необходимые нам дополнительные реквизиты.
Теперь сформируем карточку типа справочника, то есть её внешний вид. Для этого сохраним тип справочника, после сохранения типа справочника разблокируется кнопка Форма, по нажатию на неё откроется редактор формы. В левой части окна мы увидим дерево реквизитов, из которого нужно перенести реквизиты на форму. Перенесём нужные реквизиты методом Drag & Drop и настроим их расположение на форме. Сохраняем форму.
Про настройку прав пока рассказывать не буду.
У каждого справочника есть события, код которых выполняется после, до или при выполнении определенных действий с данными. События являются предопределенными, разработчик не может добавлять или удалять их, но есть возможность отключать события. События могут относиться к набору данных, записи, операции, форме-карточки, таблице, реквизиту. В коде событий можно использовать предопределенные переменные, так, например, в событии Карточка. На любое действие в форме можно навесить свое событие. Подробнее о событиях можно почитать в справке.
Сохраняем.
Теперь нам необходимо отобразить справочник в дереве папок. Создадим новую папку компонент Документы, например в уже существующей папке Компоненты. Теперь заходим в Утилиты Разработчика->Настройка вариантов запуска компонент. Слева в дереве выбираем созданную до этого папку Документы и нажимаем кнопку Создать->вариант запуска компоненты. Выбираем наш справочник из списка. Нажимаем кнопку Сохранить. Вуаля! Теперь мы видим наш справочник в нужной нам папке. 🙂
Кажется, вышло сумбурно)).