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