Введение.
Идея данной подсистемы появилась как реакция на поступающие требования к наполняемости объектов системы.
Ранее применяемый подход внесения изменений в процедуры системы показал нарастающую трудоемкость как при увеличении объема системы так и при увеличении их количества.
Параллельно решатся задача общего контроля данных системы в цепочках документов.
Описание подсистемы.
Подсистема состоит из следующих объектов.
Основные Настройки хранятся в регистре сведений "ппНси_ПраваОбъектов".
Здесь находится указания в какому объекту применяется правила и на кого они распространяются.
Рассмотрим ее возможности на примере настроек для справочника "Банковские счета".
1. Период - время начиная с которого действует правило.
2.Объект это ссылка на справочник ИдентификаторыОбъектовМетаданных
3. Право. Собственно какое ограничение мы накладываем. (Тип перечисление.Его мы рассмотрим ниже)
4. На кого распространяется указанное ограничение это Справочник ГруппыПользователей.
Значение остальных полей ясны из их названия.
Давайте опишем что делает например эта настройка.
все правила действуют начиная с даты 01.01.2020
1. Требуется уникальность для поля код,Наименования и пары полей (НомерСчета,БИКБанка)
2. Требуется обязательное заполнение поля наименование.
На деле это значит что все элементы справочника Банковские счета будут с уникальными указанными полями.
Система не допустит ввода оператором элементов с нарушением указанных правил.
Варианты контроля:
1. Обязательное при записи - перечисляются поля (через "," )или одно поле заполненность которого проверяется при записи.
Например для справочника договоры контрагенты ("Номер,Наименование,Номер,Дата")
2.Обязательное при проведении - аналогично варианту "при записи" но работает только при проведении документов.
Это полезно когда документ импортируется не проведенным и далее заполняется дополнительным механизмом.
3. ОбрЗаполнение - произвольный код выполняемый в контексте объекта в виде функции.
функция выполнитьОбработкаЗаполнения(СтрКод, Источник, ДанныеЗаполнения, СтандартнаяОбработка)
Выполнить(СтрКод);
конецфункции
4. ОбрПроведение - Произвольный код выполняемый в момент проведения или проверка результата с возможностью повлиять на возможность проведения. Контекст функции.
функция выполнитьСТР(СтрКод, Источник, Отказ = Ложь, РежимПроведения = Неопределено, Основание = Неопределено, врРежимЗаписи = Неопределено, врРежимПроведения = Неопределено)
Выполнить(СтрКод);
конецфункции
Другая жесть если хватит административного ресурса.
1.Блокировка на проведения документов с помещенными на удаление.
Это подписка на событие проверяющая наличие в записываемом объекте ссылок на ссылочные типы помеченные на удаление.
Например это полезно чтобы не указывали или выбирали помеченную номенклатуру или договора.
2.Блокировка распроведения документов если на их ссылаются другие объекты системы по дереву подчиненных.
Например это полезно когда у оператора появится желание распровести поступление или корректировку товар которой указан в другом документе партии.
Вывод
Данная подсистема позволяет разбирать ошибки на этапе ввода данных когда первичные данные у оператора.
В моем случае оператор может увидеть проблему и решить ее в момент когда первичка находится у оператора и не транслировать проблему на следующий уровень.
Позволяет модифицировать алгоритмы проверки и проведения без внесения изменений в модули системы.
p.s. Данная подситема писалась давно и сейчас некоторые куски требую оптимизации.
В любом случае она успешно работает (БП,КА,УПП и т.д.)и уменьшает количество головной боли отдела НСИ и пользователей системы.
Спасибо за внимание.