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