Имя: Пароль:
1C
1С v8
Запросы, Запросики
, , ,
0 Mad88
 
24.10.17
13:49
Добрый день господа, есть такой запрос

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


В итоге запрос выдает 2 результата, что в принципе логично
https://yadi.sk/i/v9aMlazY3P3eC5

То есть в первой строчке у нас выбирается Хозяин, во второй пробег, можно ли как то преобразовать запрос так что бы эти две записи обединялись в одну.
1 Dmitry1c
 
24.10.17
13:50
Хозяин
2 catena
 
24.10.17
13:51
Зависит от того, что вы вкладываете в "обединялись в одну"
3 Mad88
 
24.10.17
13:52
(2) Что бы пробег встал в первую сточку, а не выбирался отдельным результатом
4 DrShad
 
24.10.17
13:52
ОБЪЕДИНИТЬ
5 Mad88
 
24.10.17
13:52
(1) с этим к Рарусу =)
6 DrShad
 
24.10.17
13:52
(3) это не отдельный результат, а две строки выборки по одному результату
7 FIXXXL
 
24.10.17
13:52
(0)
разнеси на два запроса и (4)
8 Mad88
 
24.10.17
13:53
(4) Не, объединять нельзя, регистр большой, формироваться будет очень долго, неприемлемо долго...
9 DrShad
 
24.10.17
13:53
(8) не дольше чем в твоем варианте
10 e053nk
 
24.10.17
13:54
Сначала выбрать авто, потом левый соедиением присоедить что нужно-так не пойдет?
11 Buster007
 
24.10.17
13:55
берешь автомобиль и присоединяешь к нему твой регистр с каждым из свойств
12 Buster007
 
24.10.17
13:56
+(11) сколько свойств столько соединений
13 FIXXXL
 
24.10.17
13:58
(8) результат сунь в временную таблицу, из нее выбирай два раза и объединяй
14 novichok79
 
24.10.17
14:01
1) автомобиль разве не измерение? зачем ты его в где пихаешь?
2) зачем 2 раза или если можно В
3) пихай результат во временную таблицу а потом цепляй левым соединением к автомобилю, это если надо обязательно 1 строку получить со свойствами авто.
15 Йохохо
 
24.10.17
14:04
а чего просто максимум не поставить?
16 Mad88
 
24.10.17
14:07
(9) В рабочем варианте отбора по автомобилю быть не должно, если сделать объединение, то отрабатывает очень долго
17 Mad88
 
24.10.17
14:10
(14) Здесь автомобиль в где, только для примера, вообще автомобиля в условии не будет
18 Михаил Козлов
 
24.10.17
14:14
Чем (15) не подходит с группировкой по автомобилю, убрав из полей ВидЗначения?
19 Йохохо
 
24.10.17
14:16
+ навесив выборы на последние поля, которые вероятно не актуальны для госномер
20 Mad88
 
24.10.17
14:20
(18) дак Поля Номер и Хозяин то разные будут, как он их сгруппирует?
21 Михаил Козлов
 
24.10.17
14:21
(2) МАКСИМУМ
22 novichok79
 
24.10.17
14:35
ВЫБРАТЬ
    АвтомобилиСрезПоследних.Автомобиль КАК Автомобиль,
    АвтомобилиСрезПоследних.ВидЗначения КАК ВидЗначения,
    АвтомобилиСрезПоследних.Значение КАК Значение
Поместить ДанныеМоихТачек
ИЗ
    РегистрСведений.Автомобили.СрезПоследних(
            &Период,
            ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.Хозяин)
                ИЛИ ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.ГосНомер)) КАК АвтомобилиСрезПоследних;
ВЫБРАТЬ
ДанныеМоихТачек.Автомобиль КАК Автомобиль
Поместить ВТТолькоБугатти
ИЗ ДанныеМоихТачек КАК ДанныеМоихТачек
СГруппировать ПО Бугатти.Автомобиль;

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

СГРУППИРОВАТЬ ПО
ТолькоБугатти.Автомобиль
23 novichok79
 
24.10.17
14:36
(22) я бы делал примерно так
24 novichok79
 
24.10.17
14:39
(23) ошибки не правлю, т. к. писал на коленке за 5 минут, чтобы автор понял идею.
25 Mad88
 
24.10.17
14:52
(24) Это все очень круто, но если мы обращаемся к регистру больше одного раза, все виснет, суть в том что бы  сделать это при одном обращении к таблице(мне почему то кажется что это невозможно, но тут люди умнее меня вдруг что), в рабочем сценарии отбора по автомобилю не будет, записей много при таком варианте все будет висет, и отчет формироваться будет что-то около часа)
26 novichok79
 
24.10.17
14:56
(24) где тут обращаются к регистру 2 раза? один раз и все.
27 dezss
 
24.10.17
14:58
(25) блин, да ты свой результат запихни в вт, а потом соедини с самим собой и все...
28 novichok79
 
24.10.17
14:59
(25) да уж, ты настолько ленив, что даже не хочешь прочитать и осмыслить запрос. ну или ты троллишь всех тут просто.
29 Mad88
 
24.10.17
15:02
(27) и все, и запрос час формируется
30 Mad88
 
24.10.17
15:03
(28) я подобный запрос, запихав в консоль и запустил, думает уже 50 минут
31 novichok79
 
24.10.17
15:07
(30) покажи свой запрос для начала
32 Mad88
 
24.10.17
15:14
(31) Так то должно работать, походу сервак тупит
ВЫБРАТЬ
    АвтомобилиСрезПоследних.Автомобиль КАК Автомобиль,
    АвтомобилиСрезПоследних.ВидЗначения КАК ВидЗначения,
    АвтомобилиСрезПоследних.Значение КАК Значение
ПОМЕСТИТЬ ДанныеМоихТачек
ИЗ
    РегистрСведений.Автомобили.СрезПоследних(
            &Период,
            ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.Хозяин)
                ИЛИ ВидЗначения = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяИнформацияАвтомобилей.ГосНомер)) КАК АвтомобилиСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДанныеМоихТачек.Автомобиль КАК Автомобиль
ПОМЕСТИТЬ ВТТолькоБугатти
ИЗ
    ДанныеМоихТачек КАК ДанныеМоихТачек

СГРУППИРОВАТЬ ПО
    ДанныеМоихТачек.Автомобиль
;

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

СГРУППИРОВАТЬ ПО
    ТолькоБугатти.Автомобиль
33 arsik
 
гуру
24.10.17
15:35
(32) Группировать не обязательно в последнем запросе.
В первом запросе добавь индекс по автомобиль и вид значения, во втором по автомобиль.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс