Имя: Пароль:
1C
1С v8
Деление на ноль
0 mifrida
 
17.07.11
21:25
Есть документ, пытаюсь обновить данные

в отладчике СтрТЧ.МолоднякПоголовье показывает = 0
потом
СтрТЧ.МолоднякПоголовье <> 0 показывает истина, а потом жалуется что деление на нуль

Почему так происходит?

вот кусочек кода

Если СтрТЧ.МолоднякПоголовье <> 0 тогда
 СтрТЧ.СоотношениеМТГ = (СтрТЧ.МолоднякЗаТекущийГод /СтрТЧ.МолоднякПоголовье)*100;
КонецЕсли;
1 Evpatiy
 
17.07.11
21:26
(0) Попробуй ЗначениеЗаполнено(СтрТЧ.МолоднякПоголовье)
2 unregistered
 
17.07.11
21:35
(0) >> Почему так происходит?

У отладчика спроси.

откуда нам знать что там у тебя в СтрТЧ и уж тем более в СтрТЧ.МолоднякПоголовье?

Может булево какое-нибудь или строка пустая...
3 aleks-id
 
17.07.11
21:38
предположу, что значение в тч = 0,00000001 и при проверке выдает истину, а при делении округляется до 0,00.
4 Живой Ископаемый
 
17.07.11
21:38
вы бы хотели чтобы исключение происходило с сообщением "попытка деления на Неопределено" или "деление на Null" или "деление на 1 января 1980 года" или "деление на 'Съешь этих мягких французских булочек да выпей чаю'?"
5 БибиГон
 
17.07.11
21:39
/потом
СтрТЧ.МолоднякПоголовье <> 0 показывает истина

А равно тогда хоть чему? ;)
6 mifrida
 
17.07.11
21:39
(1) безрезультатно

(2)СтрТЧ даже по названию переменной можно понять что это строка табличной части, все что говорит отладчик написано (0)

я всего лишь делю одну ячейку на другую и ответ записываю в третью
7 Sergey_KR
 
17.07.11
21:41
может надо еще на null проверить?
8 mifrida
 
17.07.11
21:43
СтрТЧ.МолоднякПоголовье - содержит число, в данном случае это ноль я проверила
9 БибиГон
 
17.07.11
21:47
(8) И какой вывод?
10 mifrida
 
17.07.11
21:47
и не null

дело в том что в начале я заполняю таблицу нулями, лишь потом значениями из запроса и заполняю вычисляемые поля

ща еще протрассираю заполнение данными из запроса
11 Живой Ископаемый
 
17.07.11
21:47
(8) ну так чего вы удивляетесь? на Ноль делить нельзя, математика, 4-й класс
12 mifrida
 
17.07.11
21:48
(11) перед делением стоит проверка на нуль
13 andrewks
 
17.07.11
21:50
ТипЗнч(СтрТЧ.МолоднякПоголовье)-?
14 Живой Ископаемый
 
17.07.11
21:50
тогда кто-то врет
15 БибиГон
 
17.07.11
21:52
(12) покажи код полностью.
16 aleks-id
 
17.07.11
22:04
можно еще так попробовать:

Если НЕ СтрТЧ.МолоднякПоголовье = 0 тогда
 СтрТЧ.СоотношениеМТГ = (СтрТЧ.МолоднякЗаТекущийГод /СтрТЧ.МолоднякПоголовье)*100;
КонецЕсли;
17 Sergey_KR
 
17.07.11
22:08
(16) :)

Попытка
   СтрТЧ.СоотношениеМТГ = (СтрТЧ.МолоднякЗаТекущийГод /СтрТЧ.МолоднякПоголовье)*100;    
   Исключение
   СтрТЧ.СоотношениеМТГ =0    
   КонецПопытки;

:)))))
18 mifrida
 
17.07.11
22:11
(16)Спасибо :)
19 mifrida
 
17.07.11
22:12
Ой (17)
20 НП
 
18.07.11
00:01
Если СтрТЧ.МолоднякПоголовье <> 0 тогда
 СтрТЧ.СоотношениеМТГ = (СтрТЧ.МолоднякЗаТекущийГод /СтрТЧ.МолоднякПоголовье)*100;
КонецЕсли;
21 НП
 
18.07.11
00:02
или

Если НЕ (СтрТЧ.МолоднякПоголовье = 0) тогда
 СтрТЧ.СоотношениеМТГ = (СтрТЧ.МолоднякЗаТекущийГод /СтрТЧ.МолоднякПоголовье)*100;
КонецЕсли;
22 dragonIMV
 
18.07.11
06:56
(21) тоже не то....если это поле будет иметь другой тип то условие будет соблюдено...а делить на "дату" или на "строку" тоже как то не то...
23 DJ Anthon
 
18.07.11
07:04
а оно что, неопределенного типа или составного?
24 dragonIMV
 
18.07.11
07:20
если тип значения может меняться то пусть добавит еще в начале проверку на тип (ТипЗнч) и все...а потом уже с нулем сравнивает...
25 sda553
 
18.07.11
08:00
Предлагаю пример кода который будет выдавать ошибку деления на 0, несмотря на все проверки

а = "0";
Если ЗначениеЗаполнено(а) и а<>0 Тогда
   с = 1/а;
КонецЕсли;
26 Escander
 
18.07.11
08:06
(25)
а если вот так:

а = "0";
Если (а+0)=(0+а) Тогда
   с = 1/а;
КонецЕсли;
27 andrewks
 
18.07.11
08:08
извращенцы... вам ТипЗнч() для чего сделали?
28 Escander
 
18.07.11
08:09
(27)эт мы после выхов пальцы разминаем...
29 sda553
 
18.07.11
08:10
(26) Думаю, если так то будет счастье
30 dragonIMV
 
18.07.11
08:34
щас мы вместо ТипЗнч напишем велосипед с 10 колесами разного размера и тремя рулями...))))
31 Escander
 
18.07.11
08:46
(30) зато окончательно отрезвеем увидев что получилось на выходе!
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс