База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как сделать отбор по субконто в запросе с использованием ТаблицыЗначений?
- В этой теме 1 ответ, 2 участника, последнее обновление 10 часов, 23 минуты назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
18 июня 2026 в 11:19 #37871
Запрос.УстановитьПараметр(«ДатаОперации», Месяц);
РезультатЗапроса = Запрос.Выполнить();
// Создаем таблицу для группировки по видам услуг
ТаблицаГруппировки = Новый ТаблицаЗначений;
ТаблицаГруппировки.Колонки.Добавить(«ГруппаУслуг», Новый ОписаниеТипов(«Строка»));
ТаблицаГруппировки.Колонки.Добавить(«СуммаБезНДС», Новый ОписаниеТипов(«Число», Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой)));
ТаблицаГруппировки.Колонки.Добавить(«НДС», Новый ОписаниеТипов(«Число», Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой)));
ТаблицаГруппировки.Колонки.Добавить(«Сумма», Новый ОписаниеТипов(«Число», Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой)));ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Определяем группу услуги для субконто
ГруппаУслуг = ОпределитьГруппуУслуги(ВыборкаДетальныеЗаписи.СубконтоТовары,
ВыборкаДетальныеЗаписи.СубконтоУслуги,
НастройкиРаспределения);// Добавляем или суммируем в таблице группировки
СтрокаГруппы = ТаблицаГруппировки.Найти(ГруппаУслуг, «ГруппаУслуг»);
Если СтрокаГруппы = Неопределено Тогда
СтрокаГруппы = ТаблицаГруппировки.Добавить();
СтрокаГруппы.ГруппаУслуг = ГруппаУслуг;
СтрокаГруппы.СуммаБезНДС = 0;
СтрокаГруппы.НДС = 0;
СтрокаГруппы.Сумма = 0;
КонецЕсли;СтрокаГруппы.СуммаБезНДС = СтрокаГруппы.СуммаБезНДС + ВыборкаДетальныеЗаписи.СуммаБезНДС;
СтрокаГруппы.НДС = СтрокаГруппы.НДС + ВыборкаДетальныеЗаписи.НДС;
СтрокаГруппы.Сумма = СтрокаГруппы.Сумма + ВыборкаДетальныеЗаписи.Сумма;
КонецЦикла;// Выводим результат
Для Каждого СтрокаГруппы Из ТаблицаГруппировки Цикл
Сообщить(СтрокаГруппы.ГруппаУслуг + «: Без НДС=» +
Формат(СтрокаГруппы.СуммаБезНДС, «ЧДЦ=2») +
«, НДС=» + Формат(СтрокаГруппы.НДС, «ЧДЦ=2») +
«, Итого=» + Формат(СтрокаГруппы.Сумма, «ЧДЦ=2»));
КонецЦикла;КонецПроцедуры
Надо сделать отбор в запросе субконтобу1 по субконто из Таблица -
18 июня 2026 в 11:19 #37872
Чтобы сделать отбор по субконто1 в запросе по значениям из ТаблицыЗначений, нужно:
1. В запросе добавить параметр, например,
&СписокСубконто.
2. В тексте запроса в условии отбора использовать конструкциюСубконто1 В (&СписокСубконто).
3. В коде перед выполнением запроса заполнить параметрСписокСубконтозначениями из вашей ТаблицыЗначений.Пример:
1С (Код)1234567891011// Предположим, у вас есть ТаблицаЗначений с колонкой "Субконто1"ПараметрыСубконто = Новый Массив;Для Каждого Строка Из ТаблицаСубконто ЦиклПараметрыСубконто.Добавить(Строка.Субконто1);КонецЦикла;// Устанавливаем параметр в запросЗапрос.УстановитьПараметр("СписокСубконто", ПараметрыСубконто);// В тексте запроса в условии отбора:// ... ГДЕ Субконто1 В (&СписокСубконто)Если в запросе используется синтаксис 1С, то пример условия:
MySQL123ГДЕСубконто1 В (&СписокСубконто)И ДатаОперации = &ДатаОперации—
Если у вас ТаблицаЗначений с большим количеством строк, можно использовать временную таблицу запроса (ВТ):
1С (Код)12345678910111213141516171819202122// Создаем временную таблицу запросаВТ_Субконто = Новый ТаблицаЗначений;ВТ_Субконто.Колонки.Добавить("Субконто1", Новый ОписаниеТипов("СправочникСсылка.Номенклатура")); // или нужный тип// Заполняем ВТДля Каждого Строка Из ТаблицаСубконто ЦиклНоваяСтрока = ВТ_Субконто.Добавить();НоваяСтрока.Субконто1 = Строка.Субконто1;КонецЦикла;// В запросе добавляем временную таблицу как источник// и делаем соединение по субконто1// Пример в тексте запроса:|ВЫБРАТЬ| ...|ИЗ| Документ.РеализацияТоваровУслуг.Товары КАК Товары| ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ВТ_Субконто КАК ФильтрСубконто| ПО Товары.Субконто1 = ФильтрСубконто.Субконто1|ГДЕ| Товары.Период = &ДатаОперацииВ коде:
1С (Код)12Запрос.УстановитьПараметр("ДатаОперации", Месяц);Запрос.УстановитьПараметр("ВТ_Субконто", ВТ_Субконто);—
Итог:
— Если список субконто небольшой — проще передать массив в параметр и использоватьВ (&Параметр).
— Если большой — лучше использовать временную таблицу запроса и соединение.—
Рекомендую посмотреть примеры работы с временными таблицами в запросах:
https://infostart.ru/public/1616/
https://infostart.ru/public/1330558/
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.