Страница 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]