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

Ошибка 310

Добавлено: 03 сен 2014, 12:58
Espada
Здравствуйте, возникла такая проблемка: в счетах на продажу сделал кнопку, для создания ДО на предоплату. всё создаётся нормально, однако не могу добавить спецификацию... проблема в одной ошибке "ПРИКЛАДНАЯ ОШИБКА. ОТСУТСТВУЕТ ПОЗИЦИЯ В ТАБЛИЦЕ. КОД ОШИБКИ:310. ТАБЛИЦА №1103". 1103 это StepDOC. может подскажете в чём может быть причина ошибки?

Re: Ошибка 310

Добавлено: 03 сен 2014, 13:33
edward_K
310 это вроде нет записи по условию поиска
если писать if getfirst ??? where (( ???? ))=0 то ошибки не будет. Видимо Stepdoc вы не создали или не так ищите. код в студию.

Re: Ошибка 310

Добавлено: 03 сен 2014, 16:44
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);
};
....

вот всё что с этим связано

Re: Ошибка 310

Добавлено: 03 сен 2014, 16:53
edward_K
stepdoc.nrec <> basedoc.nrec
с чего вы взяли то что равны? там 0 оставляете чтобы сгенерился в автомате. А basedoc.nrec в stepdoc.cbasedoc
Ну и view DO1 переписать нужно и StepDocNRec не правильно определяете соотв.

Re: Ошибка 310

Добавлено: 03 сен 2014, 17:00
Espada
edward_K писал(а):stepdoc.nrec <> basedoc.nrec
с чего вы взяли то что равны? там 0 оставляете чтобы сгенерился в автомате. А basedoc.nrec в stepdoc.cbasedoc
Ну и view DO1 переписать нужно и StepDocNRec не правильно определяете соотв.
согласен, прослакал... stepdoc.cbasedoc =basedoc.nrec.

Re: Ошибка 310

Добавлено: 03 сен 2014, 18:06
Espada
edward_K писал(а): Ну и view DO1 переписать нужно и StepDocNRec не правильно определяете соотв.
не совсем понял про, про что вы...
DO1 ===> Create view DO1
from Basedoc
where
((
basedocnrec == basedoc.nrec
));
а StepBasenrec := DO2.basedoc.nrec;

Re: Ошибка 310

Добавлено: 03 сен 2014, 18:18
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;
хотя нафига вам стока вьюшек

Re: Ошибка 310

Добавлено: 03 сен 2014, 18:46
Espada
edward_K писал(а):хотя нафига вам стока вьюшек
вы гений) почистил немного, сделал как сказали) всё работает. Спасибо огромное)

Re: Ошибка 310

Добавлено: 04 сен 2014, 16:41
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), но вывести их не получается...

Re: Ошибка 310

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

Re: Ошибка 310

Добавлено: 04 сен 2014, 17:41
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"

Re: Ошибка 310

Добавлено: 04 сен 2014, 17:43
Алексей
так обнуляйте nrec перед встакой в таблицу :) выше же писали уже об этом :)

Re: Ошибка 310

Добавлено: 04 сен 2014, 19:29
Espada
Алексей писал(а):так обнуляйте nrec перед встакой в таблицу
а функция DO2.clearbuffer разве не должна освобождать так скажем от этого?

Re: Ошибка 310

Добавлено: 04 сен 2014, 19:36
edward_K
она то должна - если вы ее правильно вызвали. Но смысл очищать все а потом заполнять 30 полей, когда можно обойтись 2?

Re: Ошибка 310

Добавлено: 05 сен 2014, 12:35
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;
}

...