|
ЕстьNULL как правильно использовать в запросе... | ☑ | ||
---|---|---|---|---|
0
Samir
20.06.13
✎
09:25
|
Никак не соображу как правильно использовать ЕстьNULL в запросе...
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(-ХозрасчетныйОбороты.СуммаОборотКт) КАК ВыручкаВозврат, | СУММА(-(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт)) КАК ВыручкаНДСВозврат, Иногда ВыручкаВозврат и ВыручкаВозвратНДС - NULL Как правильно применить в запросе ЕстьNULL? |
|||
1
cw014
20.06.13
✎
09:26
|
Смотря что ты хочешь
|
|||
2
XLife
20.06.13
✎
09:26
|
СУММА(ЕстьNULL(ВыручкаВозврат,0))
СУММА(-(ЕстьNULL(ХозрасчетныйОбороты.СуммаОборотКт,0) - ЕстьNULL(ХозрасчетныйОбороты.СуммаНУОборотКт,0))) |
|||
3
Ёпрст
20.06.13
✎
09:27
|
ну дык, ЕстьNull(Вася,0)
|
|||
4
Samir
20.06.13
✎
09:28
|
Запрос иногда возвращает NULL, далее я суммирую возвраты
но при суммировании он пишет, что не может быть преобразовано в число |
|||
5
Samir
20.06.13
✎
09:35
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | СУММА(-(ЕстьNULL(ХозрасчетныйОбороты.СуммаОборотКт,0))) КАК ВыручкаВозврат, Все равно не может быть преобразовано в число |
|||
6
Ёпрст
20.06.13
✎
09:36
|
а весь текст то покажи
|
|||
7
Samir
20.06.13
✎
09:39
|
ВыручкаВозврат = 0;
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(-(ЕстьNULL(ХозрасчетныйОбороты.СуммаОборотКт,0))) КАК ВыручкаВозврат, | СУММА(-(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт)) КАК ВыручкаНДСВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &МедуслугиПлатные | ТОГДА -ХозрасчетныйОбороты.СуммаОборотКт | ИНАЧЕ 0 | КОНЕЦ) КАК МедУслПлВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &МедуслугиДополнительные | ТОГДА -ХозрасчетныйОбороты.СуммаОборотКт | ИНАЧЕ 0 | КОНЕЦ) КАК МедУслДопВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &МедуслугиПрочие | ТОГДА -ХозрасчетныйОбороты.СуммаОборотКт | ИНАЧЕ 0 | КОНЕЦ) КАК МедУслПрочВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &УслугиПрочие | ТОГДА -ХозрасчетныйОбороты.СуммаОборотКт | ИНАЧЕ 0 | КОНЕЦ) КАК УслПрочВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &КамераХранения | ТОГДА -ХозрасчетныйОбороты.СуммаОборотКт | ИНАЧЕ 0 | КОНЕЦ) КАК КамераХраненияВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &РеализацияТовара | ТОГДА -ХозрасчетныйОбороты.СуммаОборотКт | ИНАЧЕ 0 | КОНЕЦ) КАК РеализацияТовараВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &Прочие | ТОГДА -ХозрасчетныйОбороты.СуммаОборотКт | ИНАЧЕ 0 | КОНЕЦ) КАК ПрочиеВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &МедуслугиПлатные | ТОГДА -(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт) | ИНАЧЕ 0 | КОНЕЦ) КАК МедУслПлНДСВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &МедуслугиДополнительные | ТОГДА -(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт) | ИНАЧЕ 0 | КОНЕЦ) КАК МедУслДопНДСВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &МедуслугиПрочие | ТОГДА -(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт) | ИНАЧЕ 0 | КОНЕЦ) КАК МедУслПрочНДСВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &УслугиПрочие | ТОГДА -(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт) | ИНАЧЕ 0 | КОНЕЦ) КАК УслПрочНДСВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &КамераХранения | ТОГДА -(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт) | ИНАЧЕ 0 | КОНЕЦ) КАК КамераХраненияНДСВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &РеализацияТовара | ТОГДА -(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт) | ИНАЧЕ 0 | КОНЕЦ) КАК РеализацияТовараНДСВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &Прочие | ТОГДА -(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт) | ИНАЧЕ 0 | КОНЕЦ) КАК ПрочиеНДСВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &МедуслугиКосметология | ТОГДА -ХозрасчетныйОбороты.СуммаОборотКт | ИНАЧЕ 0 | КОНЕЦ) КАК МедУслКосмВозврат, | СУММА(ВЫБОР | КОГДА ВложенныйЗапросВидУслуг.ВидУслуг = &МедуслугиКосметология | ТОГДА -(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт) | ИНАЧЕ 0 | КОНЕЦ) КАК МедУслКосмНДСВозврат |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&НачПериода, &КонПериода, Регистратор, Счет В ИЕРАРХИИ (&Счет90_01_1), , Организация = &Организация, КорСчет В ИЕРАРХИИ (&Счет76_06), ) КАК ХозрасчетныйОбороты | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЗначенияСвойствОбъектов.Значение КАК ВидУслуг, | Номенклатура.Ссылка КАК Ссылка | ИЗ | Справочник.Номенклатура КАК Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ПО (ВЫБОР | КОГДА ЗначенияСвойствОбъектов.Свойство = &ВидУслуг | ТОГДА Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект | ИНАЧЕ ЛОЖЬ | КОНЕЦ)) КАК ВложенныйЗапросВидУслуг | ПО ХозрасчетныйОбороты.Субконто3 = ВложенныйЗапросВидУслуг.Ссылка"; Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("НачПериода",НачПериода); Запрос.УстановитьПараметр("КонПериода",КонецДня(КонПериода)); Запрос.УстановитьПараметр("Счет76_06", ПланыСчетов.Хозрасчетный.РасчетыСПрочимиПокупателямиИЗаказчиками); Запрос.УстановитьПараметр("Счет90_01_1",ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД); //Запрос.УстановитьПараметр("НомерКвитанции",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("№ квитанции")); //Запрос.УстановитьПараметр("НомерТерминала",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("№ терминала")); //Запрос.УстановитьПараметр("НомерZОтчета",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("№ Z-отчета")); //Запрос.УстановитьПараметр("НомерККМ",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("№ ККМ")); Запрос.УстановитьПараметр("ВидУслуг",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Вид услуг")); Запрос.УстановитьПараметр("МедуслугиПлатные",Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Медуслуги платные")); Запрос.УстановитьПараметр("МедуслугиДополнительные",Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Медуслуги дополнительные")); Запрос.УстановитьПараметр("МедуслугиПрочие",Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Медуслуги прочие")); Запрос.УстановитьПараметр("УслугиПрочие",Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Услуги прочие")); Запрос.УстановитьПараметр("КамераХранения",Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Камера хранения")); Запрос.УстановитьПараметр("РеализацияТовара",Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Реализация товара")); Запрос.УстановитьПараметр("Прочие",Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Прочие")); Запрос.УстановитьПараметр("МедуслугиКосметология",Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Медуслуги косметология")); Запрос.УстановитьПараметр("МедуслугиПлатные",Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Медуслуги платные")); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ОбластьСтрокаВозвратов = Макет.ПолучитьОбласть("СтрокаВозвратов"); ОбластьСтрокаВозвратов.Параметры.Заполнить(Выборка); ТабДокумент.Вывести(ОбластьСтрокаВозвратов); ВыручкаВсего = ВыручкаВсего - Выборка.ВыручкаВозврат; И на этом этапе ступор.... |
|||
8
EvgeniuXP
20.06.13
✎
09:40
|
(4) отфильтруй :)
|
|||
9
Ёпрст
20.06.13
✎
09:41
|
(7) у тя там NULL никогда не будет..
|
|||
10
Ёпрст
20.06.13
✎
09:41
|
ошибка в другом месте
|
|||
11
Галахад
гуру
20.06.13
✎
09:44
|
Почему isnull только в одном месте? А в другие Пушкин засовывать будет?
|
|||
12
Samir
20.06.13
✎
09:50
|
(11) Туда тоже можно, но для начала нужно с этой проблемой разобраться, а уже по образу и подобию с другими...
|
|||
13
Ёпрст
20.06.13
✎
09:51
|
(12) заремь все поля запроса, оставь верхнее и смотри.
Я хреново знаю за снеговик, но разве ВТ табличка Обороты может возвращать NULL в ресурсах ?! п..ц тогда |
|||
14
zak555
20.06.13
✎
09:53
|
(7) в общем случае ВыручкаВозврат <> сумме всем СуммаОборотКт - ХозрасчетныйОбороты.СуммаНУОборотКт
|
|||
15
Ненавижу 1С
гуру
20.06.13
✎
09:55
|
может, так как группировок нет, то вполне может быть NULL, если выборка пустая, учите ребята SQL
|
|||
16
Samir
20.06.13
✎
09:56
|
(15) база на SQL
|
|||
17
Ненавижу 1С
гуру
20.06.13
✎
09:56
|
(16) какая разница, поведение общее
|
|||
18
Ёпрст
20.06.13
✎
09:57
|
(15) ? с х..ли ?
|
|||
19
Samir
20.06.13
✎
09:57
|
может не в запросе, а в переборке результатов поставить какое-нить условие типа если Null тогда выборка.следующий()
|
|||
20
Samir
20.06.13
✎
09:58
|
Причем эта ошибка вылезла за 1 день, за все остальные отчет отрабатывает. Это была суббота и возвратов не было
|
|||
21
Ёпрст
20.06.13
✎
09:58
|
и причем тут группировки, если ВТ и так свёрнута, а унутри - обычный select и Sum унутри, которая априори null не выдаст
|
|||
22
Галахад
гуру
20.06.13
✎
09:59
|
Консоль запросов для кого придумали?
Ну или выгрузи результат запроса в ТЗ и посмотри. |
|||
23
Ненавижу 1С
гуру
20.06.13
✎
09:59
|
(18) да, да, учи ))
|
|||
24
Ненавижу 1С
гуру
20.06.13
✎
10:00
|
(0) убери ото всюду суммирование и увидишь, что при случае NULL у тебя будет пустая выборка
|
|||
25
Samir
20.06.13
✎
10:00
|
(21) Смотрю в отладчике, действительно все параметры Null
|
|||
26
Samir
20.06.13
✎
10:00
|
Ибо возвратов не было. Редкое явление, но стряслось
|
|||
27
Ёпрст
20.06.13
✎
10:01
|
(23) лень профайлер открывать,чтобы посмотреть, че там летит при обращении к ВТ Обороты, но знание sql тут не при чем.
|
|||
28
Ненавижу 1С
гуру
20.06.13
✎
10:02
|
(27) как раз при том:
SELECT SUM(X) --тут будет NULL FROM T WHERE 1=0 |
|||
29
Ёпрст
20.06.13
✎
10:04
|
(28) согласен
|
|||
30
Samir
20.06.13
✎
10:06
|
А что мне подскажите?
|
|||
31
Ёпрст
20.06.13
✎
10:07
|
(30) естьnull втыкать во все обращения к ресурсам
ХозрасчетныйОбороты |
|||
32
Ёпрст
20.06.13
✎
10:31
|
(28) но с другой стороны, могли бы и в ВТ воткнуть сразу:
select ISNULL(sum(Х),0) where 1=0 :) |
|||
33
Ненавижу 1С
гуру
20.06.13
✎
10:43
|
(32) не могли, тогда бы ВТ выдавала абсолютно все записи: есть остатки, нет остатков, что не есть хорошо
|
|||
34
Ёпрст
20.06.13
✎
10:44
|
(33) Ну и скуль тут как бэ не причем,
select Sum(null+10) прекрасно отработает в скуле.. |
|||
35
Ёпрст
20.06.13
✎
10:45
|
тут проблема в 1с-ине, раз она "не может быть преобразовано в число"
|
|||
36
Ёпрст
20.06.13
✎
10:46
|
(33) а на счет остатков - там тупо having стоит на результат..
|
|||
37
Ненавижу 1С
гуру
20.06.13
✎
10:47
|
(34) и че?
(35) непонятно (36) а целом, что получается? |
|||
38
Ненавижу 1С
гуру
20.06.13
✎
10:47
|
ИМХО, не надо ничего городить, достаточно нормально юзать запросы
|
|||
39
Ёпрст
20.06.13
✎
10:48
|
(37) ну как че ? виновата 1с-ина, которая хз как транслирует функцию сумма, раз она не может переварить это:
sum(null+10) |
|||
40
Steini
20.06.13
✎
10:51
|
Подытожим:
известное дело, когда в запросе одни лишь СУММА(), и таблица пустая, то вернется NULL. Решение проблемы: использовать еще раз ЕСТЬNULL: ЕСТЬNULL(СУММА(),0) ну или программно вне запроса то же самое. |
|||
41
Ёпрст
20.06.13
✎
10:51
|
Вообще, странная ошибка, учитывая, что
выбрать Сумма(null + 1) работает в консоли запросов. |
|||
42
Ненавижу 1С
гуру
20.06.13
✎
10:59
|
(39) у меня может
|
|||
43
Ёпрст
20.06.13
✎
11:12
|
(42) ну вот и хз, чего за ошибка тогда "не может быть преобразовано в число", раз (41) работает
|
|||
44
Ненавижу 1С
гуру
20.06.13
✎
11:25
|
(43) ошибка у него не в запросе, а в использовании его результата:
ВыручкаВсего = ВыручкаВсего - Выборка.ВыручкаВозврат; естественно с NULL операции в самом коде недопустимы |
|||
45
Ёпрст
20.06.13
✎
11:25
|
(44) ну вот и я про то, что в запросе писать естьNull не надо
:) |
|||
46
Ненавижу 1С
гуру
20.06.13
✎
11:27
|
(45) надо ))
лучше естьNULL вместо того чтобы в коде проверять на NULL |
|||
47
Ёпрст
20.06.13
✎
11:34
|
уел
|
|||
48
Ненавижу 1С
гуру
20.06.13
✎
11:37
|
(47) хватит меня троллить! ))
|
|||
49
Ёпрст
20.06.13
✎
12:03
|
(48) не-не-не .. я еще не всё про нулл и неопределенно понял
:) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |