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

Бизнес анализ. Движение артикула. Добавление контрагента. : Супермаг Плюс (Супермаг 2000)

23.11.2024 1:49


24.10.2012 16:40
Движение артикула за период
24.10.2012 16:45
Блин... а чего то туплю?...
у меня только:

Востребованность артикулов. ABC-анализ
Движение артикула в производстве
Движение артикула по контрагентам
Количество приходов / расходов артикула
Основания товародвижения по FIFO
Остатки на дату
Остатки на дату по свойствам
Остатки текущие
Остатки текущие по свойствам
Реализация в закупочных ценах по артикулам
Реализация по артикулам
Реализация по чекам
Сумма реализации в закупочных ценах по местам хранения и датам
Сумма реализации по артикулам. ABC-анализ
Сумма реализации по группам товаров. ABC-анализ
Сумма реализации по группам товаров с детализацией по местам хранения
Сумма реализации по местам хранения и датам
24.10.2012 16:58
у меня 1.029.2
24.10.2012 17:01
Цитата:
baggio Блин... а чего то туплю?...
у меня только:

Востребованность артикулов. ABC-анализ
Движение артикула в производстве
Движение артикула по контрагентам
Количество приходов / расходов артикула
Основания товародвижения по FIFO
Остатки на дату
Остатки на дату по свойствам
Остатки текущие
Остатки текущие по свойствам
Реализация в закупочных ценах по артикулам
Реализация по артикулам
Реализация по чекам
Сумма реализации в закупочных ценах по местам хранения и датам
Сумма реализации по артикулам. ABC-анализ
Сумма реализации по группам товаров. ABC-анализ
Сумма реализации по группам товаров с детализацией по местам хранения
Сумма реализации по местам хранения и датам
Это стандартные отчеты. А задача называется "Движение артикула".
При создании новой попробуй выбрать - увидишь.
15.01.2013 10:09
Цитата:
whitewizard Сделал отчёт типа оборотной ведомости, но более расширенный.
Показывает приходы, расходы, списания, возвраты, штрихкода и последнего поставщика.
Всё хорошо, но появилась мысль сделать в фильтре ещё отбор по контрагенту.
Но у меня это поле вычисляемое и текстовое.
Есть мысли как контрагента добавить в филтр?
По табличкам бизнес-анализа полазил, но чот идеи не возникло.
Делали нечто подобное, только за основу брали движение артикула по документам. там есть контрагент. Но там слегка логика извращенная - указывается период побольше, выбирается контрагент, затем отбираются приходы по нему, и уже по этим карточкам вычисляется документ последнего прихода, поставщик последнего прихода, продажи с момента последнего прихода и оперативный остаток.
довольно часто бывает, что поставщик по которому отбор велся первоначально вовсе не поставщик последнего прихода.

В принципе, можно взять эту задачу за основу, но из полей задачи брать только карточку, контрагента, приход, а продажи уже вычислять. тогда фильтр будет работать по контрагенту. Вот только вычислить - действительно ли продажи были именно из приходов этого контрагента - не реально будет. если товар поставлялся несколькими поставщиками, данные некорректные будут.
07.03.2014 07:05
Ребята, подскажите, пожалуйста, как выбрать Поставщика Последнего прихода? Выбрала за основу задачу Остатки на дату. Пробовала взять Движение артикула по документам, но там также отображается Контрагент из Расхода (Если расход был последним по дате документом по артикулу). А надо взять контрагента только Прихода.
Цель отчета совсем простая - Артикул - Остаток по артикулу - Поставщик последнего прихода
07.03.2014 19:56
выбрать - никак. в задачу можно добавить такое поле - поставщик последнего прихода, но для этого нужны доп. функции.
ниже пример использования и сами функции - вычисление документа последнего прихода, получение информации по документу, получение информации по коду контрагента.
пример использования в бизнес анализе:
получение кода контрагента последнего прихода для определенного артикула.
Get_Document_Info( Article_LastDocID({Место хранения. Код места хранения},{Карточка товара. Артикул},0),'CLIENTINDEX','WI')
получение наименования контрагента
RAD_GET_Client_Info(TO_NUMBER({...здесь поле задачи с вычислением кода контрагента...}),0)

А зная документ последнего прихода несложно вычислить цену последнего прихода, количество и прочее-прочее.

=======
Create or Replace Function Article_LastDocID(
MyStoreloc IN SUPERMAG.SMSTORELOCATIONS.ID%TYPE,
MyArticle IN SUPERMAG.SMCARD.ARTICLE%TYPE,
MyOpCode IN SUPERMAG.SMDOCUMENTS.OPCODE%TYPE,
MyUserOp IN SUPERMAG.SMDOCUMENTS.USEROP%TYPE := null)
return VARCHAR2 is
res_all varchar2 (100);
res_0 integer := -1;
BEGIN
-- res_0 - признак типа МХ для операции: 0 - нет операции, 1 - расход, 2 - приход. -1 - внутреннее перемещение
select (decode(a.incometype, 0,
decode(a.expensetype, 0, 0, 1), 2))
into res_0
from supermag.saoperation a
where a.id = MyOpCode
and a.incometype*a.expensetype = 0;
res_0:= nvl(res_0, -1);

IF res_0 >= 0 THEN
SELECT MAX(TO_CHAR(d.CREATEDAT, 'YYYYMMDD') || d.ID)
INTO res_all
FROM supermag.smdocuments d, supermag.smspec s
WHERE d.opcode = MyOPCode
and (d.userop = MyUserOp or MyUserOp is null)
and d.createdat <= TRUNC(sysdate)
and decode(res_0, 0, d.location, 1, d.locationfrom, 2, d.locationto) = MyStoreloc
and d.docstate = 3 -- статус документа
and s.doctype = d.doctype
and s.docID = d.ID
and s.article = MyArticle;
ELSE -- дял внутренних перемещений всех видов
SELECT MAX(TO_CHAR(d.CREATEDAT, 'YYYYMMDD') || d.ID)
INTO res_all
FROM supermag.smdocuments d, supermag.smspec s
WHERE d.opcode = MyOPCode
and (d.userop = MyUserOp or MyUserOp is null)
and d.createdat <= TRUNC(sysdate)
and (d.locationfrom = MyStoreloc or d.locationto = MyStoreloc)
and d.docstate = 3 -- статус документа
and s.doctype = d.doctype
and s.docID = d.ID
and s.article = MyArticle;
END IF;

IF res_all IS NULL THEN
RETURN NULL;
ELSE
RETURN(SUBSTR(res_all, 9, LENGTH(res_all) - 8));
END IF;
EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NULL;

END Article_LastDocID;
/
grant execute on supermag.Article_LastDocID to supermag_user;
commit;

Create or Replace Function Article_LastDocID_from_DATE(
MyStoreloc IN SUPERMAG.SMSTORELOCATIONS.ID%TYPE,
MyArticle IN SUPERMAG.SMCARD.ARTICLE%TYPE,
MyOpCode IN SUPERMAG.SMDOCUMENTS.OPCODE%TYPE,
MyUserOp IN SUPERMAG.SMDOCUMENTS.USEROP%TYPE := null,
MyDATE IN DATE
)
return VARCHAR2 is
res_all varchar2 (100);
res_0 integer := -1;
BEGIN
-- res_0 - признак типа МХ для операции: 0 - нет операции, 1 - расход, 2 - приход. -1 - внутреннее перемещение
select (decode(a.incometype, 0,
decode(a.expensetype, 0, 0, 1), 2))
into res_0
from supermag.saoperation a
where a.id = MyOpCode
and a.incometype*a.expensetype = 0;
res_0:= nvl(res_0, -1);

IF res_0 >= 0 THEN
SELECT MAX(TO_CHAR(d.CREATEDAT, 'YYYYMMDD') || d.ID)
INTO res_all
FROM supermag.smdocuments d, supermag.smspec s
WHERE d.opcode = MyOPCode
and (d.userop = MyUserOp or MyUserOp is null)
and d.createdat <= TRUNC(MyDATE)
and decode(res_0, 0, d.location, 1, d.locationfrom, 2, d.locationto) = MyStoreloc
and d.docstate = 3 -- статус документа
and s.doctype = d.doctype
and s.docID = d.ID
and s.article = MyArticle;
ELSE -- дял внутренних перемещений всех видов
SELECT MAX(TO_CHAR(d.CREATEDAT, 'YYYYMMDD') || d.ID)
INTO res_all
FROM supermag.smdocuments d, supermag.smspec s
WHERE d.opcode = MyOPCode
and (d.userop = MyUserOp or MyUserOp is null)
and d.createdat <= TRUNC(sysdate)
and (d.locationfrom = MyStoreloc or d.locationto = MyStoreloc)
and d.docstate = 3 -- статус документа
and s.doctype = d.doctype
and s.docID = d.ID
and s.article = MyArticle;
END IF;

IF res_all IS NULL THEN
RETURN NULL;
ELSE
RETURN(SUBSTR(res_all, 9, LENGTH(res_all) - 8));
END IF;
EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NULL;

END Article_LastDocID_from_DATE;
/
grant execute on supermag.Article_LastDocID_from_DATE to supermag_user;

Create or Replace Function Get_Document_Info(
MyDocID IN VARCHAR2,
MyWhat IN VARCHAR2,
MyDocType in VARCHAR2)
return VARCHAR2 is
res_all varchar2 (1024);
VSQL VARCHAR2(25000);
i integer := 0;
iData_Type varchar2(100);
BEGIN
SELECT COUNT(*) -- проверка правильности ввода имени столбца
INTO i
FROM SYS.ALL_TAB_COLUMNS
WHERE OWNER = 'SUPERMAG' AND TABLE_NAME = 'SMDOCUMENTS' AND UPPER(COLUMN_NAME) = UPPER('' || MyWhat || '');
if nvl(i, 0) = 0 then
return (null);
end if;

i := 0; -- проверка наличия документа в БД
select 1
into i
from supermag.smdocuments
where id = MyDocID and doctype=MyDocType;
if nvl(i, 0) = 0 then
return (null);
end if;

SELECT Data_Type -- тип столбца
INTO iData_Type
FROM SYS.ALL_TAB_COLUMNS
WHERE OWNER = 'SUPERMAG' AND TABLE_NAME = 'SMDOCUMENTS' AND UPPER(COLUMN_NAME) = UPPER('' || MyWhat || '');


if UPPER(iData_Type) = 'DATE' then -- конвертация для типа Date
VSQL := 'select to_char(s.' || MyWhat || ', ''dd.mm.yyyy'')' ||
' from supermag.smdocuments s ' ||
' where s.id = ''' || MyDocID || ''''||
' and s.doctype = ''' || MyDocType || ''''
;
else
VSQL := 'select (s.' || MyWhat || ') as MyValue' ||
' from supermag.smdocuments s ' ||
' where s.id = ''' || MyDocID || '''' ||
' and s.doctype = ''' || MyDocType || ''''
;
end if;

EXECUTE IMMEDIATE VSQL into res_all;

RETURN nvl(res_all, NULL);

EXCEPTION WHEN others THEN
RETURN (null);

END Get_Document_Info;
/
grant execute on supermag.Get_Document_Info to supermag_user;

--Функция получения информации по контрагенту по его коду.
--MyWhat - что получаем, по умолчанию - полное название
-- 1 = ИНН
create or replace function RAD_GET_Client_Info
(MyClientID IN NUMBER,MyWhat in number) return varchar2 is
Result varchar2(255);
begin
Result:='';
IF (MyWhat=1) THEN
select D.INN into Result from Supermag.SMClientInfo D
WHERE D.ID=MyClientID;
ELSE
select D.NAME into Result from Supermag.SMClientInfo D
WHERE D.ID=MyClientID;
END IF;
return Result;
end RAD_GET_Client_Info;
/
commit;
08.03.2014 11:15
Starter, спасибо за помощь! Попробую после выходных!
11.03.2014 10:56
Получилось добавить новое поле Код поставщика. А Наименование поставщика не получается - выдается ошибка

----- Прерывание работы программы -----
сообщение: "ORA-01481: недопустимая модель формата числа
"
исключение: Sm.Core.InteropException
hResult: 80004005h; доп. код: 1481
источник: Microsoft OLE DB Provider for Oracle

----- Причина исключения, уровень вложения 1 -----
сообщение: "begin supermag.SMARunTemplate(1019); end;"
исключение: Sm.Core.InteropException
hResult: 80004005h; доп. код: 0
источник: SmLibaryBase trace
11.03.2014 11:10
Так показывай, как делала...
Часовой пояс GMT +3, время: 01:49.

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