Ошибка 310

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

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

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

Re: Ошибка 310

Сообщение Espada »

Хоть ошибка и выскакивает, всёравно создаётся счет, заполняется шапка, проверял всем полям в DO2.spstep присвоены, но они не заносятся в счет чего-то...
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Re: Ошибка 310

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

Re: Ошибка 310

Сообщение Espada »

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

Re: Ошибка 310

Сообщение Espada »

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

Re: Ошибка 310

Сообщение edward_K »

Не. Просто писать нужно проще. Тогда кол-во ошибок будет сокращаться. Просмотрите еще раз все мои коменты и сделайте нормально. Когда копирование доведете до 30 строк(хотя и это много), код сюда. Больший объем смотреть нет времени.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение 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;
				  };

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

Re: Ошибка 310

Сообщение Espada »

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

Re: Ошибка 310

Сообщение 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;
     }
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Ошибка 310

Сообщение edward_K »

1. O2.spstep.Cstepdoc := DO2.basedoc.nrec; - почему? Должно быть stepdoc.nrec.
2. _loop viewtable нужно использовать если оно вам точно надо. Я по крайней мере никогда не встречал сего. В остальных все таки по табле. Типа DO2._loop spstep
3. Читайте внимательней мои посты еще раз. Не зачем запоминать стока данных только для того чтобы потом сделать clearbuffer и еще раз присвоить. Незачем вам и 10 view - все можно сделать и на имеющемся добавив туда синонимы, ну если так хочется то на одной дополнительной - вы сами не путаетесь?
4. logstrtofile вам в помощь - мож поймете где косячите.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение 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
));
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Ошибка 310

Сообщение edward_K »

потому что не стоит использовать в качестве переменных имена полей. У вас же в главной вьюхе есть spstep - они имеют больший приоритет при выводе в message.
Читайте еще раз - нафига вам вообще переменные? Если уж тяжело отказаться от стереотипов, то хотя бы _ добавьте к их имени. Вообще есть некоторые правила по использованию переменных - почитайте в инете. Способов может быть много. Я придерживаюсь, что глобальные начинаются на w_, локальные на ww_
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Ошибка 310

Сообщение Espada »

edward_K писал(а):потому что не стоит использовать в качестве переменных имена полей. У вас же в главной вьюхе есть spstep - они имеют больший приоритет при выводе в message.
Читайте еще раз - нафига вам вообще переменные? Если уж тяжело отказаться от стереотипов, то хотя бы _ добавьте к их имени. Вообще есть некоторые правила по использованию переменных - почитайте в инете. Способов может быть много. Я придерживаюсь, что глобальные начинаются на w_, локальные на ww_
Спасибо за советы. всё получилось. Появился ещё такой вопрос может можно поставить ограничение какое-нибудь, чтобы копирование проходило только один раз, т.е. при повторном нажатии на кнопку копирование не происходило.
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Ошибка 310

Сообщение Den »

Espada писал(а): т.е. при повторном нажатии на кнопку копирование не происходило

а если в чем то ошиблись в наборе спецификации базового документа и потом нужно будет этот поправить, после того как уже копию сделали ?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Ошибка 310

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

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

Re: Ошибка 310

Сообщение Espada »

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