Цитата: Злоп от 16 ноября 2025, 16:01По-прежнему непонятно что такое все вошедшие в запросДля регистров (2 склада, 3 товара, удовлетворяющих отбору по Условие()):
Группировка Склад Без групп;
Группировка Номенклатура Без групп;
| |Склад | |Товар | |Остаток |
| Склад1 | Товар1 | 10 |
| Склад1 | Товар2 | 15 |
| Склад2 | Товар1 | 20 |
Группировка Склад Без групп;
Группировка Номенклатура Без групп Все;
| |Склад | |Товар | |Остаток |
| Склад1 | Товар1 | 10 |
| Склад1 | Товар2 | 15 |
| Склад1 | Товар3 | 0 |
| Склад2 | Товар1 | 20 |
| Склад2 | Товар2 | 0 |
| Склад2 | Товар3 | 0 |
Группировка Склад Без групп;
Группировка Номенклатура Без групп Все ВошедшиеВЗапрос;
| |Склад | |Товар | |Остаток |
| Склад1 | Товар1 | 10 |
| Склад1 | Товар2 | 15 |
| Склад2 | Товар1 | 20 |
| Склад2 | Товар2 | 0 |
//Товар - k-ая группировка из n
Пока Запрос.Группировка(1) = 1 Цикл
..
Пока Запрос.Группировка(k-1) = 1 Цикл
Для СчетчикТоваров = 1 По СписокТоваров.РазмерСписка () Цикл
ТекТовар = СписокТоваров.ПолучитьЗначение(СчетчикТоваров);
Если Запрос.Получить(Запрос.ЗначениеГруппировки(1)..,Запрос.ЗначениеГруппировки(k-1), ТекТовар ,,,,,,) = 1 Тогда
//отрабатываешь нижележащие группировки по товару с остатком
Пока Запрос.Группировка(k+1) = 1 Цикл
..
Пока Запрос.Группирока(n) = 1 Цикл
//дошли до конца
КонецЦикла;
..
Запрос.Получить(Запрос.ЗначениеГруппировки(1)..,Запрос.ЗначениеГруппировки(k-1);//вернемся на начало выборки по товару
Иначе
//отрабатываешь товар без остатка
КонецЕсли;
КонецЦикла;
КонецЦикла;
..
КонецЦИкла;
Цитата: Злоп от 15 ноября 2025, 00:26как черным запросом получить отчет по остаткам товаров из списка, когда по всем товарам в списке - нет остатков?Ты хочешь получить пустографку со складами и товарами? А как тогда определить какие склады должны быть в этой пустографке, если остатка нет ни по одному?
Цитата: Злоп от 15 ноября 2025, 00:26И как это сделать?
//1. Убрать слово Все из запроса;
//2. СписокТоваров - содержит твою специфкацию на 5 позиций.
СписокСкладов = СоздатьОбъект("СписокЗначений");
Пока Запрос.Группировка(1) = 1 Цикл
СписокСкладов.ДобавитьЗначение(Запрос.Склад);
КонецЦикла;
Для СчетчикСкладов = 1 По СписокСкладов.РазмерСписка() Цикл
ТекСклад = СписокСкладов.ПолучитьЗначение(СчетчикСкладов);
Для СчетчикТоваров = 1 По СписокТоваров.РазмерСписка () Цикл
ТекТовар = СписокТоваров.ПолучитьЗначение(СчетчикТоваров);
Запрос.вНачалоВыборки();//люблю перестраховаться
Если Запрос.Получить(ТекСклад, ТекТовар) = 1 Тогда
//отрабатываешь остаток
Иначе
//отрабатываешь пустой остаток
КонецЕсли;
КонецЦикла;
КонецЦикла;