Re: Ошибка 310
Добавлено: 05 сен 2014, 12:50
Хоть ошибка и выскакивает, всёравно создаётся счет, заполняется шапка, проверял всем полям в DO2.spstep присвоены, но они не заносятся в счет чего-то...
Обсуждение различных вопросов, связанных с сопровождением, администрированием и программированием
https://ns1.tyumbit.ru/
Код: Выделить всё
DO2.clearbuffer(DO2.tnspstep);
DO2.SPSTEP.npp := NPP;
DO2.SPSTEP.PRMC := PRMC;
DO2.SPSTEP.CMCUSL := CMCUSL;
DO2.SPSTEP.COTPED := COTPED;
DO2.SPSTEP.KOL := KOL;
DO2.SPSTEP.KOLOPL := KOLOPL;
DO2.SPSTEP.kol := KOLFACT;
DO2.SPSTEP.price := price;
DO2.SPSTEP.price := vprice;
DO2.SPSTEP.price := rprice;
DO2.SPSTEP.price := rvprice;
DO2.SPSTEP.DDOC := DSOPR;
DO2.SPSTEP.NETTO := NETTO;
DO2.SPSTEP.MTARA := MTARA;
DO2.SPSTEP.CVAL := CVAL;
DO2.SPSTEP.CPARTY := CPARTY;
DO2.spstep.Cstepdoc := DO2.basedoc.nrec
DO2.insert current Basedoc;
j:= j + 1;
я не пойму как его можно так ужать? пока я присваиваю каждому полю нужные значения, это уже больше 50 строк вылезет+ создание таблиц) хоть и остаётся идентичный код, но всёравно есть, по максимуму сократил, вышло всёравно немного большеedward_K писал(а):Когда копирование доведете до 30 строк(хотя и это много), код сюда.
Код: Выделить всё
Create view DO1
from Basedoc
where
((
basedocnrec == basedoc.nrec and
spnrec == spstep.nrec
));
Create view DO2
from Basedoc, Spstep
where
((
spnrec == spstep.nrec
));
Create view DO1_sp
from spstep
where
((
spnrec == spstep.nrec
));
Create view DO2_sp
from Basedoc, Stepdoc, Spstep
where
((
basedocnrec == basedoc.nrec and
StepBasenrec == stepdoc.CBASEDOC
));
cmbut1:
{
StepBasenrec:= 0;
StepNrec := 0;
NomPP := 0;
Name := 0;
OtpEd := 0;
Kolvo := 0;
cena := 0;
Summa := 0;
NDS := 0;
spnrec := spced.spstep2.nrec;
BaseDocNrec := BaseDoc.Nrec
Prices := DO1_sp.spstep.Cpricelist;
if (DO1.getfirst Basedoc = tsOk)
{
MND := DO1.basedoc.DESCR;
Nomer := DO1.basedoc.NODOC;
Ddoc := DO1.basedoc.ddoc;
HEADORG := DO1.basedoc.Corg;
Bank := DO1.basedoc.Cbank;
GRPOL := DO1.basedoc.Cgrpol;
};
if (DO1.getfirst Spstep =tsOk)
{
NPP := DO1.SPSTEP.npp;
PRMC := DO1.SPSTEP.PRMC;
CMCUSL := DO1.SPSTEP.CMCUSL;
COTPED := DO1.SPSTEP.COTPED;
KOL := DO1.SPSTEP.KOL;
KOLOPL := DO1.SPSTEP.KOLOPL;
KOLFACT := DO1.SPSTEP.kol;
price := DO1.SPSTEP.price;
DSOPR := DO1.SPSTEP.DDOC;
NETTO := DO1.SPSTEP.NETTO;
MTARA := DO1.SPSTEP.MTARA;
CVAL := DO1.SPSTEP.CVAL;
CPARTY := DO1.SPSTEP.CPARTY;
};
if(DO1_sp.getfirst Spstep = tsOk)
{
NomPP := DO1_sp.spstep.NPP;
Name := DO1_sp.spstep.CMCUSL;
OtpEd := DO1_sp.spstep.COTPED;
Kolvo := DO1_sp.spstep.KOL;
cena := DO1_sp.spstep.Price;
Summa := DO1_sp.spstep.Summa
NDS := DO1_sp.spstep.NDS;
Prices := DO1_sp.spstep.Cpricelist;
};
if (DO2.getfirst Basedoc = tsOk)
{
DO2.clearbuffer(DO2.tnbasedoc);
DO2.basedoc.DESCR :=MND;
DO2.basedoc.nodoc :=Nomer;
DO2.basedoc.Ddoc :=Ddoc;
DO2.basedoc.Corg := HEADORG;
DO2.basedoc.CBank := Bank;
DO2.basedoc.CGRPOL := GRPOL;
DO2.basedoc.viddoc := '211';
DO2.basedoc.specyes := '1';
DO2.basedoc.status := '2';
DO2.basedoc.cnote := 0000000000000008h;
DO2.basedoc.VHODNAL := '2';
DO2.basedoc.DIRECT := '1';
DO2.basedoc.TIPMONEY := '1';
DO2.basedoc.PRIOR := '99';
DO2.basedoc.VHSKID := '1';
DO2.basedoc.TARAVOZ := '2';
DO2.basedoc.PROCOPL := '100';
DO2.insert current Basedoc;
j:= j + 1;
};
StepBasenrec:=basedoc.nrec
if(DO2_sp.getfirst Stepdoc = tsOk)
{
DO2_sp.clearbuffer(DO2_sp.tnstepdoc);
DO2_sp.stepdoc.cBasedoc := Do2.basedoc.nrec;
DO2_sp.insert current StepDoc;
j:= j + 1;
};
if (DO2.getfirst Spstep =tsOk)
{
DO2.clearbuffer(DO2.tnspstep);
DO2.SPSTEP.npp := NPP;
DO2.SPSTEP.PRMC := PRMC;
DO2.SPSTEP.CMCUSL := CMCUSL;
DO2.SPSTEP.COTPED := COTPED;
DO2.SPSTEP.KOL := KOL;
DO2.SPSTEP.KOLOPL := KOLOPL;
DO2.SPSTEP.kol := KOLFACT;
DO2.SPSTEP.price := price;
DO2.SPSTEP.DDOC := DSOPR;
DO2.SPSTEP.NETTO := NETTO;
DO2.SPSTEP.MTARA := MTARA;
DO2.SPSTEP.CVAL := CVAL;
DO2.SPSTEP.CPARTY := CPARTY;
DO2.spstep.Cstepdoc := DO2.basedoc.nrec;
DO2.insert current spstep;
j:= j + 1;
};
Код: Выделить всё
spced._loop viewtable // цикл по спецификации
{
koefoe := 0;
spnrec := spced.spstep2.nrec;
kor._loop viewtable // вложенный цикл ищем отпускную единицу для печатной форме в таре
{
if (InStr('кг',kor.katotped1.name) = 0 and InStr('короб',kor.katotped1.name) = 0) koefoe := kor.katotped1.koef;
}
Решил начать с чистого листа, со всеми поправками. на начальном этапе при получении данных из Basedoc вставил цикл, и решил проверить как работает, оказалось что выводятся только последнее значение n-е количество раз(n-количество строк в спецификации). может подскажете строчки поменять какие, или нз что:edward_K писал(а):1. O2.spstep.Cstepdoc := DO2.basedoc.nrec; - почему? Должно быть stepdoc.nrec.
2. _loop viewtable нужно использовать если оно вам точно надо. Я по крайней мере никогда не встречал сего. В остальных все таки по табле. Типа DO2._loop spstep
3. Читайте внимательней мои посты еще раз. Не зачем запоминать стока данных только для того чтобы потом сделать clearbuffer и еще раз присвоить. Незачем вам и 10 view - все можно сделать и на имеющемся добавив туда синонимы, ну если так хочется то на одной дополнительной - вы сами не путаетесь?
4. logstrtofile вам в помощь - мож поймете где косячите.
Код: Выделить всё
cmbut1:
{
BaseDocNrec := BaseDoc.Nrec
if(DO1.getfirst Basedoc = tsOk and DO1.getfirst Stepdoc = tsOk and DO1.getfirst SPSTEP = tsOk and DO1.getfirst Katmc = tsOk)
{
_LOOP SPSTEP
{
NPP := DO1.SPSTEP.npp;
PRMC := DO1.SPSTEP.PRMC;
CMCUSL := DO1.katmc.Name;
COTPED := DO1.SPSTEP.COTPED;
KOL := DO1.SPSTEP.KOL;
KOLOPL := DO1.SPSTEP.KOLOPL;
KOLFACT := DO1.SPSTEP.kol;
price := DO1.SPSTEP.price;
DSOPR := DO1.SPSTEP.DDOC;
NETTO := DO1.SPSTEP.NETTO;
MTARA := DO1.SPSTEP.MTARA;
CVAL := DO1.SPSTEP.CVAL;
CPARTY := DO1.SPSTEP.CPARTY;
message(NPP + ' + ' + PRMC + ' + ' + CMCUSL + ' + ' + KOL);
}
};
}
Код: Выделить всё
Create view DO1
from Basedoc, stepdoc, spstep, katmc
where
((
stepdoc.cbasedoc == basedoc.nrec and
spstep.cstepdoc == stepdoc.nrec and
spstep.cmcusl == katmc.nrec
));
Спасибо за советы. всё получилось. Появился ещё такой вопрос может можно поставить ограничение какое-нибудь, чтобы копирование проходило только один раз, т.е. при повторном нажатии на кнопку копирование не происходило.edward_K писал(а):потому что не стоит использовать в качестве переменных имена полей. У вас же в главной вьюхе есть spstep - они имеют больший приоритет при выводе в message.
Читайте еще раз - нафига вам вообще переменные? Если уж тяжело отказаться от стереотипов, то хотя бы _ добавьте к их имени. Вообще есть некоторые правила по использованию переменных - почитайте в инете. Способов может быть много. Я придерживаюсь, что глобальные начинаются на w_, локальные на ww_
Espada писал(а): т.е. при повторном нажатии на кнопку копирование не происходило