Имя: Пароль:
1C
1С v8
Запрос ... никак не пойму как скрестить две таблицы
0 ValeriTim
 
10.09.13
16:51
Предположим есть два запроса:
1. выбираем ссылки на справочник номенклатуры по предопределенному списку

ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
ГДЕ
    СпрНоменклатура.Ссылка В (&МассивНоменклатуры)

2. Выбираем плановые значения количества из регистра

ВЫБРАТЬ
    РегПлан.Номенклатура,
    РегПлан.ПроцентСкидкиНаценки
ИЗ
    РегистрСведений.План.СрезПоследних(
                    &Дата,
                    (Номенклатура В (&МассивНоменклатуры) ИЛИ Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
                        И Показатель В (&МассивПоказателей)) КАК РегПлан

Первая таблица вернет:
1.1. Ном1
1.2. Ном2
1.3. Ном3

Вторая таблица вернет:
2.1. ____ 15 /____/ - это пустое значение измерения Номенклатура
2.2. Ном2 23
2.3. Ном3 10

А вот теперь надо получить результирующую таблицу:
3.1. Ном1 15
3.2. Ном2 23
3.3. Ном3 15

Проблема в том, что надо взять план из 2.1 в том случае, если не нашли самой номенклатуры во второй таблице, а для найденной взять максимальное значение между 2.1 и 2.3
1 Maxus43
 
10.09.13
16:56
соеденить по таблица1.Номенклатура = таблица2.Номенклатура ИЛИ таблица2.Номенклатура = &ПустаяСсылка
2 Infsams654
 
10.09.13
16:57
(0) что мешает соединить ?
3 ValeriTim
 
10.09.13
16:57
(1) а как максимум выбрать ? Кстати сейчас попробую ...
4 ValeriTim
 
10.09.13
16:58
(2) да вот никак не пойму как ...
5 mistеr
 
10.09.13
16:59
(1) + МАКСИМУМ
6 mistеr
 
10.09.13
16:59
(5) + СГРУППИРОВАТЬ ПО таблица1.Номенклатура
7 АНДР
 
10.09.13
17:01
Как-то так... Если я правильно понял условие " максимальное значение между 2.1 и 2.3"


Step 1

Select Max(РегПлан.ПроцентСкидкиНаценки)
From РегистрСведений.План.СрезПоследних(....  РегПлан
Where РегПлан.Номенклатура is Null

Step 2

Select СпрНоменклатура.Ссылка
Case When MaxStep1 < РегПлан.ПроцентСкидкиНаценки Then РегПлан.ПроцентСкидкиНаценки Else MaxStep1 end СпрНоменклатура
From Справочник.Номенклатура СпрНоменклатура
  Join РегистрСведений.План.СрезПоследних(....      СпрНоменклатура РегПлан on ...
Where ...
8 Maxus43
 
10.09.13
17:02
МАКСИМУМ наверно не прокатит, Выбор Когда юзать придётся
9 ValeriTim
 
10.09.13
17:11
(1) Попррбовал - не соединяется. Когда во второй таблице не находит номенклатуру значения плана остается пустым
10 Maxus43
 
10.09.13
17:16
запрос в студию
11 Enders
 
10.09.13
17:17
получили первые две таблицы. Далее
Выбрать
НоменклатураТ1,
Количесто(Различные НоменклатураТ2) как НоменклатураТ2,
Максимум(КоличествоТ2)
Из Т1 как Т1
Левое Соединение Т2 как Т2 по
т1.НаименованиеТ1 = т2.НаименованиеТ2
Или Т2 = Значение(Справочник.Номенклатура.ПустаяСсылка)

Сгрупировать По Т1.НоменклатураТ1

Наверное как-то так)
12 Enders
 
10.09.13
17:18
или Т2.НоменклатураТ2 = Значение(Справочник.Номенклатура.ПустаяСсылка)

Опечатался)
13 ValeriTim
 
10.09.13
17:22
ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Номенклатура,
    РегПлан.Номенклатура КАК ПланНоменклатура, // это просто чтобы посмотреть что выбирается
    РегПлан.ПроцентСкидкиНаценки
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.План.СрезПоследних(
                    &Дата,
                    (Номенклатура В (&МассивНоменклатуры) ИЛИ Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
                        И ПолучательСкидки В (&МассивПолучателей)) КАК РегПлан
        ПО (РегПлан.Номенклатура.Ссылка = СпрНоменклатура.Ссылка) ИЛИ (РегПлан.Номенклатура.Ссылка = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
ГДЕ
    СпрНоменклатура.Ссылка В (&МассивНоменклатуры)
14 ValeriTim
 
10.09.13
17:23
Похоже здесь действительно через временные таблицы делать надо ...
15 Maxus43
 
10.09.13
17:24
ПО (РегПлан.Номенклатура.Ссылка = СпрНоменклатура.Ссылка) ИЛИ (РегПлан.Номенклатура!!!!!!!!.Ссылка!!!!убрать!! = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
16 Maxus43
 
10.09.13
17:24
ИЛИ (РегПлан.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))

а вобще в массив номенклатур добавь пустую ссылку. ИЛИ - плохо для запросов бывает
17 Тролль главный
 
10.09.13
17:25
соедини по равенству ссылок или ссылка 2-й таблицы пустая
сгруппируй и возьми максимум
18 ValeriTim
 
10.09.13
17:31
(16) Ты прав. Только вот максимум не выходит ... (не буду весь запрос опять посылать)

МАКСИМУМ(РегПлан.ПроцентСкидкиНаценки)

СГРУППИРОВАТЬ ПО
    СпрНоменклатура.Ссылка,
    РегПлан.ПроцентСкидкиНаценки
19 ValeriTim
 
10.09.13
17:32
Сам дурак. сделал

СГРУППИРОВАТЬ ПО
    СпрНоменклатура.Ссылка
20 Maxus43
 
10.09.13
17:33
вот
21 Рэйв
 
10.09.13
17:33
Автора еще никто на СП и мануалы не посылал? Думаю стоит
22 Maxus43
 
10.09.13
17:35
(21) боюсь там не написано что РегПлан.Номенклатура.Ссылка = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка всегда Ложь
23 ValeriTim
 
10.09.13
17:36
(21) Ну вот был же нормальный диалог с нормальными людьми ... и тут ты ...
24 Рэйв
 
10.09.13
17:37
(22)тогда на годик..ну как минимум..попрактиковаться. чтобы читать чужо код и понимать его. Я думаю хватит.
25 Рэйв
 
10.09.13
17:38
(23)Да ладно:-)Может я внесу СВЕЖУЮ СТРУЮ :-)
\
26 hhhh
 
10.09.13
18:00
(23) недавно вот была тема, там автор даже три таблицы скрестил. Еще и регФакт у него был. Называется типа "очень сложный запрос".