Страница 2 из 2

Re: create view в Глобальной функции

Добавлено: 04 окт 2017, 12:49
Espada
сейчас у меня есть рабочая create view, но из-за noindex она довольна долго отрабатывает. можно ли как-нибудь их обойти?

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

Create view
from spstep, katmc, attrnam, attrval,hdr_ps
where
((
  NrecSpStep == spstep.nrec and
  spstep.cmcusl == katmc.nrec and
  word(1411) == attrnam.wtable (noindex) and
  '281474976710823' == attrnam.nrec and
  word(1411) == attrval.wtable and
  katmc.nrec == attrval.crec and
  attrnam.nrec == attrval.cattrnam and
  attrval.vcomp == hdr_ps.cizd(noindex)and
  word(1) == HDR_PS.ACTIVE(noindex)
));

Re: create view в Глобальной функции

Добавлено: 04 окт 2017, 13:11
m0p3e
Если обращение все равно по nrec, то зачем нужно attrnam тащить в выборку?
И зачем сам nrec в кавычках? лишнее преобразование.

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

Create view
from spstep, katmc, attrnam, attrval,hdr_ps
where
((
  NrecSpStep == spstep.nrec and
  spstep.cmcusl == katmc.nrec and
  281474976710823 == attrval.cattrnam and
  coKatMc == attrval.wtable and
  katmc.nrec == attrval.crec and
  attrval.vcomp == hdr_ps.cizd(noindex)and
  word(1) == HDR_PS.ACTIVE(noindex)
));
В hdr_ps есть индекс cTypeIzd + cIzd.cTypeIzd неизвестен?

Re: create view в Глобальной функции

Добавлено: 04 окт 2017, 13:30
Espada
m0p3e писал(а):Если обращение все равно по nrec, то зачем нужно attrnam тащить в выборку?
И зачем сам nrec в кавычках? лишнее преобразование.

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

Create view
from spstep, katmc, attrnam, attrval,hdr_ps
where
((
  NrecSpStep == spstep.nrec and
  spstep.cmcusl == katmc.nrec and
  281474976710823 == attrval.cattrnam and
  coKatMc == attrval.wtable and
  katmc.nrec == attrval.crec and
  attrval.vcomp == hdr_ps.cizd(noindex)and
  word(1) == HDR_PS.ACTIVE(noindex)
));
В hdr_ps есть индекс cTypeIzd + cIzd.cTypeIzd неизвестен?
Послушал мнению людей, и понял что использовать обычный текстовый редактор не очень здорово) поставил Vip. Переписал Create view, избавился от одного из noindex

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

Create view
from spstep, katmc, attrnam, attrval,hdr_ps
where
((
  NrecSpStep == spstep.nrec and
  spstep.cmcusl == katmc.nrec and
  word(1411) == attrnam.wtable  and
  'Основная МЦ' == attrnam.name and
  word(1411) == attrval.wtable and
  katmc.nrec == attrval.crec and
  attrnam.nrec == attrval.cattrnam and
  attrval.vcomp == hdr_ps.cizd (noindex) and
  word(1) == HDR_PS.ACTIVE(noindex)
));   
В hdr_ps есть индекс cTypeIzd + cIzd.cTypeIzd неизвестен?
не совсем понял ваш вопрос.

Re: create view в Глобальной функции

Добавлено: 04 окт 2017, 13:54
m0p3e
Если известно значение поля cTypeIzd (видимо ссылка на тип изделия?), то добавление его в выборку позволит избавиться от второго noIndex.
У меня большое подозрение, что cTypeIzd = cgKau_KatMc = 4.

И word(1411) все-таки замените на coKatMc. Глаз режет. :)

Re: create view в Глобальной функции

Добавлено: 04 окт 2017, 14:04
Irina_
Попробуйте для hdr_ps только условия:
and cgKau_KatMc == hdr_ps.cTypeIzd
and attrval.vcomp == hdr_ps.cizd

Re: create view в Глобальной функции

Добавлено: 04 окт 2017, 14:56
Espada
Irina_ писал(а):Попробуйте для hdr_ps только условия:
and cgKau_KatMc == hdr_ps.cTypeIzd
and attrval.vcomp == hdr_ps.cizd
Спасибо) работает)

Re: create view в Глобальной функции

Добавлено: 04 окт 2017, 15:38
Den
Espada писал(а): Спасибо) работает) только я не знаю почему) можете в двух словах рассказать в чём смысл этих строчек?)
Погуглите что то вроде "зачем нужны индексы для таблиц баз данных".

Re: create view в Глобальной функции

Добавлено: 04 окт 2017, 17:28
Irina_
Возможно не совсем корректно напишу, но надеюсь, что суть будет понятна.
В Support открываете карточку таблицы. Внизу есть закладки: «Поля», «Индексы», «Флаги», «Ссылки». На закладке «Индексы» указан перечень и состав индексов к выбранной таблице, заложенный разработчиками. В соответствии с нужным в конкретном случае индексом происходит работа с таблицей: идет поиск, строятся отчеты, делается экспорт и т. д. Когда Вы пишите view, Вы указываете условия на значения полей нужных таблиц. И вот для каких полей надо наложить условия и какие условия — надо смотреть на перечень доступных индексов и состав их сегментов. В Вашем случае Вам обязательно нужно было условие на МЦ (hdr_ps.cizd). Т.о. Вам надо посмотреть индексы к таблице Hdr_ps, в качестве сегмента у которых используется Cizd, и дополнительные условия надо указывать на ВСЕ поля, которые указаны в качестве сегментов до нужного Вам сегмента. Вам может подойти например индекс HDR_PS05: cTypeIzd + cIzd + Vid. Значит Вы должны указать дополнительно условие на cTypeIzd. Если между 1 сегментом и нужным Вам сегментом есть сегменты, на которые условия не наложить, то можете получить проблему при компиляции. Один из способов решения проблемы — указать на каких-то условиях (Noindex), что повлияет на скорость работы запроса. А вот второй способ решения — указать условия на все сегменты до нужного Вам. Значение cTypeIzd можно было как минимум подсмотреть при просмотре таблицы, запросом, в KauConst.inc. Если бы поле принимало разные значения, то надо было анализировать дополнительно. Например, при работе с Katsopr, если Вам надо работать только с определенными документами (приходные накладные/ расходные накладные/…), то Вы задаете условие на Katsopr.Vidsopr, а нужное значение задаете при дополнительном анализе (например по Ctrl + F4, стоя на нужном документе, или в Katdoc.inc)
P.S. Во view на некоторые таблицы можно и не накладывать условия, а задавать их непосредственно при поиске в такой таблице ( Getfirst, Getlast, ...) - в условии Where ((…)). Подозреваю, что на меня могут наброситься за такое )))

Re: create view в Глобальной функции

Добавлено: 04 окт 2017, 23:36
edward_K
Могут. Поскольку если посмотреть профайлером это приводить к выполнению отдельных хранимок.

Re: create view в Глобальной функции

Добавлено: 13 окт 2017, 15:47
rmozgov
Espada писал(а):
Irina_ писал(а):Я удивилась, прочитав, что проблема связана с русским языком, т. к. сама вводила и работала с такими ВА.
Espada, интересно каким редактором Вы пользуетесь для работы с *.vip? Я уже думала, что все в работе используют Viper, и не только с указанными файлами. Не хочется даже вспоминать время, когда Viper не было ))).
обычный Notepad использую)Да я редко работаю с vip файлами, только пару глобальных функций в программе используем, в основном формы через frm и rtf. что бы не использовать русс. язык я просто через nrec обратился и всё)

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

  '281474976710823' == attrnam.nrec and
ну и работает вроде)
Проблема с кодировкой. Необходимо компилировать в OEM кодировке.