Цитата: Vovantus ➤ нет, не приходилось. думается мне, общий принцип не помешает, выкладывайте :)
в самых общих чертах:
1. создаём проверку (таблица ssinspectfunc) (нумеровать сви проверки лучше с 1000)
2. создаём правила срабатывания проверки (таблица ssinspectdoc)
например, для НП при смене статуса из черновика в красный будет вызываться процедура PRC1
а при смене статуса из красного в зелёный будет вызываться проседура PRC2
и т.д. для каждого сочетания статусов (можно не делать кучу процедур, а всё описать в одной,
но строк правил всё равно будет несколько)
3. создаём процедуру-обработчик, в которой должны быть:
3.1. параметры (интересуют только первые 4)
INDOCTYPE IN SMDOCUMENTS.DOCTYPE%TYPE
, INDOCID IN SMDOCUMENTS.ID%TYPE
, INOLDSTATE IN SMDOCUMENTS.DOCSTATE%TYPE := NULL
, INNEWSTATE IN SMDOCUMENTS.DOCSTATE%TYPE := NULL
, INDUMMY IN CORE.SMBOOL := NULL
3.2 первая строка
INSPECT.ONSTARTTRANS
3.3 последняя строка
INSPECT.SETFUNCNAME( ИД проверки )
3.4 для вывода сообщений (это же является срабатыванием проверки) используем
insert INTO TTINSPECTRESBUFFER ( INSPECTID, ERRID, INSPECTNAME, ERRTEXT ) values ...
например при срабатывании на магазине правила с PRC1:
если у НП (locationfrom=ИДмаг and locationto=ИДцс), то null, иначе insert
это означает, что оператор магазина может перевести из черновика в красную только НП из магазина на ЦС
в остальных случаях при переводе НП из черновика в красную будет выдана ошибка
4. привязваем режимы срабатывания проверки к должностям (таблица sminspectcfg)
например, проверка для оператора магазина будет действовать в режиме запрета,
а для старшего оператора магазина в режиме предупреждения
описания таблиц в документации есть
и на форуме мне где то попадалась расшифровка значений полей этих таблиц