Исполнение лимита по ЛЗК

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

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

Ответить
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Исполнение лимита по ЛЗК

Сообщение Marisha_P »

Здравствуйте! Помогите, пожалуйста, разобраться.
Есть отчет по исполнению лимита, в котором есть вот такой запрос:

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

select * from stepdoc(readonly),basedoc(readonly), SaldoMC (ReadOnly), Attrval(ReadOnly)
,spstep(readonly),spsopr(readonly),katmc(readonly), SpOrder (ReadOnly), AttrNam(ReadOnly),
AttrVal AttrValEc (ReadOnly), AttrNam AttrNamEc (ReadOnly)

where ((
comp(NRec_DO)==stepdoc.cbasedoc
and stepdoc.nrec==spstep.cstepdoc
and mcbar == katmc.barkod
and mcname == katmc.name
and katmc.nrec==spstep.cmcusl
and spstep.nrec==spsopr.cspstep
and 501 == spsopr.vidsopr (noindex)
and SpSopr.nrec == SpOrder.cspsopr
and '01_Склад отгрузки' ==Attrnam.name
and word(1104)  == Attrnam.wtable
and word(1104)  == AttrVal.wtable
and SpStep.nrec == AttrVal.crec
and Attrnam.nrec  ==Attrval.cattrnam

and '01_Отв. Экономист ОМТС' ==AttrnamEc.name
and word(1104)  == AttrnamEc.wtable
and word(1104)  == AttrValEc.wtable
and SpStep.nrec == AttrValEc.crec
and AttrnamEc.nrec  ==AttrvalEc.cattrnam
));
Мне нужно дополниьть данные отчет, накладными типа 602... И проблема в том, что для данных накладных связи

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

and spstep.nrec==spsopr.cspstep
нет. Значения заполнены нулями.
Попробовала написать запрос без этой связи, чтоб найти накладные. Получилось

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

select katsopr.nsopr from katsopr,spsopr
where ((
      comp(NRec_DO)====stepdoc.cbasedoc
  and stepdoc.nrec==katsopr.cstepdoc
  and katsopr.nrec/==spsopr.Csopr
  and katmc.nrec /== spsopr.cmcusl
  and mcname == katmc.name
  and mcbar ==katmc.barkod
  and katsopr.cnazna==katnazna.nrec
  ));     
а Как сделать, чтоб выводились все значения не знаю:(
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Исполнение лимита по ЛЗК

Сообщение Zver »

попробуйте поменять порядок таблиц в записи связей:

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

comp(NRec_DO)====stepdoc.cbasedoc
  and stepdoc.nrec==katsopr.cstepdoc
  and katsopr.nrec/==spsopr.Csopr
  and spsopr.cmcusl /== katmc.nrec  //Таблица МЦ цепляется к спецификации, а не наоборот
  and mcname == katmc.name
  and mcbar ==katmc.barkod
  and katsopr.cnazna==katnazna.nrec
Программист-самоучка
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Re: Исполнение лимита по ЛЗК

Сообщение Marisha_P »

если привязка наоборот, то ругается, пишет нужен ключ nrec +name+barkod для katmc. я тоже думала, что так правильно.. если как у меня. то привязанные накладные выводит верно.. но проблема не в этом запросе. а в первом. как в него добавить данные по накладным типа 602. если связи по spstep для них нет.
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Исполнение лимита по ЛЗК

Сообщение Zver »

Краткий ликбез. По индексам обращение к БД происходит на порядок быстрее, чем без него.
Самый быстрый индекс любой таблицы - первичный ключ, в Галактике это поле обозначается nRec.
Галактионы, в отличие от желто-красных, заботятся о производительности создаваемых приложений и если обращение к таблице происходит не по индексу,
то это рассматривается как ошибка.

Все остальные поля, которые не индексные, надо подцеплять с указанием того, что в индекс они не входят.

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

comp(NRec_DO)====stepdoc.cbasedoc
  and stepdoc.nrec==katsopr.cstepdoc
  and katsopr.nrec/==spsopr.Csopr
  and spsopr.cmcusl /== katmc.nrec  //Таблица МЦ цепляется к спецификации, а не наоборот
  and mcname == katmc.name (noindex)
  and mcbar ==katmc.barkod (noindex)
  and katsopr.cnazna==katnazna.nrec
Программист-самоучка
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Re: Исполнение лимита по ЛЗК

Сообщение Marisha_P »

спасибо! с этим разобралась... а как эти накладные в первый запрос добавить?
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Исполнение лимита по ЛЗК

Сообщение Maverick »

Ну, если последний запрос - это для одного типа док-тов, а первый для другого, то наверное в Select добавить синонимы по накладной , ее спецификации, каталога МЦ, ну и первый запрос дополнить последним, заменив katsopr, spsopr и другие дубли таблиц на синонимы.
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Ответить