Пример запроса выдающего журнал документов, с фильтрами. Запрос определяет сущность формы. Кроме этого запроса на форме есть еще один, для режима поиска конкретного документа по параметрам. Поля те же самые но условия задаются по другому. Можно было вструмить те условия и в этот запрос но тогда пострадала бы читаемость запроса.
-- FrmDocs.QSel -- Журнал складских документов -- select bdok.id as id, iif (bdok.lck = 1, 'Б', '') as lck, bdok.sf_d as sf_d, bdok.sf_n as sf_n, bdok.io as io, bdok.ndok as ndok, bdok.data as data, bdok.type_ as type_, bdok.idpost as idpost, iif(oper < 10 , '', 'возврат' ) as ret, iif(idpost >= 0 , '', 'перемещение') as mov, post.name || iif((post.gorod = ''), '', ' (' || post.gorod || ')' ) as post_full_name, bdok.summ_w_nds as summ_w_nds, bdok.msg as msg, -- (select count(*) from logprd where (logprd.id_bdok = bdok.id)) as prn_count, -- сколько раз распечатывался документ -- iif (bdok.io in ('t', 'f'), 'S', '') as ROW_FONTSTYLE, -- перечеркнем удаленные доки iif(idpost >= 0 , '', 'BLUE' ) as ROW_COLOR -- выделим перемещения синим шрифтом
from bdok left join spost post on (post.id = bdok.idpost)
where ((bdok.data >= :data1 ) or (bdok.type_ = 1) or (bdok.reserve = 1)) -- по дате будем фильтровать только закрытые документы. А открытые и резервы - целиком, -- иначе там набирается куча по жизни незакрытых документов and (bdok.nsklad = :nsklad) and (bdok.io = :io ) and (bdok.type_ = :type_ ) and ((post.idagent = :idagent) or (:idagent = -1)) and ((bdok.reserve = :reserve) or (:reserve = -1))
no subject
Запрос определяет сущность формы.
Кроме этого запроса на форме есть еще один, для режима поиска конкретного документа по параметрам.
Поля те же самые но условия задаются по другому. Можно было вструмить те условия и в этот запрос но тогда пострадала бы читаемость запроса.
-- FrmDocs.QSel
-- Журнал складских документов
--
select
bdok.id as id,
iif (bdok.lck = 1, 'Б', '') as lck,
bdok.sf_d as sf_d,
bdok.sf_n as sf_n,
bdok.io as io,
bdok.ndok as ndok,
bdok.data as data,
bdok.type_ as type_,
bdok.idpost as idpost,
iif(oper < 10 , '', 'возврат' ) as ret,
iif(idpost >= 0 , '', 'перемещение') as mov,
post.name || iif((post.gorod = ''), '', ' (' || post.gorod || ')' )
as post_full_name,
bdok.summ_w_nds as summ_w_nds,
bdok.msg as msg,
--
(select count(*) from logprd where (logprd.id_bdok = bdok.id)) as prn_count, -- сколько раз распечатывался документ
--
iif (bdok.io in ('t', 'f'), 'S', '') as ROW_FONTSTYLE, -- перечеркнем удаленные доки
iif(idpost >= 0 , '', 'BLUE' ) as ROW_COLOR -- выделим перемещения синим шрифтом
from bdok
left join spost post on (post.id = bdok.idpost)
where ((bdok.data >= :data1 ) or (bdok.type_ = 1) or (bdok.reserve = 1))
-- по дате будем фильтровать только закрытые документы. А открытые и резервы - целиком,
-- иначе там набирается куча по жизни незакрытых документов
and (bdok.nsklad = :nsklad)
and (bdok.io = :io )
and (bdok.type_ = :type_ )
and ((post.idagent = :idagent) or (:idagent = -1))
and ((bdok.reserve = :reserve) or (:reserve = -1))
order by
data, idpost