Страница 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" при отсутствии записи.
Спасибо за разъяснение, буду теперь иметь ввиду на будующее.