Так вот и вопрос, можно ли вообще это сделать??? В идеале, да в browse сделать список....Den писал(а):Интересно, а это как ...как Вы представляете себе визуально редактор-мемо-поля = text к разным записям attrval в виде бравсе что ли ?
Интерфейс с memo-полями
Модераторы: m0p3e, edward_K, Модераторы
Re: Интерфейс с memo-полями
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
Ну вообще можно наверное..только мутная реализация будет
Учитывая что у Вас мемо и в string может не войти значение его, то нужно будет в цикле по attrval считывать мемо (см объекты группы file ...какой нить OpenMemo например в поиске посмотрите) заведомо в какой то массив строк что ли временной таблицы и потом ее отображать в виде бравсе .
Учитывая что у Вас мемо и в string может не войти значение его, то нужно будет в цикле по attrval считывать мемо (см объекты группы file ...какой нить OpenMemo например в поиске посмотрите) заведомо в какой то массив строк что ли временной таблицы и потом ее отображать в виде бравсе .
Re: Интерфейс с memo-полями
В том то и проблема, что не знаешь какой длины будет поле, а если разбивать по строкам и выводить, то будет непонятно где заканчивается данные одного атрибута и заканчиваются другие, все в кучу....Den писал(а):Ну вообще можно наверное..только мутная реализация будет
Учитывая что у Вас мемо и в string может не войти значение его, то нужно будет в цикле по attrval считывать мемо (см объекты группы file ...какой нить OpenMemo например в поиске посмотрите) заведомо в какой то массив строк что ли временной таблицы и потом ее отображать в виде бравсе .
Хорошо, а если завязаться на BASEDOC, поясни одну вещь. Чтобы отображались только документы с заполенными атрибутами, делаем первую вьюху на basedoc - это и есть временная таблицу???
А во второй значит будет вместо basedoc - view1.basedoc или как???
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
нет. временная таблица - это имело ввиду описать что то вроде
table struct tbasedoc
(
nrec..
ddoc
nodoc
)
и в cminit интерфейса ,вначале, сделать алгорит обхода basedoc со сбором инфы необходимой. Что то вроде :
_loop basedoc where
{
_loop ttndoc where
{
if getfirst attrval where...=tsok
{
insert tbasedoc set
nrec:=basedoc.nrec,
ddoc:=basedoc.ddoc,
nodoc:=basedoc.nodoc;
}
}
}
ну и вью как я нарисовал тока вместо BaseDoc.Nrec == TTNDOC.CDOC будет TBaseDoc.Nrec == TTNDOC.CDOC
table struct tbasedoc
(
nrec..
ddoc
nodoc
)
и в cminit интерфейса ,вначале, сделать алгорит обхода basedoc со сбором инфы необходимой. Что то вроде :
_loop basedoc where
{
_loop ttndoc where
{
if getfirst attrval where...=tsok
{
insert tbasedoc set
nrec:=basedoc.nrec,
ddoc:=basedoc.ddoc,
nodoc:=basedoc.nodoc;
}
}
}
ну и вью как я нарисовал тока вместо BaseDoc.Nrec == TTNDOC.CDOC будет TBaseDoc.Nrec == TTNDOC.CDOC
Re: Интерфейс с memo-полями
Сделал такое заполение:
Но очень долго открывает этот фейс. Таблица basedoc большая... Как-то ускорить можно??
Пробовал так заполнять таблицу, но тоже медленно... Пока откроется, постареть можно....
Код: Выделить всё
_loop basedoc
{
_loop ttndoc where ((word(1102) == ttndoc.wtable and basedoc.nrec == ttndoc.cdoc))
{
if (getfirst attrval where ((ttndoc.nrec == attrval.CREC and word(1150) == attrval.wtable and '281474976711112' == attrval.cattrnam)) =tsok)
{
insert tbasedoc set
tbasedoc.nrec:=basedoc.nrec,
tbasedoc.ddoc:=basedoc.ddoc,
tbasedoc.nodoc:=basedoc.nodoc;
}
}
}
Пробовал так заполнять таблицу, но тоже медленно... Пока откроется, постареть можно....
Код: Выделить всё
If (Modifier Getfirst basedoc = Tsok)
{
Do
{
If (Modifier Getfirst ttndoc Where ((word(1102) == ttndoc.wtable and basedoc.nrec == ttndoc.cdoc)) = Tsok)
{
Do
{
If (Modifier Getfirst attrval Where (( ttndoc.nrec == attrval.CREC and word(1150) == attrval.wtable and '281474976711112' == attrval.cattrnam)) = Tsok)
{
Do
{
insert tbasedoc
set
tbasedoc.nrec:=basedoc.nrec,
tbasedoc.ddoc:=basedoc.ddoc,
tbasedoc.nodoc:=basedoc.nodoc;
}
While (Modifier Getnext attrval Where ((ttndoc.nrec == attrval.CREC and word(1150) == attrval.wtable and '281474976711112' == attrval.cattrnam)) = Tsok);
}
}
While (Modifier Getnext ttndoc Where ((word(1102) == ttndoc.wtable and basedoc.nrec == ttndoc.cdoc)) = Tsok);
}
}
While (Modifier Getnext basedoc = Tsok);
}
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
если у Вас не битрив- галактика то можно через dsql ускорить это дело на порядок(ки)
Re: Интерфейс с memo-полями
Ну-ка, ну-ка расскажите
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
см документацию на языке вип, раздел в корне "работа с БД(SQL)" и внутри этой папки "Прямой SQL"
Re: Интерфейс с memo-полями
Т.е. тормоза связаны именно с insertом, а не циклами по таблицам??? Если есть пример, поделись...Den писал(а):см документацию на языке вип, раздел в корне "работа с БД(SQL)" и внутри этой папки "Прямой SQL"
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Интерфейс с memo-полями
Тормозит из-за неотимальных циклов по таблице. Найдите сообщение от edward_k с рекомендациями "как заставить Галактику летать". Смысл в том, чтобы убрать все where из view и из "тела программы" и собрать их в bounds, и другие рекомендации.Руслан писал(а):Den писал(а):...
Т.е. тормоза связаны именно с insertом, а не циклами по таблицам??? Если есть пример, поделись...
Re: Интерфейс с memo-полями
Делаю заполнение DSQL, но эффект тот же, фейс открывает минуты две....
Код: Выделить всё
SQL select basedoc.nrec, basedoc.ddoc, basedoc.nodoc
from basedoc
left join ttndoc on (BaseDoc.Nrec = TTNDOC.CDOC)
left join attrval on (ttndoc.nrec = attrval.CREC)
where
word(1102) = ttndoc.wtable
and word(1150) = attrval.wtable
and attrval.cattrnam = comp('281474976711112')
order by basedoc.ddoc
INTO tbasedoc
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
select count(*) from basedoc
select count(*) from attrval
?
и лучше inner ..левые джойны дорогие
select count(*) from attrval
?
и лучше inner ..левые джойны дорогие
Re: Интерфейс с memo-полями
basedoc - 333383;Den писал(а):select count(*) from basedoc
select count(*) from attrval
attrval - 6849408;
С innerом работает чуть быстрее, но не существеннее... А что если и attrval во временную таблицу выгружать????
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
Вариант 1
SQL select basedoc.nrec, basedoc.ddoc, basedoc.nodoc
from basedoc
inner join ttndoc on (BaseDoc.Nrec = TTNDOC.CDOC) and ttndoc.wtable=1102
inner join attrval on ttndoc.nrec = attrval.CREC and attrval.wtable =1150 and attrval.cattrnam = comp('281474976711112')
order by basedoc.ddoc
INTO tbasedoc
Вариант 2
SQL select basedoc.nrec, basedoc.ddoc, basedoc.nodoc
from basedoc
inner join ttndoc on (BaseDoc.Nrec = TTNDOC.CDOC) and ttndoc.wtable=1102
inner join attrval on ttndoc.nrec = attrval.CREC and attrval.cattrnam = comp('281474976711112')
order by basedoc.ddoc
INTO tbasedoc
если долго попробуйте за скока выполняется запрос без строки
inner join attrval ....
SQL select basedoc.nrec, basedoc.ddoc, basedoc.nodoc
from basedoc
inner join ttndoc on (BaseDoc.Nrec = TTNDOC.CDOC) and ttndoc.wtable=1102
inner join attrval on ttndoc.nrec = attrval.CREC and attrval.wtable =1150 and attrval.cattrnam = comp('281474976711112')
order by basedoc.ddoc
INTO tbasedoc
Вариант 2
SQL select basedoc.nrec, basedoc.ddoc, basedoc.nodoc
from basedoc
inner join ttndoc on (BaseDoc.Nrec = TTNDOC.CDOC) and ttndoc.wtable=1102
inner join attrval on ttndoc.nrec = attrval.CREC and attrval.cattrnam = comp('281474976711112')
order by basedoc.ddoc
INTO tbasedoc
если долго попробуйте за скока выполняется запрос без строки
inner join attrval ....
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Интерфейс с memo-полями
Руслан писал(а):.. А что если и attrval во временную таблицу выгружать????
если без inner join attrval существенно быстрее, то быстрее всего придеться так и делать - убирать выгрузку attrval-помойки во времянку