-
Суть: Имеется процедура CREATE PROCEDURE SPISAN ( HEADER_ID INTEGER) AS DECLARE VARIABLE N VARCHAR(100) CHARACTER SET WIN1251; DECLARE VARIABLE N_ID INTEGER; DECLARE VARIABLE KOL DOUBLE PRECISION; DECLARE VARIABLE CEN_SPIS DOUBLE PRECISION; DECLARE VARIABLE O INTEGER; DECLARE VARIABLE ID INTEGER; DECLARE VARIABLE S INTEGER; DECLARE VARIABLE P_ID INTEGER; DECLARE VARIABLE KOL_TEK1 DOUBLE PRECISION; DECLARE VARIABLE TEMP DOUBLE PRECISION; BEGIN SELECT OPER, SOST_ID FROM HEADER WHERE HEADER_ID = :HEADER_ID INTO :O, :S; IF ((O = 2) AND (S = 1)) THEN BEGIN FOR SELECT SALES_ID, NOM_ID, CAST(CAST( (KOLOUT * 1000) AS INTEGER) AS FLOAT) / 1000 FROM SALES WHERE HEADER_ID = :HEADER_ID INTO :ID, :N_ID, :KOL DO BEGIN FOR SELECT PARTS_ID, CAST( CAST( (KOL_TEK * 1000) AS INTEGER) AS FLOAT) / 1000, CENA_RUB FROM PARTS WHERE ((NOM_ID = :N_ID) AND ((CAST( CAST( (KOL_TEK * 1000) AS INTEGER) AS FLOAT) / 1000) > 0)) ORDER BY DATE_OPER, PARTS_ID INTO :P_ID, :KOL_TEK1, :CEN_SPIS DO BEGIN IF ((KOL_TEK1) >= KOL) THEN BEGIN
TEMP = :KOL_TEK1 - :KOL;
UPDATE PARTS SET KOL_TEK = IIF(:TEMP < 0,0,:TEMP) WHERE PARTS_ID = :P_ID;
INSERT INTO SPISANIE (SALES_ID,PARTS_ID,KOL_OUT,CENA_SPIS) VALUES (:ID, :P_ID, :KOL, :CEN_SPIS);
KOL = 0; KOL_TEK1 = 0;
BREAK;
END ELSE BEGIN
UPDATE PARTS SET KOL_TEK = 0 WHERE PARTS_ID = :P_ID;
INSERT INTO SPISANIE (SALES_ID,PARTS_ID,KOL_OUT,CENA_SPIS) VALUES (:ID, :P_ID, :KOL_TEK1, :CEN_SPIS);
KOL = KOL - KOL_TEK1;
END END IF (KOL > 0) THEN BEGIN EXCEPTION NOT_SATIS; END END UPDATE HEADER SET SOST_ID = 2 WHERE HEADER_ID = :HEADER_ID; UPDATE SALES SET SOST_ID = 2 WHERE HEADER_ID = :HEADER_ID; END WHEN EXCEPTION NOT_SATIS DO BEGIN SELECT TRIM(NAME) FROM NOMETKLATURA WHERE NOM_ID = :N_ID INTO :N; EXCEPTION NOT_SATIS 'НЕ ХВАТАЕТ ' || :KOL || ' ' || :N || ' (' || :N_ID || ')'; END WHEN ANY DO BEGIN SELECT TRIM(NAME) FROM NOMETKLATURA WHERE NOM_ID = :N_ID INTO :N; EXCEPTION NOT_SATIS 'ОШИБКА СПИСАНИЯ ' || :KOL || :KOL_TEK1 || :N || ' (' || :N_ID || ')'; END END
При отрабатывании возбуждается исключение
NOT_SATIS. НЕ ХВАТАЕТ 3.552713678800501e-015 ТИК MICRO ТВИЛЛ C 4040/6044 ЦВЕТ:5522 (750). At procedure 'SPISAN'.
прохожу отладчиком - все нормально.
К какому типу лучше привести для рассчетов или, возможно, есть другой вариант?
-
Проблему решил. Остался один вопрос - почему при вызове возбуждается исключение, а при отладке нет. Работаю в Эксперте.
-
> Mike Kouzmine (16.02.10 15:37) [1]
В отладчике отображаются значения переменных - можно посмотреть. А вообще, отладчик в ibe не совсем "отладчик" :)
-
turbouser © (16.02.10 16:55) [2] Я уже понял. Жаль.
|