Имя: Пароль:
1C
 
отбор цен контрагентов
0 _barracuda_
 
23.05.17
17:54
Добрый день.Приведенный ниже запрос не вытягивает минимальное значение цены,может кто подскажет где логика хромает?то-есть должна браться если не своя цена то цена контрагента,минимальная одна из двух.

ВЫБРАТЬ

Выразить(СпрНоменклатура.Ссылка.НаименованиеПолное КАК строка(1000)) КАК ПолноеНаименование,
ХарактеристикиНоменклатуры.ШтрихКод Как ШтрихКод,

МИНИМУМ(ВЫБОР

КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена, 0) <> 0
  ТОГДА ЦеныНоменклатурыСрезПоследнихГРн.Цена
КОГДА ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена, 0) <> 0
  ТОГДА ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена
ИНАЧЕ 0
КОНЕЦ) КАК Цена,


ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоТоваров,

ВЫБОР
КОГДА ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) > 0
    ТОГДА 1
ИНАЧЕ 0
КОНЕЦ КАК Количество
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура  
  
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки
ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦенГрн) КАК ЦеныНоменклатурыСрезПоследнихГРн
ПО СпрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследнихГРн.Номенклатура

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК ХарактеристикиНоменклатуры    
ПО  СпрНоменклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(,) КАК ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн
ПО СпрНоменклатура.Ссылка = ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Номенклатура

СГРУППИРОВАТЬ ПО
Выразить(СпрНоменклатура.Ссылка.НаименованиеПолное КАК строка (1000)),
ХарактеристикиНоменклатуры.ШтрихКод,
ТоварыНаСкладахОстатки.КоличествоОстаток,
1 Ц_У
 
23.05.17
17:58
нолики получаешь?
2 _barracuda_
 
23.05.17
18:21
(1) да
3 _barracuda_
 
23.05.17
18:34
мыслей нет?(
4 _barracuda_
 
23.05.17
19:09
я бы сказал так что запрос не отбирает минимальное значение.
5 _barracuda_
 
23.05.17
19:16
только так отбирает ,но как в одну колонку все свести ЦЕНА?

ВЫБРАТЬ
Выразить(СпрНоменклатура.Ссылка.НаименованиеПолное КАК строка(1000)) КАК ПолноеНаименование,
ХарактеристикиНоменклатуры.ШтрихКод Как ШтрихКод,
Минимум(ЦеныНоменклатурыСрезПоследнихГРн.Цена) Как Цена,
Минимум(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена) Как Цена2,
6 AlvlSpb
 
23.05.17
19:24
(5)ВЫБРАТЬ
Выразить(СпрНоменклатура.Ссылка.НаименованиеПолное КАК строка(1000)) КАК ПолноеНаименование,
ХарактеристикиНоменклатуры.ШтрихКод Как ШтрихКод,
ВЫБОР КОГДА  ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена, 0) <> 0
ТОГДА Минимум(ЦеныНоменклатурыСрезПоследнихГРн.Цена)
ИНАЧЕ
Минимум(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена) КОНЕЦ Как Цена
7 AlvlSpb
 
23.05.17
19:26
Поправка, пропустил

ИНАЧЕ
МинимумЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена, 0) КОНЕЦ Как Цена
8 _barracuda_
 
23.05.17
20:37
(7)увы не выводит цену минимальную
9 _barracuda_
 
23.05.17
20:41
ВЫБОР
КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена, 0) <> 0
  ТОГДА Минимум(ЦеныНоменклатурыСрезПоследнихГРн.Цена)
Иначе
   Минимум(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена)
КОНЕЦ КАК Цена,
10 AlvlSpb
 
23.05.17
21:21
(9) Перечитал (0). Кажется не понял задачу. Надо выбрать свою цену, если она меньше цены контрагента и наоборот если выше. Так надо?
11 _barracuda_
 
23.05.17
21:28
(10)есть 2 цены.наша и контрагента то-есть скажем так конкурента.нужно выбрать минимальную из двух на данном этапе проблема что цена берется только так

Выразить(СпрНоменклатура.Ссылка.НаименованиеПолное КАК строка(1000)) КАК ПолноеНаименование,
ХарактеристикиНоменклатуры.ШтрихКод Как ШтрихКод,
Минимум(ЦеныНоменклатурыСрезПоследнихГРн.Цена) Как Цена,
Минимум(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена) Как Цена2,

но в одну колонку вашим способов ее не удается выбрать.сделал как вы писали
12 AlvlSpb
 
23.05.17
21:30
(11) я неправильно понял задачу. Думал, если вашей нет то выбирать контрагента
13 AlvlSpb
 
23.05.17
21:32
ВЫБОР
КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена, 0) < ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена)
  ТОГДА ЦеныНоменклатурыСрезПоследнихГРн.Цена
Иначе
   ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена
КОНЕЦ КАК Цена,
14 AlvlSpb
 
23.05.17
21:34
Естественно в запросе должно быть условие
ГДЕ ЦеныНоменклатурыСрезПоследнихГРн.Номенклатура = &Номенклатура
15 AlvlSpb
 
23.05.17
21:36
И зачем соединение со справочником? Где используется запрос?
16 _barracuda_
 
23.05.17
21:58
(15) условие есть  

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(,) КАК ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн
ПО СпрНоменклатура.Ссылка = ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Номенклатура
17 _barracuda_
 
23.05.17
22:13
(13) спасибо огромное.надоело уже колдовать с этой функцией минимум
18 _barracuda_
 
23.05.17
23:41
(13) извиняюсь еще подниму тему.а как быть если нет цены у ЦеныНоменклатурыСрезПоследнихГРн или ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.то-есть она или там или там или у обоих сразу.
19 AlvlSpb
 
24.05.17
00:38
(18) Да Не учли
ВЫБОР
КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена, 0)> 0 И ЦеныНоменклатурыСрезПоследнихГРн.Цена < ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена,0)
  ТОГДА ЦеныНоменклатурыСрезПоследнихГРн.Цена
Иначе
ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена,0) КОНЕЦ КАК Цена

В этом случае, если ваша цена существует ( >0) и она меньше цены конкурента, то выводится ваша Если не существует или больше - цена контрагента. Если нет ни той ни другой, выведется 0
20 _barracuda_
 
24.05.17
08:03
(19) в этом случае выводится все пустые и только одна позиция с минимальной ценой конкурента ,у данного товара есть и моя цена и цена конкурента.у тех номенклатур где не стоит цена конкурента ссответственно пустые цены вывел
21 _barracuda_
 
24.05.17
08:13
попробовал так :

ВЫБОР
КОГДА (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена, 0) <> 0 И (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена,0) < ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена,0)))
ТОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена,0)
КОГДА  (ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена, 0) <> 0  И (ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена,0) < ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена,0)))
ТОГДА ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена,0)
КОНЕЦ КАК Цена,


все равно вывел 10 товаров с пустой ценой хотя она есть и только один с минималкой у которого есть и моя и конкурента
22 AlvlSpb
 
24.05.17
22:21
(21) На мой взгляд надо переделывать запрос (не факт, что я абсолютно прав, но сам сделал бы так). Сначала выбрать нужную номенклатуру из таб части (ТЧ) документа
ТЗ = Объект.ТЧ.Выгрузить(); // ТЧ таб часть документа куда все выводится
МассивНоменклатуры = ТЗ.ВыгрузитьКолонку("Номенклатура")
Получили всю номенклатуру в массив. Дальше выбираем цены
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Номенклатура,
ВЫБОР КОГДА
ЦеныНоменклатурыСрезПоследнихГРн.Цена = НЕОПРЕДЕЛЕНО
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихГРн.Цена,0) КАК НашаЦена,
ВЫБОР КОГДА
ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена = НЕОПРЕДЕЛЕНО
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Цена,0) КАК ЦенаКонкурентов
ИЗ Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦенГрн) КАК ЦеныНоменклатурыСрезПоследнихГРн
ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследнихГРн.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(,) КАК ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн
ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыКонтрагентовСрезПоследнихГРн.Номенклатура
ГДЕ СправочникНоменклатура.Ссылка В (&МассивНоменклатуры)

В выборке
СтруктураОтбора = Новый Структура;
Пока Выборка.Следующий() Цикл
СтруктураОтбора.Очистить();
СтруктураОтбора.Вставить("Номенклатура", Выборка.Номенклатура);
Стр = Объект.ТЧ.НайтиСтроки("Номенклатура", СтруктураОтбора);

Стр[0].Цена = ?(Выборка.НашаЦена < Выборка.ЦенаКонкурентов, Выборка.НашаЦена, Выборка.ЦенаКонкурентов);

За оптимальность кода не отвечаю, но работать должен
23 AlvlSpb
 
24.05.17
22:24
В Выбор Когда пропустил Конец КАК