Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2011.11.20;
Скачать: [xml.tar.bz2];

Вниз

Беда с двойной точностью   Найти похожие ветки 

 
Mike Kouzmine   (2010-02-16 15:28) [0]

Суть:
Имеется процедура
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   (2010-02-16 15:37) [1]

Проблему решил.
Остался один вопрос - почему при вызове возбуждается исключение, а при отладке нет. Работаю в Эксперте.


 
turbouser ©   (2010-02-16 16:55) [2]


> Mike Kouzmine   (16.02.10 15:37) [1]

В отладчике отображаются значения переменных - можно посмотреть.
А вообще, отладчик в ibe не совсем "отладчик" :)


 
Mike Kouzmine   (2010-02-17 09:12) [3]

turbouser ©   (16.02.10 16:55) [2] Я уже понял. Жаль.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2011.11.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
6-1245011712
batya15
2009-06-15 00:35
2011.11.20
Работа с http без компонентов


15-1311884998
Юрий
2011-07-29 00:29
2011.11.20
С днем рождения ! 29 июля 2011 пятница


15-1310970242
Дмитрий С
2011-07-18 10:24
2011.11.20
Кто нибудь тут может подключить...


4-1251885319
LightGreen
2009-09-02 13:55
2011.11.20
WM_CHAR - кодировка символов


2-1311757172
SQLEXPRESS
2011-07-27 12:59
2011.11.20
Работать с Word, не через буфер обмена





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский