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

Импорт файла DBF во временнйю таблицу

Добавлено: 19 май 2008, 17:37
Гаврилюк Марина
Ребята,помогите, пожалуйста. Опыта практически у меня никакого.
Сразу при запуске этого интерфейса Галактика вылетает по 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.

Добавлено: 20 май 2008, 04:31
Alpiton
mOpen:=DBFOpen('\\hq\public\galaxy\Gal712\TmpFrm\ppm43069.dbf',mode);
if mOpen = 0 exit ;

Добавлено: 20 май 2008, 10:12
PViP
Не плохо было бы еще явное приведение к типу поставить для каждого поля, GetField возвращает string!

Да и консрукция вот такая более правильная!

Код: Выделить всё

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'); 
Кстати еще можете проверить имена полей в dbf может там чего напутали!

Добавлено: 20 май 2008, 11:11
Гаврилюк Марина
PViP, большое спасибо!!!!

Добавлено: 02 июн 2008, 12:58
Алексей
Задача следующая, есть БД в которой сделали документы (basedoc) которые надо выгрузить в ДБФ и загрузить в другую базу, но изменив у них нреки, т.к. в другой базе такие нреки уже существуют. Проблема в том что есть другие таблицы, которые ссылаются на этот basedoc по нреку, потому видимо придется писать что-то своё, в связи с этим вопрос:

А если ДБФ имеет стркутуру таблицы (выгружался из другой базы) и надо загрузить этот ДБФ файл во временную таблицу в памяти, имеющую такую же структуру, можно как-то одной командой сделать?

1. надо объявить таблицу в памяти - аналогичную basedoc (не перечисляя всех полей :) )
2. как-то быстро заполнить эту таблицу из ДБФ файлов.

Добавлено: 02 июн 2008, 14:15
edward_K
как быстро выгрузить известно - PutTableToDBF, тока в 810 вроде не очень сработало, а в 712 работало точно. При вгрузке перечислять все поля не обязательно - тока те что нужно заполнить (даже nrec не надо).
можно vip вызвать с лотом для вгрузки в какую либо таблу схемы user , а потом уже из нее вставить в basedoc(если сразу боитесь), тока понадобиться еще в cfg пару параметров выставить.

Добавлено: 03 июн 2008, 05:51
Алексей
1. ну выгрузить можно лотом select c условием и сразу в БДФ, со всеми полями.
2. А вот про "вгрузку" не понял... схемы user или D_user не нашел...
3. Как быть со связанными таблицами stepdoc и spstep.

План был такой, закачить эти таблицы в память, далее при вставке уже генерить нреки и сгенеренные значения подставлять в ссылки.

Добавлено: 03 июн 2008, 09:45
edward_K
вообще в модуле "обмен бизнес документами" вроде был экспорт -импорт До.
насчет схемы - посмотрите таблу pick например.
насчет stepdoc и spstep- после вставки basedoc накопите во времянку nrec и ключ по которому стыкуете таблы ( stepdoc прктически не содержит инфы - его можно и сразу вставить).

Добавлено: 03 июн 2008, 11:58
Алексей
Мне, если честно, нужны не ДО, а заявки на ремонт, они тоже в basedoc живут, но в обмене бизенс документами такого типа документов нет.

В заявках услуга всегда одна (пока что), потому:
сделал следующее: написал в SQL выгрузку где вываливаются все нужные данные в одну строку в ДБФ.
Дальше випом подхватываю и вношу во все таблицы изменения.
Перед этим привел в порядок НРЕКи услуги, все каталоги по ремонтам, отпускные единицы.

Добавлено: 20 авг 2008, 12:32
gritv
Не знаю, как там экспорт -импорт ДО в модуле "обмен бизнес документами", но про экспорт -импорт Основные средства в 7.12 могу сказать следующее. Экспорт настраивается в файл DBF, только выглядит он очень странно. А при попытке его импортировать Галактика выдала: "Отсутствует DBF-файл...". Все тут и заглохло. Неужели не применим этот модуль? Кто-нибудь подскажите!!!

Добавлено: 20 авг 2008, 16:28
edward_K
не давайте длинные имена и не называйте по русски. Про ос не скажу, но механизм там общий - должно работать. Если нет так сломали значит и пишите в ТП.

Добавлено: 03 сен 2008, 13:31
gritv
Работает и в ОС тоже. Набралась терпения и дождалась конца. Экспорт из базы шел 2,5 часа, а импорт в базу 7,5 часов. Уж больно долго, да и некоторые фильтры не удалось наложить. Решила отказаться от такой возможности.