|   |   | 
| 
 | Как сформировать отчет на СКД по заполненным данным табличной части с тремя колонками | ☑ | ||
|---|---|---|---|---|
| 0
    
        kenzori 05.06.25✎ 08:22 | 
        используя параметры текущего документа сформировать отчет на скд по данным тч     | |||
| 1
    
        Ненавижу 1С гуру 05.06.25✎ 08:25 | 
        задача с собеседования?     | |||
| 2
    
        Мультук гуру 05.06.25✎ 08:34 | 
        (0) 
 Если документ сохранен, то тривиально. Если НЕ сохранён, то придется строить отчёт СКД программно Примерно вот так. Отборы здесь передаются как "НастройкиОтбор", но их тоже можно формировать программно В функции "ПолучитьОписаниеПолей" ничего сложного нет, но там комментарии, а чистить мне лень 
тзДанные = Объект.Товары.Выгрузить(, "тут пишем нужные поля");
СтруктураОписаниеПолей = ПолучитьОписаниеПолей(тзДанные);
Функция СоздатьВыполнитьСКД(пСтр, НастройкиОтбор)
	
	ТаблицаЗначений 		= пСТр.тзДанные;
	СтруктураОписаниеПолей 	= пСТр.СтруктураОписаниеПолей;
	
	//Создание объекта СКД.
	СКД = Новый СхемаКомпоновкиДанных;
	
	//Создание Источника. Нужно создать обязательный локальный.
	ИсточникДанных = СКД.ИсточникиДанных.Добавить();
	ИсточникДанных.Имя = "ИсточникДанных1";
	ИсточникДанных.ТипИсточникаДанных = "local";	
	
	//Создание набора данных 
	НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
	НаборДанных.Имя = "НаборДанных1";
	НаборДанных.ИмяОбъекта = "ВнешнаяТЗ";
	НаборДанных.ИсточникДанных = "ИсточникДанных1";
	
	//Заполнение полей набора данных
	ЗаполнитьПоляНабораДанных(НаборДанных, СтруктураОписаниеПолей);
	
	//Заполнение выбранных полей отчета	
	ЗаполнитьВыбранныеПоляОтчета(СКД, СтруктураОписаниеПолей);	
	
	//Заполнить структуру отчета. Детальные записи             
	Структура = СКД.ВариантыНастроек[0].Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	Структура.Использование = Истина;
	Структура.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
	Структура.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
	
	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
	
	
	СкопироватьНастройОтбора(НастройкиОтбор.Отбор.Элементы, СКД.НастройкиПоУмолчанию.Отбор.Элементы);
	
    КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);	
	
	ВнешниеНаборыДанных = Новый Структура("ВнешнаяТЗ", ТаблицаЗначений);
	
	ТаблицаДанных = Новый ТаблицаЗначений;
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД, КомпоновщикНастроек.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ПроцессорВывода.УстановитьОбъект(ТаблицаДанных);
	ПроцессорВывода.НачатьВывод();
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	ПроцессорВывода.ЗакончитьВывод();	
	
	Возврат ТаблицаДанных;	
	
КонецФункции
Процедура ЗаполнитьПоляНабораДанных(НаборДанных, СтруктураОписаниеПолей) Экспорт   
	Для каждого строка из СтруктураОписаниеПолей Цикл
		
		ДобавленноеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		ДобавленноеПоле.Заголовок 	= строка.Ключ;
		ДобавленноеПоле.ПутьКДанным = строка.Ключ;
		ДобавленноеПоле.Поле 		= строка.Ключ;
			
		ДобавленноеПоле.ТипЗначения = строка.Значение ;//Новый ОписаниеТипов(НовыйТип);
	КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьВыбранныеПоляОтчета(СКД, СтруктураОписаниеПолей)
	
	Для каждого строка из СтруктураОписаниеПолей Цикл
		ВыбранноеПоле = СКД.ВариантыНастроек[0].Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле.Использование = Истина;
		ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(строка.Ключ);
	КонецЦикла;
	
КонецПроцедуры
 | |||
| 3
    
        toypaul гуру 05.06.25✎ 08:34 | 
        (2) а может документ и данные записаны. тогда это все конечно интересно, но совсем не нужно :)     | |||
| 4
    
        Мультук гуру 05.06.25✎ 08:39 | 
        (3) 
 Увы мне, у меня была задача принять решение ДО записи. Конечно же, когда код был написан и оттестирован, всё переиграли. P.S. Хотя, наверное, не стоило городить огород и нужно было проверять в приЗаписи и кидать Отказ = Истина, но что было сделано, то было сделано. | |||
| 5
    
        kenzori 05.06.25✎ 09:20 | 
        (4) Если записаны данные, не сработает?     | |||
| 6
    
        Shurjk 05.06.25✎ 09:21 | 
        (1) Вопрос на вакансию в 500 тыщ 🤣     | |||
| 7
    
        toypaul гуру 05.06.25✎ 09:42 | 
        (5) сработает. но если записаны, то все гораздо проще чем в (2)     | |||
| 8
    
        kenzori 05.06.25✎ 10:14 | 
        (7) Можете сказать, примерно куда копать? Если второй сложнее     | |||
| 9
    
        toypaul гуру 05.06.25✎ 10:00 | 
        Ну как-то так https://www.youtube.com/watch?v=0TrFvHoKh8Q&t=286s и тут наверное https://infostart.ru/1c/reports/89516/
 Короче смысл в том, что создаешь отчет (или обработку - точно не скажу) со схемой СКД (тут-то вопросов надеюсь нет?) и цепляешь ее к печатным формам, если вопрос был про то как это к документу потом прицепить. | |||
| 10
    
        Мультук гуру 05.06.25✎ 10:03 | 
        (8) 
 Для начала напишите внешний отчёт на СКД, который будет выводить нужную информацию. Отбор по документу через параметры или отборы. Если всё что я написал выше непонятно, то https://курсы-по-1с.рф/1c-v8/skd/ Не обязательно к этим парням, возможно нужен курс попроще. У этих же ребят есть бесплатный курс по СКД, где прямо разжевывают, что такое СКД. | |||
| 11
    
        kenzori 05.06.25✎ 13:00 | 
        (9) мне печатные формы не подходят мне нужен отчет на скд, где группировки итоги, ну отчет я сделал, может как-то можно адаптировать такой отбор в скд через запрос? или как-то еще Чтобы формировать отчет исходя из этого отбора? 
 Для Каждого СтрокаПродукции Из Объект.Продукция Цикл
		СтрокаПродукции.Показывать = Ложь;
		
		Если Лев(СтрокаПродукции.Номенклатура.Наименование, 2) = "ВП" Тогда
			
			Если СтрокаПродукции.Спецификация = Неопределено Тогда
				СтрокаПродукции.Показывать = Истина;
			Иначе
				СтрокаПродукции.Показывать = Истина;				 
				Для каждого Комплектующее Из СтрокаПродукции.Спецификация.ИсходныеКомплектующие Цикл
					Если Лев(Комплектующее.Номенклатура.Наименование, 26) = "Диафрагма вулканизационная" 
						ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 2) = "ВД"
						ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма ""10"" х 355"
						ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма ""9"" х 355"
						ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма 11""х345"
						ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма ""12"" х 370"
						ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма 12х340" 
						ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 30) = "Вулканизационные диафрагмы"
						Тогда
						
						
						СтрокаПродукции.Показывать = Ложь;
						Прервать;										
					КонецЕсли;
				КонецЦикла;								  
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	ПрименитьОтбор(); 
Процедура ПрименитьОтбор();
	Элементы.Продукция.ОтборСтрок = Новый ФиксированнаяСтруктура("Показывать", Истина);
	Элементы.Продукция.Обновить();
КонецПроцедуры; | |||
| 12
    
        kenzori 05.06.25✎ 13:05 | 
        (10) у меня есть отчет который заполняется по параметрам документам и выводит данные по этим параметрам, но мне нужно отбор сделать как я ниже описал, возможно ли это в скд , в запросе ЛЕВ и т.д. не нашел, не знаю подобно ли подойдет, или такое в запросе не реализуемо? как тогда по другому в скд можно     | |||
| 13
    
        toypaul гуру 05.06.25✎ 13:05 | 
        (11) Недавно взяли котенка. Когда он сделал лужу, пришлось его натыкать мордой в эту лужу. Судя по коду, учиться и учиться еще. И не на форуме, а на курсах где-то или у старших товарищей.
 А то будут тыкать на форуме мордой в лужу. | |||
| 14
    
        craxx 05.06.25✎ 12:15 | 
        (11) не показывай никому этот код больше.     | |||
| 15
    
        Волшебник 05.06.25✎ 13:06 | 
        (12) в запросе есть ПОДСТРОКА
 ВЫБРАТЬ ПОДСТРОКА("Привет, мир!", 9, 3) | |||
| 16
    
        lucky_ 05.06.25✎ 14:04 | 
        (12) "в запросе ЛЕВ и т.д. не нашёл".
 обнови платформу до "8.3.20" или ищи лучше. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |