8.х Помогите оптимизировать запрос для БП2.0

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

  1. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Мне нужно посчитать количество строк в документах ПТиУ (услуги и товары), Поступление НМА, Поступление ДопРасходов. За определенный период. Посмотрите запрос. Он какой то мегабольшой. Может можно проще? Типовая бухгалтерия 2.0.
    Код:
    ВЫБРАТЬ
        МАКСИМУМ(ПоступлениеТоваровУслугТовары.НомерСтроки) КАК НомерСтроки,
        МАКСИМУМ(ПоступлениеТоваровУслугУслуги.НомерСтроки) КАК НомерСтроки1,
        ЕСТЬNULL(ПоступлениеТоваровУслугТовары.Ссылка, ПоступлениеТоваровУслугУслуги.Ссылка) КАК Поле1
    ПОМЕСТИТЬ КоличествоПТиУ
    ИЗ
        Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Услуги КАК ПоступлениеТоваровУслугУслуги
            ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслугУслуги.Ссылка
    
    СГРУППИРОВАТЬ ПО
        ЕСТЬNULL(ПоступлениеТоваровУслугТовары.Ссылка, ПоступлениеТоваровУслугУслуги.Ссылка)
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МАКСИМУМ(ПоступлениеНМАНематериальныеАктивы.НомерСтроки) КАК НомерСтроки,
        ПоступлениеНМАНематериальныеАктивы.Ссылка
    ПОМЕСТИТЬ КоличествоНМА
    ИЗ
        Документ.ПоступлениеНМА.НематериальныеАктивы КАК ПоступлениеНМАНематериальныеАктивы
    
    СГРУППИРОВАТЬ ПО
        ПоступлениеНМАНематериальныеАктивы.Ссылка
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МАКСИМУМ(ПоступлениеДопРасходовТовары.НомерСтроки) КАК НомерСтроки,
        ПоступлениеДопРасходовТовары.Ссылка
    ПОМЕСТИТЬ КоличествоДопРасходов
    ИЗ
        Документ.ПоступлениеДопРасходов.Товары КАК ПоступлениеДопРасходовТовары
    
    СГРУППИРОВАТЬ ПО
        ПоступлениеДопРасходовТовары.Ссылка
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        СУММА(КоличествоПТиУ.НомерСтроки) КАК НомерСтроки,
        СУММА(КоличествоПТиУ.НомерСтроки1) КАК Поле1
    ПОМЕСТИТЬ МаксПТиУ
    ИЗ
        КоличествоПТиУ КАК КоличествоПТиУ
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МаксПТиУ.НомерСтроки + МаксПТиУ.Поле1 КАК Поле
    ПОМЕСТИТЬ ПТиУ
    ИЗ
        МаксПТиУ КАК МаксПТиУ
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        СУММА(КоличествоНМА.НомерСтроки) КАК НомерСтроки
    ПОМЕСТИТЬ НМА
    ИЗ
        КоличествоНМА КАК КоличествоНМА
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        СУММА(КоличествоДопРасходов.НомерСтроки) КАК НомерСтроки
    ПОМЕСТИТЬ ДопРасходы
    ИЗ
        КоличествоДопРасходов КАК КоличествоДопРасходов
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ДопРасходы.НомерСтроки + НМА.НомерСтроки + ПТиУ.Поле КАК Значение
    ИЗ
        ПТиУ КАК ПТиУ,
        НМА КАК НМА,
        ДопРасходы КАК ДопРасходы
    
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Да вы знаете толк в извращениях :)
    Код:
    Выбрать 
    Количество(*) 
    из 
    документ.имядокумента1.табличнаячасть1 
    
    объединить все 
    
    выбрать 
    количество(*) 
    из 
    документ.имядокумента1.табличнаячасть2 
    и так далее........
    даст вам нужный эффект, либо создать массив нужных метаданных и выполнить запрос в цикле(что более жизнеспособно на большом количестве метаданных) с накоплением результата
    Последнее редактирование: 13 янв 2016
  3. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    :) Нет, это надо в запросе.
  4. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.990
    Симпатии:
    399
    Баллы:
    104
    Мать моя женщина. :) Его нельзя оптимизировать, его нужно переписывать полностью. Полный бред, а не запрос. без обид.
  5. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Да, спасибо, уже поняла. Сделала так
    Код:
    ВЫБРАТЬ
    КОЛИЧЕСТВО(ПоступлениеТоваровУслугТовары.НомерСтроки) КАК НомерСтроки
    ПОМЕСТИТЬ ВТ_таблицы
    ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
    ГДЕ
    ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
    КОЛИЧЕСТВО(ПоступлениеТоваровУслугУслуги.НомерСтроки)
    ИЗ
    Документ.ПоступлениеТоваровУслуг.Услуги КАК ПоступлениеТоваровУслугУслуги
    ГДЕ
    ПоступлениеТоваровУслугУслуги.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
    КОЛИЧЕСТВО(ПоступлениеНМАНематериальныеАктивы.НомерСтроки)
    ИЗ
    Документ.ПоступлениеНМА.НематериальныеАктивы КАК ПоступлениеНМАНематериальныеАктивы
    ГДЕ
    ПоступлениеНМАНематериальныеАктивы.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
    КОЛИЧЕСТВО(ПоступлениеДопРасходовТовары.НомерСтроки)
    ИЗ
    Документ.ПоступлениеДопРасходов.Товары КАК ПоступлениеДопРасходовТовары
    ГДЕ
    ПоступлениеДопРасходовТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    СУММА(ВТ_таблицы.НомерСтроки) КАК СуммаНомеровСтрок
    ИЗ
    ВТ_таблицы КАК ВТ_таблицы
    

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