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

Получение остатка в закупочных ценах скриптом. SVARemainsCP : Супермаг Плюс (Супермаг 2000)

22.11.2024 14:57


25.03.2017 08:46
А что это за процедура такая ?
Которая REMAINS.CALC ?

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

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

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

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

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

Внутри самой процедуры есть код:
REPTOOLS.LOADSQLFILTER;
28.03.2017 17:54
ну так чистим фильтры вручную, потом прописываем нужные и запускаем процедуру.
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
А есть в supermag.RepTools загрузка артикулов из SQL, т.е. аналог SQL_Filter.Set_ArticleFromSQL ?
30.03.2017 16:18
вы о таком:
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
Цитата:
svtl вы о таком:
supermag.SQL_Filter.Set_ArticleFromSQL('select article from supermag.ttidgroup'); ?
Не совсем. Нужно по артикулам, которые возвращаются определенным запросом, не по группам, не все артикулы, а произвольные.
т.е.
supermag.SQL_Filter.Set_ArticleFromSQL('вот тут некий произвольный запрос, выбирающий необходимые карточки');

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

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) - без разницы. Все равно остатки получаются только по товарам выбранной группы/групп.
Часовой пояс GMT +3, время: 14:57.

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