Группировка в табличной части формы

1. shaweles 25.12.19 20:18 Сейчас в теме
Добрый день! Учусь в 1С, столкнулся с непониманием и незнанием функционала.
Задача следующая: На форме есть текстовое поле ввода и табличная часть с колонками: Номенклатура, артикул, склад, ОстатокНаСкладе, РозничнаяЦена.
Пользователь вводит в текстовое поле массив артикулов, например: А123, Б432, В567К. Данная строка разбивается на массив по разделителю ",". Далее по этому массиву проводится поиск по справочнику номенклатура и заполняются колонки.
Проблема следующая: Одна и та же номенклатура может находится на нескольких складах, и в табличную часть она выводиться отдельными строками.
Мне же надо в ТЧ сделать группировку по номенклатуре, чтобы выводилась строка с номенклатурой, которую можно было бы развернуть и посмотреть на каких складах она лежит. Как реализовать?

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


Объект.Текст - текстовое поле для ввода
Объект.ВидыЦен - пользователь выбирает вид цен, по которому формируется стоимость
Объект.Результат - табличная часть на форме

P.s. Если видите говнокод, то не стесняйтесь выражать конструктивную критику
По теме из базы знаний
Найденные решения
2. aezdakov 5 26.12.19 10:12 Сейчас в теме
ТЧ формы такого не может. Посмотрите в эту сторону: https://infostart.ru/public/991409/
По коду, запрос в цикле, который на сервере с высокой степени вероятности вызовет перебор - не есть хорошо. Получите сперва список номенклатур, потом идите в регистры с ними за требуемым результатом. Неужто у вас артикулы только в наименовании?
shaweles; +1 Ответить
5. antz 26.12.19 12:13 Сейчас в теме
(4) Нет, так делать не надо. Надо примерно так.
Прикрепленные файлы:
Пример.epf
shaweles; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. aezdakov 5 26.12.19 10:12 Сейчас в теме
ТЧ формы такого не может. Посмотрите в эту сторону: https://infostart.ru/public/991409/
По коду, запрос в цикле, который на сервере с высокой степени вероятности вызовет перебор - не есть хорошо. Получите сперва список номенклатур, потом идите в регистры с ними за требуемым результатом. Неужто у вас артикулы только в наименовании?
shaweles; +1 Ответить
4. shaweles 26.12.19 11:08 Сейчас в теме
(2) Спасибо за ссылку и конструктив. Хотел уточнить на счет запроса. Я правильно понял, что сначала я должен выполнить запрос целиком без этого отбора:
 Запрос.УстановитьПараметр("Наименование", эл);

А уже потом отбирать необходимое в цикле?

Артикулы тоже заведены, но искать по ним нужно только в рамках цифр, без префиксов (Артикулы рода DLU752003BS). Тк они не все заполнены, то пока так. В дальнейшем планируется переделать как раз по артикулам.
5. antz 26.12.19 12:13 Сейчас в теме
(4) Нет, так делать не надо. Надо примерно так.
Прикрепленные файлы:
Пример.epf
shaweles; +1 Ответить
6. shaweles 26.12.19 13:45 Сейчас в теме
(5) Большое спасибо! Буду разбираться!
3. TimoninD 26.12.19 10:24 Сейчас в теме
Я промолчу про запрос в цикле.... В ТЧ у вас есть колонка "склад", разбития строк по складам логична. Если необходимо показывать общие остатки на всех складах, но с возможной детализацией до разреза складов., то тут можно где-нибудь на форме создать элемент формы "Декорация" или небольшую ТЧ (склад, количество) и в них отображать наличие на складах, при выборе строки. То есть ткнул на строку, и в этот момент отобразилось детализация по складам. Или Добавить команду на форму, чтоб открывала форму с детализацией по складам, для номенклатуры из выбранной строки. Но повторюсь, если не убирать колонку "склад", то менять ничего не надо.
Оставьте свое сообщение

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