[СКД] Программное создание схемы компоновки данных

Публикация № 1179039

Разработка - Практика программирования

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

Создаем отчет и без создания макета ОсновнаяСхемаКомпоновкиДанных. Переходим в модуль отчета и создаем Процедуру ПриКомпоновкеРезультата, СтандартнаяОбработка = Ложь.

1. Добавляем Источник данных.

 

 

СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;

ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";

НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИмяОбъекта = "ТаблицаОстатков";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = "ИсточникДанных1";

2. Добавляем поля набора данных

 

 

ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Номенклатура";

ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Склад";

ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "ВНаличииОстаток";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "ВНаличииОстаток";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "ВНаличииОстаток";

3. Добавляем группировки данных

 

 

ГруппировкаКомпоновкиДанных1 = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаКомпоновкиДанных1.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Склад");

ГруппировкаКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных1.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаКомпоновкиДанных2.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных2.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных2.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных2.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");

4. Добавляем авто поля в группировки.

 

 

АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;

АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных2.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;

5. Добавляем выбранные поля

 

 

ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("В наличии остаток");

6. Добавляем отбор (ВНаличииОстаток > 500)

 

 

ЭлементОтбораКомпоновкиДанных = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = Истина;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = 500;

7. Добавляем Сортировку

 

 

ЭлементПорядкаКомпоновкиДанных = НастройкиКомпоновки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЭлементПорядкаКомпоновкиДанных.Использование = Истина;
ЭлементПорядкаКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
ЭлементПорядкаКомпоновкиДанных.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;

8. Добавляем оформление (Выделять желтым поля ВНаличииОстаток и Номенклатура, если ВНаличииОстаток > 1000).

 

 

УсловноеОформление = НастройкиКомпоновки.УсловноеОформление.Элементы.Добавить();
УсловноеОформление.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных = УсловноеОформление.Поля.Элементы.Добавить();
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");

ВыбранноеПолеКомпоновкиДанных = УсловноеОформление.Поля.Элементы.Добавить();
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");

УсловноеОформление.ИспользоватьВЗаголовке 		= ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
УсловноеОформление.ИспользоватьВЗаголовкеПолей  = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
УсловноеОформление.ИспользоватьВОбщемИтоге 		= ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;

ЭлементОтбораКомпоновкиДанных = УсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = Истина;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = 1000;
		
УсловноеОформление.Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона"), WebЦвета.Желтый);

В результате получаем отчет.

 

 

Полный текст процедуры.

 

 


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
	
	ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
	ИсточникДанных.Имя = "ИсточникДанных1";
	ИсточникДанных.ТипИсточникаДанных = "Local";
	
	НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
	НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
	НаборДанныхОбъектСхемыКомпоновкиДанных.ИмяОбъекта = "ТаблицаОстатков";
	НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = "ИсточникДанных1";
	
	ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
	ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Номенклатура";
	ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Номенклатура";
	ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Номенклатура";
	
	ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
	ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Склад";
	ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Склад";
	ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Склад";
	
	ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
	ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "ВНаличииОстаток";
	ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "ВНаличииОстаток";
	ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "В наличии остаток";
	
	Ресурс = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
	Ресурс.ПутьКДанным = "ВНаличииОстаток";
	Ресурс.Выражение = "Сумма(ВНаличииОстаток)";
	
	НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
	
	Если НастройкиКомпоновки.Структура.Количество() = 0 Тогда
		
		ГруппировкаКомпоновкиДанных1 = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
		ГруппировкаКомпоновкиДанных1.Использование = Истина;
		ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
		ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
		ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Склад");
		
		АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
		АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
		
		ГруппировкаКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных1.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
		ГруппировкаКомпоновкиДанных2.Использование = Истина;
		ПолеГруппировкиКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных2.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
		ПолеГруппировкиКомпоновкиДанных2.Использование = Истина;
		ПолеГруппировкиКомпоновкиДанных2.Поле = Новый ПолеКомпоновкиДанных("Номенклатура"); 
		
		АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных2.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
		АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
		
		ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
		ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
		
		ЭлементОтбораКомпоновкиДанных = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ЭлементОтбораКомпоновкиДанных.Использование = Истина;
		ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
		ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
		ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = 500;
		
		ЭлементПорядкаКомпоновкиДанных = НастройкиКомпоновки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
		ЭлементПорядкаКомпоновкиДанных.Использование = Истина;
		ЭлементПорядкаКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
		ЭлементПорядкаКомпоновкиДанных.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
		
		УсловноеОформление = НастройкиКомпоновки.УсловноеОформление.Элементы.Добавить();
		УсловноеОформление.Использование = Истина;
		ВыбранноеПолеКомпоновкиДанных = УсловноеОформление.Поля.Элементы.Добавить();
		ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
		ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
		
		ВыбранноеПолеКомпоновкиДанных = УсловноеОформление.Поля.Элементы.Добавить();
		ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
		ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
		
		УсловноеОформление.ИспользоватьВЗаголовке 		= ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
		УсловноеОформление.ИспользоватьВЗаголовкеПолей  = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
		УсловноеОформление.ИспользоватьВОбщемИтоге 		= ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
		
		ЭлементОтбораКомпоновкиДанных = УсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ЭлементОтбораКомпоновкиДанных.Использование = Истина;
		ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
		ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
		ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = 1000;
		
		УсловноеОформление.Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона"), WebЦвета.Желтый);
		
	КонецЕсли;	
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ТоварыНаСкладах.Номенклатура КАК Номенклатура,
	|	ТоварыНаСкладах.Склад,
	|	ТоварыНаСкладах.ВНаличииОстаток КАК ВНаличииОстаток
	|ИЗ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах";
	
	ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
	
	ВнешниеНаборы = Новый Структура("ТаблицаОстатков", ТаблицаОстатков);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры

Тестировал на платформе 1С:Предприятие 8.3 (8.3.15.1747).

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. serg-lom89 49 15.01.20 10:26 Сейчас в теме
однозначно плюс!Спасибо
как шпаргалка по некоторым пунктам в закладки!
rainspb; user1012671; alanto23; A_Max; sergey512; +5 Ответить
2. Dzenn 361 15.01.20 10:49 Сейчас в теме
Молодец, хорошо разобрался в этой теме :-) Хардкорно использую СКД — с несколькими источниками данных, внешними наборами, переносом настроек, скд в скд и так далее, поэтому такие статьи однозначно должны быть в шпаргалках :-)
alanto23; A_Max; +2 Ответить
3. sansys 57 15.01.20 11:16 Сейчас в теме
Очень хорошая статья!!! Ещё-бы такую-же но с использованием БСП. Евгений, огромное спасибо за полезную статью, беру себе в базу знаний.
alanto23; A_Max; +2 Ответить
4. Aleksey81 993 15.01.20 11:18 Сейчас в теме
5. yalex9 60 15.01.20 11:46 Сейчас в теме
Лучшая статья из тех, что видел на эту тему. Спасибо!
rpgshnik; alanto23; frkbvfnjh; +3 Ответить
6. uno-c 116 15.01.20 12:06 Сейчас в теме
Только хотел поискать что-то подобное, оно само в уведомлении пришло, спасибо.
7. vik070777 218 15.01.20 13:09 Сейчас в теме
Спасибо, познавательно.
8. Uvk_05 15.01.20 17:27 Сейчас в теме
Спасибо! Очень актуально.
9. VGHOST 139 16.01.20 10:40 Сейчас в теме
10. jko 17.01.20 08:17 Сейчас в теме
11. rwn_driver 8 17.01.20 09:40 Сейчас в теме
Спасибо БОЛЬШОЕ! Очень полезно для лентяя, код готовый...
12. paybaseme 21 17.01.20 09:47 Сейчас в теме
13. Jimbo 6 17.01.20 16:47 Сейчас в теме
Основы прописаны, но зачем делать объект вместо запроса ? А потом все таки делать запрос, но без отборов.
14. EvgeniuXP 17.01.20 20:18 Сейчас в теме
У хрусталевой это есть - просто надо открыть книжку :) за работу плюсую.
Yashazz; sapervodichka; +2 Ответить
15. alanto23 33 21.01.20 11:11 Сейчас в теме
Респект и уважуха! Спасибо!!!
16. Kuzmin_A 21.01.20 16:52 Сейчас в теме
Может пригодится кому
.Оформление выводимого заголовка:
Процедура ОформитьЗаголовок(МакетКомпоновки, СтрокиПоискаИсключаемыхИзЗаголовкаГруппировок = Неопределено, ЗаменяемыеЗначения = Неопределено)
	//	-->	исключение из заголовка группировки верхнего уровня строк,
	//		в ячейках которых присутствуют указанные значения. Исключается
	//		только одна строка, соответствующая значению. 
	
	Если СтрокиПоискаИсключаемыхИзЗаголовкаГруппировок = Неопределено Тогда
		Возврат;
	КонецЕсли; 
	
	КоличествоОбластей = МакетКомпоновки.Тело.Количество();
	
	Если КоличествоОбластей > 0 Тогда
		ПоследнийМакетОбласти = Неопределено;
		н = 0;
		
		Пока н < КоличествоОбластей Цикл
			Элемент = МакетКомпоновки.Тело[н];
			
			Если ТипЗнч(Элемент) = Тип("МакетОбластиМакетаКомпоновкиДанных") Тогда
				ПоследнийМакетОбласти = МакетКомпоновки.Макеты[Элемент.Макет];		
			ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппировкаМакетаКомпоновкиДанных") Тогда
				Прервать;
			КонецЕсли;
			
			н = н + 1;
		КонецЦикла;
		
		Если ПоследнийМакетОбласти = Неопределено Тогда
			Возврат;
		КонецЕсли;	
		
		МакетЗаголовка = ПоследнийМакетОбласти.Макет;
		
		н = МакетЗаголовка.Количество() - 1;
		
		Пока н >= 0 Цикл
			СтрокаТаблицы = МакетЗаголовка[н];
			
			Если СтрокаТаблицыОбластиКомпоновкиДанныхСодержитОдноИзЗначений(СтрокаТаблицы, СтрокиПоискаИсключаемыхИзЗаголовкаГруппировок) Тогда
				МакетЗаголовка.Удалить(СтрокаТаблицы);		
			КонецЕсли;
			
			Если ТипЗнч(ЗаменяемыеЗначения) = Тип("Соответствие") Тогда
				ЗаменитьЗначениеВСтрокеТаблицыОбластиКомпоновкиДанных(СтрокаТаблицы, ЗаменяемыеЗначения);	
			КонецЕсли;	
			
			н = н - 1;
		КонецЦикла;
	КонецЕсли;
	
	//	<--	исключение из заголовка группировки верхнего уровня строк
	
КонецПроцедуры

Функция СтрокаТаблицыОбластиКомпоновкиДанныхСодержитОдноИзЗначений(СтрокаТаблицы, Значения)
	Для Каждого Ячейка Из СтрокаТаблицы.Ячейки Цикл
		Для Каждого Элемент Из Ячейка.Элементы Цикл
			н = Значения.Количество() - 1;
			
			Пока н >= 0 Цикл
				Если Элемент.Значение = Значения[н] Тогда
					Значения.Удалить(н);
					
					Возврат Истина;	
				КонецЕсли;
				
				н = н - 1;
			КонецЦикла;	
		КонецЦикла;	
	КонецЦикла;
	
	Возврат Ложь;
КонецФункции

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


Вызов после выполнения компоновщика макета и до инициализации процессора.

Пытался освоить коллекцию элементов параметров скд, пока не получается
17. John_d 2159 21.01.20 16:59 Сейчас в теме
18. Kuzmin_A 21.01.20 17:17 Сейчас в теме
(17) Допустим, вы про заголовок, тогда под заголовком я имею в виду шапку отчета с именами полей, возможно мы по-разному поняли.
Если про параметры, то с НайтиЗначениеПараметра() и УстановитьЗначениеПараметра() нет проблем,а вот с добавлением новых…
19. Prometeus2011 94 27.01.20 15:02 Сейчас в теме
А это код построения макета из произвольного запроса.

&НаСервере
Функция Команда1НаСервере()
	
	СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
	
	// определим источник данных для схемы 
	Источник = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
	Источник.Имя = "ЛокальнаяБаза";
	Источник.СтрокаСоединения = "";
	Источник.ТипИсточникаДанных = "Local"; 
	
	НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
	НаборДанных.Имя = "НаборДанных1";
	НаборДанных.ИсточникДанных = "ЛокальнаяБаза";
	НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
	НаборДанных.Запрос = "ВЫБРАТЬ
	|	ОприходованиеИзлишковТоваров.Ссылка КАК Ссылка,
	|	ОприходованиеИзлишковТоваров.Дата КАК Дата,
	|	ОприходованиеИзлишковТоваров.Номер КАК Номер
	|ИЗ
	|	Документ.ОприходованиеИзлишковТоваров КАК ОприходованиеИзлишковТоваров";
	НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
	
	//Если так сделать, то на клиент настройки не приедут.
	//ИсточникДоступныхНастроек = 
	//Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);
	
	
	ИсточникДоступныхНастроек = 
	Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор));
	
	ЭтаФорма.КомпоновщикНастроек_Форма.Инициализировать(ИсточникДоступныхНастроек);		
	ЭтаФорма.КомпоновщикНастроек_Форма.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	
	
	
	//Группировки
	ГруппировкаСсылки = ЭтаФорма.КомпоновщикНастроек_Форма.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	
	Для каждого стрТЗПолей из КомпоновщикНастроек_Форма.Настройки.ДоступныеПоляГруппировок.Элементы цикл
		ПолеГруппировки1 = ГруппировкаСсылки.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
		ПолеГруппировки1.Использование = Истина;
		ПолеГруппировки1.Поле = стрТЗПолей.Поле;
	КонецЦикла;
	
	АвтоПоле = ГруппировкаСсылки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
	АвтоПоле.Использование = Истина;
	
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек_Форма.ПолучитьНастройки());
	
	
	//====================== ВЫВОД В ТЗ
	//МакетКомпоновки = 
	//КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек_Форма.ПолучитьНастройки(),
	//ИнформацияРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	//
	//ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	//ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ИнформацияРасшифровки,Истина);
	//
	//ТЗ = Новый ТаблицаЗначений;
	//ПроцессорВыводаВКоллекцию = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	//ПроцессорВыводаВКоллекцию.УстановитьОбъект(ТЗ);
	//ПроцессорВыводаВКоллекцию.Вывести(ПроцессорКомпоновки,Истина);
	
	
	//====================== ВЫВОД В ТД
	ДокументРезультат = новый ТабличныйДокумент;
	МакетКомпоновки = 
	КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек_Форма.ПолучитьНастройки());
	
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	
	
	//Обозначим начало вывода
	ПроцессорВывода.НачатьВывод();
	ТаблицаЗафиксирована = Ложь;
	
	ДокументРезультат.ФиксацияСверху = 0;
	//Основной цикл вывода отчета
	Пока Истина Цикл
		//Получим следующий элемент результата компоновки
		ЭлементРезультата = ПроцессорКомпоновки.Следующий();
		
		Если ЭлементРезультата = Неопределено Тогда
			//Следующий элемент не получен - заканчиваем цикл вывода
			Прервать;
		Иначе
			// Зафиксируем шапку
			Если  Не ТаблицаЗафиксирована 
				И ЭлементРезультата.ЗначенияПараметров.Количество() > 0 
				И ТипЗнч(КомпоновщикНастроек_Форма.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда
				
				ТаблицаЗафиксирована = Истина;
				ДокументРезультат.ФиксацияСверху = ДокументРезультат.ВысотаТаблицы;
				
			КонецЕсли;
			//Элемент получен - выведем его при помощи процессора вывода
			ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
		КонецЕсли;
	КонецЦикла;
	
	ПроцессорВывода.ЗакончитьВывод();
	
	Возврат ДокументРезультат;
	
КонецФункции
Показать
Silver0030; Cyberhawk; Kuzmin_A; John_d; +4 Ответить
20. 2vadmaster 40 17.02.20 13:58 Сейчас в теме
21. Yashazz 2986 20.02.20 09:55 Сейчас в теме
"лучшая статья"... "уважуха"... "круто"...
я чего-то не понимаю.

Во-первых, таких статей килотонны, во-вторых, программная работа с СКД разжёвана в десятках примеров, и это далеко не лучший, в третьих, есть книги Хрусталёвой. Тем не менее восторги и плюсики прям кучно. И пример-то тут весьма кастомизированный, и даже самое основное не полно объяснено...

Я ещё могу понять, когда статьи Пермитина плюсят, там действительно грамотное изложение. Но этот набор кода...

Нет, я действительно не понимаю.
Оставьте свое сообщение

См. также

Программная работа с настройками СКД

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    5311    ids79    25       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

СКД не только для отчетов

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

СКД позволяет получать данные из информационной базы не только для вывода в отчеты, но и для других целей. Пример такого использования рассматривается в настоящей статье.

18.09.2019    11615    YPermitin    31       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

CorelDRAW – пакет профессиональных инструментов для редактирования фотографий, разработки дизайна, создания макетов страниц и векторных иллюстраций

Агрегатные функции СКД, о которых мало кто знает

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    23934    ids79    45       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Три костыля. Сказ про фокусы в коде

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    15560    YPermitin    75       

Отслеживание выполнения фонового задания

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    18195    ids79    16       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    32976    ids79    36       

Фоновое выполнение кода в 1С - это просто

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    18277    avalakh    21       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    26972    ids79    9       

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    19513    ids79    27       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Регистры сведений. За кулисами

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    14774    YPermitin    12       

"Меньше копипаста!", или как Вася универсальную процедуру писал

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    12052    SeiOkami    49       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Создание отчетов с помощью СКД - основные понятия и элементы

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    31628    ids79    17       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    16871    dmurk    144       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

Регистры накопления. Структура хранения в базе данных

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    27152    YPermitin    27       

Выполнение внешней обработки в фоновом задании

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    17212    Eret1k    23       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения.

6500 рублей

Выгрузка документа по условию

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    9271    m-rv    2       

Как прикрутить ГУИД к регистру сведений

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    12395    m-rv    16       

Базовый курс по управлению ИТ-проектами. Курс проходит с 26 февраля по 22 апреля 2020 года. Промо

Отличительная черта курса - органичное сочетание трех вещей: 1.Теория проектного управления (PMI®+Agile Alliance+Российские ГОСТ+Методологии от 1С); 2. Опыт внедрения продуктов 1С (опыт франчайзи и успешных компаний + тренды Infostart Event и Agile Days); 3. Разбор реальных проблем и рекомендации экспертов по проектам слушателей. Мы будем фиксироваться на тех инструментах, которые реально оказываются полезными в практике руководителей проектов внедрения. Ведущая курса - Мария Темчина.

от 11000 рублей

О расширениях замолвите слово...

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    23332    ellavs    125       

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    18506    ellavs    83       

Сдача регламентированной отчетности из программ 1С Промо

Сдача регламентированной отчетности из программ "1С" во все контролирующие органы без выгрузок и загрузок в другие программы. Для групп компаний действуют специальные предложения.

от 1500 руб.

Трюки с внешними источниками данных

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    20358    YPermitin    53       

Добавление отчетов в типовые конфигурации 1С

Статья Программист Нет файла v8::УФ v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем)

Описание различных способов добавления общих и контекстных отчетов в конфигурации 1С, построенные на базе БСП. Основные моменты и нюансы.

07.03.2019    36470    ids79    45