отработка процедуры в IB75

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
RAmes
Сообщения: 4
Зарегистрирован: 27 фев 2008, 12:03

отработка процедуры в IB75

Сообщение RAmes » 04 мар 2008, 15:15

Отработка процедуры на отладке и фактически различается.
Вот ее часть, где она не так отрабатывает
"update pbu s1
set
s1.ona = :VONA,
s1.saldo_vvr_end =:vsaldo_vvr
where ((s1.code_os=:code_os) and (s1.DATE_OST=:DAT))"
когда в отладчике смотрю суммы переменных "VONA" и "vsaldo_vvr " то они равны "217,85". А выполнив процедуру обнаруживаю, что вместо "217,85" записана в таблице сумма "- 775,75". С чем это может быть связано?

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 04 мар 2008, 16:06

отладчику верить нельзя, ищи ошибку в процедуре.
в данном апдейте ошибок вроде нет.

использий тег [code][/code] !

RAmes
Сообщения: 4
Зарегистрирован: 27 фев 2008, 12:03

Сообщение RAmes » 04 мар 2008, 16:16

как нельзя? тогда смысл отладчика вообще? у меня в этой процедуре не у всех объектов такие странности происходят, т.е. из массива объектов только с одним такое происходит, а в отладчике нормально показывает отработку, а фактически не тот результат

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 04 мар 2008, 17:07

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

По твоему вопросу - проверь арифметику, особенно целочисленную. У тебя третий диалект?
Желательно привести более-менее полный код процедуры, а также версию сервера, на котором она выполняется.

RAmes
Сообщения: 4
Зарегистрирован: 27 фев 2008, 12:03

Сообщение RAmes » 05 мар 2008, 12:44

"declare variable vona numeric(15,2);
declare variable vproc numeric(15,2);
declare variable vrazn_vvr numeric(15,2);
........
VONA=0
vrazn_vvr=0
select имя_столбца from имя_таблицы into :vproc;
vproc=vproc/100;
........
vrazn_VVR =VRAZN_BUH_NAL;
VONA= cast((VRAZN_VVR *vproc) as NUMERIC(15,2));
Vsaldo_VVR=VSUMMA_VVR+VONA;
........
update имя_таблицы s1
set
s1.ona = :VONA,
s1.saldo_vvr_end =:vsaldo_vvr
where ((s1.code_os=:code_os) and (s1.DATE_OST=:DAT));"

3-й диалект, InetrBase Server 7.5

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 05 мар 2008, 13:11

Ты указал типы не всех полей.
Кроме того, неясно начальное значение некоторых переменных.
В общем, твой пример у меня работает замечательно. Правда, на FB2. Криминала в вычислениях вроде не вижу.

У тебя точно нет триггера на апдейт?

RAmes
Сообщения: 4
Зарегистрирован: 27 фев 2008, 12:03

Сообщение RAmes » 06 мар 2008, 09:00

Триггера на апдейт нету.
я уже разобрался, в конце алгоритма при помощи другой переменной в эти поля значения заносились. Алгоритм весомый, просто не доглядел.
мне стыдно =(

Ответить