Имя: Пароль:
1C
1С v8
Получение последней цены по товару в тз!
0 pavlo
 
07.06.12
13:38
Есть серверная процедура, ищет последние цены из регистра сведений по товару который входит в тз. В тз весь товар есть, ее помещаем во временную таблицу и все работает если бы не одно НО, если товар никогда не имел цен, то по такому товару ничего не возвращается, а нужно чтобы вернулось из временной, чтобы цену новую поставить. То есть определяю менялась ли цена и если менялась или была 0, далее устанавливаю цену.



Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              |    тзТ.ТМЦСсылка,
              |    тзТ.Цена
              |ПОМЕСТИТЬ тзТовары
              |ИЗ
              |    &тз КАК тзТ
              |;
              |
              |////////////////////////////////////////////////////////////////////////////////
              |ВЫБРАТЬ
              |    тзТ.ТМЦСсылка,
              |    тзТ.Цена КАК ЦенаТовара
              |ИЗ
              |    тзТовары КАК тзТ
              |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
              |        ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = тзТ.ТМЦСсылка)
              |            И (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) <> тзТ.Цена)
              |ГДЕ
              |    ЦеныНоменклатурыСрезПоследних.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
              |    И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены
              |
              |ДЛЯ ИЗМЕНЕНИЯ
              |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних";
Запрос.УстановитьПараметр("тз",объект.ТаблицаТовара.Выгрузить());
Запрос.УстановитьПараметр("ВидЦены",ЗначенияПоУмолчанию.ВидЦены);
тз=Запрос.Выполнить().Выгрузить();
1 DrShad
 
07.06.12
13:40
бред какой-то
2 Avganec
 
07.06.12
13:42
Вместо
тзТ.Цена КАК ЦенаТовара
Пишешь
еслиnull(ЦеныНоменклатурыСрезПоследних, тзТ.Цена) КАК ЦенаТовара

да условия объединения мягче сделай, только по номенклатуре
Условие на тип цены в уловии среза добавь
для изменения убери
в основном все...
3 pavlo
 
07.06.12
13:53
(2) если мягче условия объединения сделать, то я так понимаю выберет все товары у которых есть цена, а мне еще нужно чтобы не совпадала с ценой из ТЗ, иначе дупить установку цен не хочется. или я не прав?
для изменения я поставил чтобы таблицу блочила пока не сменю цены (можно и убрать)
4 Avganec
 
07.06.12
13:55
(3) Ставь по номенклатуре, он тебе все выберет, в строке будет выбираться из регистра, а при отсутствии из ТЗ, вот и все, а при совпадении - тебе без разницы от куда.
5 Buster007
 
07.06.12
13:57
|ГДЕ
              |    ЦеныНоменклатурыСрезПоследних.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
              |    И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены
вот это в условие соединения перенеси и будет тебе счастье
6 pavlo
 
07.06.12
14:12
(5) перенести в соединение не получается это условие, конструктор орет про противоречивую связь.
7 Avganec
 
07.06.12
14:13
(6) характеристика обязательно должна быть пустой?
это не в связь!
8 pavlo
 
07.06.12
14:14
(7) ну да должна быть, потому что если и есть другие варианты цен по характеристикам, мне они не нужны. Характеристик вообще не будет в базе заводиться, а измерение есть. (на всякий хотел отсечь этот вариант если заведут характеристику, чтобы она мне не попадалась)
9 Avganec
 
07.06.12
14:18
(8) если у тебя их нет, тогда тебе это условие не нужно совсем. В связи оставляешь соединение только по номенклатуре, а в срезе регистра добавляешь условие на тип цен и все блин.
10 pavlo
 
07.06.12
14:49
(9)
1. я написал что могут быть и мне нужно отсечь характеристики
2. а разница какая? в условии или в соединении в данном контексте?