ЗаполнитьРеквизитыПоСКД (БСП)

Автор: 1С
ОбщийМодуль.ШаблоныСообщенийСлужебный
БСП

Заполнить реквизиты по скд.

Процедура ЗаполнитьРеквизитыПоСКД(Реквизиты, Предмет, ПараметрыШаблона) Экспорт
	
	ИмяМакета = ПараметрыШаблона.Макет;
	
	ПараметрыЗапроса = Новый Массив;
	МетаданныеОбъекта = Предмет.Метаданные();
	ИмяОбъекта = МетаданныеОбъекта.Имя;
	МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(МетаданныеОбъекта.ПолноеИмя());
	МакетСКД = МенеджерОбъекта.ПолучитьМакет(ИмяМакета);
	
	АдресСхемы = ПоместитьВоВременноеХранилище(МакетСКД);
	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
	Для Каждого ДоступныйПараметр Из КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы Цикл
		Если СтрСравнить(ДоступныйПараметр.Заголовок, "Период") <> 0 Тогда
			ПараметрыЗапроса.Добавить(Строка(ДоступныйПараметр.Параметр));
		КонецЕсли;
	КонецЦикла;
	
	КомпоновщикНастроек.ЗагрузитьНастройки(МакетСКД.НастройкиПоУмолчанию);
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	
	Для Каждого Реквизит Из Реквизиты Цикл
		ВыбранноеПоле = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(Реквизит.Ключ);
	КонецЦикла;
	
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(МакетСКД, КомпоновщикНастроек.ПолучитьНастройки(),,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	Если МакетКомпоновкиДанных.НаборыДанных.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ТекстЗапросаМакет = МакетКомпоновкиДанных.НаборыДанных.Данные.Запрос;
	
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапросаМакет;
	
	ЕстьНезаполненныйПараметр = Ложь;
	Для каждого ТребуемыйПараметр Из ПараметрыЗапроса Цикл
		Если СтрСравнить(ТребуемыйПараметр, "ТекущаяДата") = 0 Тогда
			Запрос.УстановитьПараметр(ТребуемыйПараметр, ТекущаяДатаСеанса());
		ИначеЕсли СтрСравнить(ТребуемыйПараметр, ИмяОбъекта) = 0 Тогда
			Запрос.УстановитьПараметр(ТребуемыйПараметр, Предмет);
		Иначе
			Если ПараметрыШаблона.ПараметрыСКД.Свойство(ТребуемыйПараметр) Тогда
				Запрос.УстановитьПараметр(ТребуемыйПараметр, ПараметрыШаблона.ПараметрыСКД[ТребуемыйПараметр]);
			Иначе
				ЕстьНезаполненныйПараметр = Истина;
				Прервать;
			КонецЕсли;
			
		КонецЕсли;
	КонецЦикла;
	
	Если ЕстьНезаполненныйПараметр Тогда
		ВызватьИсключение НСтр("ru = 'Не удалось сформировать сообщение, т.к. отсутствуют необходимые параметры.'");
	КонецЕсли;
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	Если РезультатЗапроса.Количество() > 0 Тогда
		РезультатЗапроса = СтрокаТаблицыЗначенийВСоответствие(РезультатЗапроса[0]);
		УстановитьПараметрыИзЗапроса(Реквизиты, РезультатЗапроса);
	КонецЕсли;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ЗаполнитьНаборыСДополнительнымиРеквизитами (БСП)

ЗаполнитьЗначениеРеквизитаУпорядочивания (БСП)

ЗаполнитьРеквизитыФайлаИзИсходногоФайла (БСП)

ЗаполнитьДополнительныеРеквизитыВФорме (БСП)

ЗаполнитьРеквизитыПоУмолчанию (БСП)

ПолучитьПрефиксообразующиеРеквизиты (БСП)

ЗаполнитьЗначенияСвойствОбъекта (БСП)

ЗаполнитьКоллекциюЭлементовДереваДанныхФормы (БСП)

TurboConf ИР адаптер 2.63