Импорт файла DBF во временнйю таблицу
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 27 авг 2007, 12:16
- Откуда: ОАО КЧХК
- Контактная информация:
Импорт файла DBF во временнйю таблицу
Ребята,помогите, пожалуйста. Опыта практически у меня никакого.
Сразу при запуске этого интерфейса Галактика вылетает по Runtime. Что ей не хватает?
table struct ppmtemp
(
nn : string[30],
nob : string[60],
drasx : date,
gm : word,
cu : double,
bazost : double,
newost : double,
rasxod : double,
tekost : double,
sklkod : string[60],
cnrec : comp
)
with index
(
ppmtemp = gm+sklkod+nn
)
;
Interface nelikvid 'Æîû íѺ ñó¿ªÑ¡¿∩ ßóδΦÑ 12 ¼Ñß∩µÑó' DoAccept, EscClose, cyan;
Show at (1,1,70,15);
var
mOpen : longint;
mode,countr,kz : integer;
create view nel
as select ppmtemp.*;
Screen SRC show at (,,,);
Buttons
cmOk, Default;
cmCancel;
<<
<. OK .> <. ÄΓ¼Ñ¡á .>
>>
end;
HandleEvent
cmOk:
{
mode:= 15648;
mOpen:=DBFOpen('\\hq\public\galaxy\Gal712\TmpFrm\ppm43069.dbf',mode);
kz:=DBFGetFirst(mOpen);
logstrtofile('logs.log',kz);
while kz=0 do
{logstrtofile('logs.log',mode);
ppmtemp.nn:=DBFGetFieldValue(mOpen,'nn');
ppmtemp.gm:=DBFGetFieldValue(mOpen,'gm');
ppmtemp.cu:=DBFGetFieldValue(mOpen,'cu');
ppmtemp.bazost:=DBFGetFieldValue(mOpen,'bazost');
ppmtemp.newost:=DBFGetFieldValue(mOpen,'newost');
ppmtemp.rasxod:=DBFGetFieldValue(mOpen,'rasxod');
ppmtemp.tekost:=DBFGetFieldValue(mOpen,'tekost');
ppmtemp.sklkod:=DBFGetFieldValue(mOpen,'skl');
ppmtemp.cnrec:=DBFGetFieldValue(mOpen,'nrec');
insert current ppmtemp;
kz:=DBFGetNext(mOpen);
};
DBFClose(mOpen);
}
end;
end.
Сразу при запуске этого интерфейса Галактика вылетает по Runtime. Что ей не хватает?
table struct ppmtemp
(
nn : string[30],
nob : string[60],
drasx : date,
gm : word,
cu : double,
bazost : double,
newost : double,
rasxod : double,
tekost : double,
sklkod : string[60],
cnrec : comp
)
with index
(
ppmtemp = gm+sklkod+nn
)
;
Interface nelikvid 'Æîû íѺ ñó¿ªÑ¡¿∩ ßóδΦÑ 12 ¼Ñß∩µÑó' DoAccept, EscClose, cyan;
Show at (1,1,70,15);
var
mOpen : longint;
mode,countr,kz : integer;
create view nel
as select ppmtemp.*;
Screen SRC show at (,,,);
Buttons
cmOk, Default;
cmCancel;
<<
<. OK .> <. ÄΓ¼Ñ¡á .>
>>
end;
HandleEvent
cmOk:
{
mode:= 15648;
mOpen:=DBFOpen('\\hq\public\galaxy\Gal712\TmpFrm\ppm43069.dbf',mode);
kz:=DBFGetFirst(mOpen);
logstrtofile('logs.log',kz);
while kz=0 do
{logstrtofile('logs.log',mode);
ppmtemp.nn:=DBFGetFieldValue(mOpen,'nn');
ppmtemp.gm:=DBFGetFieldValue(mOpen,'gm');
ppmtemp.cu:=DBFGetFieldValue(mOpen,'cu');
ppmtemp.bazost:=DBFGetFieldValue(mOpen,'bazost');
ppmtemp.newost:=DBFGetFieldValue(mOpen,'newost');
ppmtemp.rasxod:=DBFGetFieldValue(mOpen,'rasxod');
ppmtemp.tekost:=DBFGetFieldValue(mOpen,'tekost');
ppmtemp.sklkod:=DBFGetFieldValue(mOpen,'skl');
ppmtemp.cnrec:=DBFGetFieldValue(mOpen,'nrec');
insert current ppmtemp;
kz:=DBFGetNext(mOpen);
};
DBFClose(mOpen);
}
end;
end.
-
- Местный житель
- Сообщения: 254
- Зарегистрирован: 08 июн 2007, 08:26
- Откуда: Красноярск
- Контактная информация:
Не плохо было бы еще явное приведение к типу поставить для каждого поля, GetField возвращает string!
Да и консрукция вот такая более правильная!
Кстати еще можете проверить имена полей в dbf может там чего напутали!
Да и консрукция вот такая более правильная!
Код: Выделить всё
insert ppmtemp set
ppmtemp.nn :=DBFGetFieldValue(mOpen,'nn'),
ppmtemp.gm :=DBFGetFieldValue(mOpen,'gm'),
ppmtemp.cu :=DBFGetFieldValue(mOpen,'cu'),
ppmtemp.bazost :=DBFGetFieldValue(mOpen,'bazost'),
ppmtemp.newost :=DBFGetFieldValue(mOpen,'newost'),
ppmtemp.rasxod :=DBFGetFieldValue(mOpen,'rasxod'),
ppmtemp.tekost :=DBFGetFieldValue(mOpen,'tekost'),
ppmtemp.sklkod :=DBFGetFieldValue(mOpen,'skl'),
ppmtemp.cnrec :=DBFGetFieldValue(mOpen,'nrec');
-
- Постоянный обитатель
- Сообщения: 151
- Зарегистрирован: 27 авг 2007, 12:16
- Откуда: ОАО КЧХК
- Контактная информация:
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Задача следующая, есть БД в которой сделали документы (basedoc) которые надо выгрузить в ДБФ и загрузить в другую базу, но изменив у них нреки, т.к. в другой базе такие нреки уже существуют. Проблема в том что есть другие таблицы, которые ссылаются на этот basedoc по нреку, потому видимо придется писать что-то своё, в связи с этим вопрос:
А если ДБФ имеет стркутуру таблицы (выгружался из другой базы) и надо загрузить этот ДБФ файл во временную таблицу в памяти, имеющую такую же структуру, можно как-то одной командой сделать?
1. надо объявить таблицу в памяти - аналогичную basedoc (не перечисляя всех полей )
2. как-то быстро заполнить эту таблицу из ДБФ файлов.
А если ДБФ имеет стркутуру таблицы (выгружался из другой базы) и надо загрузить этот ДБФ файл во временную таблицу в памяти, имеющую такую же структуру, можно как-то одной командой сделать?
1. надо объявить таблицу в памяти - аналогичную basedoc (не перечисляя всех полей )
2. как-то быстро заполнить эту таблицу из ДБФ файлов.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
как быстро выгрузить известно - PutTableToDBF, тока в 810 вроде не очень сработало, а в 712 работало точно. При вгрузке перечислять все поля не обязательно - тока те что нужно заполнить (даже nrec не надо).
можно vip вызвать с лотом для вгрузки в какую либо таблу схемы user , а потом уже из нее вставить в basedoc(если сразу боитесь), тока понадобиться еще в cfg пару параметров выставить.
можно vip вызвать с лотом для вгрузки в какую либо таблу схемы user , а потом уже из нее вставить в basedoc(если сразу боитесь), тока понадобиться еще в cfg пару параметров выставить.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
1. ну выгрузить можно лотом select c условием и сразу в БДФ, со всеми полями.
2. А вот про "вгрузку" не понял... схемы user или D_user не нашел...
3. Как быть со связанными таблицами stepdoc и spstep.
План был такой, закачить эти таблицы в память, далее при вставке уже генерить нреки и сгенеренные значения подставлять в ссылки.
2. А вот про "вгрузку" не понял... схемы user или D_user не нашел...
3. Как быть со связанными таблицами stepdoc и spstep.
План был такой, закачить эти таблицы в память, далее при вставке уже генерить нреки и сгенеренные значения подставлять в ссылки.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Мне, если честно, нужны не ДО, а заявки на ремонт, они тоже в basedoc живут, но в обмене бизенс документами такого типа документов нет.
В заявках услуга всегда одна (пока что), потому:
сделал следующее: написал в SQL выгрузку где вываливаются все нужные данные в одну строку в ДБФ.
Дальше випом подхватываю и вношу во все таблицы изменения.
Перед этим привел в порядок НРЕКи услуги, все каталоги по ремонтам, отпускные единицы.
В заявках услуга всегда одна (пока что), потому:
сделал следующее: написал в SQL выгрузку где вываливаются все нужные данные в одну строку в ДБФ.
Дальше випом подхватываю и вношу во все таблицы изменения.
Перед этим привел в порядок НРЕКи услуги, все каталоги по ремонтам, отпускные единицы.
Не знаю, как там экспорт -импорт ДО в модуле "обмен бизнес документами", но про экспорт -импорт Основные средства в 7.12 могу сказать следующее. Экспорт настраивается в файл DBF, только выглядит он очень странно. А при попытке его импортировать Галактика выдала: "Отсутствует DBF-файл...". Все тут и заглохло. Неужели не применим этот модуль? Кто-нибудь подскажите!!!