Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Проверка: Соглашение о поставках - контроль упаковки : Супермаг Плюс (Супермаг 2000)

29.03.2024 11:43


14.01.2019 09:12
Adeus11111
 
Добрый день!!!!

Подскажите пожалуйста есть ли возможность выставить проверку в соглашении на графу упаковка при проведении документа в статус размещен.

пример если упаковка не проставлена до запрет на проведение соглашения.

Заранее спасибо
14.01.2019 10:38
konst
 
можно
внимательно читайте сообщение
https://olegon.ru/showpost.php?p=259688&postcount=16
пишите свою процедуру проверки наличия упаковок - и готово.
20.01.2019 10:23
konst
 
Получилось проверку сделать?
если ДА - то выложите код - может кому пригодится.
если НЕТ - то давайте сделаем вместе.
14.03.2019 03:53
АндрейСупермаг
 
Цитата:
konst Получилось проверку сделать?
если ДА - то выложите код - может кому пригодится.
если НЕТ - то давайте сделаем вместе.
Пытаюсь создать запрет на проведение накладной если
- реквизит № с/ф не заполнен.
- контрагент поставщик является плательщиком НДС.

231 Контроль параметров счета-фактуры и накладной поставщика - не подходит так как срабатывает не зависимо от тогда является ли поставщик плательщиком НДС или нет.

Ниже пример запроса при срабатывании которого у пользователя должен появляться запрет:

SELECT * from SMWayBillsIn where id='M220000035339';
SELECT case WHEN CLI.VATPAYER=1 THEN 'С НДС' ELSE 'Без НДС' END NDS from SMWayBillsIn tabdoc, SMDOCUMENTS doc, SMCLIENTINFO CLI
where DOC.id='M220000035339'
and DOC.id= TABDOC.ID
and DOC.DOCTYPE='WI'
and doc.DOCTYPE=TABDOC.DOCTYPE
and DOC.CLIENTINDEX=CLI.ID
and TABDOC.SUPPLIERINVOICE is null
and CLI.VATPAYER=1
;

А вот дальше я завис. Пишем процедуру по примеру выше.

CREATE OR REPLACE
PROCEDURE A_RS_HDS_DOC_SF(
INDOCTYPE IN SMDOCUMENTS.DOCTYPE%TYPE
, INDOCID IN SMDOCUMENTS.ID%TYPE
, INDOCCL IN SMDOCUMENTS.CLIENTINDEX%TYPE
, CLID IN SMCLIENTINFO.ID%TYPE
, CLNDS IN SMCLIENTINFO.VATPAYER%TYPE
, DOCRECVSF IN SMWayBillsIn.SUPPLIERINVOICE%TYPE
, DOCRECVTYPE IN SMWayBillsIn.DOCTYPE%TYPE
, DOCRECVID IN SMWayBillsIn.ID%TYPE
, INOLDSTATE IN SMDOCUMENTS.DOCSTATE%TYPE := NULL
, INNEWSTATE IN SMDOCUMENTS.DOCSTATE%TYPE := NULL
, INDUMMY IN CORE.SMBOOL := NULL)
IS
--КОМЕНТ
BEGIN

INSPECT.Onstarttrans; insert into TTINSPECTRESBUFFER (INSPECTID, ERRID, INSPECTNAME, ERRTEXT) ---??? вот эта часть кода и как она работает мне не понятна. Т.е. видимо здесь
--- нужно описать Update с попыткой записать приход без корректной с/ф. Пробовал но ничего не произошло. На сколько обязательно обращение к package?

SELECT 901, 0, '901', 'Запрещено проводить приход по плательщику НДС без заполнения с/Ф'
from SMWayBillsIn tabdoc, SMDOCUMENTS doc, SMCLIENTINFO CLI
where
DOC.id= INDOCID
and DOC.DOCTYPE= INDOCTYPE
and DOC.CLIENTINDEX= INDOCCL
and CLI.ID= CLID
and DOC.id= TABDOC.ID
and DOC.DOCTYPE='WI'
and doc.DOCTYPE=TABDOC.DOCTYPE
and DOC.CLIENTINDEX=CLI.ID
and TABDOC.SUPPLIERINVOICE is null
and CLI.VATPAYER=1
and not exists (select 1
from smcommonbases b
where b.doctype = DOC.doctype and b.id=DOC.id and b.basedoctype = 'WI'
)
;

INSPECT.SETFUNCNAME(901);
END A_RS_HDS_DOC_SF;





INSPECT.Onstarttrans; insert into TTINSPECTRESBUFFER (INSPECTID, ERRID, INSPECTNAME, ERRTEXT) ---??? вот эта часть кода и как она работает мне не понятна. Т.е. видимо здесь
--- нужно описать Update с попыткой записать приход без корректной с/ф. Пробовал но ничего не произошло. На сколько обязательно обращение к package?
14.03.2019 07:26
konst
 
Смогу посмотреть все только в понедельник.
А так на вскидку результатом работы запроса должно быть добавление строк в таблицу:
SQL код:
insert into TTINSPECTRESBUFFER.... 
Т.е. если проверка сработала, то в этой таблице должны быть записи... если их нет, то считается что проверка пройдена успешно...
Также в этом конкретном случае можно написать проверку, которая проверяет является контрагент плательщиком нас или нет. И если да, то вызывать стандартную 231 проверку. Такой пример также есть на форуме.
14.03.2019 09:27
vdm
 
Цитата:
АндрейСупермаг PROCEDURE A_RS_HDS_DOC_SF(
INDOCTYPE IN SMDOCUMENTS.DOCTYPE%TYPE
, INDOCID IN SMDOCUMENTS.ID%TYPE
, INDOCCL IN SMDOCUMENTS.CLIENTINDEX%TYPE
...
Если собираетесь использовать эту процедуру как стандартную (в ssinspectdoc) - никакой отсебятины в параметрах (INDOCCL и т.п.) быть не должно.

Цитата:
АндрейСупермаг INSPECT.Onstarttrans; insert into TTINSPECTRESBUFFER (INSPECTID, ERRID, INSPECTNAME, ERRTEXT) ---??? вот эта часть кода и как она работает мне не понятна. Т.е. видимо здесь
--- нужно описать Update с попыткой записать приход без корректной с/ф. Пробовал но ничего не произошло. На сколько обязательно обращение к package?

SELECT 901, 0, '901', 'Запрещено проводить приход по плательщику НДС без заполнения с/Ф'
Тут insert и select это одно целое, не делите на части.
INSPECT.Onstarttrans зачем-то нужно, во всех стандартных проверках есть.

Если не получится - полный код приведите со всеми этапами создания проверки.
15.03.2019 11:18
АндрейСупермаг
 
Итого: убрал лишнее из описания процедуры и все заработало.
Спасибо. Буду в ближайшие дни писать еще несколько проверок на соглашения и т.д. выложу сюда.
Ниже рабочая проверка документа на заполненность № с/ф если поставщик является плательщиком НДС:


**********
Процедура
**********

CREATE OR REPLACE
PROCEDURE A_RS_HDS_DOC_SF(
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

--КОМЕНТ
BEGIN
----
INSPECT.Onstarttrans;
insert into TTINSPECTRESBUFFER (INSPECTID, ERRID, INSPECTNAME, ERRTEXT)

SELECT 901, 0, '901', 'Запрещено проводить приход по плательщику НДС без заполнения с/Ф'
from SMWayBillsIn tabdoc, SMDOCUMENTS doc, SMCLIENTINFO CLI, SMOwnClientLocs LOCCLI, SMCLIENTINFO CLI2
where
DOC.id= INDOCID
and DOC.DOCTYPE= INDOCTYPE
and DOC.id= TABDOC.ID
and DOC.DOCTYPE='WI'
and doc.DOCTYPE=TABDOC.DOCTYPE
and DOC.CLIENTINDEX=CLI.ID
and TABDOC.SUPPLIERINVOICE is null
and CLI.VATPAYER=1
and LOCCLI.LOCID=DOC.LOCATIONTO
and LOCCLI.CLIENTID=CLI2.ID
and CLI2.VATPAYER=1

and not exists (select 1
from smcommonbases b
where b.doctype = DOC.doctype and b.id=DOC.id and b.basedoctype = 'WI'
)
;

INSPECT.SETFUNCNAME(901);
END A_RS_HDS_DOC_SF;



************
задать наименование проверки и режим срабатывания по умолчанию
************
insert into ssinspectfunc (id,name,definspectmode)
values (901, 'Запрет пустого № с/ф по плательщику НДС', 2);

************
включаем запрет для приходов('OR') при смене статуса с "черновик" (1) на "размещен" (2)
************
insert into ssinspectdoc (doctype, docstate, docstatebefore, inspectid, inspectoraname, dobefore)
values('WI', 2, 1, 901, 'CUS_INSP_OR_CHECK_CO', 1)
16.03.2019 07:47
АндрейСупермаг
 
Цитата:
Adeus11111 Добрый день!!!!

Подскажите пожалуйста есть ли возможность выставить проверку в соглашении на графу упаковка при проведении документа в статус размещен.

пример если упаковка не проставлена до запрет на проведение соглашения.

Заранее спасибо
Получится вот такой код.
**********
Процедура
**********
CREATE OR REPLACE
PROCEDURE A_RS_SOGL_DOC_UP(
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

--КОМЕНТ
BEGIN
----
INSPECT.Onstarttrans;
insert into TTINSPECTRESBUFFER (INSPECTID, ERRID, INSPECTNAME, ERRTEXT)

SELECT 902, 0, '902', 'Запрещено проводить соглашение без заполнения размера упаковки'
from SMSpecCQ PEC, SMDOCUMENTS DOC
where
DOC.id= INDOCID
and DOC.DOCTYPE= INDOCTYPE
and PEC.DOCTYPE=DOC.DOCTYPE
and PEC.DOCTYPE='CQ'
and PEC.DOCID=DOC.ID
and PEC.PACKSIZE <=0
and not exists (select 1
from smcommonbases b
where b.doctype = DOC.doctype and b.id=DOC.id and b.basedoctype = 'CQ'
)
;

INSPECT.SETFUNCNAME(902);
END A_RS_SOGL_DOC_UP;



************
задать наименование проверки и режим срабатывания по умолчанию
************

insert into ssinspectfunc (id,name,definspectmode)
values (902, 'Запрет размещения соглашения в котором не заполнен размер упаковки', 2);

************
включаем запрет для соглашений CQ при смене статуса с "черновик" (1) на "размещен" (2)
************

insert into ssinspectdoc (doctype, docstate, docstatebefore, inspectid, inspectoraname, dobefore)
values('CQ', 2, 1, 902, 'A_RS_SOGL_DOC_UP', 1)
08.04.2019 16:17
АндрейСупермаг
 
В продолжение темы. Как создавать запреты на какие либо действия с документами более или менее понятно а вот как быть со справочниками? Нужно установить запрет на исключение карты товара если на ней есть остатки. Возможно ли это?
08.04.2019 19:04
OlegON
 
триггером... только зря валите все в кучу...
Часовой пояс GMT +3, время: 11:43.

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