Имя: Пароль:
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
Обычно нужно по движениям документа запросы делать.
Во вторых Есть ли индекс по НачалоДействия
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn