Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
31 мар 2025, 12:12

Сгруппировать данные в запросе

Автор lutceva_k, 13 мар 2025, 15:35

0 Пользователей и 1 гость просматривают эту тему.

lutceva_k

Подскажите как сгруппировать или схлопнуть повторяющиеся поля в выводе отчета?

antoneus

Но тут же нет повторяющихся полей, в каждой строке разные комбинации.

lutceva_k

antoneus,
вот сделала в exele чтобы было понятно что хочу

antoneus


lutceva_k


lutceva_k

Процедура ЗаполнитьСтрокиДереваСпецификации(
СтрокаСпецификации,
Количество,
Спецификация
) Экспорт

КоличествоУровней = 100;

Если СтрокаСпецификации = Неопределено Тогда
Возврат;
КонецЕсли;


СтрокаСпецификации.Строки.Очистить();

Если НЕ ЗначениеЗаполнено(Спецификация) Тогда
Возврат;
КонецЕсли;

СтрокаРодитель = СтрокаСпецификации;

  з = новый запрос;
з.Текст ="ВЫБРАТЬ
         | СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Наименование,
         | СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК Количество,
         | СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
         | ВЫБОР
         | КОГДА СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.ВидВоспроизводства = &Покупка
         | ТОГДА 1
         | КОГДА СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.ВидВоспроизводства = &Производство
         | ТОГДА 3
         | КОНЕЦ КАК НоменклатураВидВоспроизводства,
         | NULL КАК РабочийЦентр,
         | NULL КАК Оснастка
         |ИЗ
         | Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
         |ГДЕ
         | СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка = &Ссылка
         |
         |ОБЪЕДИНИТЬ ВСЕ
         |
         |ВЫБРАТЬ
         | ТехнологическиеКартыПроизводстваМаршрут.ТехнологическаяОперация,
         | ТехнологическиеКартыПроизводстваМаршрут.Количество * ТехнологическиеКартыПроизводстваМаршрут.ВремяВыполнения / 3600,
         | ""ч."",
         | 2,
         | ТехнологическиеКартыПроизводстваМаршрут.РабочийЦентр,
         | ТехнологическиеКартыПроизводстваОснастка.Номенклатура_Оснастка
         |ИЗ
         | РегистрСведений.ТехнологическиеКартыСпецификацийПланирования.СрезПоследних(&Дата, ) КАК ТехнологическиеКартыСпецификацийПланированияСрезПоследних
         | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ТехнологическиеКартыПроизводства.Маршрут КАК ТехнологическиеКартыПроизводстваМаршрут
         | ПО ТехнологическиеКартыСпецификацийПланированияСрезПоследних.ТехнологическаяКарта = ТехнологическиеКартыПроизводстваМаршрут.Ссылка
         | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТехнологическиеКартыПроизводства.Оснастка КАК ТехнологическиеКартыПроизводстваОснастка
         | ПО (ТехнологическиеКартыПроизводстваМаршрут.ТехнологическаяОперация = ТехнологическиеКартыПроизводстваОснастка.ТехнологическаяОперация)
         |ГДЕ
         | ТехнологическиеКартыСпецификацийПланированияСрезПоследних.Спецификация = &Ссылка
         |
         |УПОРЯДОЧИТЬ ПО
         | НоменклатураВидВоспроизводства
         |ИТОГИ ПО
         | НоменклатураВидВоспроизводства";

з.УстановитьПараметр("Дата", пвДата);
з.УстановитьПараметр("Покупка", Перечисления.ВидыВоспроизводстваНоменклатуры.Закупка);
з.УстановитьПараметр("Производство", Перечисления.ВидыВоспроизводстваНоменклатуры.Производство);
з.УстановитьПараметр("Ссылка", Спецификация);

Результат = з.Выполнить();

ВыводСообщенияБезТехКарты(Результат,Спецификация);


ВыборкаНоменклатураВидВоспроизводства = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Савуляк + Панасовская 25.09.2020 Проверка на тех карту

Пока ВыборкаНоменклатураВидВоспроизводства.Следующий() Цикл
Если ВыборкаНоменклатураВидВоспроизводства.НоменклатураВидВоспроизводства = 1 Тогда
СтрокаГруппы = СтрокаРодитель.Строки.Добавить();
СтрокаГруппы.Наименование = "Материалы";
СтрокаГруппы.Группа = Истина;
ИначеЕсли ВыборкаНоменклатураВидВоспроизводства.НоменклатураВидВоспроизводства = 2 Тогда
СтрокаГруппы = СтрокаРодитель.Строки.Добавить();
СтрокаГруппы.Наименование = "Операции";
СтрокаГруппы.Группа = Истина;
КонецЕсли;

ВыборкаДетальныеЗаписи = ВыборкаНоменклатураВидВоспроизводства.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.НоменклатураВидВоспроизводства = 3 Тогда
СтрокаГруппы = СтрокаРодитель.Строки.Добавить();
СтрокаГруппы.Наименование = ВыборкаДетальныеЗаписи.Наименование;   
СтрокаГруппы.Количество = ВыборкаДетальныеЗаписи.Количество;   
СтрокаГруппы.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.Наименование.ЕдиницаХраненияОстатков;   
СтрокаГруппы.Группа = Истина;
СтрокаГруппы.БухНаименование = ВыборкаДетальныеЗаписи.Наименование.НаименованиеПолное;

СпецификацияДетали = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(ВыборкаДетальныеЗаписи.Наименование, , пвДата);
Если ЗначениеЗаполнено(СпецификацияДетали) Тогда
ЗаполнитьСтрокиДереваСпецификации(СтрокаГруппы, ВыборкаДетальныеЗаписи.Количество, СпецификацияДетали);
КонецЕсли;
Иначе
НоваяСтрока = СтрокаГруппы.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаДетальныеЗаписи);
НоваяСтрока.Группа = Ложь;

// Проверяем наличие колонки "Оснастка" в выборке
Если Результат.Колонки.Найти("Оснастка") <> Неопределено Тогда
Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Оснастка) Тогда
НоваяСтрока.Оснастка = ВыборкаДетальныеЗаписи.Оснастка;
Иначе
НоваяСтрока.Оснастка = "";
КонецЕсли;
КонецЕсли;

Если ВыборкаНоменклатураВидВоспроизводства.НоменклатураВидВоспроизводства <> 2 Тогда
НоваяСтрока.БухНаименование = ВыборкаДетальныеЗаписи.Наименование.НаименованиеПолное;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;

// Разворачиваем дерево
РазвернутьДеревоСпецификации();

Похожие темы (4)

Рейтинг@Mail.ru

Поиск