Страница 2 из 2

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

ответ -

да есть - функция копирования буфера

CopyTablesFields(#Tab1,#Tab2).

Добавлено: 01 фев 2006, 18:15
Johny
тааак, ну началось, теперь еще и на вопросы начали на форуме отвечать :grin: Так и совсем с катушек слететь можно :o

А теперь по существу.
Вот эти вот #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: А то я тут уже в цикле навставлял одну и ту же запись кучу раз :-D

Добавлено: 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]