У каждого объекта системы есть список правил, т.е. требований для исполнения неких условий, реализующих внутреннюю логику системы. Этот список можно получить с помощью свойства IObject.Rules. По умолчанию для объекта системы проверяются все правила списка. В справке описано 3 наиболее востребованных правила, но есть и другие правила, которые могут быть полезны.
Получить список всех правил, например, справочника можно так:
Ref = CreateReference('<Имя типа справочника>')
// Создать представление, чтобы получить полный набор правил
View = Ref.CreateView(Ref.MainViewCode)
// Получить правила справочника
RuleList = Ref.Rules
// Посмотреть ИД и описания всех правил
foreach Rule in RuleList
ShowMessage(Rule.ID)
ShowMessage(Rule.Description)
endforeach
Если выполнить представленный выше код, то будут получены 20 правил:
ИД |
Описание |
SET_OURFIRM_BOUNDS_RULE_ID
|
При установленном контексте организации в набор данных компоненты, имеющей реквизит "НашаОрг", должны попадать только записи, удовлетворяющие установленному контексту. |
CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID
|
Для утверждения записи должны быть заполнены все обязательные реквизиты. |
SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID
|
При показе формы-списка курсор должен быть установлен на первую запись набора данных. |
SET_DEFAULT_FIRM_CONTEXT_RULE_ID |
Если есть только одна Наша Организация, то ее контекст должен быть установлен. |
SET_OURFIRM_REQUISITE_RULE_ID |
Значение реквизита "НашаОрг" должно заполняться автоматически из установленного контекста. |
CHECK_CODE_REQUISITE_RULE_ID |
Значение реквизита "Код" не должно содержать символов ".". |
AUTO_NUMERATION_RULE_ID |
Значение реквизита "Код" для автонумеруемых компонент должно заполняться значением "АВТОНОМЕР" при добавлении новой записи. |
SET_DEPARTMENT_SECTION_BOUNDS_RULE_ID |
В набор данных компоненты, имеющей реквизит "УчРазд", должны попадать записи, удовлетворяющие установленному модулю. |
SET_FIRM_CONTEXT_FROM_RECORD_RULE_ID |
На время открытия записи набора данных, имеющего реквизит "НашаОрг", должен быть установлен контекст организации, равный значению из реквизита "НашаОрг" открытой записи. |
CANT_CHANGE_ID_REQUISITE_RULE_ID |
Нельзя изменять значение реквизита "ИД". Идентификатор записи набора данных назначается только один раз при ее создании. |
CANT_CHANGE_OURFIRM_REQUISITE_RULE_ID |
Нельзя изменять значение реквизита "НашаОрг". Значение реквизита назначается только один раз при создании записи. |
CHECK_FILTRATER_CHANGES_RULE_ID |
Нельзя установить данные значения для реквизитов-фильтраторов, так как в результате изменения запись должна быть переадресована на другой сервер. |
MAKE_RECORD_UNRATIFIED_RULE_ID |
Сделать запись неутвержденной. |
SET_NEXT_CODE_VALUE_RULE_ID |
Для автонумеруемых наборов данных значение очередного номера должно подбираться автоматически. |
RESTORE_AUTO_NUMERATION_RULE_ID |
Значение реквизита "Код" для автонумеруемых компонент должно восстанавливаться в значение "АВТОНОМЕР" при ошибках сохранения новой записи. |
19 |
Дата начала действия записи не может быть больше даты окончания действия записи! |
CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID |
Нельзя изменять запись, так как она уже используется. |
CHECK_DELETING_REFERENCE_RECORD_USE_RULE_ID |
Нельзя удалять запись, так как она уже используется. |
CHECK_REFERENCE_INTERVAL_RULE_ID |
Период действия записи (%0:s) должен пересекаться с периодами действия используемых записей справочников. |
SET_IDSPS_VALUE_RULE_ID |
При установке IDSPS произошла ошибка. |
Каждое правило проверяется при наступлении определенных событий. Программно можно отключать сразу все правила (IRuleList.DisableAll) или только определенные (IRule.Enabled = FALSE). Отключать некоторые правила опасно, например, отключение правила “Нельзя удалять запись, так как она уже используется.” может привести к нарушению ссылочной целостности. Но для оптимизации или для реализации нестандартной логики правила можно отключать.
Например:
После выполнения необходимых действий правила следует включать обратно.
Предлагаю поделиться вашими примерами отключения правил с описанием проблемы, которую помогло решить отключение правила.
Обычно при интеграции DIRECTUM с другими системами приходится отключать проверку заполненности обязательных реквизитов карточек документов и справочников:
Если правило не отключить и при интеграции синхронизируются не все обязательные реквизиты, то документ или запись справочника сохранить не получится.
Запись справочника получится, просто она неутвержденной будет. А вот документ действительно не сохранится.
Если при сохранении записи справочника не отключить нужные события, то она не сохранится программно в фоновом режиме, т.к. появится диалоговое окно (как минимум о том, что заполнены не все обязательные реквизиты).
Сохранится, но будет неутвержденной :)
Сам проверял.
Сейчас сам проверил, действительно сохраняется неутвержденной :)
Видимо какая-то другая ситуация была, сейчас уже не помню.
А как вам такой код для разминки:
Попадаются справочники с которыми не все так просто :)))
Непонятно наличие данной строки в коде, так как и без нее возвращается список правил, а переменная View в дальнейшем нигде не используется. Или тут некий тайный смысл?
Без создания представления в списке правил не будет правила:
SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID
При показе формы-списка курсор должен быть установлен на первую запись набора данных.
Добрый день. Простите за такой странный вопрос, но мне необходимо отключить правило CHECK_REFERENCE_INTERVAL_RULE_ID для справочника и я хоть убейте не могу понять как это сделать. не могли бы вы мне помочь?
Тоже задалась этим вопросом, вставила отключение правила в событии Сохранение Возможность справочника, а в событии Сохранение После, включила правило обратно:
Авторизуйтесь, чтобы написать комментарий