Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
20 Ноя 2018, 03:40
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Вторник. Вопрос 5  (Прочитано 55281 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Efa

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-03-25
  • Сайт: 
  • Профессия: Программист 1С
Re: Вторник. Вопрос 5
« Ответ #50: 13 Мар 2013, 13:41 »
ВЫБРАТЬ
    ПоступлениеТоваровИУслуг.Ссылка,
    ПоступлениеТоваровИУслуг.Номер,
    ПоступлениеТоваровИУслуг.Договор,
    ПоступлениеТоваровИУслуг.Контрагент,
    ПоступлениеТоваровИУслуг.Организация,
    ПоступлениеТоваровИУслуг.Сумма,
    ПоступлениеТоваровИУслуг.Дата
ИЗ
    Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЛимитыКредиторскойЗадолженности.Организация КАК Организация,
            ЛимитыКредиторскойЗадолженности.Контрагент КАК Контрагент,
            ЛимитыКредиторскойЗадолженности.Договор КАК Договор,
            СУММА(ЛимитыКредиторскойЗадолженности.Сумма) КАК Сумма
        ИЗ
            РегистрСведений.ЛимитыКредиторскойЗадолженности КАК ЛимитыКредиторскойЗадолженности
        ГДЕ
            ЛимитыКредиторскойЗадолженности.Организация = &Организация
            и (ЛимитыКредиторскойЗадолженности.Договор.ДоговорСПодрядчиком = ИСТИНА
            ИЛИ ЛимитыКредиторскойЗадолженности.Договор.ДоговорСПоставщиком = ИСТИНА)
       
        СГРУППИРОВАТЬ ПО
            ЛимитыКредиторскойЗадолженности.Организация,
            ЛимитыКредиторскойЗадолженности.Контрагент,
            ЛимитыКредиторскойЗадолженности.Договор) КАК ЛимитыКредиторскойЗадолженности
        ПО ПоступлениеТоваровИУслуг.Организация = ЛимитыКредиторскойЗадолженности.Организация
           И ПоступлениеТоваровИУслуг.Контрагент = ЛимитыКредиторскойЗадолженности.Контрагент
            И ПоступлениеТоваровИУслуг.Договор = ЛимитыКредиторскойЗадолженности.Договор
ГДЕ
    (ПоступлениеТоваровИУслуг.Сумма < &МинимальнаяСуммаЗадолженности
            ИЛИ ПоступлениеТоваровИУслуг.Сумма < ЛимитыКредиторскойЗадолженности.Сумма)
    И (ПоступлениеТоваровИУслуг.Договор.ДоговорСПодрядчиком = ИСТИНА
            ИЛИ ПоступлениеТоваровИУслуг.Договор.ДоговорСПоставщиком = ИСТИНА)

Необходимо в связях добавить Организацию, а для регистра отбор по видам договоров, такой же как для документа


Оффлайн alex-pro

  • *
  • Сообщений: 21
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-03-12
  • Сайт: 
  • Профессия: Программист 8.1
Re: Вторник. Вопрос 5
« Ответ #51: 13 Мар 2013, 14:54 »
Перенести условия в виртуальную таблицу, если есть такая возможность.
Вместо сложенного запроса использовать Временные таблицы и проиндексировать поля связей.

Оффлайн Smile

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-07-16
  • Сайт: 
Re: Вторник. Вопрос 5
« Ответ #52: 14 Мар 2013, 07:35 »
   
    "ВЫБРАТЬ
    |   ЛимитыКредиторскойЗадолженности.Организация,
    |   ЛимитыКредиторскойЗадолженности.Контрагент КАК Контрагент,
    |   ЛимитыКредиторскойЗадолженности.Договор,
    |   ЛимитыКредиторскойЗадолженности.Сумма
    |ПОМЕСТИТЬ ВТ_Лимиты
    |ИЗ
    |   (ВЫБРАТЬ
    |      ЛимитыКредиторскойЗадолженности.Организация КАК Организация,
    |      ЛимитыКредиторскойЗадолженности.Контрагент КАК Контрагент,
    |      ЛимитыКредиторскойЗадолженности.Договор КАК Договор,
    |      СУММА(ЛимитыКредиторскойЗадолженности.Сумма) КАК Сумма
    |   ИЗ
    |      РегистрСведений.ЛимитыКредиторскойЗадолженности КАК ЛимитыКредиторскойЗадолженности
    |   ГДЕ
    |      ЛимитыКредиторскойЗадолженности.Организация = &Организация
    |   
    |   СГРУППИРОВАТЬ ПО
    |      ЛимитыКредиторскойЗадолженности.Организация,
    |      ЛимитыКредиторскойЗадолженности.Контрагент,
    |      ЛимитыКредиторскойЗадолженности.Договор) КАК ЛимитыКредиторскойЗадолженности
    |
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ПоступлениеТоваровИУслуг.Ссылка,
    |   ПоступлениеТоваровИУслуг.Номер,
    |   ПоступлениеТоваровИУслуг.Договор,
    |   ПоступлениеТоваровИУслуг.Контрагент,
    |   ПоступлениеТоваровИУслуг.Организация,
    |   ПоступлениеТоваровИУслуг.Сумма,
    |   ПоступлениеТоваровИУслуг.Дата
    |ИЗ
    |   Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
    |      ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Лимиты КАК ВТ_Лимиты
    |      ПО ПоступлениеТоваровИУслуг.Контрагент = ВТ_Лимиты.Контрагент
    |         И ПоступлениеТоваровИУслуг.Договор = ВТ_Лимиты.Договор
    |ГДЕ
    |   (ПоступлениеТоваровИУслуг.Сумма < &МинимальнаяСуммаЗадолженности
    |         ИЛИ ПоступлениеТоваровИУслуг.Сумма < ВТ_Лимиты.Сумма)
    |   И (ПоступлениеТоваровИУслуг.Договор.ДоговорСПодрядчиком = ИСТИНА
    |         ИЛИ ПоступлениеТоваровИУслуг.Договор.ДоговорСПоставщиком = ИСТИНА)"


Одной из основных причин не оптимальной работы запросов является соединения с подзапросами, поэтому лучше делать соединения со временными таблицами. Можно добавить индексацию временной таблицы, так как первое соединение идет по контрагенту:
    "|ИНДЕКСИРОВАТЬ ПО
     |   Контрагент"


Оффлайн savichevae

  • *
  • Сообщений: 35
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-19
  • Сайт: 
  • Профессия: Программист 1С
Re: Вторник. Вопрос 5
« Ответ #53: 14 Мар 2013, 10:30 »
ВЫБРАТЬ
   ЛимитыКредиторскойЗадолженности.Организация КАК Организация,
   ЛимитыКредиторскойЗадолженности.Контрагент КАК Контрагент,
   ЛимитыКредиторскойЗадолженности.Договор КАК Договор,
   СУММА(ЛимитыКредиторскойЗадолженности.Сумма) КАК Сумма
ПОМЕСТИТЬ  ЛимитыЗадолженности
ИЗ
   РегистрСведений.ЛимитыКредиторскойЗадолженности КАК ЛимитыКредиторскойЗадолженности
ГДЕ
   ЛимитыКредиторскойЗадолженности.Организация = &Организация
       
   СГРУППИРОВАТЬ ПО
   ЛимитыКредиторскойЗадолженности.Организация,
   ЛимитыКредиторскойЗадолженности.Контрагент,
   ЛимитыКредиторскойЗадолженности.Договор
;
/////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ПоступлениеТоваровИУслуг.Ссылка,
    ПоступлениеТоваровИУслуг.Номер,
    ПоступлениеТоваровИУслуг.Договор,
    ПоступлениеТоваровИУслуг.Контрагент,
    ПоступлениеТоваровИУслуг.Организация,
    ПоступлениеТоваровИУслуг.Сумма,
    ПоступлениеТоваровИУслуг.Дата
ПОМЕСТИТЬ Поступления
ИЗ
    Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
ГДЕ
    ПоступлениеТоваровИУслуг.Договор.ДоговорСПодрядчиком = ИСТИНА
    ИЛИ ПоступлениеТоваровИУслуг.Договор.ДоговорСПоставщиком = ИСТИНА
;
/////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПоступлениеТоваровИУслуг.Ссылка,
    ПоступлениеТоваровИУслуг.Номер,
    ПоступлениеТоваровИУслуг.Договор,
    ПоступлениеТоваровИУслуг.Контрагент,
    ПоступлениеТоваровИУслуг.Организация,
    ПоступлениеТоваровИУслуг.Сумма,
    ПоступлениеТоваровИУслуг.Дата
ИЗ 
    Поступления КАК ПоступлениеТоваровИУслуг
ЛЕВОЕ СОЕДИНЕНИЕ
    ЛимитыЗадолженности КАК ЛимитыКредиторскойЗадолженности
ПО ПоступлениеТоваровИУслуг.Контрагент = ЛимитыКредиторскойЗадолженности.Контрагент
            И ПоступлениеТоваровИУслуг.Договор = ЛимитыКредиторскойЗадолженности.Договор
ГДЕ
    ПоступлениеТоваровИУслуг.Сумма < &МинимальнаяСуммаЗадолженности
            ИЛИ ПоступлениеТоваровИУслуг.Сумма < ЛимитыКредиторскойЗадолженности.Сумма




Т.о. мы избавились от вложенного запроса, что влияет на производительность, а так же при отборе по документов поступлений сразу наложили условия на договор контрагента, что отсеет сразу ненужные данные.

Оффлайн faig

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-09-14
  • Сайт: 
Re: Вторник. Вопрос 5
« Ответ #54: 14 Мар 2013, 12:28 »
Не нужное соединение с регистрам сведений

Оффлайн PaulMc

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-25
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Вторник. Вопрос 5
« Ответ #55: 14 Мар 2013, 15:42 »
Цитировать
Вашему вниманию предлагается запрос. Произведите его оптимизацию и поясните свои действия.
Примечание таблица РегистрСведений.ЛимитыКредиторскойЗадолженности имеет следующие измерения:

Организация
Контрагент
Договор
ТипЗадолженности (долгосрочная, краткосрочная)

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


Из вложенного запроса убрать поле Организация и добавить условие по параметру Организация во внешний запрос. связывать запросы по организации не будем.
Во вложенный запрос для ограничения размера выборки стоит добавить минимальную сумму задолженности и убрать условие из внешнего. нам достаточно один отрезать всё что больше минимума.

Вариант 1:
ВЫБРАТЬ
    ПоступлениеТоваровИУслуг.Ссылка,
    ПоступлениеТоваровИУслуг.Номер,
    ПоступлениеТоваровИУслуг.Договор,
    ПоступлениеТоваровИУслуг.Контрагент,
    ПоступлениеТоваровИУслуг.Организация,
    ПоступлениеТоваровИУслуг.Сумма,
    ПоступлениеТоваровИУслуг.Дата
ИЗ
    Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЛимитыКредиторскойЗадолженности.Контрагент КАК Контрагент,
            ЛимитыКредиторскойЗадолженности.Договор КАК Договор,
            СУММА(ЛимитыКредиторскойЗадолженности.Сумма) КАК Сумма
        ИЗ
            РегистрСведений.ЛимитыКредиторскойЗадолженности КАК ЛимитыКредиторскойЗадолженности
        ГДЕ
            ЛимитыКредиторскойЗадолженности.Организация = &Организация
       
        СГРУППИРОВАТЬ ПО
            ЛимитыКредиторскойЗадолженности.Контрагент,
            ЛимитыКредиторскойЗадолженности.Договор
        ИМЕЮЩИЕ
            СУММА(ЛимитыКредиторскойЗадолженности.Сумма) < &МинимальнаяСуммаЗадолженности
        ) КАК ЛимитыКредиторскойЗадолженности
        ПО ПоступлениеТоваровИУслуг.Контрагент = ЛимитыКредиторскойЗадолженности.Контрагент
            И ПоступлениеТоваровИУслуг.Договор = ЛимитыКредиторскойЗадолженности.Договор
ГДЕ
    ПоступлениеТоваровИУслуг.Сумма < &МинимальнаяСуммаЗадолженности
    И ПоступлениеТоваровИУслуг.Организация = &Организация
    И (ПоступлениеТоваровИУслуг.Договор.ДоговорСПодрядчиком = ИСТИНА
            ИЛИ ПоступлениеТоваровИУслуг.Договор.ДоговорСПоставщиком = ИСТИНА)

Вариант 2:
Сначала выберем лимиты, сразу ограничив выборку условиями, их должно быть немного по сравнению с документами. Полученные лимиты соединим с документами:

Код: Пакетный запрос [Выделить]
        ВЫБРАТЬ
            ЛимитыКредиторскойЗадолженности.Контрагент КАК Контрагент,
            ЛимитыКредиторскойЗадолженности.Договор КАК Договор,
            СУММА(ЛимитыКредиторскойЗадолженности.Сумма) КАК Сумма
        ПОМЕСТИТЬ Лимиты
        ИЗ
            РегистрСведений.ЛимитыКредиторскойЗадолженности КАК ЛимитыКредиторскойЗадолженности
        ГДЕ
            ЛимитыКредиторскойЗадолженности.Организация = &Организация
        СГРУППИРОВАТЬ ПО
            ЛимитыКредиторскойЗадолженности.Контрагент,
            ЛимитыКредиторскойЗадолженности.Договор
        ИМЕЮЩИЕ
            СУММА(ЛимитыКредиторскойЗадолженности.Сумма) < &МинимальнаяСуммаЗадолженности
            ) КАК ЛимитыКредиторскойЗадолженности
;

////////////////////////////////////////////////////////////////////////////////

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


Вложенные запросы - зло. можно напороться на жесткую цикличность (многократное выполнение вложенного запроса равное количеству строк внешнего), а пакетные вери гуд :befhbt:
хотя немного больше потребуется той же памяти, но скорость работы в разы быстрее за счет уменьшения числа декартового произведения. и читать и дебажить пакетные запросы легче, понятнее и приятнее <_< Рекомендую! B)

Оффлайн kitaets

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-12-04
  • Сайт: 
  • Профессия: Бухгалтер
Re: Вторник. Вопрос 5
« Ответ #56: 14 Мар 2013, 15:54 »
ВЫБРАТЬ
    ПоступлениеТоваровИУслуг.Ссылка,
    ПоступлениеТоваровИУслуг.Номер,
    ПоступлениеТоваровИУслуг.Договор,
    ПоступлениеТоваровИУслуг.Контрагент,
    ПоступлениеТоваровИУслуг.Организация,
    ПоступлениеТоваровИУслуг.Сумма,
    ПоступлениеТоваровИУслуг.Дата
ИЗ
    Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
СГРУППИРОВАТЬ ПО
    ПоступлениеТоваровИУслуг.Договор,
    ПоступлениеТоваровИУслуг.Контрагент,
    ПоступлениеТоваровИУслуг.Организация,
    ПоступлениеТоваровИУслуг.Ссылка,
    ПоступлениеТоваровИУслуг.Номер,
    ПоступлениеТоваровИУслуг.Дата,
    СУММА(ЛимитыКредиторскойЗадолженности.Сумма) КАК Задолженность

ЛЕВОЕ СОЕДИНЕНИЕ ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
    ПО ПоступлениеТоваровИУслуг.Организация =   
       ЛимитыКредиторскойЗадолженности.Организация
И      ПоступлениеТоваровИУслуг.Контрагент =
       ЛимитыКредиторскойЗадолженности.Контрагент
И      ПоступлениеТоваровИУслуг.Договор =
       ЛимитыКредиторскойЗадолженности.Договор           
ГДЕ
    (ПоступлениеТоваровИУслуг.Сумма < &МинимальнаяСуммаЗадолженности
            ИЛИ ПоступлениеТоваровИУслуг.Сумма < ЛимитыКредиторскойЗадолженности.Сумма)
   

Оффлайн vlad___2011___

  • *
  • Сообщений: 39
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-11-19
  • Сайт: 
  • Профессия: Программист 8.1
Re: Вторник. Вопрос 5
« Ответ #57: 14 Мар 2013, 17:41 »
Внешне все красиво.

Из выборки по регистру убрал контрагента
(предполагая что Контрагент = Договор.Владелец)

и

добавил условие по виду договора

Т.е. уменьшаем объем выборки и сокращаем кол-во
условий в соединении:

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

Соответственно условие соединения:

ПО
    ПоступлениеТоваровИУслуг.Договор = ЛимитыКредиторскойЗадолженности.Договор
   

Выборку по ПТУ м.б. и переделал бы в подзапрос, но если бы был заранее уверен
что других видов договоров (не пост и не подр) у нас в базе большинство. А так
оставляем как есть.

Оффлайн headmade

  • *
  • Сообщений: 43
  • РЕПУТАЦИЯ: 1
  • КПД: 2%
  • Регистрация: 2011-07-30
  • Сайт: 
  • Профессия: Бухгалтер
Re: Вторник. Вопрос 5
« Ответ #58: 14 Мар 2013, 20:57 »
1.   При написании запросов не следует использовать соединения с подзапросами т.к. в этом случае возникает вероятность того что СУБД выберет неправильный план выполнения запроса. Поэтому вложенный запрос для регистра сведений ЛимитыКредиторскойЗадолженности необходимо перенести во временную таблицу.
2.   Для уменьшения кол-ва соединяемых полей (на условия к таблице ПоступлениеТоваровИУслуг) выносим таблицу ПоступлениеТоваровИУслуг во временную таблицу.
3.   Индексируем поля временных таблиц, по которым производится соединение.
Итоговый запрос имеет вид:

ВЫБРАТЬ
   ЛимитыКредиторскойЗадолженности.Организация КАК Организация,
   ЛимитыКредиторскойЗадолженности.Контрагент КАК Контрагент,
   ЛимитыКредиторскойЗадолженности.Договор КАК Договор,
   СУММА(ЛимитыКредиторскойЗадолженности.Сумма) КАК Сумма
ПОМЕСТИТЬ ВТ_ЛимитыКредиторскойЗадолженности
ИЗ
   РегистрСведений.ЛимитыКредиторскойЗадолженности КАК ЛимитыКредиторскойЗадолженности
ГДЕ
   ЛимитыКредиторскойЗадолженности.Организация = &Организация

СГРУППИРОВАТЬ ПО
   ЛимитыКредиторскойЗадолженности.Организация,
   ЛимитыКредиторскойЗадолженности.Контрагент,
   ЛимитыКредиторскойЗадолженности.Договор

ИНДЕКСИРОВАТЬ ПО
   Контрагент,
   Договор
;

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

ИНДЕКСИРОВАТЬ ПО
   Контрагент,
   Договор
;

Оффлайн crs

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-03-15
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Вторник. Вопрос 5
« Ответ #59: 15 Мар 2013, 02:16 »
ВЫБРАТЬ
ПоступлениеТоваровИУслуг.Ссылка,
ПоступлениеТоваровИУслуг.Номер,
ПоступлениеТоваровИУслуг.Договор,
ПоступлениеТоваровИУслуг.Контрагент,
ПоступлениеТоваровИУслуг.Организация,
ПоступлениеТоваровИУслуг.Сумма,
ПоступлениеТоваровИУслуг.Дата
ИЗ
Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛимитыКредиторскойЗадолженности КАК ЛимитыКредиторскойЗадолженности
ПО ПоступлениеТоваровИУслуг.Контрагент = ЛимитыКредиторскойЗадолженности.Контрагент
И ПоступлениеТоваровИУслуг.Договор = ЛимитыКредиторскойЗадолженности.Договор
ГДЕ
(ПоступлениеТоваровИУслуг.Сумма < &МинимальнаяСуммаЗадолженности
ИЛИ ПоступлениеТоваровИУслуг.Сумма < ЛимитыКредиторскойЗадолженности.Сумма)
И (ПоступлениеТоваровИУслуг.Договор.ДоговорСПодрядчиком
ИЛИ ПоступлениеТоваровИУслуг.Договор.ДоговорСПоставщиком)

В запросе не нужно делать вложенный запрос по регистру сведений ЛимитыКредиторскойЗадолженности: это приводит к тому, что выбираются все записи регистра. Оптимизированный запрос выбирает только те записи, по которым оформлены документы ПоступлениеТоваровИУслуг. Также если, реквизит имеет тип Будево не обязательно писать "Истина".


Теги:
 


* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

oleg-x
69 Сообщений
AIFrame AIFrame
63 Сообщений
wise wise
50 Сообщений
alexandr_ll
45 Сообщений
alex0402
44 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
38 Сообщений
BuhRust
28 Сообщений
andron81_81
24 Сообщений
LexaK
21 Сообщений
byte777
21 Сообщений

* Кто онлайн

  • Точка Гостей: 153
  • Точка Скрытых: 0
  • Точка Пользователей: 1
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal