Страница 2 из 2
					
				
				Добавлено: 01 фев 2006, 17:59
				 ecasoft
				человек просто спросил - есть ли в ВИПе функция для копирования строки (записи, если я понял)  

  а тут ему навешали лапши 
ответ - 
да есть - функция копирования буфера
CopyTablesFields(#Tab1,#Tab2).
 
			 
			
					
				
				Добавлено: 01 фев 2006, 18:15
				 Johny
				тааак, ну началось, теперь еще и на вопросы начали на форуме отвечать  

 Так и совсем с катушек слететь можно  
 
А теперь по существу.
Вот эти вот #Tab1 и #Tab2 это о чем.
Как ф-я работает?
Откуда и куда и чего копирует? Из одной таблицы в другую? а смысл?
 
			 
			
					
				
				Добавлено: 01 фев 2006, 18:17
				 Johny
				Мне кажеться подошел первый предложенный вариант. Но может этот и лучше. Хочу сразу неск. строк в буфер загнать, а потом их оттуда вставить.
Если эта функция в эту степь, то вопрос, как буфер сделать?
			 
			
					
				
				Добавлено: 02 фев 2006, 15:58
				 ecasoft
				
)))))))))))
 "А смысл" 

 Наверное я тогда не понял вопроса. 

)) Смысл думал Вы написали в вопросе.
 Как работает.
 Когда Вы описываете таблицу, то у нее всегда есть буфер записи. 
Если таблица не участвует в секции where (()),
то в буфер помещается первая запись табоицы. Если Вы позиционируетесь - то текущая.
 К примеру, Вам надо скопировать строку спецификации накладной (katsopr) из одной накладной в другую (katsopr1 - синоним katsopr). 
Для этого:
 1. Описываете таблицу синоним для spsopr - spsoprNew.
 2. делаете 
    CopyTablesFields(#spsopr.#spsoprnew);
    spsoprnew.Nrec := 0;
    Spsoprnew.cSopr = KatSopr2.Nrec;
    insert current SpSoprNew;
  В спецификации накладной katsopr2 появится новая строка - копия строки из katsopr1.
   ....
    
   Вообще-то, чаще всего функция используется для прямого копирования записей таблиц между двумя базами данных, т.к. в одной базе можно выкрутиться и без использования этой функции путем 
  if  getfirst Spsoprnew where ((SpSopr.Nrec ==SpSoprNew.Nrec)) = tsOk
  {
    spsoprnew.Nrec := 0;
    Spsoprnew.cSopr = KatSopr2.Nrec;
    insert current SpSoprNew;
  };
 
			 
			
					
				
				Добавлено: 02 фев 2006, 16:03
				 ecasoft
				да...не только Nrec в таблицах Галактики может быть уникальным!!!
Мы обнуляем Nrec, для того, чтобы система сама дала нам уникальный при вводе. Но с другими полями - хуже. Нужно будет самому поддерживать уникальность, т.е.  думать, чем заполнить поля, объявленные уникальными в словаре.
Удачи
			 
			
					
				
				Добавлено: 02 фев 2006, 16:06
				 Johny
				там про 
а смысл?
 это не важно. Просто само как-то приписалось, а-ля мысли вслух.
А ответ ваш в самую тему попал.
Я совсем забыл что есть такая штука как синонимы. И сидел парился как бы выкрутиться   
 
Все прочитал, вроде даже понял, делаю ctrl+shift, ctrl+ins и чуток правлю.
PS: А то я тут уже в цикле навставлял одну и ту же запись кучу раз  

 
			 
			
					
				
				Добавлено: 02 фев 2006, 18:03
				 Johny
				Хожу вокруг да около, а не получается. Суть такая, пишу код, и не могу выйти из цикла:
interface copy_spmnlan;
var 
  oldNrec : comp;     //передаю Nrec шапки (Mnplan.nrec)
  newNrec : comp;   //и Nrec новой строки MnPlan
create view as select * from spmnplan,spmnplan spmnplanNew where spmnplan.cmnplan=oldNrec;
parameters oldNrec,newNrec;
handleevent
  cmInit:{
   if getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec)) = tsOk 
   { 
     do
     {
       getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec))
       spmnplanNew.nrec:=0;
       spmnplanNew.cmnplan:=newNrec;
       insert current spmnplanNew;
     }while (modifier getnext spmnplan where ((oldNrec==spmnplan.cmnplan))=tsOk);  // вот тута циклимся и все
   };       
 }
end;
end.
			 
			
					
				
				Добавлено: 02 фев 2006, 18:29
				 WiRuc
				Код: Выделить всё
interface copy_spmnlan; 
var 
oldNrec : comp; //передаю Nrec шапки (Mnplan.nrec) 
newNrec : comp; //и Nrec новой строки MnPlan 
create view 
from spmnplan,spmnplan spmnplanNew
where 
((oldNrec == spmnplan.cmnplan); 
parameters oldNrec,newNrec; 
handleevent 
cmInit:{ 
_loop spmnplan
{
   if getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec)) = tsOk
  {
     spmnplanNew.nrec:=0; 
     spmnplanNew.cmnplan:=newNrec; 
     insert current spmnplanNew; 
  }
}; 
} 
end; 
end.
 
			 
			
					
				
				Добавлено: 02 фев 2006, 18:33
				 Johny
				я уже тоже только что дотумкал, только у меня более деревянно.
[/quote]
if getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec)) = tsOk 
{ 
                 //сюда вот добавил такую строку и нормально стало
                 modifier getfirst spmnplan;
do 
{ 
getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec)) 
spmnplanNew.nrec:=0; ..... [quote][/quote]