Дублирование ключа во временной таблице

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

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

Ответить
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Дублирование ключа во временной таблице

Сообщение BlazeBio »

Ошибка дублирования возникает при вызове события cmOk, когда в браузе меняется дата у двух и более записей.

---------------------------
Ошибка
---------------------------
Дублирование уникального ключа. таблица IENTERDATA=>TEMP_DOPLATY||0F200EC4
Продолжить редактирование ?
---------------------------
Да Нет
---------------------------

Мне кажется собака зарыта в этом куске.

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

	cmOk:
	{
	  	var i:word;
	    var checkDate: boolean;
			checkDate:=true;
			  _loop temP_copy
			  {
//				message(temP_copy.sum);
				if getfirst raisealg where((temP_doplaty.raise==raisealg.raisestst))=tsOk
				{
//				  message(raisealg.sum);
				  if getfirst raisests where((raisealg.raisestst==raisests.nrec))=tsOk
				  {
//					 message(raisests.nrec);
//					 if tsOk=getfirst temP_doplaty where((temP_copy.nrec==temP_doplaty.nrec))
//					 {
						if tsOK=getfirst str_rhist where((temP_doplaty.drec==str_rhist.drec and raisests.nrec==str_rhist.craisests))// ordered by str_rhist.drec 
						{
//						   message(temP_copy.drec);
						  if str_rhist.rhsum<>temP_doplaty.sum and str_rhist.WRTYPEOPER<>30
						  {
	//					  str_rhist.craisests:=raisests.nrec;
	//					  str_rhist.cstaffstr:=staffnrec;
						  str_rhist.rhsum:=temP_doplaty.sum;
	//					  str_rhist.crstrtype:=raisests.raisetype;
	//					  str_rhist.drec:=cur_date();
	//					  str_rhist.WRTYPEOPER:=32; //код операции 32- изменение доплаты CATSTRPR.WCODOPER
	//					  str_rhist.WHATTR:=2;
						  update current str_rhist;
						  }
					    }
						else if tsOk=getlast str_rhist where((raisests.nrec==str_rhist.craisests)) ordered by str_rhist.drec 
						{
						   	dateTemp:=str_rhist.drec;
						   	message(dateTemp);
							if temP_doplaty.sum<>str_rhist.rhsum
							{
							clearbuffer(#str_rhist);
							str_rhist.craisests:=raisests.nrec;
							str_rhist.cstaffstr:=staffnrec;
							str_rhist.rhsum:=temP_doplaty.sum;
							str_rhist.crstrtype:=raisests.raisetype;
							str_rhist.drec:=temP_doplaty.drec;
							str_rhist.WRTYPEOPER:=32; //код операции 32- изменение доплаты CATSTRPR.WCODOPER
							str_rhist.WHATTR:=2;
							insert current str_rhist;
							}
							else
							{
							   message('Невозможно выполнить действие.При изменении даты доплат не был изменён процент доплат.');
							   checkDate:=false;

							   if getfirst temP_copy where((temp_doplaty.nrec==temp_copy.nrec))=tsOk
							   {
//								  message(dateTemp);
//								  Updatetable();
								  temp_doplaty.nrec:=temp_copy.drec;
//								  temp_copy.drec:=dateTemp;
//								  update current temP_copy;
								  update current temP_doplaty;
								  rescanpanel(#temP_doplaty);
							   }
							   rescanpanel(#raisests);
//							   rescanpanel(#temp_doplaty);
							   break;
//							   stop;
//							   abort;
							}
						}
//					 }
				  }
				raisealg.sum:=temP_doplaty.sum;
				update current raisealg;
			  	}
			  }
// и т.д. ----------------------------------------
Возможно решение просто, но знаете как бывает, что ошибку проще найти постороннему человеку в нашем деле, чем обнаружить её самому. :)
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: Дублирование ключа во временной таблице

Сообщение Ged »

temp_doplaty.nrec:=temp_copy.drec; ?
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Дублирование ключа во временной таблице

Сообщение BlazeBio »

Ged писал(а):temp_doplaty.nrec:=temp_copy.drec; ?
Я же говорил, что со стороны проще :)

Странно только то что не было выдано предупреждения о присвоении разных типов. В випе разве не производится проверка на сопоставление типов при компиляции?
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: Дублирование ключа во временной таблице

Сообщение Ged »

регламентируется настройками.
[Compilers]
! Уровень выдачи диагностики (0-только Error, 1-Warning и Error, 2-все : Warning, Info, Error)
ErrorLevel=2

[Vip]
! Маска предупреждения при приведении типов: 0-нет; 1-к целочисленным типам;
! 2-к вещественным типам; 4-к строковым типам; 8-к типам дата-время;
BaseTypesWarning=14
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Дублирование ключа во временной таблице

Сообщение BlazeBio »

Всё сделал. Теперь проверяет. :grin:
Ответить