[ОТВЕТИТЬ]
24.10.2014 16:58
SMak
 
Здравствуйте.

Подскажите, как из БД выдернуть скидку для артикула с учётом групповых пределов скидки?
И как проверить артикул на участие в открытой МА?
Какие это таблицы? Или может кто уже такое делал?
24.10.2014 19:19
vdm
 
Вырезка из ценника в oracle reports.

Минимальная цена с учетом предела скидки на вид цены
Код:
select
       ROUND(t_pr.PRICE*((100-NVL(Supermag.SMGETDISCLIMITCARD(t_pr.ARTICLE, :P_PRICE_TYPE), 100))/100), 2) MIN_PRICE
...
  from SUPERMAG.TTPriceCard t_pr
Артикул в действующей акции, если
Код:
SUPERMAG.SMPRICES.SAVEDPRICE IS NOT NULL
Т.е. при включенном запрете скидок на акционный товар, мин. цену можно брать так:
Код:
select
       DECODE(p.SAVEDPRICE, NULL, 0, t_pr.PRICE) MIN_PRICE_A
...
  from SUPERMAG.TTPriceCard t_pr, SUPERMAG.SMPRICES p
 where t_pr.ARTICLE=p.ARTICLE AND p.STORELOC=:P_LOC AND p.PRICETYPE=:P_PRICE_TYPE
27.10.2014 12:53
SMak
 
а эта штука Supermag.SMGETDISCLIMITCARD проверяет все виды пределов скидок? ничего дополнительного не надо?
27.10.2014 13:26
vdm
 
Что значит "все виды"?

Функция берет предел скидки заданного артикула, по заданному виду цены, с учетом существования предела скидки на группу.
27.10.2014 16:14
SMak
 
Цитата:
vdm с учетом существования предела скидки на группу.
вот это и интересовало, спасибо :)
07.11.2014 11:34
SMak
 
FastReport. Ценник на основе примера с изменением размеров, запросов...
Что можно было такого накрутить, чтобы теперь при печати из см+ количество копий перемножалось? :/
[P_COPIES] в ценник выводит верно. Но количество ценников на листе равно P_COPIES * P_COPIES
07.11.2014 16:51
SMak
 
вот что с ним не так?
Вложения
Тип файла: rar ab_price_card_s.rar (3.0 Кб, 148 просмотров)
10.11.2014 17:17
akonev
 
у меня этот ценник вообще по ошибке валится.
будем исходить из того, что у тебя - работает.

"не то" - вот здесь:
Код:
select t.Article, t.Name, t.Country,t.Price,
t.UnitName, t.QtyPrint, t.BarCode,t.RUBNAME,
decode(t.PLU,null,'','PLU:  '||t.PLU) PLU,
ROUND(t_pr.PRICE*((100-NVL(Supermag.SMGETDISCLIMITCARD(t_pr.ARTICLE, :P_PRICE_TYPE), 100))/100), 2) MIN_PRICE
  from SUPERMAG.TTPriceCard t_pr, supermag.SVPriceCard t
 where t_pr.ARTICLE=t.ARTICLE 
order by 1
Код:
create or replace view svpricecard as
select  t.Article Article, t.Name Name  , t.CardComment CardComment,
				t.Country Country, t.Price Price, t1.UnitName UnitName,
				t1.Qty Qty, t1.QtyPrint QtyPrint,
				t1.BarCode BarCode, t1.IsScale IsScale, t1.PLU PLU,
				russianspell.PriceCardString(0,t.Price) RubSum,
				russianspell.PriceCardString(1)         RubName,
				russianspell.PriceCardString(2,t.Price) KopSum,
				russianspell.PriceCardString(3)         KopName,
				russianspell.PriceCardString(4,t.Price) PriceShort,
				russianspell.PriceCardString(5,t.Price) PriceFull,
				to_number(russianspell.PriceCardString(6)) PricePrec
		from TTPriceCard t, TTPriceCard1 t1
		where t.article = t1.article
в TTPriceCard каждая карточка отбирается столько раз, какое количество ты указал при печати.

svpricecard включает в себя выборку из TTPriceCard и поэтому в ней тоже каждая карточка столько же раз.

осталось связать их по артикулу и вуаля! каждая строка с артикулом из svpricecard повторилась при связывании столько раз, сколько раз этот артикул есть в TTPriceCard. количества перемножились.
10.11.2014 17:19
akonev
 
тебе зачем вообще TTPriceCard сдался в этом селекте?
вот так не то что-то выбирается?
Код:
select t.Article, t.Name, t.Country,t.Price,
t.UnitName, t.QtyPrint, t.BarCode,t.RUBNAME,
decode(t.PLU,null,'','PLU:  '||t.PLU) PLU,
ROUND(t.PRICE*((100-NVL(Supermag.SMGETDISCLIMITCARD(t.ARTICLE, :P_PRICE_TYPE), 100))/100), 2) MIN_PRICE
  from supermag.SVPriceCard t
order by 1
11.11.2014 14:07
SMak
 
О! Изначально зачем-то ставил, что-то брал из ТТ и забыл :/
Спасибо :)
14.11.2014 16:53
SMak
 
Теперь другая проблема :(
На базах с 10м ораклом всё ок, а с 11м :
Код:
2014.11.14 (Friday) 16:46:13
----- Прерывание работы программы -----
сообщение: "An exception occurred during the operation, making the result invalid.  Check InnerException for exception details."
исключение: System.Reflection.TargetInvocationException
источник: System
метод: Void RaiseExceptionIfNecessary()
   at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
   at Sm.Core.RunWorkerCompletedEventArgs`1.get_Result()
   at Sm.FastReports.Domain.FastReportDomainPanel.<>c__DisplayClass2.<RunSingleReport>b__0(Object sender, RunWorkerCompletedEventArgs`1 e)
----- Причина исключения, уровень вложения 1 -----
сообщение: "ORA-00904: : недопустимый идентификатор
"
исключение: System.Data.OracleClient.OracleException
источник: Sm.BusinessServer
данные:   соединено с: База даных=db11; Пользователь=xxx
   текст команды: select t.Article,t.Name,t.Country,t.Price,t.UnitName,t.QtyPrint,t.BarCode,t.RUBNAME, decode(t.PLU,null,'','PLU:  '||t.PLU) PLU, ROUND(t.PRICE*((100-NVL(Supermag.SMGETDISCLIMITCARD(t.ARTICLE, :P_PRICE_TYPE), 100))/100), 2) MIN_PRICE
  from supermag.SVPriceCard t
order by 1
   тип команды: Text
   параметры: P_PRICE_TYPE=«2»
метод: Boolean ReadBuffer(System.Collections.ObjectModel.ReadOnlyCollection`1[TRecord] ByRef)
   at Sm.BusinessServer.BackgroundReaderBase`1.ReadBuffer(ReadOnlyCollection`1& result)
   at Sm.FastReports.Server.FastReportBO.Sm.FastReports.Link.IFastReportBO.FillTableDataNext(BusinessOperation businessOperation, ReadOnlyCollection`1& dataTable)
   at Sm.FastReports.SupermagFastReportConnection.<>c__DisplayClass8.<FillTableData>b__5(IFastReportBO bo)
   at Sm.BusinessServer.LocalServer.LocalClient`1.Do(Action`1 action)
   at Sm.FastReports.SupermagFastReportConnection.TransactedBusinessObject.Do(Action`1 action)
   at Sm.FastReports.SupermagFastReportConnection.FillTableData(DataTable table, String selectCommand, CommandParameterCollection parameters)
   at FastReport.Data.DataConnectionBase.FillTable(TableDataSource source)
   at FastReport.Data.TableDataSource.LoadData(ArrayList rows)
   at FastReport.Data.DataSourceBase.Init(Relation relation, String filter, SortCollection sort, Boolean useAllParentRows)
   at FastReport.Data.DataSourceBase.get_Item(Column column)
   at FastReport.Data.Column.get_Value()
   at FastReport.Report.GetColumnValue(String complexName, Boolean convertNull)
   at FastReport.Report.GetColumnValue(String complexName)
   at FastReport.ReportScript._StartReport(Object sender, EventArgs e)
почему так?
Вложения
Тип файла: rar ab_price_card_m.rar (2.9 Кб, 108 просмотров)
14.11.2014 18:18
OlegON
 
Код:
select t.Article,t.Name,t.Country,t.Price,t.UnitName,t.QtyPrint,t.BarCode,t.RUBNAME, decode(t.PLU,null,'','PLU:  '||t.PLU) PLU, ROUND(t.PRICE*((100-NVL(Supermag.SMGETDISCLIMITCARD(t.ARTICLE, 2), 100))/100), 2) MIN_PRICE
from supermag.SVPriceCard t
order by 1
что выдает на 11g?
17.11.2014 16:36
vdm
 
Попробуй выбросить SMGETDISCLIMITCARD() из запроса. М.б. там у простых юзеров нет прав на эту функцию.
17.11.2014 16:42
Mtirt
 
Стоп. Весь сыр-бор из-за этой функции. Надо наоборот, права дать:
Код:
grant execute on SMGETDISCLIMITCARD to SUPERMAG_FN_PRICECARD_PRINT;
17.11.2014 16:52
vdm
 
Можно права дать.
Можно обойтись без функции и поле сделать вычисляемым (или как оно там в фастрепорте) со своим запросом - будет несколько более универсально.
17.11.2014 16:53
Mtirt
 
А что, при использовании функции в своем запросе в FastReport-е не надо права на использование давать?
17.11.2014 17:08
vdm
 
У меня речь про "избавиться от функции". Вынести ее из базы в свой отчет.
Дело то хозяйское. Проще пройтись грантом по всем базам - на здоровье.
17.11.2014 17:10
SMak
 
дал право
всё то же самое, ценник не печатает :/

от простого пользователя, да:
17.11.2014 17:27
SMak
 
Код:
grant execute on SMGETDISCLIMITCARD to SUPERMAG_MODULE_CARDS;
?
17.11.2014 17:33
vdm
 
Код:
to SUPERMAG_FN_CARD_PRINTPRICER
17.11.2014 17:40
SMak
 
спасибо, с printpricer работает
посмотрел я несколько баз сейчас, в старых магазинах есть права to SUPERMAG_MODULE_CARDS там и работает ценник, не связано это с версией оракла...
18.11.2014 11:38
SMak
 
модный ценник получился, печатать можно строго по одному артикулу
18.11.2014 11:39
Mtirt
 
Почему по одному?
18.11.2014 11:49
SMak
 
потому что иначе цены у них все равны первому артикулу
я крутой писатель отчётов :)
13.11.2015 16:33
SMak
 
хм, год уже прошёл...
так вот, год назад попользовали мы эти ценники, потом отказались, сейчас снова вводим
на один и тот же артикул, с одинаковым пределом скидки и отсутствием везде маркетинговых акций ценник ведёт себя поразному в разных МХ :(
Код:
SELECT t.Article,t.Name,t.Country,t.Price,t.UnitName,t.QtyPrint,t.BarCode,t.RUBNAME, DECODE(t.PLU,NULL,'','PLU:  '||t.PLU) PLU, ROUND(t.PRICE*((100-NVL(Supermag.SMGETDISCLIMITCARD(t.ARTICLE, :P_PRICE_TYPE), 100))/100), 2) MIN_PRICE,DECODE(p.SAVEDPRICE, NULL, 0, t.PRICE) MIN_PRICE_A
FROM supermag.SVPriceCard t,SUPERMAG.SMPRICES p
WHERE t.ARTICLE=p.ARTICLE AND p.STORELOC=:P_LOC AND p.PRICETYPE=:P_PRICE_TYPE
ORDER BY 1
с чем это может быть связано?
13.11.2015 16:39
OlegON
 
В чем суть разницы поведения?
13.11.2015 16:48
SMak
 
В самом ценнике ещё условия:
если товар не учавствует в МА и предел скидки у него 5 и более %, то на ценнике печатается "скидка по карте..."
если товар в МА или предел менее 5%, то на ценнике печатает "акция"

Так вот в разных МХ по разному и печатает.
13.11.2015 16:59
Mtirt
 
Так может и пределы скидок разные? Может быть их по магазинам не разослали?
13.11.2015 17:13
SMak
 
нене, 5 раз проверил, всё одинаковое
код сравнения
Код:
      dPrice = ToDouble(Report.GetColumnValue("PriceCards.PRICE"));
      iNP = ToInt32(Ceiling(dPrice*100*0.95));
      if ((ToDouble(Report.GetColumnValue("PriceCards.MIN_PRICE_A")) == 0) && (iNP >= ToInt32(Ceiling(ToDouble(Report.GetColumnValue("PriceCards.MIN_PRICE"))*100)))) {
скидка
      } else {
акция
      }


Опции темы


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

 

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