Группировка

1. sh1718 10.01.24 12:41 Сейчас в теме
Здравствуйте,
Есть наверно простой вопрос для многих, но я немного запутался в группировках, как можно сделать, чтобы выводя в макет Табличного документа, у меня свернулись одинаковые контрагенты, а накладные по нему записались в строке все которые были за период по нему

МойОбъект = РеквизитФормыВЗначение("Объект");
Макет = МойОбъект.ПолучитьМакет("Макет");

ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("Шапка");
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СУММА(ПоступлениеТоваровУслугТовары.СуммаНДС) КАК СуммаНДС,
| ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка
|ПОМЕСТИТЬ вт1
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|
|СГРУППИРОВАТЬ ПО
| ПоступлениеТоваровУслугТовары.Ссылка
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
| ПоступлениеТоваровУслуг.Номер КАК Номер,
| ПоступлениеТоваровУслуг.Дата КАК Дата,
| ПоступлениеТоваровУслуг.Организация КАК Организация,
| ПоступлениеТоваровУслуг.СчетНаОплатуПоставщика КАК СчетНаОплатуПоставщика,
| ПоступлениеТоваровУслуг.НомерВходящегоДокумента КАК НомерВходящегоДокумента,
| ПоступлениеТоваровУслуг.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
| ПоступлениеТоваровУслуг.СуммаВключаетНДС КАК СуммаВключаетНДС,
| ПоступлениеТоваровУслуг.СуммаДокумента КАК СуммаДокумента,
| ПоступлениеТоваровУслуг.НДСНеВыделять КАК НДСНеВыделять,
| ПоступлениеТоваровУслуг.ДокументОснование КАК ДокументОснование,
| СчетФактураПолученный.Ссылка КАК Ссылка1,
| СчетФактураПолученный.Номер КАК Номер1,
| СчетФактураПолученный.Дата КАК Дата1,
| СчетФактураПолученный.НомерВходящегоДокумента КАК НомерВходящегоДокумента1,
| СчетФактураПолученный.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента1,
| вт1.СуммаНДС КАК СуммаНДС,
| ПоступлениеТоваровУслуг.Контрагент КАК Контрагент,
| ПоступлениеТоваровУслуг.ДоговорКонтрагента КАК ДоговорКонтрагента1
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураПолученный КАК СчетФактураПолученный
| ПО (СчетФактураПолученный.ДокументОснование = ПоступлениеТоваровУслуг.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ вт1 КАК вт1
| ПО (вт1.Ссылка = ПоступлениеТоваровУслуг.Ссылка)
|ГДЕ
| ПоступлениеТоваровУслуг.Проведен
| И ПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И ПоступлениеТоваровУслуг.Организация = &Организация
| И (ПоступлениеТоваровУслуг.Контрагент = &Контрагент
| ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
|ИТОГИ
| СУММА(СуммаДокумента),
| СУММА(СуммаНДС)
|ПО
| ОБЩИЕ";

Запрос.УстановитьПараметр("НачалоПериода", Период.ДатаНачала);
Запрос.УстановитьПараметр("КонецПериода", Период.ДатаОкончания);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);

РезультатЗапроса = Запрос.Выполнить().Выбрать();
По теме из базы знаний
Найденные решения
11. soft_wind 11.01.24 12:49 Сейчас в теме
(10) попробуйте так
ВыборкаДоговор = ВыборкаОбщая.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаДоговор.Следующий() Цикл

К=К+1;
ОбластьТаблицы.Параметры.Номер = К;
ОбластьТаблицы.Параметры.Контрагент = ВыборкаДоговор.ДоговорКонтрагента.Владелец;
ОбластьТаблицы.Параметры.СуммаДокумента = ВыборкаДоговор.СуммаДокумента;
ОбластьТаблицы.Параметры.ДоговорКонтрагента = ВыборкаДоговор.ДоговорКонтрагента;

ОбластьТаблицы.Параметры.НДС = ВыборкаДоговор.СуммаНДС;


Сообщить("ВыборкаДоговор.ДоговорКонтрагента = " + ВыборкаДоговор.ДоговорКонтрагента);
Сообщить("ВыборкаДоговор.ДоговорКонтрагента.Владелец = " + ВыборкаДоговор.ДоговорКонтрагента.Владелец);

Выборка = ВыборкаДоговор.Выбрать();
	СтрокаДокументов = ""; //строка для списка документов
	Пока Выборка.Следующий() Цикл
		СтрокаДокументов = СтрокаДокументов + Выборка.Ссылка + ", "; //где у вас ссылка на счетфактуру? 
//ОбластьТаблицы.Параметры.НомерВходящегоДокумента = Выборка.Номер1;
//ОбластьТаблицы.Параметры.ДатаВходящегоДокумента = Формат(Выборка.ДатаВходящегоДокумента1,"ДФ=dd.MM.yyyy");
//ОбластьТаблицы.параметры.НомерВходящегоДокумента1 = Выборка.НомерВходящегоДокумента1;
//ОбластьТаблицы.Параметры.ДатаВходящегоДокумента1 = Формат(Выборка.ДатаВходящегоДокумента1, "ДФ=dd.MM.yyyy");

Сообщить("Выборка.Ссылка = " + Выборка.Ссылка);
Сообщить("Выборка.Ссылка1 = " + Выборка.Ссылка1);

КонецЦикла;
	ОбластьТаблицы.Параметры.НомерВходящегоДокумента = СтрокаДокументов;
	ТабличныйДокумент.Вывести(ОбластьТаблицы);
КонецЦикла;

КонецЕсли;
КонецЦикла;
Показать
13. soft_wind 11.01.24 13:08 Сейчас в теме
(12) тоже самое
		СтрокаДокументов = СтрокаДокументов + 
			Выборка.Номер1 + " от " + Формат(Выборка.ДатаВходящегоДокумента1,"ДФ=dd.MM.yyyy") + ", ";
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 10.01.24 12:59 Сейчас в теме
так вы в итоги добавьте поле/реквизит где у вас Контрагент
3. sh1718 10.01.24 14:35 Сейчас в теме
(2)
(2) я так пробовал, в итоге выдает отдельной строкой. а следом весь список, что-то вроде этого

Контрагент ООО,03.7/23-172 договор от 07.06.2023 Поставка продуктов от , от 315 843,91 33 341,01
Контрагент ООО,03.7/23-172 договор от 07.06.2023 Поставка продуктов БП-15946 от 05.12.2023, БП-15946 от 05.12.2023 37 046,9 3 367,9
а хотелось бы, чтобы он все номера накладной записал в одной строке по контрагенту, а не просто сложил суммы и не создавал строки по каждому контрагенту, если сработала группировка
4. soft_wind 10.01.24 14:40 Сейчас в теме
так дальше нужен обход по группировкам
во внешней/первой выбоке будет Контрагент,
во вложенной выборке все его документы и др. информация....
5. sh1718 10.01.24 14:49 Сейчас в теме
(4)Спасибо
Сможете написать?
6. soft_wind 10.01.24 15:12 Сейчас в теме
может так (просто пример)
	лкРезультат = лкЗапрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Пока лкРезультат.Следующий() Цикл  //обход группировок по Контрагентам
		Сообщить(лкРезультат.Контрагент);
		лкДетали = лкРезультат.Выбрать();
		Пока лкДетали.Следующий() Цикл //детальные записи по каждому Контрагенту
			Сообщить("    " + лкДетали.Ссылка); //здесь можно сформировать общую строку 
		КонецЦикла;
	КонецЦикла;
Показать
7. sh1718 10.01.24 18:52 Сейчас в теме
(6)
(6)спасибо, но все равно пока не разобрался, я когда подставляю в запрос.выбрать(обходрезультата) вообще перестает выводить документы
8. sh1718 11.01.24 12:15 Сейчас в теме
(6) Я тут сделал и вроде бы все получается с обходом, но единственный косяк, он не засовывает в строку все счета фактуры по контрагенту, что я упустил

ВыборкаДоговор = ВыборкаОбщая.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаДоговор.Следующий() Цикл

К=К+1;
ОбластьТаблицы.Параметры.Номер = К;
ОбластьТаблицы.Параметры.Контрагент = ВыборкаДоговор.ДоговорКонтрагента.Владелец;
ОбластьТаблицы.Параметры.СуммаДокумента = ВыборкаДоговор.СуммаДокумента;
ОбластьТаблицы.Параметры.ДоговорКонтрагента = ВыборкаДоговор.ДоговорКонтрагента;

ОбластьТаблицы.Параметры.НДС = ВыборкаДоговор.СуммаНДС;


Сообщить("ВыборкаДоговор.ДоговорКонтрагента = " + ВыборкаДоговор.ДоговорКонтрагента);
Сообщить("ВыборкаДоговор.ДоговорКонтрагента.Владелец = " + ВыборкаДоговор.ДоговорКонтрагента.Владелец);

Выборка = ВыборкаДоговор.Выбрать();

Пока Выборка.Следующий() Цикл
ОбластьТаблицы.Параметры.НомерВходящегоДокумента = Выборка.Номер1;
ОбластьТаблицы.Параметры.ДатаВходящегоДокумента = Формат(Выборка.ДатаВходящегоДокумента1,"ДФ=dd.MM.yyyy");
//ОбластьТаблицы.параметры.НомерВходящегоДокумента1 = Выборка.НомерВходящегоДокумента1;
//ОбластьТаблицы.Параметры.ДатаВходящегоДокумента1 = Формат(Выборка.ДатаВходящегоДокумента1, "ДФ=dd.MM.yyyy");

Сообщить("Выборка.Ссылка = " + Выборка.Ссылка);
Сообщить("Выборка.Ссылка1 = " + Выборка.Ссылка1);

КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьТаблицы);
КонецЦикла;

КонецЕсли;
КонецЦикла;
9. soft_wind 11.01.24 12:36 Сейчас в теме
он не засовывает в строку все счета фактуры

в какую строку? имя параметра?
как вы себе представляете "ВСЕ счета" ?
просто строка, через запятую, пример: "ДокСчФ1 от 01.02.2023,ДокСчФ2 от 01.02.2023,ДокСчФ3 от 01.02.2023"
так?
10. sh1718 11.01.24 12:40 Сейчас в теме
(6) НомерВходящегоДокумента
в колонке счетов фактур по контрагенту, через запятую было счет фактура № 1 от 01.01.2023, счет фактура № 2 от 05.02.2023
11. soft_wind 11.01.24 12:49 Сейчас в теме
(10) попробуйте так
ВыборкаДоговор = ВыборкаОбщая.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаДоговор.Следующий() Цикл

К=К+1;
ОбластьТаблицы.Параметры.Номер = К;
ОбластьТаблицы.Параметры.Контрагент = ВыборкаДоговор.ДоговорКонтрагента.Владелец;
ОбластьТаблицы.Параметры.СуммаДокумента = ВыборкаДоговор.СуммаДокумента;
ОбластьТаблицы.Параметры.ДоговорКонтрагента = ВыборкаДоговор.ДоговорКонтрагента;

ОбластьТаблицы.Параметры.НДС = ВыборкаДоговор.СуммаНДС;


Сообщить("ВыборкаДоговор.ДоговорКонтрагента = " + ВыборкаДоговор.ДоговорКонтрагента);
Сообщить("ВыборкаДоговор.ДоговорКонтрагента.Владелец = " + ВыборкаДоговор.ДоговорКонтрагента.Владелец);

Выборка = ВыборкаДоговор.Выбрать();
	СтрокаДокументов = ""; //строка для списка документов
	Пока Выборка.Следующий() Цикл
		СтрокаДокументов = СтрокаДокументов + Выборка.Ссылка + ", "; //где у вас ссылка на счетфактуру? 
//ОбластьТаблицы.Параметры.НомерВходящегоДокумента = Выборка.Номер1;
//ОбластьТаблицы.Параметры.ДатаВходящегоДокумента = Формат(Выборка.ДатаВходящегоДокумента1,"ДФ=dd.MM.yyyy");
//ОбластьТаблицы.параметры.НомерВходящегоДокумента1 = Выборка.НомерВходящегоДокумента1;
//ОбластьТаблицы.Параметры.ДатаВходящегоДокумента1 = Формат(Выборка.ДатаВходящегоДокумента1, "ДФ=dd.MM.yyyy");

Сообщить("Выборка.Ссылка = " + Выборка.Ссылка);
Сообщить("Выборка.Ссылка1 = " + Выборка.Ссылка1);

КонецЦикла;
	ОбластьТаблицы.Параметры.НомерВходящегоДокумента = СтрокаДокументов;
	ТабличныйДокумент.Вывести(ОбластьТаблицы);
КонецЦикла;

КонецЕсли;
КонецЦикла;
Показать
12. sh1718 11.01.24 12:59 Сейчас в теме
(11)Спасибо большое, получилось
Что-то я затупил......, что так можно было
А про ссылку на счет фактуру, я хотел только номер и дату выводить
13. soft_wind 11.01.24 13:08 Сейчас в теме
(12) тоже самое
		СтрокаДокументов = СтрокаДокументов + 
			Выборка.Номер1 + " от " + Формат(Выборка.ДатаВходящегоДокумента1,"ДФ=dd.MM.yyyy") + ", ";
14. sh1718 11.01.24 13:50 Сейчас в теме
Оставьте свое сообщение

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