День добрый.
Есть запрос, его задачей является отбор документов за период с критерием отбора по дате, рассчитываемой как максимальная дата из
двух дат в документ.
&НачДата и &КонДата - Определяют период отбора
МАХ(Документ.Дата и Документ.НачалоДействия) - Критерий отбора
Максимум из двух дат должен оказаться в периоде отбора.
Вот собственно сам запрос...
ВЫБРАТЬ
Документ.Ссылка,
Документ.Платеж
ИЗ
Документ.Документ КАК Документ
ГДЕ
Документ.Организация = &Организация
И &НачДата <= ВЫБОР
КОГДА Документ.Дата > Документ.НачалоДействия
ТОГДА Документ.Дата
ИНАЧЕ Документ.НачалоДействия
КОНЕЦ
И ВЫБОР
КОГДА Документ.Дата > Документ.НачалоДействия
ТОГДА Документ.Дата
ИНАЧЕ Документ.НачалоДействия
КОНЕЦ <= &КонДата
Но что-то смущает, особенно фрагмент кода который повторяется дважды... Можно ли как-то оптимизировать этот запрос, чтобы и работал быстрее и читался красивее???...
ВЫБРАТЬ
Документ.Ссылка,
Документ.Платеж
ИЗ
Документ.Документ КАК Документ
ГДЕ
Документ.Организация = &Организация
И ВЫБОР
КОГДА Документ.Дата > Документ.НачалоДействия ТОГДА Документ.Дата
ИНАЧЕ Документ.НачалоДействия
КОНЕЦ МЕЖДУ &НачДата И &КонДата
Обычно нужно по движениям документа запросы делать.
Во вторых Есть ли индекс по НачалоДействия
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший