26.01.2015 14:02
Mtirt
 
И в бюллетенях изменений ничего на эту тему не нашла.
В документации написано явно:
Если артикул не имел цены до начала акции, то после её окончания он не сохраняет цену
маркетинговой акции; выбранный для МА вид цены приобретает значение 0,00(рис. 7.19).
26.01.2015 15:36
vdm
 
Таки ой.
Действительно при нулевом savedprice теперь берется текущая price. Где-то в бюллетенях оно все-же есть, нашел у себя краткое описание значимых для нас изменений, на случай обновления.
Вот я бы поплясал на обновлении, забыв про это...
Буду теперь думать, как пофиксить...
26.01.2015 16:58
vdm
 
По первым размышлениям вырисовывается 2 варианта:
1. доработка от С+: параметр, разрешающий обнулять цену по окончании акции
2. своим триггером поломать процесс insert в smspec для актов окончания акций, подменять цену на 0 если в savedprice 0.

Ну или совсем "поменять концепцию", акции делать на стандартный вид цены, в укм как-то передавать информацию о доакционной цене.
27.01.2015 06:49
Mtirt
 
Я пришла к третьему варианту: сделаю job, который будет отбирать в smprices по виду цены Маркетинг записи с savedprice = null и удалять их.
27.01.2015 09:44
vdm
 
Если не сложно, после тестирования опишите как это работает (на каком этапе жизни акции и т.п.).
28.01.2015 11:52
Mtirt
 
Пишу триггер (схема, чтобы понять логику)
Код:
create or replace trigger SMDocLogAU
after INSERT
on SMDocLog
for each row
begin
-- При соблюдении неких условий
insert into smpricerarticle(Список полей)
select  Список выбираемых полей from from smauctionpricer p, smdocuments d, smspec s
where p.doctype=:old.doctype and p.docid=:old.id и другие условия...
end;
В результате выполнения триггера получаю сообщение об ошибке:
Цитата:
ORA-04091: таблица SUPERMAG.SMDOCUMENTS изменяется, триггер/функция может не заметить это
Но я не изменяю smdocuments в триггере, я просто использую её в запросе.
Как избавиться от ошибки???
28.01.2015 12:09
OlegON
 
Где-то еще триггер в пределах транзакции срабатывает. По схеме трудно понять, что ты хочешь сделать, тем более не понятно, где коммитишь.
Лучше вынести в отдельную процедуру и, возможно, подумать об автономной транзакции.
28.01.2015 12:31
vdm
 
В оракле до версии 11, в триггере for each row нельзя без автономной транзакции обращаться к той таблице, на которой он висит. В 11 появился вид триггеров с обработкой этой ситуации, но у меня таких баз нет.

Тут ошибка связана с тем, что smdoclog изменяется триггером на smdocuments, соответственно изменение smdocuments и smdoclog "одновременны".

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

Стандартно такое обрабатывается гирляндой из 3-х триггеров, работающих с копией измененных данных в pl/sql таблице:
1. в операторном before триггере обнуляется буферная pl/sql таблица
2. в построчном after ... for each row триггере в нее заносятся изменения
3. в операторном after накопленные данные обрабатываются, тут можно селектить все

Недостаток этого способа - буфер может сожрать память, если одним оператором много строк меняется.
28.01.2015 12:35
Mtirt
 
Не хочу писать три триггера :( Точнее, не хочу писать в Супермаге :(

Суть задачи: в маркетинговой акции по Маркетинговой цене заполнен вид ценника.
Нужно при старте/окончании МА копировать этот вид ценника на розничные виды цен магазинов, участвующих в акциях.
Есть идеи как это сделать?
28.01.2015 12:38
OlegON
 
Так МА отслеживаются отдельным заданием, нет? Туда и добавить...
Часовой пояс GMT +3, время: 10:29.

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