Получить количество в выборке

1. UPKA 05.07.22 08:37 Сейчас в теме
Здравствуйте, помогите получить количество в выборке. Почему то всегда 0.


Запрос = Новый Запрос;

Запрос.Текст = 
"ВЫБРАТЬ
|	Журнал.Номер КАК Номер,
|	ВЫБОР
|		КОГДА Журнал.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.Новая)
|			ТОГДА 1
|		ИНАЧЕ 0
|	КОНЕЦ КАК Новая,
|	ВЫБОР
|		КОГДА Журнал.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.ВРаботе)
|			ТОГДА 1
|		ИНАЧЕ 0
|	КОНЕЦ КАК ВРаботе,
|	ВЫБОР
|		КОГДА Журнал.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.Просрочено)
|			ТОГДА 1
|		ИНАЧЕ 0
|	КОНЕЦ КАК Просрочено
|ИЗ
|	Документ.Журнал КАК Журнал
|ИТОГИ
|	СУММА(Новая),
|	СУММА(ВРаботе),
|	СУММА(Просрочено)
|ПО
|	Номер"



Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();



Пока Выборка.Следующий() Цикл
	
Новые = Выборка.Новая; 

КонецЦикла;

Сообщить(Новые);

Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. vkholodnov 7 05.07.22 11:14 Сейчас в теме
(1) поместите запрос без сумм во временную таблицу, а уже потом в новом запросе ссумируйте.
9. FatPanzer 05.07.22 11:18 Сейчас в теме
2. FatPanzer 05.07.22 08:54 Сейчас в теме
Потому что вы выводите только результат последней строки из выборки.
3. UPKA 05.07.22 10:13 Сейчас в теме
(2)А как нужно правильно?
4. FatPanzer 05.07.22 10:13 Сейчас в теме
5. UPKA 05.07.22 10:22 Сейчас в теме
(4)Хочу в переменной "Новые" получить общее количество со статусом "Новая"
6. FatPanzer 05.07.22 10:24 Сейчас в теме
(5) Общее??? Тогда зачем у тебя в запросе номер документа?
Sashares; +1 Ответить
12. UPKA 05.07.22 11:27 Сейчас в теме
(6) Номер документа хочу вывести после.

Сейчас не пойму, как мне количество документов вывести по каждому статусу.
7. soft_wind 05.07.22 11:00 Сейчас в теме
попробуйте так
Запрос = Новый Запрос;

Запрос.Текст = 
"ВЫБРАТЬ
|    Количество(1) как КоличествоНовых
|ИЗ
|    Документ.Журнал КАК Журнал
где
|    Журнал.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.Новая)
|";


Выборка = Запрос.Выполнить().Выбрать();
Новые = 0;
Если Выборка.Следующий() Тогда
     Новые = Выборка.КоличествоНовых;
КонецЕсли;

Сообщить(Новые);
Показать
14. UPKA 05.07.22 11:29 Сейчас в теме
(7)Не совсем понятен запрос. Что такое количество(1)?

Ну и если в условии я пропишу 3 строки со статусом. как тогда получить количество документов по каждому статусу?
10. Alexponenta 05.07.22 11:22 Сейчас в теме
11. FatPanzer 05.07.22 11:25 Сейчас в теме
(10) ЧАВО??? Каким это боком относится к примитивнейшему учебному запросу?
17. Alexponenta 05.07.22 11:40 Сейчас в теме
(11) Ой ну не все тут эксперты высшего класса, которые сходу в код могут.
13. user1278383 5 05.07.22 11:27 Сейчас в теме
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппиовкам);

Если Выборка.Следующий() Цикл
    
Новые = Выборка.Новая; 
Сообщить(Новые);

КонецЦикла;

Показать
15. UPKA 05.07.22 11:31 Сейчас в теме
(13) Поле объекта не обнаружено (По группировкам)
16. Vladimir-R 168 05.07.22 11:39 Сейчас в теме
(15)ОбходРезультатаЗапроса.ПоГруппировкам

в (13) очепятка!
18. UPKA 05.07.22 11:46 Сейчас в теме
(16)
ОбходРезультатаЗапроса.ПоГруппировкам



Все равно ответ = 0)
20. Zevzm 05.07.22 11:53 Сейчас в теме
(18) Добрый день. Вы группируете по номеру журнала, и в пределах вашей группировки у вас итоговая таблица будет вида:
Номер Новая В работе Просрочено
105 0 0 1
106 1 0 0
107 0 1 0
И т.д. (это только итоговые записи) т.е. в пределах вашей группировки итоги по одному номеру.
Уберите из запроса Номер, вы же хотите посчитать общее количество с разбивкой по статусам. Введите вместо номера произвольное поле, которое будет одинаково для все журналов и по нему посчитайте итоги, .
19. Alexponenta 05.07.22 11:47 Сейчас в теме
|ИЗ
|    Документ.Журнал КАК Журнал
|ИТОГИ
|    СУММА(Новая),
|    СУММА(ВРаботе),
|    СУММА(Просрочено)
|ПО
|    ОБЩИЕ,
|    Номер"
Показать


В первой строке дерева собственно будут итоги общие, потом расшифровка по номерам
21. soft_wind 05.07.22 12:03 Сейчас в теме
(14) так вы у себя в коде только новый выводите, остальное мусор (гкод)
а если нужны количества по статусам, то тогда так и надо писать, получается примерно такой код
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|Журнал.Статус,
|    Количество(1) как Количество
|ИЗ
|    Документ.Журнал КАК Журнал
|сгруппировать по
|Журнал.Статус
|";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
сообщить("Статус: " + Выборка.Статус + ", количество: " + Выборка.Количество); 
КонецЦикла;


Показать
22. UPKA 05.07.22 12:47 Сейчас в теме
(21) А если мне необходимо по каждому статусу в отдельности вывести?

Новые = "14";
ВРаботе = "10";
Просрочено = "5";

Как тогда?

Из Вашего кода я понял, что можно вывести количество документов без разбивки по статусам.
23. Alexponenta 05.07.22 13:05 Сейчас в теме
(22) в теории так и будет. вместо одной строки будет три.
24. UPKA 05.07.22 13:09 Сейчас в теме
(23) Предположим, Ну и как мне потом вычленять из текста этих строк нужные данные? Нет, извините, но это явно бред...

Мне потом эти статусы еще и обработать нужно
25. FatPanzer 05.07.22 13:17 Сейчас в теме
(24) Брееед...??? Ну парень, ты попал... Сейчас тебя все отправят учить базовые конструкции языка запросов и обработку результатов. БАЗОВЫЕ!!@
26. Pavel Rodinchenko 05.07.22 13:25 Сейчас в теме
(24)может убрать итоги из запроса и выгрузить все в таблицу значений?

вот это убрать:
|ИТОГИ
|    СУММА(Новая),
|    СУММА(ВРаботе),
|    СУММА(Просрочено)
|ПО
|    Номер"

что-то вроде:
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Свернуть("Номер", "Новая, ВРаботе, Просрочено");


и дальше цикл по таблице и обрабатывай как хочешь
27. FatPanzer 05.07.22 13:36 Сейчас в теме
(26)
что-то вроде:
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Свернуть("Номер", "Новая, ВРаботе, Просрочено");


Ты тут что сворачивать-то собрался, чудик??? Номер - уникальная не повторяющаяся сущность!
У одного документа - всегда один статус!!! У одного "номера " в результате всегда будет два нолика и одна единичка!
28. Alexponenta 05.07.22 13:45 Сейчас в теме
(24) Зачем?

Запрос с итогами (ОБЩИЕ, Номер) вернет дерево значений:

В случае с
Запрос.Текст = 
"ВЫБРАТЬ
|Журнал.Статус,
|    Количество(1) как Количество
|ИЗ
|    Документ.Журнал КАК Журнал
|сгруппировать по
|Журнал.Статус
|";
Показать


Будет ниже такое

Если я неправ мсье FatPanzer меня поправит
Прикрепленные файлы:
29. FatPanzer 05.07.22 13:47 Сейчас в теме
(28) Нет, здесь не будет дерева значений. Здесь будет несколько записей с количеством имеющихся статусов. Номеров документов в твоем запросе нет.
30. Alexponenta 05.07.22 13:49 Сейчас в теме
(29) Имелось ввиду если взять запрос автора и дописать ОБщие получим верхнюю часть скрина,
если (21) - то нижняя часть скрина
31. FatPanzer 05.07.22 13:50 Сейчас в теме
(30) Если 21 - то да, нижняя часть скрина будет такой, без номеров. Виноват, слишком быстро прочитал текст.
32. UPKA 05.07.22 14:01 Сейчас в теме
(28) А как тогда обратиться не ко всем статусам, а только тем. которые ВРаботе?

Я имею ввиду, что мне нужно каждому статусу присвоить параметр и потом вытащить.

Сделать выборку по каждому статусу в раздельности.

Если вы посмотрите первое сообщение, то увидите, что я присваиваю каждому статусу параметр в запросе.
34. FatPanzer 05.07.22 14:08 Сейчас в теме
(32) Тогда почему в выборке ты читаешь только ОДИН статус? Читай все три.
35. Alexponenta 05.07.22 14:16 Сейчас в теме
(32) Объясните вам что конкретно требуется:
Количество документов по статусам?

Если используется запрос с итогами:
То можно:
выборка = запрос.выполнить().выбрать();
выборка.следующий();
Новая = Выборка.Новая;
ВРаботе = Выборка.ВРаботе;
Просрочено = Выборка.Просрочено;


-------
Если Запрос (21) - тогда в цикле обходить а-ля:
если Выборка.Статус = "Новая"[грубо, в норме должно быть обращение через Перечисление.Статус. ...] Тогда Новая = Выборка.Количество
ИначеЕсли Выборка.Статус = "ВРаботе" Тогда ВРаботе = Выборка.Количество
ИначеЕсли Выборка.Статус = "Просрочено" Тогда Просрочено = Выборка.Количество
КонецЕсли


Извиняюсь за говнокод
37. UPKA 05.07.22 14:24 Сейчас в теме
(35) Да, вот так нужно) Но почему то по моему запросу выходят нули.
39. Alexponenta 05.07.22 15:08 Сейчас в теме
(37) Журнал.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.Новая) Вот эта штука не работает.
40. FatPanzer 05.07.22 15:30 Сейчас в теме
(37) Может у тебя палец сломан? Куда не ткнёшь им - везде тебе больно...
41. UPKA 05.07.22 16:58 Сейчас в теме
(35)
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|Журнал.Статус,
|    Количество(1) как Количество
|ИЗ
|    Документ.Журнал КАК Журнал
|сгруппировать по
|Журнал.Статус
|";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
сообщить("Статус: " + Выборка.Статус + ", количество: " + Выборка.Количество); 
КонецЦикла;
Показать



Если в цикле ставлю

сообщить("Статус: " + Выборка.Статус + ", количество: " + Выборка.Количество); 


Тогда он мне сообщает статусы и количество, но в общих. Я не могу вытянуть по отдельности. Но данные верны.

Если я делаю, как вы, тогда

	Если Выборка.Статус = Перечисления.Статус.Новая Тогда
		Новая = Выборка.Количество();
	ИначеЕсли Выборка.Статус = Перечисления.Статус.ВРаботе Тогда
		ВРаботе = Выборка.Количество();
	ИначеЕсли Выборка.Статус = Перечисления.Статус.Просрочено Тогда
		Просрочено = Выборка.Количество();
		ИначеЕсли Выборка.Статус = Перечисления.Статус.Исполнено Тогда
        Исполнено = Выборка.Количество();
		КонецЕсли;
Показать


То он мне выдает везде 5
43. FatPanzer 05.07.22 17:05 Сейчас в теме
(41) Количество() ??? То есть ты теперь решил выводить общее количество записей в выборке вместо значения выборки???
Слушай, иди читай СП!!!
44. Alexponenta 05.07.22 18:00 Сейчас в теме
(43) Я чую еще один прокол и Вас разорвет
45. FatPanzer 05.07.22 18:12 Сейчас в теме
(44) Конечно. Когда чувак не отличает написание метода от написания свойства - меня рвёт! Это как приходить в гараж к мужикам, не понимая разницы между плоской и крестовой отверткой!!!
33. UPKA 05.07.22 14:08 Сейчас в теме
Суть в следующем.

Есть статусы: Новая, В работе, просрочено.

Как в запросе посчитать количество по каждому статусу в раздельности и вывести это все по отдельности. Не все вместе, а по каждому статусу, которому в дальнейшем присвоим параметр, вывести отдельно. Не по одному статусу посчитать, ни по всем сразу в одном месте, а раздельно.
36. FatPanzer 05.07.22 14:18 Сейчас в теме
(33) Вот просто нарисуй табличку в Ёкселе и не выноси уже всем мозг своими путанными техзаданиями...
Alexponenta; +1 Ответить
38. Zevzm 05.07.22 14:31 Сейчас в теме
(33) В (21) уже все ведь вывели по отдельности: Статус - количество. С группировкой, а не с итогами, даже думать не нужно про типы обходов.
42. Alexponenta 05.07.22 17:01 Сейчас в теме
Если ЗапросСИтогами Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		|	ЗаказНаПеремещение.Ссылка КАК Ссылка,
		|	ВЫБОР
		|		КОГДА ЗаказНаПеремещение.Статус.Порядок = 0
		|			ТОГДА 1
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК КОбеспечению,
		|	ВЫБОР
		|		КОГДА ЗаказНаПеремещение.Статус.Порядок = 1
		|			ТОГДА 1
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК КВыполнению,
		|	ВЫБОР
		|		КОГДА ЗаказНаПеремещение.Статус.Порядок = 2
		|			ТОГДА 1
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК Закрыт
		|ИЗ
		|	Документ.ЗаказНаПеремещение КАК ЗаказНаПеремещение
		|ИТОГИ
		|	СУММА(КОбеспечению),
		|	СУММА(КВыполнению), 
		|	СУММА(Закрыт)
		|ПО ОБЩИЕ";
		Выборка = Запрос.Выполнить().Выбрать();
		Выборка.Следующий();
		КОбеспечению = Выборка.КОбеспечению;
		КВыполнению = Выборка.КВыполнению;
		Закрыт = Выборка.Закрыт;
	Иначе
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		|	ЗаказНаПеремещение.Статус КАК Статус,
		|	СУММА(1) КАК Количество
		|ИЗ
		|	Документ.ЗаказНаПеремещение КАК ЗаказНаПеремещение
		|
		|СГРУППИРОВАТЬ ПО
		|	ЗаказНаПеремещение.Статус";
		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			Если Выборка.Статус = Перечисления.СтатусыВнутреннихЗаказов.КОбеспечению  Тогда КОбеспечению = Выборка.Количество
			ИначеЕсли Выборка.Статус = Перечисления.СтатусыВнутреннихЗаказов.КВыполнению Тогда КВыполнению = Выборка.Количество
			ИначеЕсли Выборка.Статус = Перечисления.СтатусыВнутреннихЗаказов.Закрыт Тогда Закрыт = Выборка.Количество
			КонецЕсли
		КонецЦикла
	КонецЕсли
Показать


Вот вам оба варианта, за пример взят заказ на перемещение из УТ - Работает.
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот