Деление на 0 в отчете Ведомость товаров по складам

1. Оля Валитова (Ольга Валитова) 11.01.17 15:48 Сейчас в теме
В отчете Ведомость товаров по складам возникает ошибка: деление на ноль 0.
Сам отчет проверила, там где есть деление есть проверка на 0:
ВЫБОР
	КОГДА &ЕдиницыКоличества = 0
		ТОГДА ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток
	КОГДА &ЕдиницыКоличества = 1
		ТОГДА ВЫБОР
				КОГДА ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0
					ТОГДА ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов
				ИНАЧЕ 0
			КОНЕЦ
КОНЕЦ
...Показать Скрыть

Больше деления нигде нет, отчет в консоли выполняется без ошибок.
данная ошибка выходит при любых настройках, при любом периоде. Кэш чистили. В отладчике по ошибке не останавливается.
С чем это может быть связано? Или как найти источник проблемы?
Найденные решения
14. Оля Валитова (Ольга Валитова) 12.01.17 08:02 Сейчас в теме
Вопрос решился. Сохранила отчет как внешний и запустил в отладке. Поругался на справочник единиц измерения,нужно было заполнить кратность для килограммов: 1кг=1кг.
Ганс; +1 Ответить
Остальные ответы
2. Артём Шарипов (borodatii) 1 11.01.17 16:01 Сейчас в теме
СКД? А в вычисляемых полях деление есть? А в ресурсах в поле "Выражение"?
4. Вадим . (ice-net) 11.01.17 16:08 Сейчас в теме
Сдается мне, ошибка не в этом фрагменте (146%), а в каком-нибудь поле форматирования или в доп. полях или еще где.. раз уж в консоли все гуд.
Ольга Валитова; +1 Ответить 1
5. Антон Гвоздикин (Ганс) 11.01.17 16:37 Сейчас в теме
Свой отчёт посмотрите в консоле отчётов и там же увидите какой отчёт выполняется и поймёте где идёт ошибка!
6. Sergey Andreev (starik-2005) 1046 11.01.17 17:04 Сейчас в теме
(1)
КОГДА ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0


КОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов, 0) <> 0
7. Sergey Andreev (starik-2005) 1046 11.01.17 17:04 Сейчас в теме
(5)
в консоле отчётов
в консоли
8. Антон Гвоздикин (Ганс) 11.01.17 17:33 Сейчас в теме
(7) Спасибо!)


(6) А дано ли деление на null даёт ошибку деления на "0"? )
9. Oleg Space (spacecraft) 11.01.17 17:37 Сейчас в теме
(8)
А дано ли деление на null даёт ошибку деления на "0"? )

Если тип числовой, то Null приводится к 0. Это было всегда.
10. Антон Гвоздикин (Ганс) 11.01.17 17:45 Сейчас в теме
(9) Где приводится? В запросе? В СКД?
11. Oleg Space (spacecraft) 11.01.17 17:47 Сейчас в теме
(10) конкретно тут - в математических операциях.
12. Антон Гвоздикин (Ганс) 11.01.17 18:26 Сейчас в теме
(11) вы серьёзно хотите сказать что null + 5 даст вам 5 на выходе?!?!?
13. Oleg Space (spacecraft) 11.01.17 18:44 Сейчас в теме
(12) не null + 5, а реквизит числового типа = null.
Есть реквизит числового типа Ревизит1.
То такой код даст 5:
Реквизит1 = Null;
Сообщить(Реквизит1 + 5);


Правда не уверен, что это работает в запросе. Там другая механика.
С запросом скорее всего не сработает. Тут согласен.
14. Оля Валитова (Ольга Валитова) 12.01.17 08:02 Сейчас в теме
Вопрос решился. Сохранила отчет как внешний и запустил в отладке. Поругался на справочник единиц измерения,нужно было заполнить кратность для килограммов: 1кг=1кг.
Ганс; +1 Ответить
15. Вадим . (ice-net) 12.01.17 09:06 Сейчас в теме
(6)
КОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов, 0) <> 0


В данном случае, проверка на NULL - абсолютно лишняя операция, т.к. соединений быть не должно (99%), а Номенклатура (99%) не может быть NULL,
но если уж (вдруг есть соединение) и добавлять, то вот так (при условии, что реквизит КоэффициентЕдиницыДляОтчетов у ном-ры тип число:
ВЫБОР
      КОГДА ТоварыНаСкладахОстаткиИОбороты.Номенклатура Есть NULL 
             Тогда 0
      Иначе
             ЕстьNULL(ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток,0) / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов
КОНЕЦ
...Показать Скрыть


ПС: И в Запросе NULL+5 = NULL
(12) ПС2.
реквизит числового типа = null
Априори, такого не может быть! Реквизит числового типа = числу, но никак не NULL! NULL- Это отдельный тип!
16. Oleg Space (spacecraft) 12.01.17 09:11 Сейчас в теме
(15)
Априори, такого не может быть! Реквизит числового типа = числу, но никак не NULL! NULL- Это отдельный тип!

Реквизиту числового типа можно присвоить Null. Другое дело, что Null в данном случае приведется к 0.
17. Антон Гвоздикин (Ганс) 12.01.17 09:25 Сейчас в теме
(13) С таким же успехом можно написать:
Реквизит1 = "Какая-нибудь чушь"
Сообщить(Реквизит1 + 5);

При условии что Реквизит1 имеет тип число, увидим на экране 5))
18. Вадим . (ice-net) 12.01.17 09:28 Сейчас в теме
(16)
Вы хоть сами понимаете, что пишите? Реквизиту числового типа можно присвоить только значение числового типа!

Другое дело, что в коде, если вы говорите о коде, платформа автоматически преобразует патыется преобразовать пустые значения(типа NULL, неоперделено и любые другие не подходящие типы типа ссылки на справочник или документ) к Значению(в случае удачи, например Булево = 54515; //Истина), Пустому значению(Число = Справочники.Номенклатура.ПустаяСсылка(); // 0).

Т.е.
Реквизит = NULL абсолютно то же самое, что и Реквизит = неопределено, аналогично и Реквизит = ПустоеЗначениеТакогоЖеТипа.

Возвращаясь к вашей фразе, повторюсь, Реквизиту числового типа можно НЕ ВОЗМОЖНО присвоить Null, его можно только "обнулить"(привести к пустому значению данного типа) этой операцией
Прикрепленные файлы:
19. Oleg Space (spacecraft) 12.01.17 09:43 Сейчас в теме
(18)
Реквизиту числового типа можно НЕ ВОЗМОЖНО присвоить Null, его можно только "обнулить"(привести к пустому значению данного типа) этой операцией

как бы это не называлось...
Хорошо, если Вы так дотошны до буквы, тогда при присваивании Null, он автоматически приведется к 0.
Или будите спорить, что операция Реквизит = Null это не факт присваивания?
Реквизит = NULL абсолютно то же самое, что и Реквизит = неопределено, аналогично и Реквизит = ПустоеЗначениеТакогоЖеТипа.

А вот с этим я никогда и не спорил. Домыслы?
20. Вадим . (ice-net) 12.01.17 09:49 Сейчас в теме
(19)
А вот с этим я никогда и не спорил. Домыслы?

пример)
Хорошо, если Вы так дотошны до буквы

Просто это принципиально разные вещи.

Согласитесь, если Вам скажут "Я реквизиту присвоил NULL, обработай в запросе только строки с NULL отдельно.."
Звучит очень не однозначно..
21. Oleg Space (spacecraft) 12.01.17 10:03 Сейчас в теме
(17) Вот пример:
Реквизит1 = "3" 
Сообщить(Реквизит1 + 5); 

Увидим на экране: 8
Все же происходит приведение?
Вот и с Null тоже самое.
22. Oleg Space (spacecraft) 12.01.17 10:08 Сейчас в теме
(20)
Согласитесь, если Вам скажут "Я реквизиту присвоил NULL, обработай в запросе только строки с NULL отдельно.."
Звучит очень не однозначно..

Вот мое сообщение, которое было воспринято неоднозначно:
"Априори, такого не может быть! Реквизит числового типа = числу, но никак не NULL! NULL- Это отдельный тип!"

Реквизиту числового типа можно присвоить Null. Другое дело, что Null в данном случае приведется к 0.

Присвоить Null это операция Реквизит = Null. И он сразу же приводится к 0. Ничего более. Это совсем не означает, что там будет храниться Null.
23. Oleg Space (spacecraft) 12.01.17 10:23 Сейчас в теме
(20) я даже больше скажу.
В С++ допустима такая операция:
int a = NULL;

Она так же сделает приведение. И переменная а будет равна 0.
24. Sergey Andreev (starik-2005) 1046 12.01.17 15:23 Сейчас в теме
(23) там NULL - это определенная константа. Но, обычно, было не NULL, а nil - системная константа, равная нулю.

https://habrahabr.ru/post/165021/
На самом деле, в контексте указателей применим как NULL, так и 0, ввиду того что первый — не более чем макрос-обёртка для второго:
#define NULL ((void *)0)

Однако не следует использовать NULL в качестве замены 0 в тех местах, где ноль — алгебраическое значение:
int c = b*a;
if (c != NULL) {
printf("Neither b nor a is equal to 0\n");
}
Оставьте свое сообщение