namesash➤ так соглашение и контракт ЕСТЬ, но данная проверка отрабатывает встроенной процедурой см+, а вот при экспорте во внешнюю доверительную БД мы получим заказ без тега BASEID в секции SMCOMMONBASES
у меня есть что то подобное - административно такие заказы объявлены "неправильными" - и по ним никто ничего не отгружает.
namesash➤ так соглашение и контракт ЕСТЬ, но данная проверка отрабатывает встроенной процедурой см+, а вот при экспорте во внешнюю доверительную БД мы получим заказ без тега BASEID в секции SMCOMMONBASES
Так в перовой мессаге
Цитата:
namesash➤ Может есть у кого готовый триггер на проверку подставлено основание в заказе, или нет?
появилась необходимость запрещать поднимать до розового статуса, если нет основания в контракте, а такое происходит если заказ поставщику создан вручную, т.е. через "создать новый" не на базе контракта.
нужен тригер для запрета поднятия заказа до розового статуса, если в основании нет контракта (174 проверка - соглашения о поставке), при чем тут другая доверительная БД? Если подняли в этой БД до розового, где есть контракт и отправили в другую БД, значит заказ проверку прошел и по нему можно принимать. Если нужна проверка цены в контракте, то тут не обязательна привязка к контракту и так проверится в нем, если стоит галка "Контроль приходных цен по контрактам". Не пойму при чем тут BASEID в секции SMCOMMONBASES
нужен тригер для запрета поднятия заказа до розового статуса, если в основании нет контракта (174 проверка - соглашения о поставке), при чем тут другая доверительная БД? Если подняли в этой БД до розового, где есть контракт и отправили в другую БД, значит заказ проверку прошел и по нему можно принимать. Если нужна проверка цены в контракте, то тут не обязательна привязка к контракту и так проверится в нем, если стоит галка "Контроль приходных цен по контрактам". Не пойму при чем тут BASEID в секции SMCOMMONBASES
Ещё раз повторю, 174 проверка проверяет внутри СМ+. Что из того, что у меня есть соглашение и соответственно контракт, эта проверка пропускает приходную на основании заказа, который создан через "создать новый" без указания контракта. Если кто занимался стыковкой с БУ 1С, то наверняка знает, там договор, является обязательным как основание для приходной (поступление товаров и услуг), так вот при экспорте документа "приходная накладная" в формат xml теги остаются пустыми (это ответ на "Не пойму при чем тут BASEID в секции SMCOMMONBASES)
ReDHawK➤ Ну а если в правах отобрать Создание и Импорт в этот тип, а оставить Формирование на базе контракта и По соглашениям, не подойдет?
я про это уже писал - говорит у него так не работает :)
и как бы в 1с можно без проблем найти нужный договор, если их несколько то придется установить какие то правила и им следовать.
очень странно, что не работает. стандартное почти решение.
если вернуться к исходной задаче... по хорошему, надо делать не триггер на базу, а проверку в супермаге.
1) найти свободный номер проверки. мы начинали с 900, чтобы не пересекаться со штатными проверками. пусть для примера будет 955
2) создать
процедуру проверки:
Код:
CREATE OR REPLACE PROCEDURE CUS_INSP_OR_CHECK_CO(
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)
IS
-- KAI 09.06.2016 запрет размещения заказов поставщику, для которых в основании нет контракта
BEGIN
INSPECT.Onstarttrans;
insert into TTINSPECTRESBUFFER (INSPECTID, ERRID, INSPECTNAME, ERRTEXT)
select 955, 0, '955', 'Запрещено размещать заказ поставщику '||INDOCID||' без контракта в основании заказа.'
from smdocuments d
where d.doctype = INDOCTYPE and d.id = INDOCID -- тип документа и номер нашего заказа мы получили как входные параметры
and not exists (select 1
from smcommonbases b
where b.doctype = d.doctype and b.id=d.id and b.basedoctype = 'CO'
)
;
INSPECT.SETFUNCNAME(955);
END CUS_INSP_OR_CHECK_CO;
3) задать наименование проверки и режим срабатывания по умолчанию
insert into ssinspectfunc (id,name,definspectmode)
values (955, 'Запрет размещения заказа поставщику без контракта в основании заказа', 2)
4) задать для каких документов и в какой момент должна срабатывать
Код:
-- включаем запрет для заказов ('OR') при смене статуса с "черновик" (1) на "размещен" (2)
insert into ssinspectdoc (doctype, docstate, docstatebefore, inspectid, inspectoraname, dobefore)
values('OR', 2, 1, 955, 'CUS_INSP_OR_CHECK_CO', 1)
akonev➤ очень странно, что не работает. стандартное почти решение.
если вернуться к исходной задаче... по хорошему, надо делать не триггер на базу, а проверку в супермаге.
1) найти свободный номер проверки. мы начинали с 900, чтобы не пересекаться со штатными проверками. пусть для примера будет 955
2) создать
процедуру проверки:
Код:
CREATE OR REPLACE PROCEDURE CUS_INSP_OR_CHECK_CO(
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)
IS
-- KAI 09.06.2016 запрет размещения заказов поставщику, для которых в основании нет контракта
BEGIN
INSPECT.Onstarttrans;
insert into TTINSPECTRESBUFFER (INSPECTID, ERRID, INSPECTNAME, ERRTEXT)
select 955, 0, '955', 'Запрещено размещать заказ поставщику '||INDOCID||' без контракта в основании заказа.'
from smdocuments d
where d.doctype = INDOCTYPE and d.id = INDOCID -- тип документа и номер нашего заказа мы получили как входные параметры
and not exists (select 1
from smcommonbases b
where b.doctype = d.doctype and b.id=d.id and b.basedoctype = 'CO'
)
;
INSPECT.SETFUNCNAME(955);
END CUS_INSP_OR_CHECK_CO;
3) задать наименование проверки и режим срабатывания по умолчанию
insert into ssinspectfunc (id,name,definspectmode)
values (955, 'Запрет размещения заказа поставщику без контракта в основании заказа', 2)
4) задать для каких документов и в какой момент должна срабатывать
Код:
-- включаем запрет для заказов ('OR') при смене статуса с "черновик" (1) на "размещен" (2)
insert into ssinspectdoc (doctype, docstate, docstatebefore, inspectid, inspectoraname, dobefore)
values('OR', 2, 1, 955, 'CUS_INSP_OR_CHECK_CO', 1)
Спасибо, что открыли глаза на мир проверок.
Помогите пожалуйста есть задача переписать проверку 122.
Непонятно как найти/раскодировать текст проверки. нужно создать ее аналог, так чтобы она не срабатывала для документа Расходная накладная с типом операции "Списание брака".
Буду очень признательна.