Ошибка 310

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

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

Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Ошибка 310

Сообщение Espada »

Здравствуйте, возникла такая проблемка: в счетах на продажу сделал кнопку, для создания ДО на предоплату. всё создаётся нормально, однако не могу добавить спецификацию... проблема в одной ошибке "ПРИКЛАДНАЯ ОШИБКА. ОТСУТСТВУЕТ ПОЗИЦИЯ В ТАБЛИЦЕ. КОД ОШИБКИ:310. ТАБЛИЦА №1103". 1103 это StepDOC. может подскажете в чём может быть причина ошибки?
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Ошибка 310

Сообщение edward_K »

310 это вроде нет записи по условию поиска
если писать if getfirst ??? where (( ???? ))=0 то ошибки не будет. Видимо Stepdoc вы не создали или не так ищите. код в студию.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение Espada »

edward_K писал(а):310 это вроде нет записи по условию поиска
если писать if getfirst ??? where (( ???? ))=0 то ошибки не будет. Видимо Stepdoc вы не создали или не так ищите. код в студию.
basedocnrec:comp
StepBasenrec:comp
Create view DO1
from Basedoc, Stepdoc
where
((
basedocnrec == basedoc.nrec
));
Create view DO2
from Basedoc, Spstep
;
Create view DO1_sp
from spstep
where
((
spnrec == spstep.nrec
));
Create view DO2_sp
from Basedoc, Stepdoc
where
((
basedocnrec == basedoc.nrec and
StepBasenrec == stepdoc.nrec
))
;
cmbut1:
{

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_sp.getfirst Spstep = tsOk)
{
NomPP := DO1_sp.spstep.NPP;
Name := DO1_sp.spstep.PRMC;
Barkod := 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;
};

if (DO2.getfirst Basedoc = tsOk and DO2.getfirst Spstep =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 := '0';
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 := DO2.basedoc.nrec;

if(DO2_sp.getfirst Stepdoc = tsOk)
{
DO2_sp.clearbuffer(DO2_sp.tnstepdoc);
DO2_sp.stepdoc.nrec := StepBasenrec;
DO2_sp.insert current StepDoc;
j:= j + 1;
message(StepBasenrec);
};
....

вот всё что с этим связано
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Ошибка 310

Сообщение edward_K »

stepdoc.nrec <> basedoc.nrec
с чего вы взяли то что равны? там 0 оставляете чтобы сгенерился в автомате. А basedoc.nrec в stepdoc.cbasedoc
Ну и view DO1 переписать нужно и StepDocNRec не правильно определяете соотв.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение Espada »

edward_K писал(а):stepdoc.nrec <> basedoc.nrec
с чего вы взяли то что равны? там 0 оставляете чтобы сгенерился в автомате. А basedoc.nrec в stepdoc.cbasedoc
Ну и view DO1 переписать нужно и StepDocNRec не правильно определяете соотв.
согласен, прослакал... stepdoc.cbasedoc =basedoc.nrec.
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение Espada »

edward_K писал(а): Ну и view DO1 переписать нужно и StepDocNRec не правильно определяете соотв.
не совсем понял про, про что вы...
DO1 ===> Create view DO1
from Basedoc
where
((
basedocnrec == basedoc.nrec
));
а StepBasenrec := DO2.basedoc.nrec;
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Ошибка 310

Сообщение edward_K »

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

Create view DO2_sp
from Basedoc, Stepdoc
where
((
basedocnrec == basedoc.nrec and
StepBasenrec == stepdoc.сBasedoc
))
;
....
StepBasenrec:=basedocnrec
if(DO2_sp.getfirst Stepdoc = tsOk)
{
... 
  DO2_sp.stepdoc.cBasedoc := Do2.basedoc.nrec;
хотя нафига вам стока вьюшек
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение Espada »

edward_K писал(а):хотя нафига вам стока вьюшек
вы гений) почистил немного, сделал как сказали) всё работает. Спасибо огромное)
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение Espada »

Может еще подскажете, что я со спецификациями делаю не так?

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

...
Create view DO2
from Basedoc, Spstep
where
((
	 spnrec == spstep.nrec 
));
...
 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 and DO2.getfirst Spstep =tsOk)
			{
			  DO2.clearbuffer(DO2.tnbasedoc);
                  DO2.clearbuffer(DO2.tnspstep);
			  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.spstep.NPP := NomPP;
			  DO2.spstep.CMCUSL := Name;
			  DO2.spstep.Cotped := Otped;
			  DO2.spstep.Kol := Kolvo;
			  DO2.spstep.Price := Cena;
			  DO2.spstep.Summa := Summa;
			  DO2.spstep.NDS := NDS;
			  DO2.spstep.Cpricelist := Prices;
			  DO2.insert current spstep;
			  DO2.insert current basedoc;
			  j:= j + 1;
			};

в переменные данные попадают правильно(проверял message), но вывести их не получается...
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Ошибка 310

Сообщение edward_K »

1. есть журнал
2. а кто будет заполнять cstepdoc?
3. я делаю проще. в синониме нахожу запись. там обнуляю nrec и устанавливаю нужные поля - здесь cstepdoc хватит и все.
синоним нужен чтобы не поломать _loop fullcache spstep
4. там еще есть табла с налогами - но эт вы уж по журналу смотрите.
да. и вот это
DO2.insert current spstep;
DO2.insert current basedoc;
должно быть в другом порядке - basedoc,stepdoc,spstep
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение Espada »

edward_K писал(а):1. есть журнал
2. а кто будет заполнять cstepdoc?
3. я делаю проще. в синониме нахожу запись. там обнуляю nrec и устанавливаю нужные поля - здесь cstepdoc хватит и все.
синоним нужен чтобы не поломать _loop fullcache spstep
4. там еще есть табла с налогами - но эт вы уж по журналу смотрите.
да. и вот это
DO2.insert current spstep;
DO2.insert current basedoc;
должно быть в другом порядке - basedoc,stepdoc,spstep
разделил заполнение на 2 части чтобы было basedoc-stepdoc-spstep. ввожу переменную

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

		StepNrec := stepdoc.nrec;
			if (DO2.getfirst Spstep = tsOk)
			{
			 ...
			  DO2.spstep.cstepdoc := StepNrec;
выкидывает ошибку №5 дублированное значение при уникальном ключе. в Таблице SPSTEP повторяется значение поля NREC: "281474979235634"
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Ошибка 310

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

так обнуляйте nrec перед встакой в таблицу :) выше же писали уже об этом :)
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение Espada »

Алексей писал(а):так обнуляйте nrec перед встакой в таблицу
а функция DO2.clearbuffer разве не должна освобождать так скажем от этого?
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Ошибка 310

Сообщение edward_K »

она то должна - если вы ее правильно вызвали. Но смысл очищать все а потом заполнять 30 полей, когда можно обойтись 2?
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение Espada »

edward_K писал(а):она то должна - если вы ее правильно вызвали. Но смысл очищать все а потом заполнять 30 полей, когда можно обойтись 2?
поставил обнуление в самом начале, даже оставил очистку буфера, разделил заполнение, чтобы было по порядку basedoc-stepdoc-spstep... всёравно высвечивается дублирование Nreca

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

...
StepBasenrec:= 0;
StepNrec := 0;
 NomPP := 0;
 Name := 0;
 OtpEd := 0;
 Kolvo := 0;
 cena := 0;
 Summa := 0;
 NDS := 0;
			  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;
                      vprice     := DO1.SPSTEP.price;
                      rprice     := DO1.SPSTEP.price;
                      rvprice    := 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.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;
}

...
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Ответить