Страница 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-помойки во времянку