8.х Оптимизация запроса

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем xaysnet, 9 окт 2019.

  1. TopicStarter Overlay
    xaysnet
    Offline

    xaysnet Опытный в 1С

    Регистрация:
    3 июн 2019
    Сообщения:
    113
    Симпатии:
    3
    Баллы:
    29
    11 предприятие 8.3
    Как можно оптимизировать запрос, если мне нужно в номенклатуре добавить остатки по складам.
    Есть справочник.номенклатура, И регистрынакопления.ТоварыНаСкладахОстаткиИОбороты.
    Вот код, который работает, но время... Мне сказали есть возможность быстрее , раз в 5... Но не сказали как, по классике жанра!
    Код:
    ВЫБРАТЬ
        СпрНоменклатура.Ссылка КАК Ссылка,
        СпрНоменклатура.Код КАК Код,
        СпрНоменклатура.Наименование КАК Наименование,
        СпрНоменклатура.Артикул КАК Артикул,
        СпрНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
        СпрНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
        СпрНоменклатура.СтавкаНДС КАК СтавкаНДС,
        СпрНоменклатура.Родитель КАК Родитель,
        ВЫБОР
            КОГДА СпрНоменклатура.ЕстьТоварыДругогоКачества
                ТОГДА 4 + ВЫБОР
                        КОГДА СпрНоменклатура.ПометкаУдаления
                            ТОГДА 1
                        ИНАЧЕ 0
                    КОНЕЦ + ВЫБОР
                        КОГДА СпрНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
                            ТОГДА 0
                        ИНАЧЕ 2
                    КОНЕЦ
            ИНАЧЕ ВЫБОР
                    КОГДА СпрНоменклатура.ПометкаУдаления
                        ТОГДА 1
                    ИНАЧЕ 0
                КОНЕЦ + ВЫБОР
                    КОГДА СпрНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
                        ТОГДА 0
                    ИНАЧЕ 2
                КОНЕЦ
        КОНЕЦ КАК ИндексКартинки
    ИЗ
        Справочник.Номенклатура КАК СпрНоменклатура
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
            ИЗ
                РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , Склад.Наименование = &Оптовый) КАК ТоварыНаСкладахОстаткиИОбороты) КАК Оптовые
            ПО СпрНоменклатура.Ссылка = Оптовые.Номенклатура.Ссылка
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
            ИЗ
                РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , Склад.Наименование = &Выселковая) КАК ТоварыНаСкладахОстаткиИОбороты) КАК Выселковая
            ПО СпрНоменклатура.Ссылка = Выселковая.Номенклатура.Ссылка
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
            ИЗ
                РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , Склад.Наименование = &Калинина) КАК ТоварыНаСкладахОстаткиИОбороты) КАК Калинина
            ПО СпрНоменклатура.Ссылка = Калинина.Номенклатура.Ссылка
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
            ИЗ
                РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , Склад.Наименование = &Контейнер) КАК ТоварыНаСкладахОстаткиИОбороты) КАК Контейнер
            ПО СпрНоменклатура.Ссылка = Контейнер.Номенклатура.Ссылка
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
            ИЗ
                РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , Склад.Наименование = &ПерваяРечка) КАК ТоварыНаСкладахОстаткиИОбороты) КАК ПерваяРечка
            ПО СпрНоменклатура.Ссылка = ПерваяРечка.Номенклатура.Ссылка
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
            ИЗ
                РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , Склад.Наименование = &Хигаши) КАК ТоварыНаСкладахОстаткиИОбороты) КАК Хигаши
            ПО СпрНоменклатура.Ссылка = Хигаши.Номенклатура.Ссылка
    ГДЕ
        НЕ СпрНоменклатура.ЭтоГруппа
    {ГДЕ
        (СпрНоменклатура.Ссылка В
                (ВЫБРАТЬ
                    Сегменты.Номенклатура
                ИЗ
                    РегистрСведений.НоменклатураСегмента КАК Сегменты
                ГДЕ
                    Сегменты.Сегмент = &СегментНоменклатуры))}
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    1. Отказаться от подзапросов в пользу использования временных таблиц.
    2. перестать делать разыменование вида Склад.Наименование = &Оптовый, а передавать сразу ссылку на склад
    3. Перестать использовать в условиях соединения ПО СпрНоменклатура.Ссылка = Оптовые.Номенклатура.Ссылка разыменовывание номенклатуры до ссылки в правой части
    ТехБухПривет нравится это.
  3. TopicStarter Overlay
    xaysnet
    Offline

    xaysnet Опытный в 1С

    Регистрация:
    3 июн 2019
    Сообщения:
    113
    Симпатии:
    3
    Баллы:
    29
    И эти варианты я побывал, время не сократилось!
  4. TopicStarter Overlay
    xaysnet
    Offline

    xaysnet Опытный в 1С

    Регистрация:
    3 июн 2019
    Сообщения:
    113
    Симпатии:
    3
    Баллы:
    29
    Решил проблему!
    При замере производительности разницы нет.
  5. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    789
    Симпатии:
    89
    Баллы:
    54
    Вам перечислили все стандартные ошибки в вашем запросе - сделайте всё комплексно и потом проверяйте!
    Ну и в итоге покажите, как сделали, что бы можно было проверить..
    Говорите, что время не изменилось, но мы то и не видим как вы запрос меняли.
    nomad_irk нравится это.
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.795
    Симпатии:
    1.022
    Баллы:
    204
    Судя по ответам, есть какое-то секретное кунг-фу, которое познал ТС, но никому об этом не собирается говорить, т.к. оно же ж - секретное :)
  7. TopicStarter Overlay
    xaysnet
    Offline

    xaysnet Опытный в 1С

    Регистрация:
    3 июн 2019
    Сообщения:
    113
    Симпатии:
    3
    Баллы:
    29
    Я конкретно говорил про передачу ссылки и поиск по наименованию. В небольших базах, где номенклатура до 40 тыр, нет разницы в производительности.