Имя: Пароль:
1C
1С v8
Помогите объединить два запроса по номенклатуре
0 Владимир1С
 
11.06.14
13:15
Суть: есть индивидуальные цены для разных контрагентов,

в прайс для конкретных контрагентов нужно выводить цены с учётом индивидуальных скидок. Пытаюсь сделать это через объединение, а система принудительно группирует по полям цен, которые должны у меня располагаться в одной строке, и вместо одной строки(как надо) делает две.    

Запрос = новый Запрос;
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
    |    МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * (1 + ЦеныНоменклатурыСрезПоследних.ТипЦен.ПроцентСкидкиНаценки / 100)) КАК ЦенаШтуки,
    |    МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаДляОтчетов.Коэффициент * (1 + ЦеныНоменклатурыСрезПоследних.ТипЦен.ПроцентСкидкиНаценки / 100)) КАК ЦенаКороба
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Обороты(
    |            &НачПериода,
    |            &ТекущийПериод,
    |            ,
    |            Склад В ИЕРАРХИИ (&Склад)
    |                И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОбороты
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    |                &ТекущийПериод,
    |                ТипЦен = &ТипЦен
    |                    И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЦеныНоменклатурыСрезПоследних
    |        ПО ТоварыНаСкладахОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |ГДЕ
    |    ТоварыНаСкладахОбороты.Номенклатура В ИЕРАРХИИ(&Номенклатура)
    |    И ТоварыНаСкладахОбороты.КоличествоОборот <> 0
    |
    |СГРУППИРОВАТЬ ПО
    |    ТоварыНаСкладахОбороты.Номенклатура
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    |    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    |    МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * (1 + ЦеныНоменклатурыСрезПоследних.ТипЦен.ПроцентСкидкиНаценки / 100)),
    |    МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаДляОтчетов.Коэффициент * (1 + ЦеныНоменклатурыСрезПоследних.ТипЦен.ПроцентСкидкиНаценки / 100))
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущийПериод, ) КАК ЦеныНоменклатурыСрезПоследних
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТипыЦенПоГруппамНоменклатурыДляПокупателей.СрезПоследних(&ТекущийПериод, Контрагент = &ВходКонтр) КАК ТипыЦенПоГруппамНоменклатурыДляПокупателейСрезПоследних
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
    |            ПО ТипыЦенПоГруппамНоменклатурыДляПокупателейСрезПоследних.Контрагент = Контрагенты.Ссылка
    |        ПО ЦеныНоменклатурыСрезПоследних.ТипЦен = ТипыЦенПоГруппамНоменклатурыДляПокупателейСрезПоследних.ТипЦен
    |ГДЕ
    |    Контрагенты.Ссылка = &ВходКонтр
    |
    |СГРУППИРОВАТЬ ПО
    |    ЦеныНоменклатурыСрезПоследних.Номенклатура
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    Запрос.УстановитьПараметр("Номенклатура" ,Номенклатура );
    Запрос.УстановитьПараметр("ТипЦен"       ,ТипЦен       );
    Запрос.УстановитьПараметр("ВходКонтр"    ,Контрагент   );
    Запрос.УстановитьПараметр("НачПериода"   ,НачалоПериода);
    Запрос.УстановитьПараметр("ТекущийПериод",ТекущийПериод);
    Запрос.УстановитьПараметр("Склад"        ,Склад        );
    
    ТаблВых = Запрос.Выполнить().Выгрузить();
    
    ТаблВых.ВыбратьСтроку("Проверка результата запроса");
1 Ёпрст
 
11.06.14
13:21
упорядочивание там не имеет никакого смысла
2 Ёпрст
 
11.06.14
13:21
а что вам надо - не ясно
3 Владимир1С
 
11.06.14
13:23
Нужно получить цены: либо обычную, либо спецЦену, если есть на то указание в ТипыЦенПоГруппамНоменклатурыДляПокупателейСрезПоследних
4 Ёпрст
 
11.06.14
13:24
А нафига для этих целей выгребать номенклатуру из регистра ?
5 Ёпрст
 
11.06.14
13:24
Зачем вообще первый запрос сдался ?!
6 Владимир1С
 
11.06.14
13:25
(5)не все товары имеют спец цены.
7 Ёпрст
 
11.06.14
13:27
(6) Хорошо. Зачем нужен запрос к регистру, а не к регистру сведений, из которого достаём все цены ?
8 Владимир1С
 
11.06.14
13:29
(7) Чтобы вытащить только те товары, у которых были обороты за какой-то предыдущий период.
9 Ёпрст
 
11.06.14
13:29
Или вам нужны все цены, только того товара, который продали за определенный период ?

Если да, то зачем вам нужен второй запрос ?
Получить цену для этого же товара конкретного клиентоса ?
Если да, то делать надо так:

выбрать
  Товар как Товар,
  Цена как Цена,
  0 как ЦенаДляКлиентоса
  
ИЗ....

Объединить всё

выбрать
  Товар как Товар,
  0,
  ЦенаДляКлиентоса

т.е на выходе иметь 2 цены
10 Ёпрст
 
11.06.14
13:30
если надо в одной строке, то делать фулл джоин.
11 Ёпрст
 
11.06.14
13:30
а не объединение
12 Владимир1С
 
11.06.14
13:34
(10) в терминах 1С можно? чтобы понять однозначно
13 Владимир1С
 
11.06.14
13:40
(11) Из регистра цен нужно выбрать цену другого типа, не того, что задан в форме настройки отчёта, а того, что получается из ТипыЦенПоГруппамНоменклатурыДляПокупателей
14 Ёпрст
 
11.06.14
14:21
(10) полное соединение
15 Владимир1С
 
11.06.14
14:26
(14) Спасибо.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс