Интерфейс с memo-полями

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

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

Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение Руслан »

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

Re: Интерфейс с memo-полями

Сообщение Den »

Ну вообще можно наверное..только мутная реализация будет
Учитывая что у Вас мемо и в string может не войти значение его, то нужно будет в цикле по attrval считывать мемо (см объекты группы file ...какой нить OpenMemo например в поиске посмотрите) заведомо в какой то массив строк что ли временной таблицы и потом ее отображать в виде бравсе .
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение Руслан »

Den писал(а):Ну вообще можно наверное..только мутная реализация будет
Учитывая что у Вас мемо и в string может не войти значение его, то нужно будет в цикле по attrval считывать мемо (см объекты группы file ...какой нить OpenMemo например в поиске посмотрите) заведомо в какой то массив строк что ли временной таблицы и потом ее отображать в виде бравсе .
В том то и проблема, что не знаешь какой длины будет поле, а если разбивать по строкам и выводить, то будет непонятно где заканчивается данные одного атрибута и заканчиваются другие, все в кучу.... :sad:
Хорошо, а если завязаться на BASEDOC, поясни одну вещь. Чтобы отображались только документы с заполенными атрибутами, делаем первую вьюху на basedoc - это и есть временная таблицу???
А во второй значит будет вместо basedoc - view1.basedoc или как???
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение 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
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение Руслан »

Сделал такое заполение:

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

			_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);
			}
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение Den »

если у Вас не битрив- галактика то можно через dsql ускорить это дело на порядок(ки)
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение Руслан »

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

Re: Интерфейс с memo-полями

Сообщение Den »

см документацию на языке вип, раздел в корне "работа с БД(SQL)" и внутри этой папки "Прямой SQL"
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение Руслан »

Den писал(а):см документацию на языке вип, раздел в корне "работа с БД(SQL)" и внутри этой папки "Прямой SQL"
Т.е. тормоза связаны именно с insertом, а не циклами по таблицам??? Если есть пример, поделись... :oops:
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение zna »

Руслан писал(а):
Den писал(а):...
Т.е. тормоза связаны именно с insertом, а не циклами по таблицам??? Если есть пример, поделись... :oops:
Тормозит из-за неотимальных циклов по таблице. Найдите сообщение от edward_k с рекомендациями "как заставить Галактику летать". Смысл в том, чтобы убрать все where из view и из "тела программы" и собрать их в bounds, и другие рекомендации.
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

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
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение Den »

select count(*) from basedoc
select count(*) from attrval

?

и лучше inner ..левые джойны дорогие
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение Руслан »

Den писал(а):select count(*) from basedoc
select count(*) from attrval
basedoc - 333383;
attrval - 6849408;
С innerом работает чуть быстрее, но не существеннее... А что если и attrval во временную таблицу выгружать????
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение 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 ....
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Интерфейс с memo-полями

Сообщение Den »

Руслан писал(а):.. А что если и attrval во временную таблицу выгружать????

если без inner join attrval существенно быстрее, то быстрее всего придеться так и делать - убирать выгрузку attrval-помойки во времянку
Ответить