SQL-ный подход



Posted by Рустем Мухаметшин on June 13, 1999 at 10:12:18:

In Reply to: Как уже сейчас можно динамически формулировать оператор поиска posted by Аркадий Водяник on June 11, 1999 at 11:32:06:

    Динамическое создание новых отчетных форм это конечно нечто. Ну а стандартным путем все же желательнее. Тот же пример, но немножко другими словами:

* Фоpма-использовыватель динамического запроса
FName=[strip [is 'имя>',' ',10]]
SName=[strip [is 'фамилия>', ' ',10]]
Number=[strip [is 'номеp>',' ',10]]
Request='search Имя '
If FName > ' '
  Request=Request+'FName  Фамилия '
Else
  Request=Request+'?FName Фамилия '
EndIf
If SName > ' '
  Request=Request+'SName  Номер '
Else
  Request=Request+'?SName Номер '
EndIf
If Number > ' '
  Request=Request+'Number'
Else
  Request=Request+'?Number'
EndIf
If DL=0 DL=31;EndIf
Rewind Facts Range MF+DF/100, ML+DL/100
:Next
  FactsRequestExecute Request
  If [success]=0
    GoTo Exit
  EndIf
Используем здесь результаты поиска.
        В том случае если запрос содержал ? используем соответсвующие переменные содержащие результат.
  DT=[fact_d]+'.'+[fact_m]
  [Print DT,' ',FName,' ',SName,' ',Number]
GoTo Next
:Exit
Stop
* Конец формы

    Некоторое расширение синтаксиса языка прошу не рассматривать всерьез :).  А вот оператор названный FactsRequestExecute это то что надо. А вот другой пример, более сложного использовывания динамического запроса. В данном случае ценность не в динамичности, а в SQL-ности:

* Форма с поиском по двум прототипам
Request='search Факт1 ?A;search Факт2 ?B'
If DL=0 DL=31;EndIf
Rewind Facts Range MF+DF/100, ML+DL/100
:Next
  FactsRequestExecute Request
  If [success]=0
    GoTo Exit
  EndIf
Используем здесь результаты поиска.
        В том случае если запрос содержал ? используем соответсвующие переменные содержащие результат.
  If       [fact_n]=1
    Найден первый факт. Переменная A имеет значение ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^A
  ElseIf [fact_n]=2
    Найден второй  факт. Переменная B имеет значение ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^B
  EndIf
GoTo Next
:Exit
В этой форме содержиться весьма полезная конструкция поиска по ленте фактов. Не секрет что это не единственная из подобно необходимых. Я не силен в SQL, но можно еще много чего придумать. Это и будет настоящей оптимизацией поиска в сложных отчетах.
Stop
* Конец формы



Пpишедшие ответы: