| 
    
            
         
         | 
    
    
  | 
v7: Фигня какая-то. Машинный ноль? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        ik    
     29.11.17 
            ✎
    20:15 
 | 
         
        "Адаптировал" сейчас внешнюю печатную форму УПД к старенькой-переддоделанной ТиС. Наткнулся на то, что не всегда выполняется условие сравнения с 0. Аж глазам не поверил - проверил даже тип значения в отладчике - всё по честному: число, 0, но условие на <= 0 не выполняется.
 
        Пришлось сравнивать с 0.00001  | 
|||
| 
    1
    
        mehfk    
     29.11.17 
            ✎
    20:23 
 | 
         
        А ты подготовь пример, чтобы любой мог проверить.     
         | 
|||
| 
    2
    
        ik    
     29.11.17 
            ✎
    20:37 
 | 
         
        Боюсь, не получится. Из 7 строк "тестовой" накладной, проблема возникала на одной (забавно, но на первой)
 
        Вот здесь условие выполнялось при ОстКолво=0 (по отладчику и по смыслу): Если (ОстКолво > 0) и (ОстКолво < ВсегоКол) Тогда  | 
|||
| 
    3
    
        Злопчинский    
     29.11.17 
            ✎
    20:38 
 | 
         
        (2) имхо вы заблуждаетесь     
         | 
|||
| 
    4
    
        ik    
     29.11.17 
            ✎
    20:39 
 | 
         
        И вот здесь
 
        Если ТаблицаГТД.Количество <= 0 Тогда  | 
|||
| 
    5
    
        ik    
     29.11.17 
            ✎
    20:40 
 | 
         
        Как уже говорил, вылечил заменив 0 на 0.00001     
         | 
|||
| 
    6
    
        mishaPH    
     модератор 
    29.11.17 
            ✎
    20:42 
 | 
         
        (5) бред какой-то. никогда так не делал     
         | 
|||
| 
    7
    
        ik    
     29.11.17 
            ✎
    20:42 
 | 
         
        XEON E5-2620     
         | 
|||
| 
    8
    
        1c-bs    
     29.11.17 
            ✎
    20:43 
 | 
         
        (7) Вирус?     
         | 
|||
| 
    9
    
        ik    
     29.11.17 
            ✎
    20:44 
 | 
         
        (6) А как? В поисках я даже через ПустоеЗначение() прошел. Увы - тоже давало 0.     
         | 
|||
| 
    10
    
        ik    
     29.11.17 
            ✎
    20:44 
 | 
         
        (8) Кхм.. Маловероятно, но.. Сейчас проверю.     
         | 
|||
| 
    11
    
        mishaPH    
     модератор 
    29.11.17 
            ✎
    20:49 
 | 
         
        (9) всегда сравниваю все с 0 во всех конструкциях.     
         | 
|||
| 
    12
    
        mishaPH    
     модератор 
    29.11.17 
            ✎
    20:50 
 | 
         
        ВсегоКол или ост может не число?
 
        все значения в Число(ВсегоКол) сделай проверь  | 
|||
| 
    13
    
        mishaPH    
     модератор 
    29.11.17 
            ✎
    20:51 
 | 
         
        точнее все что с чем сравниваешь приведи к числу     
         | 
|||
| 
    14
    
        ik    
     29.11.17 
            ✎
    20:58 
 | 
         
        KVRT вирусов не нашёл.
 
        (12) - в первом сообщении ч писал >проверил даже тип значения в отладчике - всё по честному: число, 0  | 
|||
| 
    15
    
        ik    
     29.11.17 
            ✎
    21:02 
 | 
         
        Ладно, что есть,то есть. Удивило изрядно.     
         | 
|||
| 
    16
    
        1c-bs    
     29.11.17 
            ✎
    21:04 
 | 
         
        (0) А что в таблицах лежит? 0 или 0,00001?     
         | 
|||
| 
    17
    
        ik    
     29.11.17 
            ✎
    21:18 
 | 
         
        (16) По смыслу - 0 (результат вычитания из 20 штук 20). Отладчик кажет 0. Что "думают" об этом процессор и платформа - не знаю.     
         | 
|||
| 
    18
    
        Злопчинский    
     30.11.17 
            ✎
    00:37 
 | 
         
        Ну проверь на другом сервакн     
         | 
|||
| 
    19
    
        VladZ    
     30.11.17 
            ✎
    04:43 
 | 
         
        (0) Скорей всего в базе где-то лежит именно "0.00001". Либо найди, откуда это "пришло". Либо при проверке округляй до 3го знака.     
         | 
|||
| 
    20
    
        Mr_Rm    
     30.11.17 
            ✎
    10:07 
 | 
         
        Если проблема только на первой строке, то вероятно, что где-то неинициализированная переменная. Имя "ОстКолво" везде одинаково написано, без латинских букв? 
 
        Чему равны Строка(ОстКолво) и ОстКолво*100000? Что, если сравнивать с 0.0001, 0.001 и т.д.?  | 
|||
| 
    21
    
        skafandr    
     30.11.17 
            ✎
    10:15 
 | 
         
        (0)конь в вакууме? Удивляться можно только в варианте штучного товара.Если же количество в каких-то местах пересчитывается и с полной точностью и не округляется то 0.00001 получается очень легко.     
         | 
|||
| 
    22
    
        Масянька    
     30.11.17 
            ✎
    10:19 
 | 
         
        (17) По смыслу - нужно проверять...
 
        Поясняю: там везде идет пересчет (и кол-ва, и суммы). Опытным путем уже было установлено, что результат пересчета получается безо всяких округлений, а округляется уже потом. Судя по всему - где-то зависает эта единица (в периоде после запятой), а при перерасчете вылазит (см. (19)). Ну, и как вариант - допилить пересчеты (проверка кол-ва/суммы на последнее (т. е. остаток = списать) и списывать без перерасчета.  | 
|||
| 
    23
    
        Dump    
     02.12.17 
            ✎
    09:41 
 | 
         
        ""Адаптировал" сейчас внешнюю печатную форму УПД к старенькой-переддоделанной ТиС."
 
        Имеем 2 неизвестных - переписанную базу и переделанную ВПФ. Что тут можно посоветовать? Это даже не телепат - телепаь в квадрате ;-)  | 
|||
| 
    24
    
        mexanik_96    
     02.12.17 
            ✎
    10:10 
 | 
         
        (0) дефайн 0 0.00001     
         | 
|||
| 
    25
    
        Z1    
     02.12.17 
            ✎
    10:18 
 | 
         
        (0) Типы надо приводить к одному виду
 
        Если 99% интерпритатор это за Вас делает правильно это не значит что в оставшемся 1% результат тоже будет правильным. Это касается любых языков программирования а не только 1с Т.е в 2 надо написать Если (ОстКолво > 0.0) Еще возможная причина если у Вас на форме определен ОстКолво как 15.2 то при занесении в ОстКолво числа 0.000001 в ОстКолво занесется 0.0  | 
|||
| 
    26
    
        Otark    
     02.12.17 
            ✎
    10:38 
 | 
         
        (25)>>Т.е в 2 надо написать Если (ОстКолво > 0.0) 
 
        можно рекомендацию от 1с где это написано. Я просто не разу не видел в типовых такого сравнения. Я вообще первый раз слышу что в 1с число может быть целым или дробным как в других ЯП. И значит у меня должна быть возможность привести переменную к этому типу?  | 
|||
| 
    27
    
        nordbox    
     02.12.17 
            ✎
    10:47 
 | 
         
        в других языках есть Integer и Real
 
        в 1с есть просто Число но у него есть формат числа.  | 
|||
| 
    28
    
        Z1    
     02.12.17 
            ✎
    10:49 
 | 
         
        (26) Причем тут 1с в машинных кодах процессора число или целое или вещественное и это число имеет определенную длину (разрядность )
 
        тоже само скажи Если ( 10/3) * 3 = 10.0 Тогда Сообщить("Равно"); Иначе Сообщить("Не равно"); КонецЕсли; Какой будет результ. В общем случае результат неопределен непредсказуем и завист от конкретной РЕАЛИЗАЦИИ языка на машинные коды  | 
|||
| 
    29
    
        Dump    
     02.12.17 
            ✎
    10:59 
 | 
         
        Про другие языки не скажу - только 1с 7.7
 
        "Еще возможная причина если у Вас на форме определен ОстКолво как 15.2 то при занесении в ОстКолво числа 0.000001 в ОстКолво занесется 0.0" Самая вероятная ошибка - сначала округление, потом сравнение "Если (ОстКолво > 0.0) " - в 1с не имеет смысла, результат будет тот же, что и Если (ОстКолво > 0) "Если ( 10/3) * 3 = 10.0 Тогда Сообщить("Равно"); Иначе Сообщить("Не равно"); КонецЕсли;" Результатом всегда будет "Не равно", ибо левая часть никогда не округлится до целого числа (10.0)  | 
|||
| 
    30
    
        73с    
     02.12.17 
            ✎
    14:54 
 | 
         
        0+ОстКолво     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |