Интерфейс. Как вставить запись в таблицу?

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Интерфейс. Как вставить запись в таблицу?

Сообщение s2176 »

Пишу интерфейс.
Задача такая: сформировать проводки по долгам по заработной плате.
Вытаскиваю из настроек расчетный период, имя текущего пользователя, его группу и пр.
Потом надо пройтись по таблице curmonth, найти всех, у кого поле dolg>0.
Надо создать записи в таблицах: Plpor, Soprhoz, Oborot.
для вставки записи в Plpor пишу:
clearbuffer(9015) // 9015 - номер таблицы plpor
nrec_plpor:=getnextnrec(9015,0)
set plpor.nrec:=nrec_plpor;
set plpor.tidkgal:=10;
set plpor.tidk:=10;
set plpor.nodok:=_nodok;
set plpor.desgr:=_desgr;
set plpor.descr:=_descr;
set plpor.datvip:=datf;
set plpor.datob:=datf;
set plpor.modedoc:=1024;
insert current plpor;
Вылетает по runtime :sad:
Если вместо 9015 написать #plpor, ругается компилятор.
Подскажите, пожалуйста, как вставить запись???
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

видимо речь идет о форме
правильней писать
vvv.clearbuffer(vvv.tnplpor)
где vvv имя вьюхи, хотя в случае одной вьюхи можно опустить
будете удивлены вычислив vvv.tnplpor(наверное будет 1 :cool: )
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

clearbuffer(tnPlPor)

plpor.nrec:=0; // при вставке автоматом инкрементит

Может быть убарть комады set, оставить только присовение (см. выше Нрек).
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

Выкладывайте код интерфейса полностью
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

Интерфейс выглядит примерно так:

interface dolg_zpl 'Формирование проводок по долгу (версия 1.0)' EscClose, Cyan
show at(5,0,75,13);
file f_cfg;
var right_: word;
nreckaud,nreckauk: comp;
datf: date;

create view tv
var schd,schk,sschd,sschk,sschd1,sschk1,sschd2,sschk2: string[10];
txtkaud,txtkauk: string[40]
kodkaud, kodkauk: string[10];
tkaud,tkauk,tkau: word;
kaud1,kauk1,kaud2,kauk2,nrec_pers,nrec_katkau: comp;
as select tuneval.strval, a.dateval, usertune.descr, usertune.desgr
from tuneval, tuneval a, tunedef b, usertune
where ((tunedef.nrec==tuneval.ctune and 'MYORG'==tunedef.code
and b.nrec==a.ctune and 'UP.DATOTCH'==b.code
and user_id==x$users.atl_nrec and x$users.xu$loginname==usertune.ownname
))
;
create view tus
as Select x$users.xu$type
where ((user_id==x$users.atl_nrec))
;
create view tug
as Select groupusers.atl_nrec
where ((user_id==groupusers.userCode and comp(1000000000009h)==groupusers.groupcode // расчетная группа
))
;
create view curm
as select tperson, dolg
from curmonth
where (0<dolg)
;
create view pso
as select * from plpor, soprhoz, oborot
;

screen Sc1
fields
datf: Noprotect;
schd: Noprotect, pickbutton;
sschd: Noprotect, pickbutton;
kodkaud: Noprotect, pickbutton;
txtKaud: protect,skip;
schk: Noprotect, pickbutton;
sschk: Noprotect, pickbutton;
kodkauk: Noprotect, pickbutton;
txtKauk: protect,skip;
buttons
cmOk;
<<

дата - .@@@@@@@@@@

Счет Субсчет Кау
Дебет: .@@@@@/ .@@@@@ .@@@@@@@ .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Kредит:.@@@@@/ .@@@@@ .@@@@@@@ .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

<. Сформировать .>

>>
end;
handleevent
cmInit:
{ var kompan: string;
if tv.getfirst tuneval = tsOk
then datf:=sub_day(add_months(tv.a.dateval,1),1)
else datf:=sub_day(add_months(cur_date(),1),1);
user_id:=userid;
if tus.getfirst x$users = tsOk then right_:=x$users.xu$type;
//right=1 - право на закачку(зарплатчики и админы)
if tug.getfirst groupusers = tsOk then right_:=1
f_cfg.openfile('\\galaxy\galactic\vip_cfg\dolg_zpl.cfg',stOpenRead);
if (f_cfg.Eof)
{ f_cfg.Close; message('Не найден файл настроек, ничего не получится, увы.....')
exit;
}
if tv.getfirst tuneval = tsOk
then kompan:=inpcfg(tv.tuneval.strval)
else message('фиг вам');
tkauk:=3;
if tv.getfirst usertune = tsOk
then { _descr:=tv.usertune.descr; _desgr:=tv.usertune.desgr; }
}
cmOk:
{ var nrec_plpor, nrec_soprhoz: comp;
var _nodok: string;
var _sum: double;
_nodok:='$'+lpadch(month(datf),'0',2)+'_500';
clearbuffer(9015)
nrec_plpor:=getnextnrec(9015,0)
set plpor.nrec:=nrec_plpor;
set plpor.tidkgal:=10;
set plpor.tidk:=10;
set plpor.nodok:=_nodok;
set plpor.desgr:=_desgr;
set plpor.descr:=_descr;
set plpor.datvip:=datf;
set plpor.datob:=datf;
set plpor.modedoc:=1024;
insert current plpor;
/*
clearbuffer(1120);
nrec_soprhoz:=getnextnrec(1120,0);
set soprhoz.nrec:=nrec_soprhoz;
set soprhoz.csoprdoc:=nrec_plpor;
set soprhoz.tidkgal:=10;
set soprhoz.tipdoc:=10;
set soprhoz.nodoc:=_nodok;
set soprhoz.datob:=datf;
set soprhoz.direct:=2;
set soprhoz.vhsumhoz:='+';
insert current soprhoz;

_sum:=0;
curm._loop
{ clearbuffer(9011);
set oborot.nrec:=getnextnrec(9011,0);
set oborot.tidk:=10;
set oborot.tidkgal:=10;
set oborot.csoprdoc:=nrec_plpor;
set oborot.csoprhoz:=nrec_soprhoz;
set oborot.descr:=_descr;
set oborot.desgr:=_desgr;
set oborot.Scheto:=schd;
set oborot.subossch:=sschd;
set oborot.tblos[1]:=3;
set oborot.kauos[1]:=curm.curmonth.tperson;
set oborot.datob:=datf;
set oborot.dataot:=datf;
set oborot.schetk:=schk;
set oborot.nodok:=_nodok;
set oborot.sumob:=curm.curmonth.dolg;
set oborot.vhprop:='+';
set oborot.ruchauto:=1;
set oborot.dbscheto:=ltrim(schd,'0');
set oborot.krschetk:=ltrim(schk,'0');
insert current oborot;
_sum:=_sum+curm.curmonth.dolg;

message(string(curm.curmonth.dolg))
}
update from plpor
where ((nrec_plpor==plpor.nrec))
set sumplat:=_sum;
update from soprhoz
where ((nrec_soprhoz==soprhoz.nrec))
set summa:=_sum;
*/
closeinterface(cmOk);
}
end;
end.
Последний раз редактировалось s2176 12 апр 2006, 11:14, всего редактировалось 1 раз.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

insert'ом неохота вставлять, т.к. мне потом нужен nrec, если делать insert, то его придется доставать запросом, лишние хлопоты... Хотелось cделать проще.
Последний раз редактировалось s2176 12 апр 2006, 11:14, всего редактировалось 2 раза.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

Ни у кого нет никаких идей????
поЧитатель
Посетитель
Сообщения: 44
Зарегистрирован: 27 янв 2006, 14:21

Сообщение поЧитатель »

";" - не поставил между двумя строчками
nrec_plpor:=getnextnrec(9015,0)
set plpor.nrec:=nrec_plpor;

А лучше напиши

insert plpor set
plpor.tidkgal:=10,
plpor.tidk:=10,
plpor.nodok:=_nodok,
plpor.desgr:=_desgr,
plpor.descr:=_descr,
plpor.datvip:=datf,
plpor.datob:=datf,
plpor.modedoc:=1024;

nrec_plpor:= plpor.nrec;

Сколько конверторов написал - всегда работает.
8)
поЧитатель
Посетитель
Сообщения: 44
Зарегистрирован: 27 янв 2006, 14:21

Сообщение поЧитатель »

. Уникальные индексы бывают часто не толко по nrec. А ты уверен, что больше не нужно генерировать новые записи в других таблицах

1. Собери все таблицы в единый запрос
2. функция clearbuffer() не желательна, если не до конца знаешь ядро БД, а особо финансы. Уникальные индексы часто бывают не толко по nrec.
3. в запросе я бы дописал
10==plpor.tidk
and 10 == oborot.tidk
and 10 == SoprHoz.TipDoc

З.Ы. Когда пишешь без любви к работе и кривыми ручками, то и последствия начинаются не предсказуемыми :???: :-o
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

Спасибо, поробую так!
Точки с запятой здесь не играет роли, но интересно, почему все таки не работает? ведь я все делаю, как в доке...
Ответить