Здравствуйте, помогите получить количество в выборке. Почему то всегда 0.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Журнал.Номер КАК Номер,
| ВЫБОР
| КОГДА Журнал.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.Новая)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Новая,
| ВЫБОР
| КОГДА Журнал.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.ВРаботе)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ВРаботе,
| ВЫБОР
| КОГДА Журнал.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.Просрочено)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Просрочено
|ИЗ
| Документ.Журнал КАК Журнал
|ИТОГИ
| СУММА(Новая),
| СУММА(ВРаботе),
| СУММА(Просрочено)
|ПО
| Номер"
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Новые = Выборка.Новая;
КонецЦикла;
Сообщить(Новые);
ПоказатьПо теме из базы знаний
- Передача большого количества объектов через Web-сервисы
- Подсчёт и отображение количества строк в динамическом списке
- Отчет по метаданным. Количество элементов справочников, документов, регистров. Отбор по периоду
- Кейс по получению большой выборки данных в обработке порционно
- Количество и формат страниц прикрепленного к документу PDF
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
попробуйте так
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Количество(1) как КоличествоНовых
|ИЗ
| Документ.Журнал КАК Журнал
где
| Журнал.Статус = ЗНАЧЕНИЕ(Перечисление.Статусы.Новая)
|";
Выборка = Запрос.Выполнить().Выбрать();
Новые = 0;
Если Выборка.Следующий() Тогда
Новые = Выборка.КоличествоНовых;
КонецЕсли;
Сообщить(Новые);
Показать
(18) Добрый день. Вы группируете по номеру журнала, и в пределах вашей группировки у вас итоговая таблица будет вида:
Номер Новая В работе Просрочено
105 0 0 1
106 1 0 0
107 0 1 0
И т.д. (это только итоговые записи) т.е. в пределах вашей группировки итоги по одному номеру.
Уберите из запроса Номер, вы же хотите посчитать общее количество с разбивкой по статусам. Введите вместо номера произвольное поле, которое будет одинаково для все журналов и по нему посчитайте итоги, .
Номер Новая В работе Просрочено
105 0 0 1
106 1 0 0
107 0 1 0
И т.д. (это только итоговые записи) т.е. в пределах вашей группировки итоги по одному номеру.
Уберите из запроса Номер, вы же хотите посчитать общее количество с разбивкой по статусам. Введите вместо номера произвольное поле, которое будет одинаково для все журналов и по нему посчитайте итоги, .
(14) так вы у себя в коде только новый выводите, остальное мусор (гкод)
а если нужны количества по статусам, то тогда так и надо писать, получается примерно такой код
а если нужны количества по статусам, то тогда так и надо писать, получается примерно такой код
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Журнал.Статус,
| Количество(1) как Количество
|ИЗ
| Документ.Журнал КАК Журнал
|сгруппировать по
|Журнал.Статус
|";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
сообщить("Статус: " + Выборка.Статус + ", количество: " + Выборка.Количество);
КонецЦикла;
Показать
(24)может убрать итоги из запроса и выгрузить все в таблицу значений?
вот это убрать:
что-то вроде:
и дальше цикл по таблице и обрабатывай как хочешь
вот это убрать:
|ИТОГИ
| СУММА(Новая),
| СУММА(ВРаботе),
| СУММА(Просрочено)
|ПО
| Номер"
что-то вроде:
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Свернуть("Номер", "Новая, ВРаботе, Просрочено");
и дальше цикл по таблице и обрабатывай как хочешь
(26)
Ты тут что сворачивать-то собрался, чудик??? Номер - уникальная не повторяющаяся сущность!
У одного документа - всегда один статус!!! У одного "номера " в результате всегда будет два нолика и одна единичка!
что-то вроде:
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Свернуть("Номер", "Новая, ВРаботе, Просрочено");
Ты тут что сворачивать-то собрался, чудик??? Номер - уникальная не повторяющаяся сущность!
У одного документа - всегда один статус!!! У одного "номера " в результате всегда будет два нолика и одна единичка!
(24) Зачем?
Запрос с итогами (ОБЩИЕ, Номер) вернет дерево значений:
В случае с
Будет ниже такое
Если я неправ мсье FatPanzer меня поправит
Запрос с итогами (ОБЩИЕ, Номер) вернет дерево значений:
В случае с
Запрос.Текст =
"ВЫБРАТЬ
|Журнал.Статус,
| Количество(1) как Количество
|ИЗ
| Документ.Журнал КАК Журнал
|сгруппировать по
|Журнал.Статус
|";
ПоказатьБудет ниже такое
Если я неправ мсье FatPanzer меня поправит
Прикрепленные файлы:
(28) А как тогда обратиться не ко всем статусам, а только тем. которые ВРаботе?
Я имею ввиду, что мне нужно каждому статусу присвоить параметр и потом вытащить.
Сделать выборку по каждому статусу в раздельности.
Если вы посмотрите первое сообщение, то увидите, что я присваиваю каждому статусу параметр в запросе.
Я имею ввиду, что мне нужно каждому статусу присвоить параметр и потом вытащить.
Сделать выборку по каждому статусу в раздельности.
Если вы посмотрите первое сообщение, то увидите, что я присваиваю каждому статусу параметр в запросе.
(32) Объясните вам что конкретно требуется:
Количество документов по статусам?
Если используется запрос с итогами:
То можно:
-------
Если Запрос (21) - тогда в цикле обходить а-ля:
Извиняюсь за говнокод
Количество документов по статусам?
Если используется запрос с итогами:
То можно:
выборка = запрос.выполнить().выбрать();
выборка.следующий();
Новая = Выборка.Новая;
ВРаботе = Выборка.ВРаботе;
Просрочено = Выборка.Просрочено;
-------
Если Запрос (21) - тогда в цикле обходить а-ля:
если Выборка.Статус = "Новая"[грубо, в норме должно быть обращение через Перечисление.Статус. ...] Тогда Новая = Выборка.Количество
ИначеЕсли Выборка.Статус = "ВРаботе" Тогда ВРаботе = Выборка.Количество
ИначеЕсли Выборка.Статус = "Просрочено" Тогда Просрочено = Выборка.Количество
КонецЕсли
Извиняюсь за говнокод
(35)
Если в цикле ставлю
Тогда он мне сообщает статусы и количество, но в общих. Я не могу вытянуть по отдельности. Но данные верны.
Если я делаю, как вы, тогда
То он мне выдает везде 5
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Журнал.Статус,
| Количество(1) как Количество
|ИЗ
| Документ.Журнал КАК Журнал
|сгруппировать по
|Журнал.Статус
|";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
сообщить("Статус: " + Выборка.Статус + ", количество: " + Выборка.Количество);
КонецЦикла;
ПоказатьЕсли в цикле ставлю
сообщить("Статус: " + Выборка.Статус + ", количество: " + Выборка.Количество);
Тогда он мне сообщает статусы и количество, но в общих. Я не могу вытянуть по отдельности. Но данные верны.
Если я делаю, как вы, тогда
Если Выборка.Статус = Перечисления.Статус.Новая Тогда
Новая = Выборка.Количество();
ИначеЕсли Выборка.Статус = Перечисления.Статус.ВРаботе Тогда
ВРаботе = Выборка.Количество();
ИначеЕсли Выборка.Статус = Перечисления.Статус.Просрочено Тогда
Просрочено = Выборка.Количество();
ИначеЕсли Выборка.Статус = Перечисления.Статус.Исполнено Тогда
Исполнено = Выборка.Количество();
КонецЕсли;
ПоказатьТо он мне выдает везде 5
Суть в следующем.
Есть статусы: Новая, В работе, просрочено.
Как в запросе посчитать количество по каждому статусу в раздельности и вывести это все по отдельности. Не все вместе, а по каждому статусу, которому в дальнейшем присвоим параметр, вывести отдельно. Не по одному статусу посчитать, ни по всем сразу в одном месте, а раздельно.
Есть статусы: Новая, В работе, просрочено.
Как в запросе посчитать количество по каждому статусу в раздельности и вывести это все по отдельности. Не все вместе, а по каждому статусу, которому в дальнейшем присвоим параметр, вывести отдельно. Не по одному статусу посчитать, ни по всем сразу в одном месте, а раздельно.
Если ЗапросСИтогами Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗаказНаПеремещение.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА ЗаказНаПеремещение.Статус.Порядок = 0
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК КОбеспечению,
| ВЫБОР
| КОГДА ЗаказНаПеремещение.Статус.Порядок = 1
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК КВыполнению,
| ВЫБОР
| КОГДА ЗаказНаПеремещение.Статус.Порядок = 2
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Закрыт
|ИЗ
| Документ.ЗаказНаПеремещение КАК ЗаказНаПеремещение
|ИТОГИ
| СУММА(КОбеспечению),
| СУММА(КВыполнению),
| СУММА(Закрыт)
|ПО ОБЩИЕ";
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
КОбеспечению = Выборка.КОбеспечению;
КВыполнению = Выборка.КВыполнению;
Закрыт = Выборка.Закрыт;
Иначе
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗаказНаПеремещение.Статус КАК Статус,
| СУММА(1) КАК Количество
|ИЗ
| Документ.ЗаказНаПеремещение КАК ЗаказНаПеремещение
|
|СГРУППИРОВАТЬ ПО
| ЗаказНаПеремещение.Статус";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Статус = Перечисления.СтатусыВнутреннихЗаказов.КОбеспечению Тогда КОбеспечению = Выборка.Количество
ИначеЕсли Выборка.Статус = Перечисления.СтатусыВнутреннихЗаказов.КВыполнению Тогда КВыполнению = Выборка.Количество
ИначеЕсли Выборка.Статус = Перечисления.СтатусыВнутреннихЗаказов.Закрыт Тогда Закрыт = Выборка.Количество
КонецЕсли
КонецЦикла
КонецЕсли
ПоказатьВот вам оба варианта, за пример взят заказ на перемещение из УТ - Работает.
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот