У каждого объекта системы есть список правил, т.е. требований для исполнения неких условий, реализующих внутреннюю логику системы. Этот список можно получить с помощью свойства 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). Отключать некоторые правила опасно, например, отключение
правила “Нельзя удалять запись, так как она уже используется.” может привести к нарушению ссылочной целостности. Но для оптимизации или для реализации нестандартной логики правила можно отключать.
Например:
- SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID– организация пользовательского выбора из справочника, чтобы курсор был установлен на выбранную ранее запись.
- CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID– в коннекторах, когда при приеме данных и создании записи могут быть заполнены не все обязательные реквизиты.
- CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID– в ТР «Управление персональными данными», когда нужно очистить значения обязательных реквизитов, содержащие персональные данные, при этом эти записи уже могут где-то использоваться.
После выполнения необходимых действий правила следует включать обратно.
Предлагаю поделиться вашими примерами отключения правил с описанием проблемы, которую помогло решить отключение правила.