|
Возвращает не число | ☑ | ||
---|---|---|---|---|
0
alexoren
24.02.16
✎
15:00
|
Доброго дня всем!
Вопрос кажется простой, но не вижу решения =( Есть функция: [code] Функция СуммаПоБезналуЗаПериод( КассаККМ ) Сумма = 0; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(ЧекККМОплатаПлатежнымиКартами.Сумма) КАК Сумма |ИЗ | Документ.ЧекККМ.ОплатаПлатежнымиКартами КАК ЧекККМОплатаПлатежнымиКартами |ГДЕ | ЧекККМОплатаПлатежнымиКартами.Ссылка.КассаККМ = &КассаККМ | И ЧекККМОплатаПлатежнымиКартами.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца"; Запрос.УстановитьПараметр("ДатаНачала", ЭтотОбъект.ДатаНачалаПериода); Запрос.УстановитьПараметр("ДатаКонца", ЭтотОбъект.ДатаКонцаПериода + 24*60*60 - 1); Запрос.УстановитьПараметр("КассаККМ", КассаККМ); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сумма = ВыборкаДетальныеЗаписи.Сумма; КонецЦикла; Возврат Сумма; КонецФункции [/code] Если ничего не находит, то при попытке [code] СуммаПоСертификатам = Число( СуммаПоСертификатамЗаПериод( ВыборкаДетальныеЗаписи.Касса ) ); [/code] Выдаётся ошибка преобразования к числу, что не так то? |
|||
1
zenik
24.02.16
✎
15:02
|
ISNULL(ЧекККМОплатаПлатежнымиКартами.Сумма,0)
|
|||
2
alexoren
24.02.16
✎
15:03
|
(1) Эм, так ведь я изначально задал Сумма = 0
Или он воспринимает, как булево? |
|||
3
zenik
24.02.16
✎
15:03
|
ISNULL = ЕстьNULL :)
|
|||
4
zenik
24.02.16
✎
15:03
|
Не, у тебя может не быть документов в этом периоде, тогда будет NULL а не 0
|
|||
5
alexoren
24.02.16
✎
15:05
|
(4)
Эм, ещё раз я до цикла задал сумму 0, а в цикле её меняю, если не изменилась возратиться должен 0 =) Нет? |
|||
6
alexoren
24.02.16
✎
15:06
|
(4) гляньте код функции )
|
|||
7
alexoren
24.02.16
✎
15:07
|
(1) Кстати 8.3.7.1917 не знает такой функции )
УТ 11.2 =) |
|||
8
Fragster
гуру
24.02.16
✎
15:07
|
(5) с чего это?
|
|||
9
Fragster
гуру
24.02.16
✎
15:07
|
(7) это в запросе
|
|||
10
Lexey_
24.02.16
✎
15:07
|
(4) в этом запросе не будет NULLа
(5) как связана функция СуммаПоБезналуЗаПериод() со строкой "СуммаПоСертификатам = Число( СуммаПоСертификатамЗаПериод( ВыборкаДетальныеЗаписи.Касса ) );" ? |
|||
11
Fragster
гуру
24.02.16
✎
15:07
|
только ЕстьNULL(Сумма(...), 0)
|
|||
12
zenik
24.02.16
✎
15:07
|
> если не изменилась возратиться должен 0
А есть изменилась, то ? Код глянул - значит меняется. Значит выборка не пустая, значит глядите что вам запрос возращает |
|||
13
Fragster
гуру
24.02.16
✎
15:08
|
(10)
ВЫБРАТЬ СУММА(133) КАК Поле1 ГДЕ ЛОЖЬ |
|||
14
ObjectRelation Model
24.02.16
✎
15:10
|
(10) может быть NULL
|
|||
15
Lexey_
24.02.16
✎
15:12
|
(13), (14), да, на СУММА не обратил внимания
|
|||
16
alexoren
24.02.16
✎
15:12
|
(10) Сори мой косяк не ту строку бросил
&НаСервере Функция СуммаПоСертификатамЗаПериод( КассаККМ ) Сумма = 0; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(ЧекККМПодарочныеСертификаты.Сумма) КАК Сумма |ИЗ | Документ.ЧекККМ.ПодарочныеСертификаты КАК ЧекККМПодарочныеСертификаты |ГДЕ | ЧекККМПодарочныеСертификаты.Ссылка.КассаККМ = &КассаККМ | И ЧекККМПодарочныеСертификаты.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца"; Запрос.УстановитьПараметр("ДатаНачала", ЭтотОбъект.ДатаНачалаПериода); Запрос.УстановитьПараметр("ДатаКонца", ЭтотОбъект.ДатаКонцаПериода + 24*60*60 - 1); Запрос.УстановитьПараметр("КассаККМ", КассаККМ); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Сообщить( ВыборкаДетальныеЗаписи.Количество() ); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сумма = ВыборкаДетальныеЗаписи.Сумма; КонецЦикла; Возврат Сумма; КонецФункции |
|||
17
hhhh
24.02.16
✎
15:12
|
(14) не, СУММА() всегда дает число.
(10)+ текст функции СуммаПоСертификатамЗаПериод в студию. |
|||
18
alexoren
24.02.16
✎
15:13
|
(17) Скинул чуть выше (16)
|
|||
19
alexoren
24.02.16
✎
15:14
|
(17) да не ту записей в таблице ) уже проверил, должно вернуться 0 - число а не пойми что возвращается
|
|||
20
Fragster
гуру
24.02.16
✎
15:14
|
(17) -> (13)
|
|||
21
Fragster
гуру
24.02.16
✎
15:14
|
(19) консоль запросов есть?
|
|||
22
ObjectRelation Model
24.02.16
✎
15:15
|
(17) ты путаешь СУММА с КОЛИЧЕСТВО
|
|||
23
hhhh
24.02.16
✎
15:27
|
(19) не, ребята правы. Если пишешь
СУММА(ЧекККМПодарочныеСертификаты.Сумма) КАК Сумма то запись есть. Запрос выдаст одну пустую строчку. |
|||
24
НЕА123
24.02.16
✎
15:30
|
возврат (?ВыборкаДетальныеЗаписи.Следующий(),
Сумма = ВыборкаДетальныеЗаписи.Сумма, 0) |
|||
25
НЕА123
24.02.16
✎
15:31
|
*
возврат ?(ВыборкаДетальныеЗаписи.Следующий(), ВыборкаДетальныеЗаписи.Сумма, 0) |
|||
26
alexoren
24.02.16
✎
16:39
|
(25) та же фигня..
|
|||
27
alexoren
24.02.16
✎
16:41
|
Дело в запросе! )))
Ну как никто не заметил, а ступил... ( Запрос.Текст = "ВЫБРАТЬ | СУММА(ЧекККМПодарочныеСертификаты.Сумма) КАК Сумма, | ЧекККМПодарочныеСертификаты.Ссылка.КассаККМ |ИЗ | Документ.ЧекККМ.ПодарочныеСертификаты КАК ЧекККМПодарочныеСертификаты |ГДЕ | ЧекККМПодарочныеСертификаты.Ссылка.КассаККМ = &КассаККМ | И ЧекККМПодарочныеСертификаты.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца | |СГРУППИРОВАТЬ ПО | ЧекККМПодарочныеСертификаты.Ссылка.КассаККМ"; Добавить надо было группировочное поле! |
|||
28
Nuobu
24.02.16
✎
16:46
|
(27) Не совсем.
Если ты отбираешь так записи, что у тебя нет ни одной записи, а в полях есть только одно поле: Сумма, Количество, или еще какая-то агрегатная функция, то оно возвращает ОДНУ строку с этим полем, но не с нульом, как может показаться, а с NULL. А вот если добавить группировку, то всё нормально выводится, то бишь ноль, а не NULL. В твоём случае, не меняя запрос, т.к. ты выбираешь только одну кассу и получать её в запросе не имеет смысла, можно было изменить строку: Сумма = ВыборкаДетальныеЗаписи.Сумма; на эту Сумма = ?(ВыборкаДетальныеЗаписи.Сумма = NULL, 0, ВыборкаДетальныеЗаписи.Сумма); |
|||
29
alexoren
24.02.16
✎
17:23
|
(28) Да спасибо, так будет лаконичнее )
Сверху ребята писали, но не глянул что поряд условий не тот. Всём спасибо ) |
|||
30
alexoren
24.02.16
✎
21:12
|
В общем опять та же песня...
Сумма = 0; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(ЧекККМПодарочныеСертификаты.Сумма) КАК Сумма, | ЧекККМПодарочныеСертификаты.Ссылка.КассаККМ |ИЗ | Документ.ЧекККМ.ПодарочныеСертификаты КАК ЧекККМПодарочныеСертификаты |ГДЕ | ЧекККМПодарочныеСертификаты.Ссылка.КассаККМ = &КассаККМ | И ЧекККМПодарочныеСертификаты.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца | |СГРУППИРОВАТЬ ПО | ЧекККМПодарочныеСертификаты.Ссылка.КассаККМ"; Запрос.УстановитьПараметр("ДатаНачала", ЭтотОбъект.ДатаНачалаПериода); Запрос.УстановитьПараметр("ДатаКонца", ЭтотОбъект.ДатаКонцаПериода + 24*60*60 - 1); Запрос.УстановитьПараметр("КассаККМ", КассаККМ); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Возврат ?(ВыборкаДетальныеЗаписи.Следующий() = NULL, 0, ВыборкаДетальныеЗаписи.Сумма); |
|||
31
alexoren
24.02.16
✎
21:13
|
Да же при условии группировки, если не было сертификатов за период, то кажет фигу и выводит не число
|
|||
32
alexoren
24.02.16
✎
21:17
|
Нееее, стоп наоборот если сертификаты пустые то всё норм, а если есть то косяк
|
|||
33
hhhh
24.02.16
✎
21:28
|
ВыборкаДетальныеЗаписи.Следующий() = NULL - сколько литров выпил, прежде чем родить этот бред?
|
|||
34
alexoren
24.02.16
✎
21:31
|
(33) Сори мужик, каюсь (
Завтра сдавать отчёт директору уже вторые сутки.. Балда я в общем ) Спс, ещё раз ) |
|||
35
youalex
25.02.16
✎
00:39
|
(0) не понял, код выдает ошибку? :
"Число( СуммаПоСертификатамЗаПериод( ВыборкаДетальныеЗаписи.Касса ) );" |
|||
36
youalex
25.02.16
✎
00:39
|
(35) этот код?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |