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

Re: Ошибка 310

Добавлено: 05 сен 2014, 12:50
Espada
Хоть ошибка и выскакивает, всёравно создаётся счет, заполняется шапка, проверял всем полям в DO2.spstep присвоены, но они не заносятся в счет чего-то...

Re: Ошибка 310

Добавлено: 05 сен 2014, 12:53
Dmitry_Sol
Обратите внимание на эту часть кода

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

 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;
Здесь вы работаете с буфером spstep, а вставляете запись зачем то в basedoc
так же не понятно зачем вы столько раз модифицируете поле price.

Re: Ошибка 310

Добавлено: 05 сен 2014, 13:16
Espada
согласен, прослакал) исправил, тоже самое...
Изображение

Re: Ошибка 310

Добавлено: 05 сен 2014, 13:46
Espada
хм а может ли это быть связано с тем, что я пытаюсь создать ещё один счет с такими же данными? просто у меня копирование срабатывает только со второго раза. после первого нажатия на кнопку, создаётся чистый счёт без данных. ну и ошибки конечно нет) когда нажимаю второй раз, создаётся счёт с заполненой шапкой...

Re: Ошибка 310

Добавлено: 05 сен 2014, 14:08
edward_K
Не. Просто писать нужно проще. Тогда кол-во ошибок будет сокращаться. Просмотрите еще раз все мои коменты и сделайте нормально. Когда копирование доведете до 30 строк(хотя и это много), код сюда. Больший объем смотреть нет времени.

Re: Ошибка 310

Добавлено: 05 сен 2014, 14:21
Espada
edward_K писал(а):Когда копирование доведете до 30 строк(хотя и это много), код сюда.
я не пойму как его можно так ужать? пока я присваиваю каждому полю нужные значения, это уже больше 50 строк вылезет+ создание таблиц) хоть и остаётся идентичный код, но всёравно есть, по максимуму сократил, вышло всёравно немного больше

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

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;
				  };


Re: Ошибка 310

Добавлено: 05 сен 2014, 14:27
Espada
ну да убрал весь левый код, ошибка пропала) правда теперь не видит SPSTEP вообще...

Re: Ошибка 310

Добавлено: 05 сен 2014, 14:35
Espada
добавил цикл по спецификации и опять ошибка...

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

     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;
     }

Re: Ошибка 310

Добавлено: 05 сен 2014, 14:55
edward_K
1. O2.spstep.Cstepdoc := DO2.basedoc.nrec; - почему? Должно быть stepdoc.nrec.
2. _loop viewtable нужно использовать если оно вам точно надо. Я по крайней мере никогда не встречал сего. В остальных все таки по табле. Типа DO2._loop spstep
3. Читайте внимательней мои посты еще раз. Не зачем запоминать стока данных только для того чтобы потом сделать clearbuffer и еще раз присвоить. Незачем вам и 10 view - все можно сделать и на имеющемся добавив туда синонимы, ну если так хочется то на одной дополнительной - вы сами не путаетесь?
4. logstrtofile вам в помощь - мож поймете где косячите.

Re: Ошибка 310

Добавлено: 08 сен 2014, 11:15
Espada
edward_K писал(а):1. O2.spstep.Cstepdoc := DO2.basedoc.nrec; - почему? Должно быть stepdoc.nrec.
2. _loop viewtable нужно использовать если оно вам точно надо. Я по крайней мере никогда не встречал сего. В остальных все таки по табле. Типа DO2._loop spstep
3. Читайте внимательней мои посты еще раз. Не зачем запоминать стока данных только для того чтобы потом сделать clearbuffer и еще раз присвоить. Незачем вам и 10 view - все можно сделать и на имеющемся добавив туда синонимы, ну если так хочется то на одной дополнительной - вы сами не путаетесь?
4. logstrtofile вам в помощь - мож поймете где косячите.
Решил начать с чистого листа, со всеми поправками. на начальном этапе при получении данных из Basedoc вставил цикл, и решил проверить как работает, оказалось что выводятся только последнее значение n-е количество раз(n-количество строк в спецификации). может подскажете строчки поменять какие, или нз что:

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

	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

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

Create view DO1
from Basedoc, stepdoc, spstep, katmc
where
((
	stepdoc.cbasedoc == basedoc.nrec and
	spstep.cstepdoc == stepdoc.nrec and
	spstep.cmcusl == katmc.nrec
));

Re: Ошибка 310

Добавлено: 08 сен 2014, 11:55
edward_K
потому что не стоит использовать в качестве переменных имена полей. У вас же в главной вьюхе есть spstep - они имеют больший приоритет при выводе в message.
Читайте еще раз - нафига вам вообще переменные? Если уж тяжело отказаться от стереотипов, то хотя бы _ добавьте к их имени. Вообще есть некоторые правила по использованию переменных - почитайте в инете. Способов может быть много. Я придерживаюсь, что глобальные начинаются на w_, локальные на ww_

Re: Ошибка 310

Добавлено: 11 сен 2014, 15:54
Espada
edward_K писал(а):потому что не стоит использовать в качестве переменных имена полей. У вас же в главной вьюхе есть spstep - они имеют больший приоритет при выводе в message.
Читайте еще раз - нафига вам вообще переменные? Если уж тяжело отказаться от стереотипов, то хотя бы _ добавьте к их имени. Вообще есть некоторые правила по использованию переменных - почитайте в инете. Способов может быть много. Я придерживаюсь, что глобальные начинаются на w_, локальные на ww_
Спасибо за советы. всё получилось. Появился ещё такой вопрос может можно поставить ограничение какое-нибудь, чтобы копирование проходило только один раз, т.е. при повторном нажатии на кнопку копирование не происходило.

Re: Ошибка 310

Добавлено: 11 сен 2014, 16:06
Den
Espada писал(а): т.е. при повторном нажатии на кнопку копирование не происходило

а если в чем то ошиблись в наборе спецификации базового документа и потом нужно будет этот поправить, после того как уже копию сделали ?

Re: Ошибка 310

Добавлено: 12 сен 2014, 07:30
Алексей
копию удалить, поправить скопировать заново.
проверить можно только если вы в копии ссылку сделаете на оригинал через какое-нибудь поле и перед копированием будете проверять на существование копии.

Re: Ошибка 310

Добавлено: 18 сен 2014, 14:27
Espada
Ну вроде всё хорошо работает, потестили неделю, всё создаётся нормально. Как лучше теперь все данные(с обоих счетов) вывести в один отчет? Один счет в ДО на продажу, второй в ДО на предоплату... формирую отчет из ДО на предоплату, вывел все данные со счета, а как связать этот отчет со счетом в ДО на продажу не знаю...