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

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

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

Оффлайн mixqn

  • Администратор
  • *****
  • Сообщений: 1346
  • РЕПУТАЦИЯ: 166
  • КПД: 12%
  • Who is John Galt?
  • Регистрация: 2012-08-15
  • Сайт: 3gmaster.net
  • Профессия: Программист 1С
Вашему вниманию предлагается запрос. Произведите его оптимизацию и поясните свои действия.
Примечание таблица РегистрСведений.ЛимитыКредиторскойЗадолженности имеет следующие измерения:

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

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

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


Предыдущий вопрос Следующий вопрос

Последний раз редактировалось: MuI_I_Ika; 12 Мар 2013, 01:06


Оффлайн nidom

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

1. Еще больше ограничиваем выборку из регистра только по договорам с подрядчиками или по договорам с поставщиками, чтобы результат вложенного запроса по регистру сведений стал более компактным.
2. Накладываем условие только на основную таблицу запроса (по документам), а условие с использованием результата вложенной таблицы переносим в условие связи.
3. Убираем кобинацию "=Истина" из условий, чтобы лишний раз не производить сравнение.

Оффлайн ninzel

  • *
  • Сообщений: 20
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-07-30
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Вторник. Вопрос 5
« Ответ #2: 12 Мар 2013, 07:14 »
Наложить отбор договоров на внутренний запрос, тогда результат соединения таблиц будет меньше => быстее работает запрос

Оффлайн serj1C

  • **
  • Сообщений: 53
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-09
  • Компания: Стройландия
  • Профессия: Программист 1С
Re: Вторник. Вопрос 5
« Ответ #3: 12 Мар 2013, 07:58 »
1) неявное соединение с справочником договором делаю явным и делаю внутреннее соединение, чтобы отфильтровать договоры без галок
2) подзапрос выносим во временную таблицу с индексирование по договору
3) из временной таблицы убираем "лишние" поля:
    - организация - т.к. не используется в соединении, нужна только для отбора, что странно;
    - контрагент - т.к. (скорей всего) является владельцем справочника договоры, избыточен. А про индексы нам ничего не известно
4) Накладываем ограничение на сумму, т.к. значения меньшие МинимальнаяСуммаЗадолженности все-равно пройдут и без соединения.

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

СГРУППИРОВАТЬ ПО
    ЛимитыКредиторскойЗадолженности.Договор
Имеющие
СУММА(ЛимитыКредиторскойЗадолженности.Сумма) > &МинимальнаяСуммаЗадолженности
Индексировать по Договор;

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

Оффлайн AQR

  • *
  • Сообщений: 35
  • РЕПУТАЦИЯ: 2
  • КПД: 6%
  • Регистрация: 2013-03-12
  • Сайт: 
  • Профессия: Программист 1С
Re: Вторник. Вопрос 5
« Ответ #4: 12 Мар 2013, 08:18 »
Вместо вложенного запроса использовать временные таблицы,  Уменьшить набор данных для объединения условиями    ЛимитыКредиторскойЗадолженности.Организация = &Организация И ЛимитыКредиторскойЗадолженности.Сумма < &МинимальнаяСуммаЗадолженност.

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

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

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

Оффлайн Slin

  • Глобальный модератор
  • *****
  • Сообщений: 780
  • РЕПУТАЦИЯ: 247
  • КПД: 32%
  • Game over...
  • Регистрация: 2010-10-13
  • Сайт: 
  • Профессия: Программист 1С
Re: Вторник. Вопрос 5
« Ответ #5: 12 Мар 2013, 08:34 »
Вообще есть подозрение, что надо исправить запрос в плане ошибок, а не оптимизировать. Но, допустим, что так и надо...

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

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

Оптимизация достигается за счёт уменьшения сложности условий отбора и уменьшения исходного набора данных при левом соединении(там же исключается отбор по организации, за счет соединения).
также на заключительном этапе применятся инструкия ОБЪЕДИНИТЬ ВСЕ вместо ОБЪЕДИНИТЬ  для ускорения операции объединения множеств непересекающихся по определению.

P.S. А зачем отдельно информация о полях измерений регистра сведений? лучше бы написали периодический он или нет
skype: slin-dev

Оффлайн soft

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-12
  • Сайт: 
  • Профессия: Программист 1С
Re: Вторник. Вопрос 5
« Ответ #6: 12 Мар 2013, 10:13 »
1 вариант
Поставление товаров и услуг, вместе с условием на вид договора - в отдельную ВТ, проиндексировать ее по контрагенту и договору.
Вложенный запрос - к регистру сведений - так же в ВТ, так же проиндексировать по Контрагенту и Договору, условие на организацию - оставить в ВТ.
Объединяем 2 ВТ по контрагенту и договору - накладываем условие на сумму.

2 вариант
Вложенный запрос у нас только ради суммы - сама по себе сумма тут достаточно странно выглядит - это регистр сведений, зачем мы его суммируем - не очень понятно. Если складываем краткосрочный и долгосрочный лимит, то зачем нам тогда такое измерение, которым мы не пользуемся(не делим лимит на один и другой - тут скорее всего надо брать жестко только краткосрочную).
В общем, если сумма нам по логике все же не нужна, то можно ПТУ объединить напрямую с регистром сведений, но в условие объединения добавить организацию (чтобы нормально использовался индекс регистра).
Хотя в любом случае 1 вариант будет поинтереснее.


Оффлайн SlazZy

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

По логике запроса требуется выбрать лимиты задолженности, поэтому я убрал лишние поля выборки из регистра, они должны совпадать с полями документа, поэтому делаем связь таблиц по трем измерениям регистра, и выбираем всего 2 поля - сумма и ТипЗадолженности. В этом случае группировка тоже не имеет смысла, тк мы делаем запрос по полной комбинации полей, как следствие дублей в итоговой таблице быть не может: Комбинация ТипЗадолженности - Сумма, всегда будет уникальна.
И немного убрал избыточность условий (ПоступлениеТоваровИУслуг.Договор.ДоговорСПодрядчиком = ИСТИНА) -> (ПоступлениеТоваровИУслуг.Договор.ДоговорСПодрядчиком).

Оффлайн Alex_k

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

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

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

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

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

Оффлайн sivalor

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-03-11
  • Сайт: 
  • Профессия: Программист 1С
Re: Вторник. Вопрос 5
« Ответ #9: 12 Мар 2013, 10:27 »
При использовании временных таблиц велика вероятность выбора СУБД неоптимального плана, так что следует использовать
временные таблицы.
Отбор по виду договоров перенесен в условия соединения с этим справочником, для отбора на этапе соединения.

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

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

ГДЕ
(ПоступлениеТоваровИУслуг.Сумма < &МинимальнаяСуммаЗадолженности  ИЛИ
ПоступлениеТоваровИУслуг.Сумма < ЕстьNull(ЛимитыКредиторскойЗадолженности.Сумма,0)) 


Теги:
 


* Реклама

* Поиск

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

* Реклама

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
135 Сообщений
ilyay ilyay
63 Сообщений
AIFrame
63 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
41 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
27 Сообщений
alexandr_ll
23 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal