[ОТВЕТИТЬ]
24.12.2014 22:55
Starter
 
День добрый!
Возник вопрос - откуда стандартный супермаговский отчет остатки берет данные по документам последнего прихода и, соответственно, цене последнего прихода.

Что за временные таблички TTOstatki1 и TTOstatki2 и какая процедура их заполняет ?

Для чего нужно - скриптом получить остатки в ценах последнего прихода на определенную дату.
25.12.2014 12:34
Starter
 
Пополнить бы неплохо, только вот откуда информацию взять. Поэтому и разместил тему, вдруг кто в курсе.
25.12.2014 12:37
OlegON
 
Если не обратил внимание, то там ответ на твой вопрос есть.
А взять информацию реверс-инженерией, как все :)
25.12.2014 13:42
Starter
 
Ту тему изучал, но там чуть иное.
Про остатки там два упоминания:
1. просто получить остатки -
Supermag.Remains.Calс
затем смотрим остатки (в количестве) в табличке SUPERMAG.TTREMAINS

2. получить остатки "партий" товаров, т.е. остатки по приходам.
supermag.FixRemIncome.Calc(:Date);
затем в ttRemIncome смотрим остатки по приходам.

Необходимо же узнать цену последнего прихода (а также документ/дату). За это, судя по исходникам отчета остатки, отвечают таблички:
TTOSTATKI1 ( поля LOCID, ARTICLE, ID, CREATEDAT) и TTOSTATKI2 (поля LOCID, ARTICLE, QTY, PRICE1, PRICE2, PRICEPREC)
Вопрос в том - какая процедура эти временные таблички заполняет. Возможно Supermag.Rep_Ostatki , но какие у нее входные параметры - непонятно.
25.12.2014 13:57
Mtirt
 
В 1.031 версии отчет "Остати" уже в формате FastReport.
Судя по этому:
Код:
 DateTime currentDate = (DateTime)Report.GetVariableValue("Date");
      // true, если остатки нужны текущие
      isCurrentDate = ( paramDate.Date == currentDate.Date );
      // true, если в отчете выводятся цены (учетные или последних приходов)
      bool isViewSum = ( ToInt32(Report.GetParameterValue("P_VIEWSUM")) != 0 );
      // true, если в отчете выводятся учетные цены
      isViewAccountPrice = ( ToInt32(Report.GetParameterValue("P_VIEWSUM")) == 1 );
      // true, если в отчете выводятся документы последних приходов
      isViewIncome = ( ToInt32(Report.GetParameterValue("P_VIEWSUM")) == 2 );
      // true, если отчет выводит данные детально по артикулам
      bool isViewArticle = ( ToInt32(Report.GetParameterValue("P_ITOGOONLY")) == 0 );

      // заполняем временные таблицы              
      RepOracleRunner.ExecuteProcedure(host.Connection,"Supermag.Rep_Ostatki", 
        Report.GetParameterValue("P_DATE"),
        Report.GetParameterValue("P_OST"),
        Report.GetParameterValue("P_QTYMIN"),
        Report.GetParameterValue("P_QTYMAX"),
        Report.GetParameterValue("P_VIEWSUM"),
        Report.GetParameterValue("P_VIEWSCALE"),
        Report.GetParameterValue("P_CARDALL"),
        Report.GetParameterValue("P_ONLYNOPRICE"),
        Report.GetParameterValue("P_GROUPSTORE")
        );
Тебе нужна функция Supermag.Rep_Ostatki с параметром P_VIEWSUM=1
25.12.2014 14:21
Starter
 
Ага, в отчете и смотрел.
Заодно посмотрел список параметров :

OBJECT_NAME ARGUMENT_NAME DATA_TYPE
------------------------------ ------------------------------ -----------
REP_OSTATKI PDATE VARCHAR2
REP_OSTATKI POST NUMBER
REP_OSTATKI PQTYMIN NUMBER
REP_OSTATKI PQTYMAX NUMBER
REP_OSTATKI PVIEWSUM NUMBER
REP_OSTATKI PVIEWSCALE NUMBER
REP_OSTATKI PONLYACCEPTCARD NUMBER
REP_OSTATKI PONLYNOPRICE NUMBER

8 rows selected.

Пробовали запустить - процедура отрабатывает, а вот в табличках пусто.
Будем дальше копать в этом направлении.
25.12.2014 16:03
Starter
 
Как выяснилось экспериментальным путем, работает, если:
1. первый параметр - дата в формате DD.MM.YYYY строка,
2. параметр P_VIEWSUM=2
т.е. запуск должен быть типа:
exec supermag.Rep_Ostatki('23.06.2014',0,0,0,2,0,0,0);
25.12.2014 20:48
Mtirt
 
Допиши в ту тему, на которую Олег утром ссылался. Кому-нибудь рано или поздно понадобится.
25.12.2014 20:56
Starter
 
Допишу, только сперва повнимательнее изучу параметры и на что они влияют.
От версии СМ, кстати, тоже зависит работоспособность.
05.01.2015 14:41
svtl
 
Цитата:
Starter От версии СМ, кстати, тоже зависит работоспособность.
Скорее, не работоспообность, а способ выбора процедуры, расчитывающей эти остатки.
05.01.2015 15:29
svtl
 
В старом отчете Остатки (билдеровском) заполнялось 3 таблицы поэтапно - сначала ttremains (процедурой Supermag.Remains.Calс), потом ttostatki1 и ttostatki2 (для посл. приходов и для цен - учетных и/или по приходам) - т.е. расчитывались цены последних приходов и цены учетные.
В новом варианте отчета в процедуру, судя по всему, включили все три этапа - т.е. заполняется таблица ttostatki (вместо заполнения ttremains или выбора smgoods), далее - ttostatki1 и ttostatki2.
Несколько плюсов, в том числе и то, что остаки на дату и остатки текущие - это один и тот же отчет, а не два, как было раньше.

Но если использовать готовую функцию в своих отчетах - то Supermag.Remains.Calс остается очень удобным инструментом, т.к., в зависимости от входных парметров, позволяет указывать статус документов, используемых в расчетах, пополнять таблицу (т.е. записать остатки на 2 разные даты, например) и т.п.
На выходе только одна таблица заполнена - ttremains.

Тут нужно помнить, что перед запуском любой из процедур следует корректно поработать с sql-фильтром - определить перечень МХ и карточек товара, для которых остатки будут считаться.
Процедуры
Supermag.RepTools.LoadLoc и Supermag.RepTools.LoadClassMatrix,
которые выполняются перед запуском основной процедуры расчета,
именно это и делают. Т.е. они заполняют таблицы ttidgroup и ttloclist,
следуя заданным параметрам.
Ну и
supermag.RepTools.LoadSQLFilter формирует данные о том, откуда брать информацию -
из временных таблиц или из основных.

Я иногда это вручную делаю:
-- чистим все фильтры
supermag.sql_filter.clear_allfilters;
-- карточки товаров
IF <если выборка из ttidgroup>
THEN
supermag.sql_filter.set_articlefromsql (
'select article from supermag.ttidgroup');
ELSE
supermag.sql_filter.set_articlefromsql (
'select article from supermag.smcard c');
END IF;
-- места хранения
IF <если выборка из ttloclist>
THEN
supermag.sql_filter.set_locfromsql ('select id from TTLocList');
ELSE
supermag.sql_filter.set_locfromsql ('select id from smstorelocations where ... ');
END IF;
Таким образом, подготовлена информация для расчета остатков - по каким карточкам и по каким МХ
Опции темы


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

 

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