[ОТВЕТИТЬ]
23.04.2015 11:49
Starter
 
Не знает ли кто - как можно скриптом получить остатки в закупочных ценах (то, что в супермаге в отчете бухгалтерские/остатки в закупочных ценах) ?
В бизнес анализе такие остатки берутся из SVARemainsCP, которая, в свою очередь, ссылается на TTRemains, в которой, в свою очередь есть поле CP_FULL
Однако, там пусто. Количество есть, а вот себестоимости нет. Какая процедура заполняет эти остатки ? Пробовали supermag.Rep_Ostatki - количество заполняется, CP_FULL - нет.
23.04.2015 12:11
Starter
 
Вряд ли оно, вариант execute supermag.remains.calc(sysdate-1, FALSE, 23, 0, FALSE); срабатывает только на количество, CP_FULL пусто. Судя по описанию Описание CALC нет в этой процедуре параметра для расчета этой С/С.
23.04.2015 12:14
svtl
 
Нужно использовать fixremincome (или fixremains).calc

если по-порядку:
supermag.SQL_Filter.Clear_AllFilters; -- чистим все фильтры

-- далее можно прописать фильтры вручную - примерно так:
supermag.SQL_Filter.Set_ArticleFromSQL('select article from supermag.smcard'); -- все артикулы
supermag.SQL_Filter.Set_LocFromSQL('select 7 from dual'); -- код МХ

-- либо используем параметры отчета и задаем фильтры по-другому
-- (см.параметры в описании RepExample_ReadMe.doc)
supermag.RepTools.LoadClass(:P_Group_All, :P_BGroup, :P_Group_Tree); -- для артикулов
supermag.RepTools.LoadLoc(:P_Stored_All,:P_Stored_Name,:P_Partner,null,:P_DATE); --для МХ

(дальше можно побаловаться со списокм МХ - убрать те из них, по которым остатки получить нельзя)
-- и последняя процедура - расчет остатков.
-- если нужна детализация по налогам и поставщикам - то
delete from supermag.ttremincome;
supermag.FixRemIncome.Calc(:P_Date);
-- и результат в ttremincome

-- если такая детализация не нужна -
delete from supermag.ttremains;
supermag.FixRemains.Calc(:P_Date);
-- и результат в ttremains

Вообще, когда речь идет о закупочных ценах - с опорой на товародвижение - Rеmains.calc не подходит. При расчете остатков (как в отчете Остатки группы Товарные) там опционально делается заполнение таблицы ttremains ценами посл. прихода, но не себестоимостью
23.04.2015 13:00
Starter
 
Требовалось именно то, что в бухгалтерских. Про цены последнего прихода - отдельная песня, что с ними делать - понятно.

Проверили следующее:
execute supermag.FixRemains.calc(trunc(sysdate-1));
затем:
select sum(rem.Quantity),sum(rem.cp_full) from supermag.TTRemains rem;
Получаем цифры сальдо из отчета Товарный отчет в закупочных ценах (бухгалтерские).

затем:
select sum(rem.Quantity),sum(round(rem.cp_full,2)) from supermag.TTRemains rem,supermag.SVCardName crd where crd.article = rem.article and crd.datatype in (0,3,4);

Получаем то, что в отчете остатки в закупочных ценах (бухгалтерские).

К сожалению, так понимаю, совместить остаток в закупочных ценах и остаток в ценах ПП (цены из ttostatki2) в рамках одного запроса не получится ?
23.04.2015 13:23
Starter
 
А нет, совместить получится.
Сперва рассчитываем остатки с заполнением таблиц ttostatki1,ttostatki2, затем рассчитываем остатки в закупочных ценах.

call supermag.Rep_Ostatki(to_char(sysdate-54,'dd.mm.yyyy'),0,0,0,2,0,0,0);
execute supermag.FixRemains.calc(trunc(sysdate-54));
select sum(rem.Quantity),sum(round(rem.cp_full,2)) from supermag.TTRemains rem,supermag.SVCardName crd where crd.article = rem.article and crd.datatype in (0,3,4);
SELECT sum(rem.qty),SUM(nvl(round(o2.Price1*rem.Qty, o2.PricePrec),0)) FROM SVARemainsCP REM,ttostatki2 o2,supermag.SVCardName crd where crd.article = rem.article and o2.Article(+)=rem.Article and o2.locid(+)=rem.StoreLoc and crd.datatype in (0,3,4);
23.04.2015 13:30
Starter
 
Ну или точнее в одном запросе:
SELECT sum(rem.qty),sum(rem.cp),SUM(nvl(round(o2.Price1*rem.Qty, o2.PricePrec),0)) FROM SVARemainsCP REM,ttostatki2 o2,supermag.SVCardName crd where crd.article = rem.article and o2.Article(+)=rem.Article and o2.locid(+)=rem.StoreLoc and crd.datatype in (0,3,4);

Ну и нужно учитывать, что остатки "в закупочных ценах" и "остатки в ценах последнего прихода" - это две разные вещи, даже по количеству. Если есть накладные в "розовом статусе", то остаток в ценах ПП изменится, остаток в зак. ценах - нет.
23.04.2015 14:28
svtl
 
Раньше вместо Rep_Ostatki использовалось явно remains.calc(sysdate-1, FALSE, 23, 0, FALSE);
там как раз 23 - это статус доков красный и зеленый. т.е. если я вместо 23 ставлю 3 - то получаю остатки в кол-ве только по "зеленым" документам, т.е. как и после использования
FixRemains.calc (при условии расчитанного товародвижения)
24.02.2017 23:15
Starter
 
Цитата:
svtl Вообще, когда речь идет о закупочных ценах - с опорой на товародвижение - Rеmains.calc не подходит. При расчете остатков (как в отчете Остатки группы Товарные) там опционально делается заполнение таблицы ttremains ценами посл. прихода, но не себестоимостью
Подниму ка старую тему про расчеты остатков - А как сделать так, чтобы в ttremains оказались цены последнего прихода ?
24.03.2017 16:57
svtl
 
procedure Calc
( i_Date in date, -- расчетная дата
i_IsAddingData in boolean default FALSE, -- признак добавления данных
i_DocStateMode in number default 23, -- режим учета статуса документов
i_CalcMode in number default REMCALCMODE_AUTOMAT, -- метод расчета
i_IsAllRemains in boolean default FALSE ); -- признак учета нулевых остатков


i_CalcMode = 0 - без цен
= 1 - учетные цены
== 2 - цены посл. приходов.
Вроде так
25.03.2017 08:46
Starter
 
А что это за процедура такая ?
Которая REMAINS.CALC ?

Так там параметр I_CALCMODE совсем за другое отвечает...
I_CALCMODE:
2 - считать остатки от текущих, т.е. как остатки из smgoods - приходы/расходы
с датой больше I_DATE
3 - считать остатки взяв за основу заранее расчитанные остатки в
административном модуле
иначе - считать остатки на основании документов
25.03.2017 20:50
svtl
 
supermag.remains - пакет, в rep-варианте отчета Остатки использовался для заполнения таблицы TTRemains
у меня в старых отчетах до сих пор используется. насчет параметров - описание их точное,
но исходник пакета не смотрела , почему и и написала - "вроде так".
сейчас глянула - Вы правы. Но тогда, походу, надо решать, какой метод применять - что быстрее.

По-поводу цен - я при цены/суммы рассчитываю, используя доп. функцию.
25.03.2017 22:53
Starter
 
Цитата:
svtl По-поводу цен - я при цены/суммы рассчитываю, используя доп. функцию.
А какую функцию ?

supermag.FixRemIncome.Calc(:P_Date);
и
supermag.FixRemains.Calc(:P_Date);
?

Так они же не показывают цену последнего прихода, там либо с разбивкой по партиям, либо нет, но остатки не в ценах последнего прихода а, скорее, остатки по методу FIFO.
В ценах последнего прихода - если смотреть текущий отчет супермага - используется функция
supermag.Rep_Ostatki
Но эта функция не реагирует на фильтры :(
27.03.2017 12:36
svtl
 
нет, у меня функция самописная.
Rep_Ostatki - на какие именно фильтры?
если смотреть сам отчет Ostatki.frx. то
- формируется фильтр по местам хранения
-- далее фильтр по группам товаров
и потом запускается Rep_Ostatki.
Там по P_VIEWSUM определяется, какими ценами заполняется таблица.

Судя по всему, в процедуре запускается RepTool.LoadAQLFilter.
А уже результаты-фильтры используются для расчета остатков и цен/сумм.
27.03.2017 14:26
Starter
 
Цитата:
svtl на какие именно фильтры
Вот на эти:
supermag.SQL_Filter.Set_ArticleFromSQL('select article from supermag.smcard'); -- все артикулы

Внутри самой процедуры есть код:
REPTOOLS.LOADSQLFILTER;
28.03.2017 17:54
svtl
 
ну так чистим фильтры вручную, потом прописываем нужные и запускаем процедуру.
supermag.SQL_Filter.Clear_AllFilters; - почистили

supermag.RepTools.LoadClass(:P_Group_All, :P_BGroup, :P_Group_Tree); -- для артикулов
supermag.RepTools.LoadLoc(:P_Stored_All,:P_Stored_Name,:P_Partner,null,:P_DATE); --для МХ
здесь нужные временные аблицы заполнятся.

и потом в процедуре выполнится
REPTOOLS.LOADSQLFILTER;
т.е. фильтры по артикулам и МХ применятся.

Прошу прощения, может, чего-то недопонимаю... Но тут или штатные процедуры запускать,
или все писать руками, тогда и расчет переписывать, кмк
28.03.2017 20:45
Starter
 
А есть в supermag.RepTools загрузка артикулов из SQL, т.е. аналог SQL_Filter.Set_ArticleFromSQL ?
30.03.2017 16:18
svtl
 
вы о таком:
supermag.SQL_Filter.Set_ArticleFromSQL('select article from supermag.ttidgroup'); ?

кмк, если выполнить
supermag.RepTools.LoadClass(:P_Group_All, :P_BGroup, :P_Group_Tree); -- для артикулов,
то в результате получим либо заполненную ttidgroup, либо нет, так?
тогда REPTOOLS.LOADSQLFILTER, по идее, должны сформировать
фильтры, в том числе по карточкам.
сразу после этого можно выполнять Rep_Ostatki.

Если если P_Group_All = 2 - без группировки и P_Group_Tree is null -
будет браться select article from supermag.ttidgroup, иначе - select article from supermag.smcard

это просто вручную проверить
30.03.2017 17:12
Starter
 
Цитата:
svtl вы о таком:
supermag.SQL_Filter.Set_ArticleFromSQL('select article from supermag.ttidgroup'); ?
Не совсем. Нужно по артикулам, которые возвращаются определенным запросом, не по группам, не все артикулы, а произвольные.
т.е.
supermag.SQL_Filter.Set_ArticleFromSQL('вот тут некий произвольный запрос, выбирающий необходимые карточки');

а затем уже запустить Rep_Ostatki и чтобы эта функция отработала только по этим выбранным артикулам.
30.03.2017 22:58
Starter
 
в общем, делаем:

execute supermag.RepTools.LoadClass(2, 1, NULL);
в результате получаем чистый TTidgroup
затем -
execute supermag.Rep_Ostatki('31.01.2017',0,0,0,2,0,0,0,0);
получаем остатки по ВСЕМ товарам.
что при этом находится в ttidgroup - без разницы, пробовали туда помещать нужные артикулы - бесполезно.

второй вариант:
execute supermag.RepTools.LoadClass(2, 1, '23.1.');
получаем карточки из группы 23.1 в ttidgroup
затем -
execute supermag.Rep_Ostatki('31.01.2017',0,0,0,2,0,0,0,0);
получаем остатки только по товарам из группы 23.1.
что при этом находится в ttidgroup - без разницы, пробовали вообще его удалять (уже после вызова LoadClass) - без разницы. Все равно остатки получаются только по товарам выбранной группы/групп.
02.04.2017 23:41
svtl
 
мне кажется, что после выполнения RepTools.LoadClass
в supermag.Rep_Ostatki (внутри) запускается RepTools.LOADSQLFILTER
который прописывает фильтры на основании ранее запущенных LoadClass (а так же LoadLoc)

И тогда для первого случая - у вас все карточки - и получаем остатки по ВСЕМ товарам.
для второго случая - только по товарам из группы 23.1.
т.е.все логично

если использовать штатный вариант - то произв. список артикулов надо занести в ассортимент и
LoadClass запускать дял этого ассортимента

Ну или использовать старый вариант - REMAINS.CALC
тогда перед ее запуском можно вручную сформировать фильтр по артикулам по какому-то критерию -
supermag.SQL_Filter.Set_ArticleFromSQL('select article from supermag.smcard where .....');

Я так делала
03.04.2017 08:06
Starter
 
Цитата:
svtl мне кажется, что после выполнения RepTools.LoadClass
в supermag.Rep_Ostatki (внутри) запускается RepTools.LOADSQLFILTER
который прописывает фильтры на основании ранее запущенных LoadClass (а так же LoadLoc)
Так и есть.


Цитата:
svtl если использовать штатный вариант - то произв. список артикулов надо занести в ассортимент и
LoadClass запускать дял этого ассортимента
Т.е. завести временный ассортимент, потом его чистить, наполнять перед запуском ? И всё скриптами ?


Цитата:
svtl Ну или использовать старый вариант - REMAINS.CALC
Тогда нет цен последнего прихода, а они как раз и нужны. Какая функция в старых версиях отвечала за наполнение ценами последнего прихода ? Еще до появления Rep_ostatki ?
Опции темы


Часовой пояс GMT +3, время: 09:51.

 

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