Имя: Пароль:
1C
1C 7.7
v7: Деление на ноль
0 Pechka
 
30.10.12
09:23
Помогите пожалуйста разобраться,выходит ошибка : "Деление на ноль", "Операция деления не определена для строковых величин". Необходимо найти "Рез" :

Если ТЗДил5.НайтиЗначение(ТаблицаОтчета.Продукция, ТекНайденСтрока2, "МПЗ") = 1 Тогда                НачКол=ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "КолНачОст");                НачСум=ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "СумНачОст");
Если (НачКол <> 0)И(НачСум<>0) Тогда  
Рез = Число(НачСум/НачКол);
Иначе
Рез = "";
КонецЕсли;
1 Wobland
 
30.10.12
09:23
строку на ноль делить - это что-то новое!
2 Wobland
 
30.10.12
09:24
сама-то как думаешь, где собака порылась?
3 1Страх
 
30.10.12
09:24
либо НачКол=0, либо НачСум или НачКол это строки
4 Плот
 
30.10.12
09:24
(0) Текстовый значения у тебя
5 Ёпрст
 
30.10.12
09:25
(0)
НачСум=0+ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "СумНачОст");

Либо явно типизируй колонку в ТЗ
6 Плот
 
30.10.12
09:25
И фотку никто не спросил. Меняется миста :-)
7 aka AMIGO
 
30.10.12
09:26
НачКол <> 0 - это условие выполняется, т.к. НачКол - вовсе не нуль.
измени условие.
или проверь в отладчике, как присваиваются значения ТЗ
8 vip67
 
30.10.12
09:27
НачКол = Число(...)
НачСум = Число(...) - тогда и увидишь, где ноль сидит
и фотку!
фотку!!
ФОТКУ!!!

в студию
9 НЕА123
 
30.10.12
09:28
(6)
та не.
страшновато - 1986.
10 cw014
 
30.10.12
09:30
Нету фотки, нету решений :)
11 Sayshal
 
30.10.12
09:31
(9)Страшно - это 1896
12 fgaabbb
 
30.10.12
09:32
Если ТЗДил5.НайтиЗначение(ТаблицаОтчета.Продукция, ТекНайденСтрока2, "МПЗ") = 1 Тогда                
НачКол=Число(ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "КолНачОст"));                
НачСум=Число(ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "СумНачОст"));

Если (НачКол <> 0)И(НачСум<>0) Тогда  

Рез = Число(НачСум/НачКол);

Иначе

Рез = "";

КонецЕсли;
13 BlackSeaCat
 
30.10.12
09:32
Фотка у ТС была, подтверждение тут: Месяц

И деление на ноль тоже было: ошибка деление на ноль

Девичья память...
14 Pechka
 
30.10.12
09:36
fgaabbb, не помогло..Так же ошибка
15 Плот
 
30.10.12
09:37
(14) Отладчик что говорит?
16 Плот
 
30.10.12
09:43
(14) у тебя же увловие на одновременное равенство 0
17 Плот
 
30.10.12
09:43
поставь "или" и будет тебе счастье
18 Плот
 
30.10.12
09:44
(17) Упс. Наврал
19 sidalexsandr
 
30.10.12
09:45
(0)    Попытка
// Здесь дели

Исключение
// попадеш сюда если окажется ошибка деления
// здесь можеш присвоить переменной Рез любое значение
   
КонецПопытки;
20 Pechka
 
30.10.12
09:53
sidalexsandr, та же ошибка. Но все равно спасибо)
21 DGorgoN
 
30.10.12
09:56
Хм, вроде и требования соблюдены - но нихрена не видно (


Если ТЗДил5.НайтиЗначение(ТаблицаОтчета.Продукция, ТекНайденСтрока2, "МПЗ") = 1 Тогда                НачКол=ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "КолНачОст");                 НачСум=ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "СумНачОст");
Попытка
НачКол=Число(СокрЛП(НачКол));
НачСум=Число(СокрЛП(НачСум));
Если (НачКол <> 0)И(НачСум<>0) Тогда  
Рез = Число(НачСум/НачКол);
Иначе
Рез = ""; //Тут может Рез = 0; ??
КонецЕсли;
Исключение
Рез = ""; //Тут может Рез = 0; ??
КонецЕсли;
22 Cunni
 
30.10.12
09:56
НачСум, НачКол - одно из них "Неопределено".
23 sidalexsandr
 
30.10.12
09:57
(20) Этот метод позволяет в случае ошибки продолжить программу в части "Исключение КонецПопытки;" и обработать ошибочную ситуацию.
24 Плот
 
30.10.12
10:01
(22) Тогда не зайдет в условие с делением.
25 Плот
 
30.10.12
10:01
(0) А может сообщение с ошибкой для другого тестка кода?
26 BlackSeaCat
 
30.10.12
10:02
1Сники, куда вы катитесь???

Вот это: Рез = Число(НачСум/НачКол) - это вообще программирование? Зачем результат деления преобразовывать в число, как будто он может быть еще чем-то, кроме числа?

Неудивительно, что не можете проверить значение на ноль, сразу за Попытку прячетесь.

Заслуживаете, чтобы всех вас гроздьями нацеплять на парашют ТС и обрезать трос, да что бы ветер был метров 25-30 в секунду!
27 Плот
 
30.10.12
10:04
(26) На самом деле код вызывает вопросы и не только в этом месте. Просто пытались помочь человеку.
По теме полностью согласен.
28 Pechka
 
30.10.12
10:04
Значения то у меня получаются,таблица заполняется, где сумма и количество по нулям,цена выходит как "-"..Но ошибка в окошке все равно выходит
29 Cunni
 
30.10.12
10:06
(24) ну это в посте 21 не зайдет, а ТС вроде этот код еще не пробовала.

(28) Да проверь ты значение этих переменных отладчиком. Одно из них по любому неопределено.
30 sidalexsandr
 
30.10.12
10:06
(28) ТипЗначения(<?>)
Синтаксис:
ТипЗначения(<Значение>)
Назначение:
Возвращает:
тип данных значения в виде числа.
Параметры:
<Значение> - выражение, тип данных значения которого надо определить.
Возвращаемые значения типов данных:
0 - неопределенный тип данных;
1 - числовой тип данных;
2 - строковый тип данных;
3 - тип данных Дата;
10 - агрегатный тип данных 'Перечисление';
11 - агрегатный тип данных 'Справочник';
12 - агрегатный тип данных 'Документ';
13 - агрегатный тип данных 'Календарь';
14 - агрегатный тип данных 'ВидРасчета';
31 BlackSeaCat
 
30.10.12
10:07
НачКол=Число(ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "КолНачОст"));                 НачСум=Число(ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "СумНачОст"));
Если (НачКол <> 0)И(НачСум<>0) Тогда  
Рез = НачСум/НачКол;

И закрой наконец свое окошко, блондинко!
32 Cunni
 
30.10.12
10:08
Если ТЗДил5.НайтиЗначение(ТаблицаОтчета.Продукция, ТекНайденСтрока2, "МПЗ") = 1 Тогда                НачКол=ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "КолНачОст");                 НачСум=ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "СумНачОст");
Сообщить("НачКОл = "+НачКол+" , НачСум = "+НачСум+". Теперь все наглядно.");
Если (НачКол <> 0)И(НачСум<>0) Тогда  
Рез = Число(НачСум/НачКол);
Иначе
Рез = "";
КонецЕсли;
33 sidalexsandr
 
30.10.12
10:09
(28) Перед как делить проверь с помощью
Если ТипЗначения(то что может быть строкой)= 1 Тогда
// Значит тип число
ИначеЕсли ТипЗначения(то что может быть строкой)= 2 Тогда
     // Значит тип Строка
КонецЕсли;
34 Sphinx
 
30.10.12
10:09
Тип данных у табличной части у этих полей точно числовое?
35 Cunni
 
30.10.12
10:10
Тему-то до конца не прочитал оказывается) Слова про неопределено забираю обратно
36 Плот
 
30.10.12
10:13
Нет, явно ошибка не из этого места. или не весь код.
37 Sphinx
 
30.10.12
10:14
Согласен с (33) Надо тип значения проверить/проверять...
38 Cunni
 
30.10.12
10:19
Наверное задумка ТС была такова:

НачСум = Число(НачСум);
НачКол = Число(НачКол);
Если (НачКол <> 0)И(НачСум<>0) Тогда  
Рез = НачСум/НачКол;
Иначе
Рез = "";
КонецЕсли;


А реализовано как Рез = Число(НачСум/НачКол);[/c]. Видимо о том, что значение может быть не только числом и без нас уже было известно.
39 Плот
 
30.10.12
10:20
(38) Как ты себе представляешь деление не числового значения?
40 ЧеловекДуши
 
30.10.12
10:21
Судя по постам автора в (13), у неё явно проблема с делением на ноль.
Ведать её мировоззрение позволяет ей делить на ноль без угрызения совести и последствий.
А так, похоже она не отличает Число от Строки, да и работать с типами её ведать не научили :)

Автор (0) оставь только одну проверку "НачКол <> 0" и будет тебе счастье.
И еще желательно убедиться, что в таблице значений у тебя действительно числа, а не "ТипЗначения() = 0" (неопределенного типа)
41 samozvanec
 
30.10.12
10:23
при таком обсуждении подобной проблемы могу только ололокнуть
а вобще куни не врет
42 1Сергей
 
30.10.12
10:24
Откуда взялась ТЗДил5 не спрашивали ещё?
43 Pechka
 
30.10.12
11:00
Если ТЗДил5.НайтиЗначение(ТаблицаОтчета.Продукция, ТекНайденСтрока2, "МПЗ") = 1 Тогда  
                           НачКол=ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "КолНачОст");
               НачСум=ТЗДил5.ПолучитьЗначение(ТекНайденСтрока2, "СумНачОст");
               
НачКол = Число(НачКол);
НачСум = Число(НачСум);
Если НачКол > 0 Тогда  
Рез = НачСум/НачКол;
Иначе
Рез = "--";
КонецЕсли;



Спасибо всем!!!
44 andrewalexk
 
30.10.12
11:02
(0):)...намекаешь что в 1с не предусмотрены неопределенности типа бесконечность на ноль?
45 Плот
 
30.10.12
11:05
(43) Не вижу разницы между (43) и (12)  кроме условия. А что в (12) не получилось.
46 Pechka
 
30.10.12
11:13
моя невнимательность)
47 Wobland
 
30.10.12
11:14
(43) а если НачальникКол отрицательный?
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой