26.05.2016 17:39
denxz
 
Цитата:
namesash так соглашение и контракт ЕСТЬ, но данная проверка отрабатывает встроенной процедурой см+, а вот при экспорте во внешнюю доверительную БД мы получим заказ без тега BASEID в секции SMCOMMONBASES
у меня есть что то подобное - административно такие заказы объявлены "неправильными" - и по ним никто ничего не отгружает.
27.05.2016 12:47
ReDHawK
 
Цитата:
namesash так соглашение и контракт ЕСТЬ, но данная проверка отрабатывает встроенной процедурой см+, а вот при экспорте во внешнюю доверительную БД мы получим заказ без тега BASEID в секции SMCOMMONBASES
Так в перовой мессаге
Цитата:
namesash Может есть у кого готовый триггер на проверку подставлено основание в заказе, или нет?

появилась необходимость запрещать поднимать до розового статуса, если нет основания в контракте, а такое происходит если заказ поставщику создан вручную, т.е. через "создать новый" не на базе контракта.
нужен тригер для запрета поднятия заказа до розового статуса, если в основании нет контракта (174 проверка - соглашения о поставке), при чем тут другая доверительная БД? Если подняли в этой БД до розового, где есть контракт и отправили в другую БД, значит заказ проверку прошел и по нему можно принимать. Если нужна проверка цены в контракте, то тут не обязательна привязка к контракту и так проверится в нем, если стоит галка "Контроль приходных цен по контрактам". Не пойму при чем тут BASEID в секции SMCOMMONBASES
31.05.2016 11:12
namesash
 
Цитата:
ReDHawK Так в перовой мессаге

нужен тригер для запрета поднятия заказа до розового статуса, если в основании нет контракта (174 проверка - соглашения о поставке), при чем тут другая доверительная БД? Если подняли в этой БД до розового, где есть контракт и отправили в другую БД, значит заказ проверку прошел и по нему можно принимать. Если нужна проверка цены в контракте, то тут не обязательна привязка к контракту и так проверится в нем, если стоит галка "Контроль приходных цен по контрактам". Не пойму при чем тут BASEID в секции SMCOMMONBASES
Ещё раз повторю, 174 проверка проверяет внутри СМ+. Что из того, что у меня есть соглашение и соответственно контракт, эта проверка пропускает приходную на основании заказа, который создан через "создать новый" без указания контракта. Если кто занимался стыковкой с БУ 1С, то наверняка знает, там договор, является обязательным как основание для приходной (поступление товаров и услуг), так вот при экспорте документа "приходная накладная" в формат xml теги остаются пустыми (это ответ на "Не пойму при чем тут BASEID в секции SMCOMMONBASES)
02.06.2016 09:44
ReDHawK
 
Ну а если в правах отобрать Создание и Импорт в этот тип, а оставить Формирование на базе контракта и По соглашениям, не подойдет?
02.06.2016 11:18
denxz
 
Цитата:
ReDHawK Ну а если в правах отобрать Создание и Импорт в этот тип, а оставить Формирование на базе контракта и По соглашениям, не подойдет?
я про это уже писал - говорит у него так не работает :)
и как бы в 1с можно без проблем найти нужный договор, если их несколько то придется установить какие то правила и им следовать.
09.06.2016 14:15
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) задать наименование проверки и режим срабатывания по умолчанию

0 - отключена
1 - предупреждение
2 - запрет
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)
12.07.2016 04:51
Elena
 
Цитата:
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) задать наименование проверки и режим срабатывания по умолчанию

0 - отключена
1 - предупреждение
2 - запрет
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.
Непонятно как найти/раскодировать текст проверки. нужно создать ее аналог, так чтобы она не срабатывала для документа Расходная накладная с типом операции "Списание брака".
Буду очень признательна.
Часовой пояс GMT +3, время: 12:32.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.