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

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Svb, 14 апр 2014.

  1. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Добрый день.
    УТ 11.0.
    Надо мне при печати расходного ордера посчитать сколько складов в распоряжении (РТиУ) этого ордера.
    Информация о количестве складов есть в рабличной части документа Распоряжение Расходного Ордера: из документа Расходный ордер я беру реквизит Распоряжение (ссылка на РТиУ), и по этому распоряжению считаю КоличествоРазличных(Товары.Склад).

    Какой вариант лучше (быстрее)?
    1.
    Первым запросом получаем временную таблицу по расходному ордеру, вторым запросом делаем соединение временной таблицы с таблицей РТиУ и считаем КоличествоРазличных(Склад).
    Код:
    ВЫБРАТЬ
        РасходныйОрдерНаТовары.Ссылка КАК СсылкаРасхОрдер,
        РасходныйОрдерНаТовары.Распоряжение
    ПОМЕСТИТЬ втРасходныйОрдер
    ИЗ
        Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        втРасходныйОрдер.СсылкаРасхОрдер,
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Склад) КАК КоличествоСкладов
    ИЗ
        втРасходныйОрдер КАК втРасходныйОрдер
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
            ПО втРасходныйОрдер.Распоряжение = РеализацияТоваровУслугТовары.Ссылка
    СГРУППИРОВАТЬ ПО
        втРасходныйОрдер.СсылкаРасхОрдер
    2. Делаю две временных таблицы: одну по расходному ордеру, вторую по РТиУ с отбором по Расоряжени и считаю КоличествоРазличных, и третим запросом соединяю их
    Код:
    ВЫБРАТЬ
        РасходныйОрдерНаТовары.Ссылка КАК СсылкаРасхОрдер,
        РасходныйОрдерНаТовары.Распоряжение
    ПОМЕСТИТЬ втРасходныйОрдер
    ИЗ
        Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Склад) КАК КоличествоСкладов,
        РеализацияТоваровУслугТовары.Ссылка
    ПОМЕСТИТЬ втРТиУ
    ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ГДЕ
        РеализацияТоваровУслугТовары.Ссылка В
                (ВЫБРАТЬ
                    втРасходныйОрдер.Распоряжение
                ИЗ
                    втРасходныйОрдер)
    
    СГРУППИРОВАТЬ ПО
        РеализацияТоваровУслугТовары.Ссылка
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        втРасходныйОрдер.СсылкаРасхОрдер,
        втРТиУ.КоличествоСкладов
    ИЗ
        втРасходныйОрдер КАК втРасходныйОрдер
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ втРТиУ КАК втРТиУ
            ПО втРасходныйОрдер.Распоряжение = втРТиУ.Ссылка
    То есть отличие второго способа от первого, что во втором соединение выполняется уже с нужными (отобранными) документрами РТиУ.
    Последнее редактирование: 14 апр 2014
  2. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    2-ой должен быть быстрее, можно еще проиндексировать по Ссылке.
    Svb нравится это.
  3. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    По документам отбирать не интересно.
    Есть в УТ11 регистры накопления "ДвижениеТоваров" и "ТоварыНаСкладах" посмотрите их, скорее всего нужная информация в них есть.
    Svb нравится это.
  4. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    С регистрами не получится, мне кроме количества складов, надо еще кой-какую информацию получать, которой нет в регистрах этих.
    А по моему вопросу что все-таки оптимальней будет?
    Спасибо. Индексировать не буду, т.к. это печать, врядли там будут вызывать печать сразу 500 документов.
  5. antares
    Offline

    antares Опытный в 1С

    Регистрация:
    30 ноя 2006
    Сообщения:
    340
    Симпатии:
    7
    Баллы:
    29
    регистры специально заточены для использования в запросах; не стройте выборки на документах, это не профессионально; поэтому оба варианта не эффективны; а сопутсвующую информацию документа берите через ссылку регистратора; попробуйте как нибудь сравнить производительность запроса на регистрах и документах, сами увидите
    Последнее редактирование: 15 апр 2014

Поделиться этой страницей