Подскажите пожалуйста, как правильно написать на галактическом SQL в условии отбора записей, чтобы поле OBOROT.CSOPRDOC равнялось либо полю PLPOR.NREC либо BASEFIN.NREC?
Следующий вариан не проходит:
select
...
where
(((OBOROT.CSOPRDOC==PLPOR.NREC AND
OBOROT.KAUKS[1]==KATORG.NREC AND
OBOROT.KAUKS[2]==BASEDOC.NREC) OR
OBOROT.CSOPRDOC==BASEFIN.NREC
)) AND
(OBOROT.KRSCHETK='62' AND OBOROT.SUBSCHK='07')
!Представление T1 содержит данные, относящиеся к оборотам по кредиту сч.62.07 за период c T1.d1 по T1.d2
.create view T1
var
d1: date
d2: date
as select *
from OBOROT, PLPOR, KATORG, BASEDOC,
where
((OBOROT.CSOPRDOC/==PLPOR.NREC AND
OBOROT.KAUKS[1]=KATORG.NREC AND
OBOROT.KAUKS[2]=BASEDOC.NREC)) AND
(OBOROT.KRSCHETK='62' AND OBOROT.SUBSCHK='07')
AND OBOROT.DATOB>=T1.d1
AND OBOROT.DATOB<=T1.d2
ORDER BY
T1.OBOROT.DATOB,
T1.PLPOR.NODOK,
T1.KATORG.NAME,
T1.BASEDOC.NODOC ;
Здесь по таблице проводок (Oborot) вытаскиваются данные из платежных документов (Plpor) по условию OBOROT.CSOPRDOC/==PLPOR.NREC (по сслыке на документ).
Но дело в том, OBOROT.CSOPRDOC не всегда ссылается на PLPOR, иногда в нужных проводках ссылка идет на BASEFIN.
То есть, теперь надо, чтоб OBOROT.CSOPRDOC был связан не только c PLPOR.NREC, но и с Basefin.Nrec (типа если нет в плпоре, то смотреть в бейсфине).
Смотрите поля tidk & tidkgal в oborot
И вообще, может я и ошибаюсь, но вроде csoprdoc -ссылка на первичный документ (счет, накладная, платежка, бухсправка и т.п.)
Таблица проводок вроде как не должна ссылаться на таблицу разноски basefin
Ссылается (во всяком случае для 7.12) - я проверила ... по акту взаимозачета (oborot.tidk=71) oborot.csoprdoc ссылается на basefin.nrec, и уже в этой записи basefin есть ссылка на plpor.nrec (cPlpor), а в plpor.tidk этогог самого акта уже 70
Я года 2 назад писала Книгу доходов/расходов по УСНО - тоже собирала по проводкам документы - во временную таблицу собирала по разным типам записей.
Это дело реализовала несколькими интерфейсами: в каждом интерфейсе отбирался свой тип данных.
Вот например мои выборки:
из KatSopr:
....SELECT *
FROM Oborot, KatSopr, KatOrg, KatPodr, SYNONYM KatPodr KatPodrTo, HozOper, SpKau, TMP_n
WHERE ((
ROOT==Oborot.Nrec
and '3300'==Oborot.SchetK
and d1<<=Oborot.DatOb
and d2>>=Oborot.DatOb
and Oborot.cSoprDoc==KatSopr.Nrec
and KatSopr.cOrg==KatOrg.Nrec
and KatSopr.cPodrFrom==KatPodr.Nrec
and KatSopr.cPodrTo==KatPodrTo.Nrec
and Oborot.cHozOper==HozOper.Nrec
and Oborot.KAUOS[1]==SpKau.Nrec
and ROOT==TMP_n.NN_Nrec
and MyTidkGal==TMP_n.NN_TidkGal
and MycSoprDoc==TMP_n.NN_cSoprDoc
and MyKau==TMP_n.NN_Kau
))
and (101=Oborot.TidkGal
OR 102=Oborot.TidkGal
OR 103=Oborot.TidkGal
OR 106=Oborot.TidkGal
OR 201=Oborot.TidkGal
OR 202=Oborot.TidkGal
OR 203=Oborot.TidkGal
OR 204=Oborot.TidkGal
OR 206=Oborot.TidkGal
OR 111=Oborot.TidkGal
OR 211=Oborot.TidkGal
OR 151=Oborot.TidkGal
OR 251=Oborot.TidkGal
OR 501=Oborot.TidkGal
OR 502=Oborot.TidkGal
OR 503=Oborot.TidkGal
OR 504=Oborot.TidkGal
OR 505=Oborot.TidkGal
OR 506=Oborot.TidkGal
OR 508=Oborot.TidkGal
OR 511=Oborot.TidkGal
OR 512=Oborot.TidkGal
OR 513=Oborot.TidkGal
OR 521=Oborot.TidkGal
OR 522=Oborot.TidkGal
OR 523=Oborot.TidkGal
OR 532=Oborot.TidkGal
OR 533=Oborot.TidkGal
OR 535=Oborot.TidkGal
OR 600=Oborot.TidkGal
OR 601=Oborot.TidkGal
OR 602=Oborot.TidkGal
OR 603=Oborot.TidkGal
OR 604=Oborot.TidkGal
OR 605=Oborot.TidkGal
OR 611=Oborot.TidkGal
OR 612=Oborot.TidkGal
OR 620=Oborot.TidkGal
OR 621=Oborot.TidkGal
OR 622=Oborot.TidkGal
OR 623=Oborot.TidkGal
OR 624=Oborot.TidkGal
OR 625=Oborot.TidkGal
OR 700=Oborot.TidkGal)
;
из PLPor:
SELECT *
FROM Oborot, PlPor, KatOrg, SYNONYM KatOrg KatOrgPlat, SYNONYM KatOrg KatOrgPol, Persons, SpKau, HozOper, TMP_n
WHERE ((
ROOT==Oborot.Nrec
and '3300'==Oborot.SchetK
and d1<<=Oborot.DatOb
and d2>>=Oborot.DatOb
and Oborot.cSoprDoc==PlPor.Nrec
and PlPor.cPLatNew==KatOrg.Nrec // контрагент, за которого платили
and PlPor.cPLat==KatOrgPlat.Nrec // плательщик
and PlPor.cPol==KatOrgPol.Nrec // получатель
and PlPor.cPersons==Persons.Nrec // получатель
and Oborot.cHozOper==HozOper.Nrec
and Oborot.KAUOS[1]==SpKau.Nrec
and ROOT==TMP_n.NN_Nrec
and MyTidkGal==TMP_n.NN_TidkGal
and MycSoprDoc==TMP_n.NN_cSoprDoc
and MyKau==TMP_n.NN_Kau
))
and (1=Oborot.TidkGal
OR 2=Oborot.TidkGal
OR 3=Oborot.TidkGal
OR 4=Oborot.TidkGal
OR 5=Oborot.TidkGal
OR 6=Oborot.TidkGal
OR 7=Oborot.TidkGal
OR 8=Oborot.TidkGal
OR 9=Oborot.TidkGal
OR 10=Oborot.TidkGal
OR 11=Oborot.TidkGal
OR 17=Oborot.TidkGal
OR 18=Oborot.TidkGal
OR 21=Oborot.TidkGal
OR 22=Oborot.TidkGal
OR 27=Oborot.TidkGal
OR 30=Oborot.TidkGal
OR 31=Oborot.TidkGal
OR 32=Oborot.TidkGal
OR 33=Oborot.TidkGal
OR 37=Oborot.TidkGal
OR 38=Oborot.TidkGal
OR 39=Oborot.TidkGal
OR 70=Oborot.TidkGal
OR 1004=Oborot.TidkGal
OR 1005=Oborot.TidkGal
OR 1011=Oborot.TidkGal
OR 1030=Oborot.TidkGal
OR 1032=Oborot.TidkGal)
;
по векселям:
SELECT *
FROM Oborot, AppVeks, KatOrg, SYNONYM KatOrg KatOrgZa, HozOper, SpKau, TMP_n
WHERE ((
ROOT==Oborot.Nrec
and '3300'==Oborot.SchetK
and d1<<=Oborot.DatOb
and d2>>=Oborot.DatOb
and Oborot.cSoprDoc==AppVeks.Nrec
and AppVeks.cOrg==KatOrg.Nrec // контрагент
and AppVeks.cNRez==KatOrgZa.Nrec // за кого платеж
and Oborot.cHozOper==HozOper.Nrec
and Oborot.KAUOS[1]==SpKau.Nrec
and ROOT==TMP_n.NN_Nrec
and MyTidkGal==TMP_n.NN_TidkGal
and MycSoprDoc==TMP_n.NN_cSoprDoc
and MyKau==TMP_n.NN_Kau
))
and (81=Oborot.TidkGal
OR 82=Oborot.TidkGal
OR 83=Oborot.TidkGal
OR 84=Oborot.TidkGal
OR 85=Oborot.TidkGal
OR 86=Oborot.TidkGal
OR 87=Oborot.TidkGal
OR 88=Oborot.TidkGal
OR 89=Oborot.TidkGal)
;
по книге покупок:
SELECT *
FROM Oborot, BookPrZk, KatOrg, HozOper, SpKau, TMP_n
WHERE ((
ROOT==Oborot.Nrec
and '3300'==Oborot.SchetK
and d1<<=Oborot.DatOb
and d2>>=Oborot.DatOb
and Oborot.cSoprDoc==BookPrZk.Nrec
and BookPrZk.cOrg==KatOrg.Nrec
and Oborot.cHozOper==HozOper.Nrec
and Oborot.KAUOS[1]==SpKau.Nrec
and ROOT==TMP_n.NN_Nrec
and MyTidkGal==TMP_n.NN_TidkGal
and MycSoprDoc==TMP_n.NN_cSoprDoc
and MyKau==TMP_n.NN_Kau
))
and (74=Oborot.TidkGal
OR 75=Oborot.TidkGal
OR 76=Oborot.TidkGal
OR 77=Oborot.TidkGal)
;
по счетам - фактурам:
SELECT *
FROM Oborot, SchFact, KatOrg, HozOper, SpKau, TMP_n
WHERE ((
ROOT==Oborot.Nrec
and '3300'==Oborot.SchetK
and d1<<=Oborot.DatOb
and d2>>=Oborot.DatOb
and Oborot.cSoprDoc==SchFact.Nrec
and SchFact.cOrg==KatOrg.Nrec
and Oborot.cHozOper==HozOper.Nrec
and Oborot.KAUOS[1]==SpKau.Nrec
and ROOT==TMP_n.NN_Nrec
and MyTidkGal==TMP_n.NN_TidkGal
and MycSoprDoc==TMP_n.NN_cSoprDoc
and MyKau==TMP_n.NN_Kau
))
and (72=Oborot.TidkGal
OR 73=Oborot.TidkGal)
;
по основным средствам:
SELECT *
FROM Oborot, SpMove, HozOper, SpKau, TMP_n
WHERE ((
ROOT==Oborot.Nrec
and '3300'==Oborot.SchetK
and d1<<=Oborot.DatOb
and d2>>=Oborot.DatOb
and Oborot.cSoprDoc==SpMove.Nrec
and Oborot.cHozOper==HozOper.Nrec
and Oborot.KAUOS[1]==SpKau.Nrec
and ROOT==TMP_n.NN_Nrec
and MyTidkGal==TMP_n.NN_TidkGal
and MycSoprDoc==TMP_n.NN_cSoprDoc
and MyKau==TMP_n.NN_Kau
))
and (15=Oborot.TidkGal
OR 16=Oborot.TidkGal)
;
по приходу МБП:
SELECT *
FROM Oborot, MbpIn, KatOrg, KatPodr, SYNONYM KatPodr KatPodrTo, HozOper, SpKau, TMP_n
WHERE ((
ROOT==Oborot.Nrec
and '3300'==Oborot.SchetK
and d1<<=Oborot.DatOb
and d2>>=Oborot.DatOb
and Oborot.cSoprDoc==MbpIn.Nrec
and MbpIn.cOrg==KatOrg.Nrec
and MbpIn.cPodrF==KatPodr.Nrec
and MbpIn.cPodr==KatPodrTo.Nrec
and Oborot.cHozOper==HozOper.Nrec
and Oborot.KAUOS[1]==SpKau.Nrec
and ROOT==TMP_n.NN_Nrec
and MyTidkGal==TMP_n.NN_TidkGal
and MycSoprDoc==TMP_n.NN_cSoprDoc
and MyKau==TMP_n.NN_Kau
))
and (12=Oborot.TidkGal
OR 20=Oborot.TidkGal
OR 28=Oborot.TidkGal
OR 80=Oborot.TidkGal
OR 704=Oborot.TidkGal)
;
по расходу МБП:
SELECT *
FROM Oborot, MbpOut, KatOrg, KatPodr, SYNONYM KatPodr KatPodrTo, HozOper, SpKau, TMP_n
WHERE ((
ROOT==Oborot.Nrec
and '3300'==Oborot.SchetK
and d1<<=Oborot.DatOb
and d2>>=Oborot.DatOb
and Oborot.cSoprDoc==MbpOut.Nrec
and Oborot.cHozOper==HozOper.Nrec
and Oborot.KAUOS[1]==SpKau.Nrec
and ROOT==TMP_n.NN_Nrec
and MyTidkGal==TMP_n.NN_TidkGal
and MycSoprDoc==TMP_n.NN_cSoprDoc
and MyKau==TMP_n.NN_Kau
))
and (13=Oborot.TidkGal
OR 19=Oborot.TidkGal
OR 29=Oborot.TidkGal
OR 703=Oborot.TidkGal)
;
Ссылается (во всяком случае для 7.12) - я проверила ... по акту взаимозачета (oborot.tidk=71) oborot.csoprdoc ссылается на basefin.nrec, и уже в этой записи basefin есть ссылка на plpor.nrec (cPlpor), а в plpor.tidk этогог самого акта уже 70
Возможно я не учел акт взаимозачетов, но это не меняет сути моего поста. Делайте как я написал, к проводке подцепляте все возможные (нужные) вам таблицы и уже в цикле (по проводкам) в зависимости от типа проводки (т.е. смотря какой первичный документ) берите необходимые Вам данные.
Когда-то делал отчет по Дебиторской Задолженности и приходилось "вытягивать" примечания из самих первичных документов, а не из ХозОпераций к этим документам. Для этой цели нарисовал 2 функции.
1-я функция определяет тип документа (таблицу)
2-я - вытаскивает примечание к документу
При этом все необходимые таблицы, как правильно заметил местный житель Алексей, должны быть подцеплены в разделе описания реляционных отношений.