Вопрос по запросу SQL

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

tolctiy
Посетитель
Сообщения: 47
Зарегистрирован: 07 дек 2009, 12:46

Вопрос по запросу SQL

Сообщение tolctiy »

Добрый день. Задача состоит в том, чтобы выбрать все приходы от контрагентов с учетом счетов, субсчетов дебита/кредита. Написали запрос в SQL, но почему-то выгружаются только данные по 1-му счету 201.10, а по остальным нехочет:
select katmol.kod,katpodr.kod,katorg.name,katsopr.nsopr,BASEDOC.NODOC, sklorder.norder,katpodr.name,OBOROT.DBSCHETO,OBOROT.SUBOSSCH,oborot.krschetk,
katmc.name, katmc.barkod, kated.abbr, sporder.kol,oborot.kol,oborot.sumob, katmc.cenamc,SPORDER.RSRPRICE,spsopr.price
from oborot, katmc, katsopr, sporder, soprhoz, spsopr, katpodr,katorg,sklorder,kated, katmol,spstep,stepdoc,basedoc
where
((Date(4,1,2010)==katsopr.dopr and
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
word(101)==soprhoz.tidkgal and
katsopr.nrec/==soprhoz.csoprdoc and
katsopr.corg /== katorg.nrec and
katsopr.CPODRTO == katpodr.nrec and
katsopr.nrec == sklorder.csopr and
sklorder.cmol == katmol.nrec and
soprhoz.nrec/==oborot.csoprhoz and
katsopr.cstepdoc == spstep.nrec and
spstep.CSTEPDOC == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
oborot.ced == kated.nrec and
spsopr.cmcusl == oborot.kauos[4](noindex) and
oborot.kauos[4]==katmc.nrec ));

В чем тут загвоздка? Или подскажите, пожалуйста, как вообще решить такую задачу, никогда еще с проводками не работали.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

э... а почему бы запрос не построить напрямую от проводок?
проводки надо фильтровать по плану счетов. ну да ладно

не верно
katsopr.cstepdoc == spstep.nrec
верно
katsopr.cstepdoc == stepdoc.nrec
and stepdoc.cbasedoc == basedoc.nrec

только на фига вам ДО?

и вообще, я что-то с трудом понимаю, что должен делать запрос? :)
tolctiy
Посетитель
Сообщения: 47
Зарегистрирован: 07 дек 2009, 12:46

Сообщение tolctiy »

Запрос должен выводить все проводки по документу. По крайней мере так надо сделать. Подскажи как напрямую от проводок?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Код: Выделить всё

    myPlan            == oborot.cplanssch
and dbeg             <<= oborot.datob
and dend             >>= oborot.datob
этот запрос выдаст вам проводки за весь период по определенному плану счетов. по всем документам. если нужно по конкретному типу документов - можно добавить тип в запрос

Код: Выделить всё

    myPlan            == oborot.cplanssch
and dbeg             <<= oborot.datob
and dend             >>= oborot.datob
and myTidk           == oborot.tidk (noindex)
а можно просто в момент цикла отсекать по условию всё не нужное и брать только то что нужно вам.
tolctiy
Посетитель
Сообщения: 47
Зарегистрирован: 07 дек 2009, 12:46

Сообщение tolctiy »

Подскажите почему запрос за 2-ет значения:
select katmol.kod,katpodr.kod,katorg.name,katsopr.nsopr,BASEDOC.NODOC, sklorder.norder,katpodr.name,OBOROT.DBSCHETO,OBOROT.SUBOSSCH,oborot.krschetk,
kated.abbr, sporder.kol,oborot.kol,oborot.sumob, SPORDER.RSRPRICE,spsopr.price,katmc.barkod
from oborot, katsopr, sporder, soprhoz, spsopr, katpodr,katorg,sklorder,kated, katmol,spstep,stepdoc,basedoc,katmc
where
((Date(4,1,2010)==katsopr.dopr and
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
sporder.cmc ==katmc.nrec and
word(101)==soprhoz.tidkgal and
katsopr.nrec/==soprhoz.csoprdoc and
katsopr.corg /== katorg.nrec and
katsopr.CPODRTO == katpodr.nrec and
katsopr.nrec == sklorder.csopr and
sklorder.cmol == katmol.nrec and
soprhoz.nrec/==oborot.csoprhoz and
katsopr.cstepdoc == spstep.nrec and
spstep.CSTEPDOC == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
oborot.ced == kated.nrec ));
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Не на 2 и более регистра случайно документ проведен ?
tolctiy
Посетитель
Сообщения: 47
Зарегистрирован: 07 дек 2009, 12:46

Сообщение tolctiy »

Вроде нет. Проверяю проводки их всего 5-ть, в запросе получается 10-ть.
tolctiy
Посетитель
Сообщения: 47
Зарегистрирован: 07 дек 2009, 12:46

Сообщение tolctiy »

Извиняюсь, как понять что 2-а или более регистра?
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

oborot.cplanssch

Вообще сужайте выборку до spsopr и идите потихоньку "вниз",раскоментируя подцепки, постепенно, и поля соотвеств. Анализируйте как на каком этпае что выводится. На каком то этапе поймете где задваивается )
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

:) если честно, разбираться лень, но почти уверен на 100% что вы мой вариант с проводками отмели
а задвоение может быть по причине неверно составленной логической таблице. вы смотрите результат одной, бегая по другой.
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

В нормальном SQL задвоение возникает при left outer join, если в таблице подцепляемой есть два одинаковых кода. Ну скажем в справочник влепили два одинаковых кода. В галактическом SQL, вроде как, левому джоину соответствует мягкая сцепка. Правильно вам советуют: сужайте выборку и добавляйте подцепки до появления задвоения. А дальше думать разбиратса.
У вас например может быть так: есть одна проводка и две позиции спецификации накладной, при сцепке мы получим две записи. Все логично.
tolctiy
Посетитель
Сообщения: 47
Зарегистрирован: 07 дек 2009, 12:46

Сообщение tolctiy »

Подскажите как избавится од этой проблемы.
select katmol.kod,katpodr.kod,katorg.name,katsopr.nsopr,oborot.datob,BASEDOC.NODOC, sklorder.norder,katpodr.name,
OBOROT.DBSCHETO,OBOROT.SUBOSSCH,oborot.krschetk,kated.abbr, sporder.kol,oborot.kol,oborot.sumob, SPORDER.RSRPRICE,katmc.barkod
from oborot,soprhoz,katsopr,katorg,katpodr,sklorder,stepdoc,basedoc,sporder,kated,katmc
where
(((myPlan) == oborot.cplanssch and
Date(4,1,2010)==oborot.datob and
word(101) == oborot.tidk (noindex) and
oborot.csoprhoz /== soprhoz.nrec and
soprhoz.csoprdoc == katsopr.nrec and
sporder.cmc ==katmc.nrec and
katsopr.corg == katorg.nrec and
katsopr.CPODRTO == katpodr.nrec and
katsopr.nrec == sklorder.csopr and
sklorder.cmol == katmol.nrec and
katsopr.cstepdoc == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
oborot.ced == kated.nrec and
sporder.cmc ==katmc.nrec ));

Добавляю к запросу эти подцепки:
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
удваивает проводки , но данные выводит все;

Добавляю эти:
katsopr.nrec == sporder.CSPSOPR and
sporder.nrec == spsopr.cspsopr and
проводки не задваивает, но значение полей: SPORDER.RSRPRICE, katmc.barkod -забывает символами "?" и данных не выводит.
Подскажите как избавится од этого?
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

tolctiy писал(а):...доабавляю к запросу эти подцепки:
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
удваивает проводки , но данные выводит все;...
У Вас сколько позиций spsopr и оборот в конкретной накладной ?
На каждую позицию МЦ просто будет выводится n nроводок из оборот к конкретному документу...

tolctiy писал(а): Добавляю эти:
katsopr.nrec == sporder.CSPSOPR and
sporder.nrec == spsopr.cspsopr and
проводки не задваивает, но значение полей: SPORDER.RSRPRICE, katmc.barkod -забывает символами "?" и данных не выводит.
Подскажите как избавится од этого?
sporder.CSPSOPR, насколько я помню, ссылается на spsopr.nrec
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

у вас проводки к накладной идут в разрезе спецификаций?

есть ли аналитика по МЦ?
если нет - то вы никак не свяжете напрямую проводку к конкретной позиции документа.
(хотя мы баркод выгружали в поле содержание проводки и по нему уже позиционировались для выгрузки той же цены складской).
tolctiy
Посетитель
Сообщения: 47
Зарегистрирован: 07 дек 2009, 12:46

Сообщение tolctiy »

Позиций по накладной 2-е и когда привязываю ТХО идет 5-ть проводок.

Проводки к накладной идут в разрезе спецификаций, аналитика по МЦ в роди есть(если я правильно ее посмотрел. Ее смотреть в настройке самой ТХО(провобки)?).
Ответить