|
отбор цен контрагентов | ☑ | ||
---|---|---|---|---|
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
|
В Выбор Когда пропустил Конец КАК
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |