ошибка деления на 0 в 1с 7.7

Тема в разделе "1C и всё что с ней связано", создана пользователем Nastyusha, 6 апр 2010.

Статус темы:
Закрыта.
  1. Nastyusha

    Nastyusha Гость

    Доброго времени суток.
    На форме документа есть несколько закладок. При создании нового документа одним пользователем выскакивает ошибка деление на 0.
    Везде, где встречается деление я поставила проверку, но ошибка не пропала.
    условие типа такого:

    Если ШиринаБумаги <>0 Тогда
    КолвоБумСПриладкой = КолвоБумаги / ШиринаБумаги;
    КонецЕсли; // ШиринаБумаги <>0 Тогда

    Может кто знает, как исправить эту ошибку
     
  2. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    ШиринаБумаги как определяется ?
    Если это деление единственное, пробуй
    Если Число(ШиринаБумаги) > 0 Тогда
    КолвоБумСПриладкой = КолвоБумаги / Число(ШиринаБумаги);
    КонецЕсли;
     
  3. Nastyusha

    Nastyusha Гость

    попробую. спасибо. Но деление- не единственное.
     
  4. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Так надо все деления проверить на возможный 0 в делителе
     
  5. Nastyusha

    Nastyusha Гость

    везде, где есть деление добавила Число, но ошибка все равно не пропала.
    в начале модуля есть процедура, на которую постоянно в модуле едет ссылка. может из-за нее возникает ошибка деление на 0?

    .............
    If Trimall(Печать.Процент) <> Trimall(Формат(?(Печать.Итог("Колво")=0,0,Печать.Колво/Печать.Итог("Колво")*100),"Ч6.2, "))+"%" Then
    ......................

    как правильно преобразовать Печать.Итог("Колво") в число.

    и из-за чего ошибка деление на 0 возникает толmrj при создании нового документа?
     
  6. mazzzay75

    mazzzay75 Гость

    вообще то судя по выражению - Печать.Итог("Колво") - результат сего должен уже иметь тип Число
    самый лучший вариант пробегись отладчиком по процедурам, посмотри значения переменных и типы, думаю многое станет ясно
     
  7. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Предлагаю пофлудить, по какой причине необходимо это делать...
    Или, если перефразировать, по какой причине при делении на нуль компиляторы и трансляторы выдают ошибку?
     
  8. Andrus

    Andrus Гость

    Да тут и флудить не особо надо

    Деление на 0
     
  9. Nastyusha

    Nastyusha Гость

    до открытия темы на форуме я везде в модуле документа сделала проверку, если деление переменную, то условие, чтобы переменная не была равна 0.
    Ошибка возникает только на 1 вкладке и когда какие-либо значения равны 0, то тоже выскакивает эта ошибка. И еще при заполнении поля ввода ДатаОтгрузкиПлан.

    на др. вкладках не возникает этой ошибки, даже если значения =0
     
  10. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Andrus
    По вашей ссылке говорится, что в принципе, можно! Но не объясняет, почему компиляторы и трансляторы выдают ошибки.
     
  11. Andrus

    Andrus Гость

    vitfil
    Лично мое мнение то это просто идет так называемая защита от дурака. Потому что если посчитать со стороны математики то 0/0 может равнятся как 1 так и 321 и.т.д. вот я думаю что на уровне компиляторов и трансляторов просто защищают что бы не допускать непонятных расчетов.

    Вот более подробно на уровне математики доказано что на 0 делить некорректно.
    http://www.science.yoread.ru/news.php?readmore=380
     
  12. evgenyatam

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    Nastyusha советую посмотреть текстовые метки на форме. там на вкладке дополнительно могут быть формулы.
     
  13. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Ошибка деления на 0 должна выдаваться с номером строки модуля.
     
  14. evgenyatam

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    может и без номера строки - если деление стоит в формуле метки или другого элемента.
     
  15. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Да - и это признак.
     
  16. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Здравствуйте, Nastyusha. Как увидел в материалах знакомое "ДатаОтгрузкиПлан", вспомнил "Факт" так и прослезился.
    О вопросе: Я понимаю проблемы две:
    - не понятно ГДЕ она возникает?
    - ну а потом вторая - ПОЧЕМУ?

    ГДЕ:
    Если программа матюкнулась смачно (это значит, как верно пишет unknown181538 выдала сообщение с кусочком текста и номером строки), то тут и искать нечего. А вот когда подленько выскакивают сообщения при каждом нажатии клавиатуры, то однозначно это ФОРМУЛА в выражении на диалоге. А еще так ведут себя выражения в печатной таблице. Нет другого способа кроме как пересмотреть их. Для удобства поиска лучше не ломать над ними голову, а очищать поочередно.

    ПОЧЕМУ:
    Если ШиринаБумаги <>0 Тогда
    КолвоБумСПриладкой = КолвоБумаги / ШиринаБумаги;
    КонецЕсли;
    Вы спотыкаетесь на пустое значение. Если Перем ШиринаБумаги объвлена, но ей ничего не присваивалось, то программа войдет в условие. Можете не верить - проверьте. В отладчике эта переменная покажется так: "ШиринаБумаги=" (после "=" ничего). И это не равно 0.

    ЧТО ДЕЛАЕМ:
    Вы навтыкали в текст модуля кучу проверок на 0. Понятно, что красоты тексту это не придало. Я сейчас так не делаю. У меня есть глобальная функция:
    Код ( (Unknown Language)):
    Функция ВзятьЧастное(Кфц_Числитель, Кфц_Знаменатель) Экспорт
    Возврат ?(ПустоеЗначение(Кфц_Знаменатель) = 1, 0, Кфц_Числитель / Кфц_Знаменатель);
    КонецФункции
    И везде любое деление пишу только так: ПроцентПлана = ВзятьЧастное(КолПлан, КолФакт). Компактно и надежно, потому что "ПустоеЗначение(Кфц_Знаменатель)" правильно сработает и на 0 и на пустоту.
     
  17. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Классное объяснение. Ибо все от неявного определения типов.
    На вопрос от Тургенева дан ответ от Чернышевского, только с восклицательным знаком !
     
  18. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Не согласен я. С обоими... ;-)
     
  19. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    C Тургеневым и Чернышевским или со мной и Дайнеко ? :rolleyes:
     
  20. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Уел ;-)
     
Загрузка...
Похожие Темы - ошибка деления на
  1. ildareshka
    Ответов:
    3
    Просмотров:
    28
  2. Ruska132
    Ответов:
    1
    Просмотров:
    67
  3. Lamerman
    Ответов:
    0
    Просмотров:
    47
  4. Enima
    Ответов:
    0
    Просмотров:
    63
  5. Baindt
    Ответов:
    1
    Просмотров:
    89
Статус темы:
Закрыта.

Поделиться этой страницей