Заполнить реквизиты по скд.
Процедура ЗаполнитьРеквизитыПоСКД(Реквизиты, Предмет, ПараметрыШаблона) Экспорт
ИмяМакета = ПараметрыШаблона.Макет;
ПараметрыЗапроса = Новый Массив;
МетаданныеОбъекта = Предмет.Метаданные();
ИмяОбъекта = МетаданныеОбъекта.Имя;
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(МетаданныеОбъекта.ПолноеИмя());
МакетСКД = МенеджерОбъекта.ПолучитьМакет(ИмяМакета);
АдресСхемы = ПоместитьВоВременноеХранилище(МакетСКД);
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
Для Каждого ДоступныйПараметр Из КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы Цикл
Если СтрСравнить(ДоступныйПараметр.Заголовок, "Период") <> 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
ЗаполнитьНаборыСДополнительнымиРеквизитами (БСП)
ЗаполнитьЗначениеРеквизитаУпорядочивания (БСП)
ЗаполнитьРеквизитыФайлаИзИсходногоФайла (БСП)
ЗаполнитьДополнительныеРеквизитыВФорме (БСП)
ЗаполнитьРеквизитыПоУмолчанию (БСП)
ПолучитьПрефиксообразующиеРеквизиты (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)