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 значение.
Поидеи же все значения должны сохраниться. Из-за чего это происходит, что за Глюк? И ГЛАВНОЕ КАК ЕГО ИСПРАВИТЬ?
Далее заполняется поля таблицы (set ...) и происходит update... В примере поля не все указаны... Там как минимум Totsail2.cbasedoc заполняется, чтобы при повторном обращении по индексу позицианироваться на записи... Весь код будет достаточно громоздким.
Это логично, что spdocnal отсутствует, с 0 налог не возьмешь, но почему обнуляется поле полностью?
Т.е. Totsail2.SUMNDS был равен 1000 (к примеру), а после нулевой записи становится равен 0... Помоему это глюк, или я что-то не понимаю...
Это абсолютно нормальное поведение, т.к. отсутствие значения не эквивалентно пустому значению. В "нормальном" SQL92 сложение NULL с числом ведет к тому, что весь результат будет равен NULL (или 0 в нашем случае). Возможно, что и в Атлантисе различается обычный "0" и "0" при отсутствии записи.
Это абсолютно нормальное поведение, т.к. отсутствие значения не эквивалентно пустому значению. В "нормальном" SQL92 сложение NULL с числом ведет к тому, что весь результат будет равен NULL (или 0 в нашем случае). Возможно, что и в Атлантисе различается обычный "0" и "0" при отсутствии записи.
Спасибо за разъяснение, буду теперь иметь ввиду на будующее.