Страница 1 из 1
					
				Непонятное обнуление
				Добавлено: 02 сен 2005, 16:26
				 DarkAngel27
				Код: Выделить всё
       If getfirst Totsail2 where (( do_nrec == Totsail2.cbasedoc )) <> tsOK then
           If insert in Totsail2<>tsOK then
              {
               message('Не удалось добавить запись в структуру Totsail2');
               exit;
              }
           if spsopr.price <> 0 then 
           {
	    set Totsail2.SUMNDS   := Totsail2.SUMNDS + spdocnal.summa;
  	    set Totsail2.SUMMA    := Totsail2.SUMMA + spsopr.kolfact*spsopr.price + spdocnal.summa;
           }
           update current Totsail2;
Если убрать условие spsopr.price <> 0, то при нулевом значении spsopr.price поля Totsail2.SUMNDS  и Totsail2.SUMMA принимают 0 значение.
Поидеи же все значения должны сохраниться. Из-за чего это происходит, что за Глюк? 

 И ГЛАВНОЕ КАК ЕГО ИСПРАВИТЬ?
 
			 
			
					
				
				Добавлено: 02 сен 2005, 16:34
				 Max_Fin
				кажись в insert'e current упущен
			 
			
					
				
				Добавлено: 02 сен 2005, 17:07
				 DarkAngel27
				Там не нужен current, т.к. запись вставляется пустая... К тому же работает все прекрасно если spsopr.price <> 0.
			 
			
					
				
				Добавлено: 02 сен 2005, 17:18
				 Max_Fin
				а далее - что в таком случае апдейтиться будет?
			 
			
					
				
				Добавлено: 02 сен 2005, 17:49
				 DarkAngel27
				Далее заполняется поля таблицы (set ...) и происходит update... В примере поля не все указаны... Там как минимум Totsail2.cbasedoc заполняется, чтобы при повторном обращении по индексу позицианироваться на записи... Весь код будет достаточно громоздким.
			 
			
					
				
				Добавлено: 02 сен 2005, 18:16
				 san
				похоже нет подходящей позиции в spdocnal, вот и теряются значения при суммировании, "Ошибка при вычислении"
			 
			
					
				
				Добавлено: 03 сен 2005, 13:04
				 DarkAngel27
				Это логично, что spdocnal отсутствует, с 0 налог не возьмешь, но почему обнуляется поле полностью?
Т.е. Totsail2.SUMNDS  был равен 1000 (к примеру), а после нулевой записи становится равен 0... Помоему это глюк, или я что-то не понимаю...
			 
			
					
				
				Добавлено: 05 сен 2005, 06:32
				 Алексей
				Так получается.  В таблице нет записи, значит нет позиционирования. Каким то образом она стирает значения. Я тоже на этом попадался.
Попробуйте сделать так:
if (getfirst spdocnal)=tsOK then Totsail2.SUMNDS   := Totsail2.SUMNDS + spdocnal.summa;
			 
			
					
				
				Добавлено: 05 сен 2005, 10:17
				 DarkAngel27
				Спасибо, я сделал немоного другим способом, просто думал, что это как-то исправляется не кодом... Спасибо всем за помощь.
			 
			
					
				
				Добавлено: 05 сен 2005, 12:15
				 WiRuc
				Это абсолютно нормальное поведение, т.к. отсутствие значения не эквивалентно пустому значению. В "нормальном" SQL92 сложение NULL с числом ведет к тому, что весь результат будет равен NULL (или 0 в нашем случае). Возможно, что и в Атлантисе различается обычный "0" и "0" при отсутствии записи.
			 
			
					
				
				Добавлено: 05 сен 2005, 12:26
				 DarkAngel27
				
Это абсолютно нормальное поведение, т.к. отсутствие значения не эквивалентно пустому значению. В "нормальном" SQL92 сложение NULL с числом ведет к тому, что весь результат будет равен NULL (или 0 в нашем случае). Возможно, что и в Атлантисе различается обычный "0" и "0" при отсутствии записи.
Спасибо за разъяснение, буду теперь иметь ввиду на будующее.