Общий подход к созданию объектов через COM рассмотрен здесь
Задача. Нужно получить начисления по сотрудникам заданного подразделения из базы ЗиУП.
Так выглядит получение данных в обычном режиме:
МесяцРасчета = Дата(2018,03,01);
//Програмное формирование отчета СКД
СхемаОст = Отчеты.АнализНачисленийРаботникамОрганизаций.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикНастроекНастройки = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроекНастройки.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаОст));
КомпоновщикНастроекНастройки.ЗагрузитьНастройки(СхемаОст.НастройкиПоУмолчанию);
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоМесяца(МесяцРасчета));
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КонецМесяца(МесяцРасчета));
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаОст, КомпоновщикНастроекНастройки.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеТЗ = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ДанныеТЗ);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ЗП = 0;
ПодразделениеПроизводство = Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000005");
Для каждого СтрокаТаблицы из ДанныеТЗ Цикл
Если не ЗначениеЗаполнено(СтрокаТаблицы.ВидРасчета) Тогда
Продолжить;
КонецЕсли;
Если СтрокаТаблицы.ПодразделениеОрганизации = ПодразделениеПроизводство Тогда
ЗП = ЗП + СтрокаТаблицы.Начислено;
КонецЕсли;
КонецЦикла;
Так выглядит получение данных через COM:
//ЗУП - Com - соединение. Как подключиться сказано здесь - //infostart.ru/public/164976/
МесяцРасчета = Дата(2018,03,01);
СхемаКомпоновкиДанных = ЗУП.Отчеты.АнализНачисленийРаботникамОрганизаций.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикНастроекНастройки = ЗУП.NewObject("КомпоновщикНастроекКомпоновкиДанных");
ИсточникДоступныхНастроекКомпоновкиДанных = ЗУП.NewObject("ИсточникДоступныхНастроекКомпоновкиДанных",СхемаКомпоновкиДанных);
КомпоновщикНастроекНастройки.Инициализировать(ИсточникДоступныхНастроекКомпоновкиДанных);
КомпоновщикНастроекНастройки.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоМесяца(МесяцРасчета));
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КонецМесяца(МесяцРасчета));
КомпоновщикМакета = ЗУП.NewObject("КомпоновщикМакетаКомпоновкиДанных");
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекНастройки.Настройки,,,ЗУП.NewObject("ОписаниеТипов", "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений").Типы().Получить(0));
ПроцессорКомпоновкиДанных = ЗУП.NewObject("ПроцессорКомпоновкиДанных");
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода = ЗУП.NewObject("ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений");
ДанныеТЗ = ЗУП.NewObject("ТаблицаЗначений");
ПроцессорВывода.УстановитьОбъект(ДанныеТЗ);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ЗП = 0;
ПодразделениеУИД =ЗУП.XMlСтрока(ЗУП.Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000005"));
Для каждого СтрокаТаблицы из ДанныеТЗ Цикл
Если не ЗУП.ЗначениеЗаполнено(СтрокаТаблицы.ВидРасчета) Тогда
Продолжить;
КонецЕсли;
Если ЗУП.XMlСтрока(СтрокаТаблицы.ПодразделениеОрганизации) = ПодразделениеУИД Тогда // сравнить элементы справочника в СОМ подключении можно только так
ЗП = ЗП + СтрокаТаблицы.Начислено;
КонецЕсли;
КонецЦикла;