Страница 2 из 4
Re: Интерфейс с memo-полями
Добавлено: 23 окт 2012, 13:35
Руслан
Den писал(а):Интересно, а это как ...как Вы представляете себе визуально редактор-мемо-поля = text к разным записям attrval в виде бравсе что ли ?
Так вот и вопрос, можно ли вообще это сделать??? В идеале, да в browse сделать список....
Re: Интерфейс с memo-полями
Добавлено: 23 окт 2012, 14:08
Den
Ну вообще можно наверное..только мутная реализация будет
Учитывая что у Вас мемо и в string может не войти значение его, то нужно будет в цикле по attrval считывать мемо (см объекты группы file ...какой нить OpenMemo например в поиске посмотрите) заведомо в какой то массив строк что ли временной таблицы и потом ее отображать в виде бравсе .
Re: Интерфейс с memo-полями
Добавлено: 23 окт 2012, 14:18
Руслан
Den писал(а):Ну вообще можно наверное..только мутная реализация будет
Учитывая что у Вас мемо и в string может не войти значение его, то нужно будет в цикле по attrval считывать мемо (см объекты группы file ...какой нить OpenMemo например в поиске посмотрите) заведомо в какой то массив строк что ли временной таблицы и потом ее отображать в виде бравсе .
В том то и проблема, что не знаешь какой длины будет поле, а если разбивать по строкам и выводить, то будет непонятно где заканчивается данные одного атрибута и заканчиваются другие, все в кучу....
Хорошо, а если завязаться на BASEDOC, поясни одну вещь. Чтобы отображались только документы с заполенными атрибутами, делаем первую вьюху на basedoc - это и есть временная таблицу???
А во второй значит будет вместо basedoc - view1.basedoc или как???
Re: Интерфейс с memo-полями
Добавлено: 23 окт 2012, 14:30
Den
нет. временная таблица - это имело ввиду описать что то вроде
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-полями
Добавлено: 23 окт 2012, 17:40
Руслан
Сделал такое заполение:
Код: Выделить всё
_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;
}
}
}
Но очень долго открывает этот фейс. Таблица basedoc большая... Как-то ускорить можно??
Пробовал так заполнять таблицу, но тоже медленно... Пока откроется, постареть можно....
Код: Выделить всё
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);
}
Re: Интерфейс с memo-полями
Добавлено: 23 окт 2012, 17:55
Den
если у Вас не битрив- галактика то можно через dsql ускорить это дело на порядок(ки)
Re: Интерфейс с memo-полями
Добавлено: 23 окт 2012, 18:01
Руслан
Ну-ка, ну-ка расскажите
Re: Интерфейс с memo-полями
Добавлено: 23 окт 2012, 18:04
Den
см документацию на языке вип, раздел в корне "работа с БД(SQL)" и внутри этой папки "Прямой SQL"
Re: Интерфейс с memo-полями
Добавлено: 23 окт 2012, 18:05
Руслан
Den писал(а):см документацию на языке вип, раздел в корне "работа с БД(SQL)" и внутри этой папки "Прямой SQL"
Т.е. тормоза связаны именно с insertом, а не циклами по таблицам??? Если есть пример, поделись...
Re: Интерфейс с memo-полями
Добавлено: 24 окт 2012, 09:12
zna
Руслан писал(а):Den писал(а):...
Т.е. тормоза связаны именно с insertом, а не циклами по таблицам??? Если есть пример, поделись...
Тормозит из-за неотимальных циклов по таблице. Найдите сообщение от edward_k с рекомендациями "как заставить Галактику летать". Смысл в том, чтобы убрать все where из view и из "тела программы" и собрать их в bounds, и другие рекомендации.
Re: Интерфейс с memo-полями
Добавлено: 24 окт 2012, 11:14
Руслан
Делаю заполнение 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
Re: Интерфейс с memo-полями
Добавлено: 24 окт 2012, 11:32
Den
select count(*) from basedoc
select count(*) from attrval
?
и лучше inner ..левые джойны дорогие
Re: Интерфейс с memo-полями
Добавлено: 24 окт 2012, 11:46
Руслан
Den писал(а):select count(*) from basedoc
select count(*) from attrval
basedoc - 333383;
attrval - 6849408;
С innerом работает чуть быстрее, но не существеннее... А что если и attrval во временную таблицу выгружать????
Re: Интерфейс с memo-полями
Добавлено: 24 окт 2012, 11:54
Den
Вариант 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 ....
Re: Интерфейс с memo-полями
Добавлено: 24 окт 2012, 11:55
Den
Руслан писал(а):.. А что если и attrval во временную таблицу выгружать????
если без inner join attrval существенно быстрее, то быстрее всего придеться так и делать - убирать выгрузку attrval-помойки во времянку