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

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

Больше деления нигде нет, отчет в консоли выполняется без ошибок.
данная ошибка выходит при любых настройках, при любом периоде. Кэш чистили. В отладчике по ошибке не останавливается.
С чем это может быть связано? Или как найти источник проблемы?
По теме из базы знаний
Найденные решения
14. _Vanda_ 12.01.17 08:02 Сейчас в теме
Вопрос решился. Сохранила отчет как внешний и запустил в отладке. Поругался на справочник единиц измерения,нужно было заполнить кратность для килограммов: 1кг=1кг.
SeregaSC; rinkorpa; ander_; alex_bitti; Ганс; +5 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
6. starik-2005 3033 11.01.17 17:04 Сейчас в теме
(1)
КОГДА ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов <> 0


КОГДА ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.Номенклатура.КоэффициентЕдиницыДляОтчетов, 0) <> 0
15. ice-net 19 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. spacecraft 12.01.17 09:11 Сейчас в теме
(15)
Априори, такого не может быть! Реквизит числового типа = числу, но никак не NULL! NULL- Это отдельный тип!

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

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

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

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

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

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

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

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

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

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

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

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

Она так же сделает приведение. И переменная а будет равна 0.
24. starik-2005 3033 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");
}
2. comptr 30 11.01.17 16:01 Сейчас в теме
СКД? А в вычисляемых полях деление есть? А в ресурсах в поле "Выражение"?
3. пользователь 11.01.17 16:02
Сообщение было скрыто модератором.
...
4. ice-net 19 11.01.17 16:08 Сейчас в теме
Сдается мне, ошибка не в этом фрагменте (146%), а в каком-нибудь поле форматирования или в доп. полях или еще где.. раз уж в консоли все гуд.
5. Ганс 11.01.17 16:37 Сейчас в теме
Свой отчёт посмотрите в консоле отчётов и там же увидите какой отчёт выполняется и поймёте где идёт ошибка!
7. starik-2005 3033 11.01.17 17:04 Сейчас в теме
(5)
в консоле отчётов
в консоли
8. Ганс 11.01.17 17:33 Сейчас в теме
(7) Спасибо!)


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

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


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

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

Увидим на экране: 8
Все же происходит приведение?
Вот и с Null тоже самое.
14. _Vanda_ 12.01.17 08:02 Сейчас в теме
Вопрос решился. Сохранила отчет как внешний и запустил в отладке. Поругался на справочник единиц измерения,нужно было заполнить кратность для килограммов: 1кг=1кг.
SeregaSC; rinkorpa; ander_; alex_bitti; Ганс; +5 Ответить
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день