Имя: Пароль:
1C
1С v8
Запрос... оптимизация...
0 Andry_Boris
 
02.02.12
02:06
День добрый.
Есть запрос, его задачей является отбор документов за период с критерием отбора по дате, рассчитываемой как максимальная дата из
двух дат в документ.

&НачДата и &КонДата - Определяют период отбора
МАХ(Документ.Дата и Документ.НачалоДействия) - Критерий отбора
Максимум из двух дат должен оказаться в периоде отбора.
Вот собственно сам запрос...

ВЫБРАТЬ
   Документ.Ссылка,
   Документ.Платеж
ИЗ
   Документ.Документ КАК Документ
ГДЕ
   Документ.Организация = &Организация
   И &НачДата <= ВЫБОР
           КОГДА Документ.Дата > Документ.НачалоДействия
               ТОГДА Документ.Дата
           ИНАЧЕ Документ.НачалоДействия
           КОНЕЦ
   И ВЫБОР
           КОГДА Документ.Дата > Документ.НачалоДействия
               ТОГДА Документ.Дата
           ИНАЧЕ Документ.НачалоДействия
      КОНЕЦ <= &КонДата

Но что-то смущает, особенно фрагмент кода который повторяется дважды... Можно ли как-то оптимизировать этот запрос, чтобы и работал быстрее и читался красивее???...

С уважением, Andry
1 Andry_Boris
 
02.02.12
02:21
Ага... есть вот такое решение...

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

Но может есть ещё варианты... кто знает...
2 Wobland
 
02.02.12
05:43
можно ещё вот здесь: "ИЗ Документ.Документ КАК Документ" сократить: "ИЗ Документ.Документ КАК Д"... чем (1) не нравится?
3 Wobland
 
02.02.12
05:44
тоже мне оптимизация... проведённость у документа не забыл учесть, кстати?
4 kosts
 
02.02.12
06:14
Обычно нужно по движениям документа запросы делать.
Во вторых Есть ли индекс по НачалоДействия