#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных
Перем ПолеТаблицаСопоставления;
Перем ПолеИнформацияСтатистикиСопоставленияОбъектов;
Перем ПолеДайджестСопоставления;
Перем ПолеТипСтрокаНеограниченнойДлины;
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ВыполнитьСопоставлениеОбъектов(Отказ) Экспорт
УстановитьПривилегированныйРежим(Истина);
ВыполнитьСопоставлениеОбъектовИнформационныхБаз(Отказ);
КонецПроцедуры
Процедура ВыполнитьАвтоматическоеСопоставлениеОбъектов(Отказ, СписокПолейСопоставления) Экспорт
УстановитьПривилегированныйРежим(Истина);
ВыполнитьАвтоматическоеСопоставлениеОбъектовИнформационныхБаз(Отказ, СписокПолейСопоставления);
КонецПроцедуры
Процедура ВыполнитьАвтоматическоеСопоставлениеПоУмолчанию(Отказ) Экспорт
УстановитьПривилегированныйРежим(Истина);
СписокПолейСопоставления = СписокИспользуемыхПолей.Скопировать();
ВыполнитьАвтоматическоеСопоставлениеОбъектовИнформационныхБазПоУмолчанию(Отказ, СписокПолейСопоставления);
ПрименитьТаблицуНеутвержденныхЗаписей(Отказ);
КонецПроцедуры
Процедура ПрименитьТаблицуНеутвержденныхЗаписей(Отказ) Экспорт
УстановитьПривилегированныйРежим(Истина);
НачатьТранзакцию();
Попытка
Для Каждого СтрокаТаблицы Из ТаблицаНеутвержденныхСвязей Цикл
Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда
Если Строка(СтрокаТаблицы.УникальныйИдентификаторИсточника.УникальныйИдентификатор()) = СтрокаТаблицы.УникальныйИдентификаторПриемника
ИЛИ Не ЗначениеЗаполнено(СтрокаТаблицы.УникальныйИдентификаторПриемника) Тогда
Продолжить;
КонецЕсли;
СтруктураЗаписи = Новый Структура("Ссылка, Идентификатор");
СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы);
СтруктураЗаписи.Вставить("Ссылка", СтрокаТаблицы.УникальныйИдентификаторИсточника);
СтруктураЗаписи.Вставить("Идентификатор", СтрокаТаблицы.УникальныйИдентификаторПриемника);
РегистрыСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов.ДобавитьЗапись(СтруктураЗаписи);
Иначе
СтруктураЗаписи = Новый Структура("УникальныйИдентификаторИсточника, УникальныйИдентификаторПриемника, ТипИсточника, ТипПриемника");
СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы);
ЗаполнитьЗначенияСвойств(СтруктураЗаписи, СтрокаТаблицы);
РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СтруктураЗаписи);
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Отказ = Истина;
Возврат;
КонецПопытки;
ТаблицаНеутвержденныхСвязей.Очистить();
КонецПроцедуры
Процедура ПолучитьИнформациюДайджестаСопоставленияОбъектов(Отказ) Экспорт
УстановитьПривилегированныйРежим(Истина);
ТаблицаИсточника = ДанныеИнформационнойБазыИсточника(Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
ПользовательскиеПоля = Новый Массив;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ДанныеСопоставленияОбъектов(ТаблицаИсточника, ПользовательскиеПоля, МенеджерВременныхТаблиц);
ПолучитьДайджестСопоставления(МенеджерВременныхТаблиц);
МенеджерВременныхТаблиц.Закрыть();
КонецПроцедуры
Процедура ВыполнитьЗагрузкуДанныхВИнформационнуюБазу(Отказ, ТаблицыДляЗагрузки) Экспорт
УстановитьПривилегированныйРежим(Истина);
ДанныеУспешноЗагружены = Ложь;
СтруктураНастроекОбмена = ОбменДаннымиСервер.СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена);
Если СтруктураНастроекОбмена.Отказ Тогда
Возврат;
КонецЕсли;
ОбработкаОбменаДанными = СтруктураНастроекОбмена.ОбработкаОбменаДанными;
ОбработкаОбменаДанными.ВыполнитьЗагрузкуДанныхВИнформационнуюБазу(ТаблицыДляЗагрузки);
Для Каждого Элемент Из ТаблицыДляЗагрузки Цикл
ОбработкаОбменаДанными.ТаблицыДанныхСообщенияОбмена().Удалить(Элемент);
КонецЦикла;
Если ОбработкаОбменаДанными.ФлагОшибки() Тогда
НСтрока = НСтр("ru = 'При загрузке сообщения обмена возникли ошибки: %1'");
НСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, ОбработкаОбменаДанными.СтрокаСообщенияОбОшибке());
ОбщегоНазначения.СообщитьПользователю(НСтрока,,,, Отказ);
Возврат;
КонецЕсли;
ДанныеУспешноЗагружены = Не ОбработкаОбменаДанными.ФлагОшибки();
КонецПроцедуры
Процедура Конструктор() Экспорт
СписокПолейТаблицы.ЗагрузитьЗначения(СтрРазделить(ПоляТаблицыПриемника, ",", Ложь));
МассивПолейПоиска = СтрРазделить(ПоляПоискаТаблицыПриемника, ",", Ложь);
ПроверитьКоличествоПолейСопоставленияВМассиве(МассивПолейПоиска);
Для Каждого Элемент Из СписокПолейТаблицы Цикл
Если МассивПолейПоиска.Найти(Элемент.Значение) <> Неопределено Тогда
Элемент.Пометка = Истина;
КонецЕсли;
КонецЦикла;
ЗаполнитьСписокДополнительнымиПараметрами(СписокПолейТаблицы);
ЗаполнитьСписокОтмеченнымиЭлементами(СписокПолейТаблицы, СписокИспользуемыхПолей);
ЗаполнитьТаблицуСортировки(СписокИспользуемыхПолей);
КонецПроцедуры
Функция ТаблицаСопоставления() Экспорт
Если ТипЗнч(ПолеТаблицаСопоставления) <> Тип("ТаблицаЗначений") Тогда
ПолеТаблицаСопоставления = Новый ТаблицаЗначений;
КонецЕсли;
Возврат ПолеТаблицаСопоставления;
КонецФункции
Функция КоличествоОбъектовВИсточнике() Экспорт
Возврат ДайджестСопоставления().КоличествоОбъектовВИсточнике;
КонецФункции
Функция КоличествоОбъектовВПриемнике() Экспорт
Возврат ДайджестСопоставления().КоличествоОбъектовВПриемнике;
КонецФункции
Функция КоличествоОбъектовСопоставленных() Экспорт
Возврат ДайджестСопоставления().КоличествоОбъектовСопоставленных;
КонецФункции
Функция КоличествоОбъектовНесопоставленных() Экспорт
Возврат ДайджестСопоставления().КоличествоОбъектовНесопоставленных;
КонецФункции
Функция ПроцентСопоставленияОбъектов() Экспорт
Возврат ДайджестСопоставления().ПроцентСопоставленияОбъектов;
КонецФункции
Функция ДайджестСопоставления()
Если ТипЗнч(ПолеДайджестСопоставления) <> Тип("Структура") Тогда
ПолеДайджестСопоставления = Новый Структура;
ПолеДайджестСопоставления.Вставить("КоличествоОбъектовВИсточнике", 0);
ПолеДайджестСопоставления.Вставить("КоличествоОбъектовВПриемнике", 0);
ПолеДайджестСопоставления.Вставить("КоличествоОбъектовСопоставленных", 0);
ПолеДайджестСопоставления.Вставить("КоличествоОбъектовНесопоставленных", 0);
ПолеДайджестСопоставления.Вставить("ПроцентСопоставленияОбъектов", 0);
КонецЕсли;
Возврат ПолеДайджестСопоставления;
КонецФункции
Функция ИнформацияСтатистикиСопоставленияОбъектов()
Если ТипЗнч(ПолеИнформацияСтатистикиСопоставленияОбъектов) <> Тип("Структура") Тогда
ПолеИнформацияСтатистикиСопоставленияОбъектов = Новый Структура;
ПолеИнформацияСтатистикиСопоставленияОбъектов.Вставить("КоличествоОбъектовИсточникаСопоставленныхПоРегистру", 0);
ПолеИнформацияСтатистикиСопоставленияОбъектов.Вставить("КоличествоОбъектовПриемникаСопоставленныхПоРегистру", 0);
ПолеИнформацияСтатистикиСопоставленияОбъектов.Вставить("КоличествоОбъектовСопоставленныхПоНеутвержденнымСвязям", 0);
КонецЕсли;
Возврат ПолеИнформацияСтатистикиСопоставленияОбъектов;
КонецФункции
Функция ТипСтрокаНеограниченнойДлины()
Если ТипЗнч(ПолеТипСтрокаНеограниченнойДлины) <> Тип("ОписаниеТипов") Тогда
ПолеТипСтрокаНеограниченнойДлины = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(0));
КонецЕсли;
Возврат ПолеТипСтрокаНеограниченнойДлины;
КонецФункции
Процедура ВыполнитьСопоставлениеОбъектовИнформационныхБаз(Отказ)
ТаблицаИсточника = ДанныеИнформационнойБазыИсточника(Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
ПользовательскиеПоля = СписокИспользуемыхПолей.ВыгрузитьЗначения();
Если ПользовательскиеПоля.Найти("ЭтоГруппа") = Неопределено Тогда
ДобавитьПолеПоиска(ПользовательскиеПоля, "ЭтоГруппа");
КонецЕсли;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ДанныеСопоставленияОбъектов(ТаблицаИсточника, ПользовательскиеПоля, МенеджерВременныхТаблиц);
ПолучитьДайджестСопоставления(МенеджерВременныхТаблиц);
ПолеТаблицаСопоставления = РезультатСопоставленияОбъектов(ТаблицаИсточника, ПользовательскиеПоля, МенеджерВременныхТаблиц);
МенеджерВременныхТаблиц.Закрыть();
ВыполнитьСортировкуТаблицыНаСервере();
ДобавитьПолеНомераВТаблицуСопоставления();
КонецПроцедуры
Процедура ВыполнитьАвтоматическоеСопоставлениеОбъектовИнформационныхБаз(Отказ, СписокПолейСопоставления)
ТаблицаИсточника = ДанныеИнформационнойБазыИсточника(Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
ПользовательскиеПоля = Новый Массив;
Для Каждого Элемент Из СписокИспользуемыхПолей Цикл
ПользовательскиеПоля.Добавить(Элемент.Значение);
КонецЦикла;
Для Каждого Элемент Из СписокПолейТаблицы Цикл
Если ПользовательскиеПоля.Найти(Элемент.Значение) = Неопределено Тогда
ПользовательскиеПоля.Добавить(Элемент.Значение);
КонецЕсли;
КонецЦикла;
СписокПолейСопоставленияНовый = Новый СписокЗначений;
Для Каждого Элемент Из ПользовательскиеПоля Цикл
ЭлементСписка = СписокПолейСопоставления.НайтиПоЗначению(Элемент);
СписокПолейСопоставленияНовый.Добавить(Элемент, ЭлементСписка.Представление, ЭлементСписка.Пометка);
КонецЦикла;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ДанныеСопоставленияОбъектов(ТаблицаИсточника, ПользовательскиеПоля, МенеджерВременныхТаблиц);
ДанныеАвтоматическогоСопоставления(ТаблицаИсточника, СписокПолейСопоставленияНовый, ПользовательскиеПоля, МенеджерВременныхТаблиц);
ТаблицаАвтоматическиСопоставленныхОбъектов.Загрузить(ТаблицаАвтоматическиСопоставленныхОбъектовПолучить(МенеджерВременныхТаблиц, ПользовательскиеПоля));
МенеджерВременныхТаблиц.Закрыть();
КонецПроцедуры
Процедура ВыполнитьАвтоматическоеСопоставлениеОбъектовИнформационныхБазПоУмолчанию(Отказ, СписокПолейСопоставления)
ТаблицаИсточника = ДанныеИнформационнойБазыИсточника(Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
ПользовательскиеПоля = СписокИспользуемыхПолей.ВыгрузитьЗначения();
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ДанныеСопоставленияОбъектов(ТаблицаИсточника, ПользовательскиеПоля, МенеджерВременныхТаблиц);
ДанныеАвтоматическогоСопоставления(ТаблицаИсточника, СписокПолейСопоставления, ПользовательскиеПоля, МенеджерВременныхТаблиц);
ТаблицаНеутвержденныхСвязей.Загрузить(ОбъединитьТаблицыНеутвержденныхСвязейИАвтоматическогоСопоставления(МенеджерВременныхТаблиц));
МенеджерВременныхТаблиц.Закрыть();
КонецПроцедуры
Процедура ДанныеСопоставленияОбъектов(ТаблицаИсточника, ПользовательскиеПоля, МенеджерВременныхТаблиц)
ТекстЗапроса = "
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаИсточника}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаИсточника,
|
| ТаблицаИсточникаПараметр.Ссылка КАК Ссылка,
| ТаблицаИсточникаПараметр.УникальныйИдентификатор КАК УникальныйИдентификатор,
| &ТипИсточника КАК ТипОбъекта
|ПОМЕСТИТЬ ТаблицаИсточника
|ИЗ
| &ТаблицаИсточникаПараметр КАК ТаблицаИсточникаПараметр
|ГДЕ
| ТаблицаИсточникаПараметр.УникальныйИдентификатор <> """"
|ИНДЕКСИРОВАТЬ ПО
| Ссылка,
| УникальныйИдентификатор
|;
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаИсточника,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаИсточника#");
Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда
ТекстЗапроса = ТекстЗапроса + "
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаРегистраСоответствияОбъектовИнформационныхБаз}
|ВЫБРАТЬ
| Ссылка КАК УникальныйИдентификаторИсточника,
| Идентификатор КАК УникальныйИдентификаторПриемника,
| ""#ТипИсточника#"" КАК ТипПриемника,
| ""#ТипПриемника#"" КАК ТипИсточника
|ПОМЕСТИТЬ ТаблицаРегистраСоответствияОбъектовИнформационныхБаз
|ИЗ
| РегистрСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов КАК СоответствияОбъектовИнформационныхБаз
|ГДЕ
| СоответствияОбъектовИнформационныхБаз.УзелИнформационнойБазы = &УзелИнформационнойБазы
| И СоответствияОбъектовИнформационныхБаз.Ссылка = &ЭмуляцияСтрокиЗамены
|
|ИНДЕКСИРОВАТЬ ПО
| УникальныйИдентификаторПриемника
|;
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"СоответствияОбъектовИнформационныхБаз.Ссылка = &ЭмуляцияСтрокиЗамены",
"ТИПЗНАЧЕНИЯ(СоответствияОбъектовИнформационныхБаз.Ссылка) = ТИП(#ТаблицаПриемника#)");
Иначе
ТекстЗапроса = ТекстЗапроса + "
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаРегистраСоответствияОбъектовИнформационныхБаз}
|ВЫБРАТЬ
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипПриемника,
| ТипИсточника
|ПОМЕСТИТЬ ТаблицаРегистраСоответствияОбъектовИнформационныхБаз
|ИЗ
| РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз
|ГДЕ
| СоответствияОбъектовИнформационныхБаз.УзелИнформационнойБазы = &УзелИнформационнойБазы
| И СоответствияОбъектовИнформационныхБаз.ТипПриемника = &ТипИсточника
| И СоответствияОбъектовИнформационныхБаз.ТипИсточника = &ТипПриемника
|ИНДЕКСИРОВАТЬ ПО
| УникальныйИдентификаторПриемника,
| ТипПриемника,
| ТипИсточника
|;
|";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаНеутвержденныхСвязей}
|ВЫБРАТЬ
|
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипПриемника,
| ТипИсточника
|
|ПОМЕСТИТЬ ТаблицаНеутвержденныхСвязей
|ИЗ
| &ТаблицаНеутвержденныхСвязей КАК ТаблицаНеутвержденныхСвязей
|ИНДЕКСИРОВАТЬ ПО
| УникальныйИдентификаторПриемника,
| ТипПриемника
|;
|";
Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда
ТекстЗапроса = ТекстЗапроса + "
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаСопоставленныхОбъектовИсточникаПоРегистру}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЕ_СОРТИРОВКИ_Приемник,
|
| Ссылка,
| 0 КАК СтатусСопоставления, // сопоставленные объекты (0)
| 0 КАК СтатусСопоставленияДополнительный, // сопоставленные объекты (0)
|
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаСопоставленныхОбъектовИсточникаПоРегистру
|ИЗ
| (ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос,
|
| ЕСТЬNULL(СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника, ТаблицаПриемника.Ссылка) КАК Ссылка,
|
| &ТаблицаИсточникаЭтоГруппа КАК ЭтоГруппаИсточник,
| &СоответствияОбъектовИнформационныхБазЭтоГруппа КАК ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ЕСТЬNULL(СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника, ТаблицаПриемника.Ссылка) КАК УникальныйИдентификаторПриемника,
| ЕСТЬNULL(СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторПриемника, ТаблицаИсточника.УникальныйИдентификатор) КАК УникальныйИдентификаторИсточника,
| ЕСТЬNULL(СоответствияОбъектовИнформационныхБаз.ТипПриемника, ""#ТипИсточника#"") КАК ТипИсточника,
| ЕСТЬNULL(СоответствияОбъектовИнформационныхБаз.ТипИсточника, ""#ТипПриемника#"") КАК ТипПриемника
| ИЗ
| ТаблицаИсточника КАК ТаблицаИсточника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаРегистраСоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз
| ПО
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторПриемника = ТаблицаИсточника.УникальныйИдентификатор
| И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &СоответствияОбъектовИнформационныхБаз
| ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.СценарииОбменовДанными КАК ТаблицаПриемника
| ПО
| ТаблицаИсточника.Ссылка = ТаблицаПриемника.Ссылка
| ГДЕ
| НЕ СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника ЕСТЬ NULL
| ИЛИ НЕ ТаблицаПриемника.Ссылка ЕСТЬ NULL
| ) КАК ВложенныйЗапрос
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаСопоставленныхОбъектовПриемникаПоРегистру}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЕ_СОРТИРОВКИ_Приемник,
|
| Ссылка,
| 0 КАК СтатусСопоставления, // сопоставленные объекты (0)
| 0 КАК СтатусСопоставленияДополнительный, // сопоставленные объекты (0)
|
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаСопоставленныхОбъектовПриемникаПоРегистру
|ИЗ
| (ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос,
|
| ТаблицаПриемника.Ссылка КАК Ссылка,
|
| &ТаблицаПриемникаЭтоГруппа КАК ЭтоГруппаИсточник,
| &ТаблицаПриемникаЭтоГруппа КАК ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника КАК УникальныйИдентификаторПриемника,
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторПриемника КАК УникальныйИдентификаторИсточника,
| СоответствияОбъектовИнформационныхБаз.ТипПриемника КАК ТипИсточника,
| СоответствияОбъектовИнформационныхБаз.ТипИсточника КАК ТипПриемника
| ИЗ
| Справочник.СценарииОбменовДанными КАК ТаблицаПриемника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаРегистраСоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз
| ПО
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = ТаблицаПриемника.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаСопоставленныхОбъектовИсточникаПоРегистру КАК ТаблицаСопоставленныхОбъектовИсточникаПоРегистру
| ПО
| ТаблицаСопоставленныхОбъектовИсточникаПоРегистру.Ссылка = ТаблицаПриемника.Ссылка
|
| ГДЕ
| НЕ СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника ЕСТЬ NULL
| И ТаблицаСопоставленныхОбъектовИсточникаПоРегистру.Ссылка ЕСТЬ NULL
| ) КАК ВложенныйЗапрос
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЕ_СОРТИРОВКИ_Приемник,
|
| Ссылка,
| 3 КАК СтатусСопоставления, // неутвержденные связи (3)
| 0 КАК СтатусСопоставленияДополнительный, // сопоставленные объекты (0)
|
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям
|ИЗ
| (ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям_ВложенныйЗапрос,
|
| ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника КАК Ссылка,
|
| &ТаблицаИсточникаЭтоГруппа КАК ЭтоГруппаИсточник,
| &ТаблицаНеутвержденныхСвязейЭтоГруппа КАК ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника КАК УникальныйИдентификаторПриемника,
| ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторПриемника КАК УникальныйИдентификаторИсточника,
| ТаблицаНеутвержденныхСвязей.ТипПриемника КАК ТипИсточника,
| ТаблицаНеутвержденныхСвязей.ТипИсточника КАК ТипПриемника
| ИЗ
| ТаблицаИсточника КАК ТаблицаИсточника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаНеутвержденныхСвязей КАК ТаблицаНеутвержденныхСвязей
| ПО
| ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторПриемника = ТаблицаИсточника.УникальныйИдентификатор
| И ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника = &ТаблицаПриемника
|
| ГДЕ
| НЕ ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника ЕСТЬ NULL
| ) КАК ВложенныйЗапрос
|;
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЕ_СОРТИРОВКИ_Приемник,",
"#ПОЛЕ_СОРТИРОВКИ_Приемник#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаИсточникаЭтоГруппа",
"#ТаблицаИсточникаЭтоГруппа#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&СоответствияОбъектовИнформационныхБазЭтоГруппа",
"#СоответствияОбъектовИнформационныхБазЭтоГруппа#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &СоответствияОбъектовИнформационныхБаз",
"И ТИПЗНАЧЕНИЯ(СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника) = ТИП(#ТаблицаПриемника#)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"Справочник.СценарииОбменовДанными КАК ТаблицаПриемника",
"#ТаблицаПриемника# КАК ТаблицаПриемника");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаПриемникаЭтоГруппа",
"#ТаблицаПриемникаЭтоГруппа#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаНеутвержденныхСвязейЭтоГруппа",
"#ТаблицаНеутвержденныхСвязейЭтоГруппа#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника = &ТаблицаПриемника",
"ТИПЗНАЧЕНИЯ(ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника) = ТИП(#ТаблицаПриемника#)");
Иначе
ТекстЗапроса = ТекстЗапроса + "
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаСопоставленныхОбъектовИсточникаПоРегистру}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЕ_СОРТИРОВКИ_Приемник,
|
| Ссылка,
| 0 КАК СтатусСопоставления, // сопоставленные объекты (0)
| 0 КАК СтатусСопоставленияДополнительный, // сопоставленные объекты (0)
|
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаСопоставленныхОбъектовИсточникаПоРегистру
|ИЗ
| (ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос,
|
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника КАК Ссылка,
|
| &ТаблицаИсточникаЭтоГруппа КАК ЭтоГруппаИсточник,
| &СоответствияОбъектовИнформационныхБазЭтоГруппа КАК ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника КАК УникальныйИдентификаторПриемника,
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторПриемника КАК УникальныйИдентификаторИсточника,
| СоответствияОбъектовИнформационныхБаз.ТипПриемника КАК ТипИсточника,
| СоответствияОбъектовИнформационныхБаз.ТипИсточника КАК ТипПриемника
| ИЗ
| ТаблицаИсточника КАК ТаблицаИсточника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаРегистраСоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз
| ПО
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторПриемника = ТаблицаИсточника.УникальныйИдентификатор
| И СоответствияОбъектовИнформационныхБаз.ТипПриемника = ТаблицаИсточника.ТипОбъекта
| ГДЕ
| НЕ СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника ЕСТЬ NULL
| ) КАК ВложенныйЗапрос
|;
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаСопоставленныхОбъектовПриемникаПоРегистру}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЕ_СОРТИРОВКИ_Приемник,
|
| Ссылка,
| 0 КАК СтатусСопоставления, // сопоставленные объекты (0)
| 0 КАК СтатусСопоставленияДополнительный, // сопоставленные объекты (0)
|
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаСопоставленныхОбъектовПриемникаПоРегистру
|ИЗ
| (ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос,
|
| ТаблицаПриемника.Ссылка КАК Ссылка,
|
| &ТаблицаПриемникаЭтоГруппа КАК ЭтоГруппаИсточник,
| &ТаблицаПриемникаЭтоГруппа КАК ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника КАК УникальныйИдентификаторПриемника,
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторПриемника КАК УникальныйИдентификаторИсточника,
| СоответствияОбъектовИнформационныхБаз.ТипПриемника КАК ТипИсточника,
| СоответствияОбъектовИнформационныхБаз.ТипИсточника КАК ТипПриемника
| ИЗ
| Справочник.СценарииОбменовДанными КАК ТаблицаПриемника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаРегистраСоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз
| ПО
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = ТаблицаПриемника.Ссылка
| И СоответствияОбъектовИнформационныхБаз.ТипИсточника = &ТипПриемника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаСопоставленныхОбъектовИсточникаПоРегистру КАК ТаблицаСопоставленныхОбъектовИсточникаПоРегистру
| ПО
| ТаблицаСопоставленныхОбъектовИсточникаПоРегистру.Ссылка = ТаблицаПриемника.Ссылка
|
| ГДЕ
| НЕ СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника ЕСТЬ NULL
| И ТаблицаСопоставленныхОбъектовИсточникаПоРегистру.Ссылка ЕСТЬ NULL
| ) КАК ВложенныйЗапрос
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЕ_СОРТИРОВКИ_Приемник,
|
| Ссылка,
| 3 КАК СтатусСопоставления, // неутвержденные связи (3)
| 0 КАК СтатусСопоставленияДополнительный, // сопоставленные объекты (0)
|
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям
|ИЗ
| (ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям_ВложенныйЗапрос,
|
| ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника КАК Ссылка,
|
| &ТаблицаИсточникаЭтоГруппа КАК ЭтоГруппаИсточник,
| &ТаблицаНеутвержденныхСвязейЭтоГруппа КАК ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника КАК УникальныйИдентификаторПриемника,
| ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторПриемника КАК УникальныйИдентификаторИсточника,
| ТаблицаНеутвержденныхСвязей.ТипПриемника КАК ТипИсточника,
| ТаблицаНеутвержденныхСвязей.ТипИсточника КАК ТипПриемника
| ИЗ
| ТаблицаИсточника КАК ТаблицаИсточника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаНеутвержденныхСвязей КАК ТаблицаНеутвержденныхСвязей
| ПО
| ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторПриемника = ТаблицаИсточника.УникальныйИдентификатор
| И ТаблицаНеутвержденныхСвязей.ТипПриемника = ТаблицаИсточника.ТипОбъекта
|
| ГДЕ
| НЕ ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника ЕСТЬ NULL
| ) КАК ВложенныйЗапрос
|;
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЕ_СОРТИРОВКИ_Приемник,",
"#ПОЛЕ_СОРТИРОВКИ_Приемник#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаИсточникаЭтоГруппа",
"#ТаблицаИсточникаЭтоГруппа#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&СоответствияОбъектовИнформационныхБазЭтоГруппа",
"#СоответствияОбъектовИнформационныхБазЭтоГруппа#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаПриемникаЭтоГруппа",
"#ТаблицаПриемникаЭтоГруппа#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"Справочник.СценарииОбменовДанными КАК ТаблицаПриемника",
"#ТаблицаПриемника# КАК ТаблицаПриемника");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаНеутвержденныхСвязейЭтоГруппа",
"#ТаблицаНеутвержденныхСвязейЭтоГруппа#");
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаСопоставленныхОбъектов}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЯ_СОРТИРОВКИ,
|
| Ссылка,
| СтатусСопоставления,
| СтатусСопоставленияДополнительный,
|
| // {ИНДЕКС КАРТИНКИ}
| ВЫБОР КОГДА ЭтоГруппаИсточник ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ
| ВЫБОР КОГДА ЭтоГруппаИсточник = ИСТИНА
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ИсточникИндексКартинки,
|
| ВЫБОР КОГДА ЭтоГруппаПриемник ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ
| ВЫБОР КОГДА ЭтоГруппаПриемник = ИСТИНА
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ПриемникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаСопоставленныхОбъектов
|ИЗ
| (
| ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЯ_СОРТИРОВКИ,
|
| Ссылка,
| СтатусСопоставления,
| СтатусСопоставленияДополнительный,
|
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
| ИЗ
| ТаблицаСопоставленныхОбъектовИсточникаПоРегистру
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЯ_СОРТИРОВКИ,
|
| Ссылка,
| СтатусСопоставления,
| СтатусСопоставленияДополнительный,
|
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
| ИЗ
| ТаблицаСопоставленныхОбъектовПриемникаПоРегистру
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЯ_СОРТИРОВКИ,
|
| Ссылка,
| СтатусСопоставления,
| СтатусСопоставленияДополнительный,
|
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
| ИЗ
| ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям
|
| ) КАК ВложенныйЗапрос
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаНеСопоставленныхОбъектовИсточника}
|ВЫБРАТЬ
|
| Ссылка,
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЕ_СОРТИРОВКИ_Источник,
|
| -1 КАК СтатусСопоставления, // несопоставленные объекты источника (-1)
| 1 КАК СтатусСопоставленияДополнительный, // несопоставленные объекты (1)
|
| // {ИНДЕКС КАРТИНКИ}
| ВЫБОР КОГДА ЭтоГруппаИсточник ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ
| ВЫБОР КОГДА ЭтоГруппаИсточник = ИСТИНА
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ИсточникИндексКартинки,
|
| ВЫБОР КОГДА ЭтоГруппаПриемник ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ
| ВЫБОР КОГДА ЭтоГруппаПриемник = ИСТИНА
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ПриемникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаНеСопоставленныхОбъектовИсточника
|ИЗ
| (ВЫБРАТЬ
| Количество(*),
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
| Ссылка,
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
| УникальныйИдентификаторПриемника,
| УникальныйИдентификаторИсточника,
| ТипИсточника,
| ТипПриемника
| ИЗ
| (ВЫБРАТЬ
|
| &ТаблицаИсточникаЭтоГруппа КАК ЭтоГруппаИсточник,
| NULL КАК ЭтоГруппаПриемник,
|
| ТаблицаИсточника.Ссылка КАК Ссылка,
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| NULL КАК УникальныйИдентификаторПриемника,
| ТаблицаИсточника.УникальныйИдентификатор КАК УникальныйИдентификаторИсточника,
| &ТипИсточника КАК ТипИсточника,
| &ТипПриемника КАК ТипПриемника
| ИЗ
| ТаблицаИсточника КАК ТаблицаИсточника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаСопоставленныхОбъектов КАК ТаблицаСопоставленныхОбъектов
| ПО
| ТаблицаИсточника.Ссылка = ТаблицаСопоставленныхОбъектов.Ссылка
| ГДЕ
| ТаблицаСопоставленныхОбъектов.УникальныйИдентификаторИсточника ЕСТЬ NULL
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| &ТаблицаИсточникаЭтоГруппа,
| NULL,
|
| ТаблицаИсточника.Ссылка,
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос1,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| NULL,
| ТаблицаИсточника.УникальныйИдентификатор,
| &ТипИсточника,
| &ТипПриемника
| ИЗ
| ТаблицаИсточника КАК ТаблицаИсточника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаСопоставленныхОбъектов КАК ТаблицаСопоставленныхОбъектов
| ПО
| ТаблицаИсточника.УникальныйИдентификатор = ТаблицаСопоставленныхОбъектов.УникальныйИдентификаторИсточника
| ГДЕ
| ТаблицаСопоставленныхОбъектов.Ссылка ЕСТЬ NULL
| ) КАК ВложенныйЗапросПредварительный
| СГРУППИРОВАТЬ ПО
| ЭтоГруппаИсточник,
| ЭтоГруппаПриемник,
| Ссылка,
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
| УникальныйИдентификаторПриемника,
| УникальныйИдентификаторИсточника,
| ТипИсточника,
| ТипПриемника
| ИМЕЮЩИЕ Количество(*) > 1) КАК ВложенныйЗапрос
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаНеСопоставленныхОбъектовПриемника}
|ВЫБРАТЬ
|
| Ссылка,
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЕ_СОРТИРОВКИ_Приемник,
|
| 1 КАК СтатусСопоставления, // несопоставленные объекты приемника (1)
| 1 КАК СтатусСопоставленияДополнительный, // несопоставленные объекты (1)
|
| // {ИНДЕКС КАРТИНКИ}
| ВЫБОР КОГДА ЭтоГруппаИсточник ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ
| ВЫБОР КОГДА ЭтоГруппаИсточник = ИСТИНА
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ИсточникИндексКартинки,
|
| ВЫБОР КОГДА ЭтоГруппаПриемник ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ
| ВЫБОР КОГДА ЭтоГруппаПриемник = ИСТИНА
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ
| КОНЕЦ КАК ПриемникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаНеСопоставленныхОбъектовПриемника
|ИЗ
| (ВЫБРАТЬ
|
| ТаблицаПриемника.Ссылка КАК Ссылка,
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовПриемника_ВложенныйЗапрос,
|
| NULL КАК ЭтоГруппаИсточник,
| &ТаблицаПриемникаЭтоГруппа КАК ЭтоГруппаПриемник,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ТаблицаПриемника.Ссылка КАК УникальныйИдентификаторПриемника,
| Неопределено КАК УникальныйИдентификаторИсточника,
| Неопределено КАК ТипИсточника,
| &ТипПриемника КАК ТипПриемника
| ИЗ
| Справочник.СценарииОбменовДанными КАК ТаблицаПриемника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаСопоставленныхОбъектов КАК ТаблицаСопоставленныхОбъектов
| ПО
| ТаблицаПриемника.Ссылка = ТаблицаСопоставленныхОбъектов.Ссылка
| ГДЕ
| ТаблицаСопоставленныхОбъектов.УникальныйИдентификаторПриемника ЕСТЬ NULL
| ) КАК ВложенныйЗапрос
|;
|
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЯ_СОРТИРОВКИ,",
"#ПОЛЯ_СОРТИРОВКИ#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЕ_СОРТИРОВКИ_Источник,",
"#ПОЛЕ_СОРТИРОВКИ_Источник#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаИсточникаЭтоГруппа",
"#ТаблицаИсточникаЭтоГруппа#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос1,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос1#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЕ_СОРТИРОВКИ_Приемник,",
"#ПОЛЕ_СОРТИРОВКИ_Приемник#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовПриемника_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовПриемника_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТаблицаПриемникаЭтоГруппа",
"#ТаблицаПриемникаЭтоГруппа#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"Справочник.СценарииОбменовДанными КАК ТаблицаПриемника",
"#ТаблицаПриемника# КАК ТаблицаПриемника");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаИсточника#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаИсточникаПараметр.# КАК #,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ИсточникПолеNN, ПриемникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоСсылке_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаПриемника.# КАК ПриемникПолеNN, ТаблицаИсточника.# КАК ИсточникПолеNN,"));
Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ВЫРАЗИТЬ(ЕСТЬNULL(СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника, ТаблицаПриемника.Ссылка) КАК [ИмяТаблицыПриемника]).# КАК ПриемникПолеNN, ТаблицаИсточника.# КАК ИсточникПолеNN,"));
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовИсточникаПоРегистру_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ВЫРАЗИТЬ(СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника КАК [ИмяТаблицыПриемника]).# КАК ПриемникПолеNN, ТаблицаИсточника.# КАК ИсточникПолеNN,"));
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаПриемника.# КАК ПриемникПолеNN, NULL КАК ИсточникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ВЫРАЗИТЬ(ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника КАК [ИмяТаблицыПриемника]).# КАК ПриемникПолеNN, ТаблицаИсточника.# КАК ИсточникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаИсточника.# КАК ИсточникПолеNN, NULL КАК ПриемникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос1#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаИсточника.#, NULL,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовПриемника_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "NULL КАК ИсточникПолеNN, ТаблицаПриемника.Ссылка.# КАК ПриемникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЕ_СОРТИРОВКИ_Источник#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ИсточникПолеNN КАК ПолеСортировкиNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЕ_СОРТИРОВКИ_Приемник#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ПриемникПолеNN КАК ПолеСортировкиNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЯ_СОРТИРОВКИ#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ПолеСортировкиNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаПриемника#", ИмяТаблицыПриемника);
Если ПользовательскиеПоля.Найти("ЭтоГруппа") <> Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаИсточникаЭтоГруппа#", "ТаблицаИсточника.ЭтоГруппа");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаПриемникаЭтоГруппа#", "ТаблицаПриемника.ЭтоГруппа");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаНеутвержденныхСвязейЭтоГруппа#", "ВЫРАЗИТЬ(ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника КАК [ИмяТаблицыПриемника]).ЭтоГруппа");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#СоответствияОбъектовИнформационныхБазЭтоГруппа#", "ВЫРАЗИТЬ(СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника КАК [ИмяТаблицыПриемника]).ЭтоГруппа");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаИсточникаЭтоГруппа#", "NULL");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаПриемникаЭтоГруппа#", "NULL");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаНеутвержденныхСвязейЭтоГруппа#", "NULL");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#СоответствияОбъектовИнформационныхБазЭтоГруппа#", "NULL");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицыПриемника]", ИмяТаблицыПриемника);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаИсточникаПараметр", ТаблицаИсточника);
Запрос.УстановитьПараметр("ТаблицаНеутвержденныхСвязей", ТаблицаНеутвержденныхСвязей.Выгрузить());
Запрос.УстановитьПараметр("ТипИсточника", ТипИсточникаСтрокой);
Запрос.УстановитьПараметр("ТипПриемника", ТипПриемникаСтрокой);
Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы);
Запрос.Выполнить();
КонецПроцедуры
Процедура ДанныеАвтоматическогоСопоставления(ТаблицаИсточника, СписокПолейСопоставления, ПользовательскиеПоля, МенеджерВременныхТаблиц)
МассивОтмеченныхЭлементовСписка = ОбщегоНазначенияКлиентСервер.ОтмеченныеЭлементы(СписокПолейСопоставления);
Если МассивОтмеченныхЭлементовСписка.Количество() = 0 Тогда
ДанныеАвтоматическогоСопоставленияПоGUID(ПользовательскиеПоля, МенеджерВременныхТаблиц);
Иначе
ДанныеАвтоматическогоСопоставленияПоGUIDПлюсПоПолямПоиска(ТаблицаИсточника, СписокПолейСопоставления, ПользовательскиеПоля, МенеджерВременныхТаблиц);
КонецЕсли;
КонецПроцедуры
Процедура ДанныеАвтоматическогоСопоставленияПоGUID(ПользовательскиеПоля, МенеджерВременныхТаблиц)
ТекстЗапроса = "
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаАвтоматическиСопоставленныхОбъектов}
|ВЫБРАТЬ
|
| Ссылка,
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаАвтоматическиСопоставленныхОбъектов
|ИЗ
| (ВЫБРАТЬ
|
| ТаблицаНеСопоставленныхОбъектовПриемника.Ссылка КАК Ссылка,
|
| ТаблицаНеСопоставленныхОбъектовПриемника.ПриемникИндексКартинки,
| ТаблицаНеСопоставленныхОбъектовИсточника.ИсточникИндексКартинки,
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID_ВложенныйЗапрос,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ТаблицаНеСопоставленныхОбъектовИсточника.УникальныйИдентификаторИсточника КАК УникальныйИдентификаторИсточника,
| ТаблицаНеСопоставленныхОбъектовИсточника.ТипИсточника КАК ТипИсточника,
| ТаблицаНеСопоставленныхОбъектовПриемника.УникальныйИдентификаторПриемника КАК УникальныйИдентификаторПриемника,
| ТаблицаНеСопоставленныхОбъектовПриемника.ТипПриемника КАК ТипПриемника
| ИЗ
| ТаблицаНеСопоставленныхОбъектовПриемника КАК ТаблицаНеСопоставленныхОбъектовПриемника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаНеСопоставленныхОбъектовИсточника КАК ТаблицаНеСопоставленныхОбъектовИсточника
| ПО
| ТаблицаНеСопоставленныхОбъектовПриемника.Ссылка = ТаблицаНеСопоставленныхОбъектовИсточника.Ссылка
|
| ГДЕ
| НЕ ТаблицаНеСопоставленныхОбъектовИсточника.Ссылка ЕСТЬ NULL
|
| ) КАК ВложенныйЗапрос
|;
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ИсточникПолеNN, ПриемникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаНеСопоставленныхОбъектовИсточника.ИсточникПолеNN КАК ИсточникПолеNN, ТаблицаНеСопоставленныхОбъектовПриемника.ПриемникПолеNN КАК ПриемникПолеNN,"));
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Выполнить();
КонецПроцедуры
Процедура ДанныеАвтоматическогоСопоставленияПоGUIDПлюсПоПолямПоиска(ТаблицаИсточника, СписокПолейСопоставления, ПользовательскиеПоля, МенеджерВременныхТаблиц)
ТекстЗапроса = "
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID}
|ВЫБРАТЬ
|
| Ссылка,
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID
|ИЗ
| (ВЫБРАТЬ
|
| ТаблицаНеСопоставленныхОбъектовПриемника.Ссылка КАК Ссылка,
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID_ВложенныйЗапрос,
|
| ТаблицаНеСопоставленныхОбъектовПриемника.ПриемникИндексКартинки,
| ТаблицаНеСопоставленныхОбъектовИсточника.ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ТаблицаНеСопоставленныхОбъектовИсточника.УникальныйИдентификаторИсточника КАК УникальныйИдентификаторИсточника,
| ТаблицаНеСопоставленныхОбъектовИсточника.ТипИсточника КАК ТипИсточника,
| ТаблицаНеСопоставленныхОбъектовПриемника.УникальныйИдентификаторПриемника КАК УникальныйИдентификаторПриемника,
| ТаблицаНеСопоставленныхОбъектовПриемника.ТипПриемника КАК ТипПриемника
| ИЗ
| ТаблицаНеСопоставленныхОбъектовПриемника КАК ТаблицаНеСопоставленныхОбъектовПриемника
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаНеСопоставленныхОбъектовИсточника КАК ТаблицаНеСопоставленныхОбъектовИсточника
| ПО
| ТаблицаНеСопоставленныхОбъектовПриемника.Ссылка = ТаблицаНеСопоставленныхОбъектовИсточника.Ссылка
|
| ГДЕ
| НЕ ТаблицаНеСопоставленныхОбъектовИсточника.Ссылка ЕСТЬ NULL
|
| ) КАК ВложенныйЗапрос
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектов,
|
| ТаблицаНеСопоставленныхОбъектов.ПриемникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ТаблицаНеСопоставленныхОбъектов.УникальныйИдентификаторИсточника,
| ТаблицаНеСопоставленныхОбъектов.УникальныйИдентификаторПриемника,
| ТаблицаНеСопоставленныхОбъектов.ТипИсточника,
| ТаблицаНеСопоставленныхОбъектов.ТипПриемника
|ПОМЕСТИТЬ ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям
|ИЗ
| ТаблицаНеСопоставленныхОбъектовПриемника КАК ТаблицаНеСопоставленныхОбъектов
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID КАК ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID
| ПО
| ТаблицаНеСопоставленныхОбъектов.Ссылка = ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID.Ссылка
|ГДЕ
| ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID.Ссылка ЕСТЬ NULL
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектов,
|
| ТаблицаНеСопоставленныхОбъектов.ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ТаблицаНеСопоставленныхОбъектов.УникальныйИдентификаторИсточника,
| ТаблицаНеСопоставленныхОбъектов.УникальныйИдентификаторПриемника,
| ТаблицаНеСопоставленныхОбъектов.ТипИсточника,
| ТаблицаНеСопоставленныхОбъектов.ТипПриемника
|ПОМЕСТИТЬ ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям
|ИЗ
| ТаблицаНеСопоставленныхОбъектовИсточника КАК ТаблицаНеСопоставленныхОбъектов
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID КАК ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID
| ПО
| ТаблицаНеСопоставленныхОбъектов.Ссылка = ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID.Ссылка
|ГДЕ
| ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID.Ссылка ЕСТЬ NULL
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаАвтоматическиСопоставленныхОбъектовПолная} // содержит повторяющиеся записи для источника и приемника
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаАвтоматическиСопоставленныхОбъектовПолная
|ИЗ
| (ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПолная_ВложенныйЗапрос,
|
| ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям.ПриемникИндексКартинки,
| ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям.ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям.УникальныйИдентификаторИсточника КАК УникальныйИдентификаторИсточника,
| ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям.ТипИсточника КАК ТипИсточника,
| ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям.УникальныйИдентификаторПриемника КАК УникальныйИдентификаторПриемника,
| ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям.ТипПриемника КАК ТипПриемника
| ИЗ
| ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям КАК ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям КАК ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям
| ПО
| &УСЛОВИЕ_СОПОСТАВЛЕНИЯ_ПО_ПОЛЯМ
|
| ГДЕ
| НЕ ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям.УникальныйИдентификаторИсточника ЕСТЬ NULL
|
| ) КАК ВложенныйЗапрос
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаНеправильноСопоставленныхОбъектовИсточника}
|ВЫБРАТЬ
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника
|
|ПОМЕСТИТЬ ТаблицаНеправильноСопоставленныхОбъектовИсточника
|ИЗ
| (ВЫБРАТЬ
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника
| ИЗ
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная
| СГРУППИРОВАТЬ ПО
| УникальныйИдентификаторИсточника
| ИМЕЮЩИЕ
| КОЛИЧЕСТВО(1) > 1
|
| ) КАК ВложенныйЗапрос
|;
|
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаНеправильноСопоставленныхОбъектовПриемника}
|ВЫБРАТЬ
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторПриемника
|
|ПОМЕСТИТЬ ТаблицаНеправильноСопоставленныхОбъектовПриемника
|ИЗ
| (ВЫБРАТЬ
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторПриемника
| ИЗ
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная
| СГРУППИРОВАТЬ ПО
| УникальныйИдентификаторПриемника
| ИМЕЮЩИЕ
| КОЛИЧЕСТВО(1) > 1
|
| ) КАК ВложенныйЗапрос
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаАвтоматическиСопоставленныхОбъектовПоПолям}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаАвтоматическиСопоставленныхОбъектовПоПолям
|ИЗ
| (ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная.ПриемникИндексКартинки,
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная.ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная.УникальныйИдентификаторИсточника,
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная.УникальныйИдентификаторПриемника,
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная.ТипИсточника,
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная.ТипПриемника
| ИЗ
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная КАК ТаблицаАвтоматическиСопоставленныхОбъектовПолная
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаНеправильноСопоставленныхОбъектовИсточника КАК ТаблицаНеправильноСопоставленныхОбъектовИсточника
| ПО
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная.УникальныйИдентификаторИсточника = ТаблицаНеправильноСопоставленныхОбъектовИсточника.УникальныйИдентификаторИсточника
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаНеправильноСопоставленныхОбъектовПриемника КАК ТаблицаНеправильноСопоставленныхОбъектовПриемника
| ПО
| ТаблицаАвтоматическиСопоставленныхОбъектовПолная.УникальныйИдентификаторПриемника = ТаблицаНеправильноСопоставленныхОбъектовПриемника.УникальныйИдентификаторПриемника
|
| ГДЕ
| ТаблицаНеправильноСопоставленныхОбъектовИсточника.УникальныйИдентификаторИсточника ЕСТЬ NULL
| И ТаблицаНеправильноСопоставленныхОбъектовПриемника.УникальныйИдентификаторПриемника ЕСТЬ NULL
|
| ) КАК ВложенныйЗапрос
|;
|
|//////////////////////////////////////////////////////////////////////////////// {ТаблицаАвтоматическиСопоставленныхОбъектов}
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ПОМЕСТИТЬ ТаблицаАвтоматическиСопоставленныхОбъектов
|ИЗ
| (
| ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
| ИЗ
| ТаблицаАвтоматическиСопоставленныхОбъектовПоПолям
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
| ИЗ
| ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID
|
| ) КАК ВложенныйЗапрос
|;
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектов,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектов#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПолная_ВложенныйЗапрос,",
"#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПолная_ВложенныйЗапрос#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&УСЛОВИЕ_СОПОСТАВЛЕНИЯ_ПО_ПОЛЯМ",
"#УСЛОВИЕ_СОПОСТАВЛЕНИЯ_ПО_ПОЛЯМ#");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#УСЛОВИЕ_СОПОСТАВЛЕНИЯ_ПО_ПОЛЯМ#", ПолучитьУсловиеСопоставленияПоПолям(СписокПолейСопоставления));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ИсточникПолеNN, ПриемникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектов#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаНеСопоставленныхОбъектов.ИсточникПолеNN КАК ИсточникПолеNN, ТаблицаНеСопоставленныхОбъектов.ПриемникПолеNN КАК ПриемникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПолная_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям.ИсточникПолеNN КАК ИсточникПолеNN, ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям.ПриемникПолеNN КАК ПриемникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаАвтоматическиСопоставленныхОбъектовПоGUID_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаНеСопоставленныхОбъектовИсточника.ИсточникПолеNN КАК ИсточникПолеNN, ТаблицаНеСопоставленныхОбъектовПриемника.ПриемникПолеNN КАК ПриемникПолеNN,"));
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Выполнить();
КонецПроцедуры
Процедура ВыполнитьСортировкуТаблицыНаСервере()
ПоляСортировки = ПолучитьПоляСортировкиНаСервере();
Если Не ПустаяСтрока(ПоляСортировки) Тогда
ТаблицаСопоставления().Сортировать(ПоляСортировки);
КонецЕсли;
КонецПроцедуры
Процедура ПолучитьДайджестСопоставления(МенеджерВременныхТаблиц)
ПолучитьКоличествоСопоставленныхОбъектов(МенеджерВременныхТаблиц);
ДайджестСопоставления().КоличествоОбъектовВИсточнике = ОбменДаннымиСервер.КоличествоЗаписейВоВременнойТаблицеБазыДанных("ТаблицаИсточника", МенеджерВременныхТаблиц);
ДайджестСопоставления().КоличествоОбъектовВПриемнике = ОбменДаннымиСервер.КоличествоЗаписейВТаблицеБазыДанных(ИмяТаблицыПриемника);
КоличествоСопоставленныхОбъектовИсточника = ИнформацияСтатистикиСопоставленияОбъектов().КоличествоОбъектовИсточникаСопоставленныхПоРегистру
+ ИнформацияСтатистикиСопоставленияОбъектов().КоличествоОбъектовСопоставленныхПоНеутвержденнымСвязям;
КоличествоСопоставленныхОбъектовПриемника = ИнформацияСтатистикиСопоставленияОбъектов().КоличествоОбъектовИсточникаСопоставленныхПоРегистру
+ ИнформацияСтатистикиСопоставленияОбъектов().КоличествоОбъектовПриемникаСопоставленныхПоРегистру
+ ИнформацияСтатистикиСопоставленияОбъектов().КоличествоОбъектовСопоставленныхПоНеутвержденнымСвязям;
КоличествоНесопоставленныхОбъектовИсточника = Макс(0, ДайджестСопоставления().КоличествоОбъектовВИсточнике - КоличествоСопоставленныхОбъектовИсточника);
КоличествоНесопоставленныхОбъектовПриемника = Макс(0, ДайджестСопоставления().КоличествоОбъектовВПриемнике - КоличествоСопоставленныхОбъектовПриемника);
ПроцентСопоставленияОбъектовИсточника = ?(ДайджестСопоставления().КоличествоОбъектовВИсточнике = 0, 0, 100 - Цел(100 * КоличествоНесопоставленныхОбъектовИсточника / ДайджестСопоставления().КоличествоОбъектовВИсточнике));
ПроцентСопоставленияОбъектовПриемника = ?(ДайджестСопоставления().КоличествоОбъектовВПриемнике = 0, 0, 100 - Цел(100 * КоличествоНеСопоставленныхОбъектовПриемника / ДайджестСопоставления().КоличествоОбъектовВПриемнике));
ДайджестСопоставления().ПроцентСопоставленияОбъектов = Макс(ПроцентСопоставленияОбъектовИсточника, ПроцентСопоставленияОбъектовПриемника);
ДайджестСопоставления().КоличествоОбъектовНесопоставленных = Мин(КоличествоНесопоставленныхОбъектовИсточника, КоличествоНесопоставленныхОбъектовПриемника);
ДайджестСопоставления().КоличествоОбъектовСопоставленных = КоличествоСопоставленныхОбъектовПриемника;
КонецПроцедуры
Процедура ПолучитьКоличествоСопоставленныхОбъектов(МенеджерВременныхТаблиц)
ТекстЗапроса = "
|ВЫБРАТЬ
| Количество(*) КАК Количество
|ИЗ
| ТаблицаСопоставленныхОбъектовИсточникаПоРегистру
|;
|
|
|ВЫБРАТЬ
| Количество(*) КАК Количество
|ИЗ
| ТаблицаСопоставленныхОбъектовПриемникаПоРегистру
|;
|
|
|ВЫБРАТЬ
| Количество(*) КАК Количество
|ИЗ
| ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям
|;
|
|";
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
МассивРезультатов = Запрос.ВыполнитьПакет();
ИнформацияСтатистикиСопоставленияОбъектов().КоличествоОбъектовИсточникаСопоставленныхПоРегистру = МассивРезультатов[0].Выгрузить()[0]["Количество"];
ИнформацияСтатистикиСопоставленияОбъектов().КоличествоОбъектовПриемникаСопоставленныхПоРегистру = МассивРезультатов[1].Выгрузить()[0]["Количество"];
ИнформацияСтатистикиСопоставленияОбъектов().КоличествоОбъектовСопоставленныхПоНеутвержденнымСвязям = МассивРезультатов[2].Выгрузить()[0]["Количество"];
КонецПроцедуры
Процедура ДобавитьПолеНомераВТаблицуСопоставления()
ТаблицаСопоставления().Колонки.Добавить("НомерПоПорядку", Новый ОписаниеТипов("Число"));
Для Каждого СтрокаТаблицы Из ТаблицаСопоставления() Цикл
СтрокаТаблицы.НомерПоПорядку = ТаблицаСопоставления().Индекс(СтрокаТаблицы);
КонецЦикла;
КонецПроцедуры
Функция ОбъединитьТаблицыНеутвержденныхСвязейИАвтоматическогоСопоставления(МенеджерВременныхТаблиц)
ТекстЗапроса = "
|ВЫБРАТЬ
|
|
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ИЗ
| (
| ВЫБРАТЬ
|
|
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
| ИЗ
| ТаблицаНеутвержденныхСвязей
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
|
|
| УникальныйИдентификаторПриемника КАК УникальныйИдентификаторИсточника,
| УникальныйИдентификаторИсточника КАК УникальныйИдентификаторПриемника,
| ТипПриемника КАК ТипИсточника,
| ТипИсточника КАК ТипПриемника
| ИЗ
| ТаблицаАвтоматическиСопоставленныхОбъектов
|
| ) КАК ВложенныйЗапрос
|
|";
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Функция ТаблицаАвтоматическиСопоставленныхОбъектовПолучить(МенеджерВременныхТаблиц, ПользовательскиеПоля)
ТекстЗапроса = "
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| ИСТИНА КАК Пометка,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
|
| УникальныйИдентификаторПриемника КАК УникальныйИдентификаторИсточника,
| УникальныйИдентификаторИсточника КАК УникальныйИдентификаторПриемника,
| ТипПриемника КАК ТипИсточника,
| ТипИсточника КАК ТипПриемника
|ИЗ
| ТаблицаАвтоматическиСопоставленныхОбъектов
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ИсточникПолеNN, ПриемникПолеNN,"));
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Функция РезультатСопоставленияОбъектов(ТаблицаИсточника, ПользовательскиеПоля, МенеджерВременныхТаблиц)
ТекстЗапроса = "
|////////////////////////////////////////////////////////////////////////////////
|
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЯ_СОРТИРОВКИ,
|
| СтатусСопоставления,
| СтатусСопоставленияДополнительный,
|
| ИсточникИндексКартинки КАК ИндексКартинки,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ИЗ
| ТаблицаНеСопоставленныхОбъектовИсточника
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЯ_СОРТИРОВКИ,
|
| СтатусСопоставления,
| СтатусСопоставленияДополнительный,
|
| ПриемникИндексКартинки КАК ИндексКартинки,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ИЗ
| ТаблицаНеСопоставленныхОбъектовПриемника
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|
| &ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,
|
| &ПОЛЯ_СОРТИРОВКИ,
|
| СтатусСопоставления,
| СтатусСопоставленияДополнительный,
|
| ПриемникИндексКартинки КАК ИндексКартинки,
|
| ПриемникИндексКартинки,
| ИсточникИндексКартинки,
|
| // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ}
| УникальныйИдентификаторИсточника,
| УникальныйИдентификаторПриемника,
| ТипИсточника,
| ТипПриемника
|ИЗ
| ТаблицаСопоставленныхОбъектов
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставления,", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ИсточникПолеNN, ПриемникПолеNN,"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПОЛЯ_СОРТИРОВКИ,", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ПолеСортировкиNN,"));
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Функция ДанныеИнформационнойБазыИсточника(Отказ)
ТаблицаДанных = Неопределено;
СтруктураНастроекОбмена = ОбменДаннымиСервер.СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена);
Если СтруктураНастроекОбмена.Отказ Тогда
Возврат Неопределено;
КонецЕсли;
ОбработкаОбменаДанными = СтруктураНастроекОбмена.ОбработкаОбменаДанными;
КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, ЭтоУдалениеОбъекта);
ТаблицаДанных = ОбработкаОбменаДанными.ТаблицыДанныхСообщенияОбмена().Получить(КлючТаблицыДанных);
Если ТаблицаДанных = Неопределено Тогда
ТаблицыДляЗагрузки = Новый Массив;
ТаблицыДляЗагрузки.Добавить(КлючТаблицыДанных);
ОбработкаОбменаДанными.ВыполнитьЗагрузкуДанныхВТаблицуЗначений(ТаблицыДляЗагрузки);
Если ОбработкаОбменаДанными.ФлагОшибки() Тогда
НСтрока = НСтр("ru = 'При загрузке сообщения обмена возникли ошибки: %1'");
НСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, ОбработкаОбменаДанными.СтрокаСообщенияОбОшибке());
ОбщегоНазначения.СообщитьПользователю(НСтрока,,,, Отказ);
Возврат Неопределено;
КонецЕсли;
ТаблицаДанных = ОбработкаОбменаДанными.ТаблицыДанныхСообщенияОбмена().Получить(КлючТаблицыДанных);
КонецЕсли;
Если ТаблицаДанных = Неопределено Тогда
Отказ = Истина;
КонецЕсли;
Возврат ТаблицаДанных;
КонецФункции
Функция ПолучитьПользовательскиеПоля(ПользовательскиеПоля, ШаблонПоля)
Результат = "";
Для Каждого Поле Из ПользовательскиеПоля Цикл
НомерПоля = ПользовательскиеПоля.Найти(Поле) + 1;
ТекущееПоле = СтрЗаменить(ШаблонПоля, "#", Поле);
ТекущееПоле = СтрЗаменить(ТекущееПоле, "NN", Строка(НомерПоля));
Результат = Результат + Символы.ПС + ТекущееПоле;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ПолучитьПоляСортировкиНаСервере()
ПоляСортировки = "";
ШаблонПоля = "ПолеСортировкиNN #НаправлениеСортировки";
Для Каждого СтрокаТаблицы Из ТаблицаСортировки Цикл
Если СтрокаТаблицы.Использование Тогда
Разделитель = ?(ПустаяСтрока(ПоляСортировки), "", ", ");
НаправлениеСортировкиСтр = ?(СтрокаТаблицы.НаправлениеСортировки, "Возр", "Убыв");
ЭлементСписка = СписокИспользуемыхПолей.НайтиПоЗначению(СтрокаТаблицы.ИмяПоля);
ИндексПоля = СписокИспользуемыхПолей.Индекс(ЭлементСписка) + 1;
ИмяПоля = СтрЗаменить(ШаблонПоля, "NN", Строка(ИндексПоля));
ИмяПоля = СтрЗаменить(ИмяПоля, "#НаправлениеСортировки", НаправлениеСортировкиСтр);
ПоляСортировки = ПоляСортировки + Разделитель + ИмяПоля;
КонецЕсли;
КонецЦикла;
Возврат ПоляСортировки;
КонецФункции
Функция ПолучитьУсловиеСопоставленияПоПолям(СписокПолейСопоставления)
Результат = "";
Для Каждого Элемент Из СписокПолейСопоставления Цикл
Если Элемент.Пометка Тогда
Если СтрНайти(Элемент.Представление, ОбменДаннымиСервер.СтрокаНеограниченнойДлины()) > 0 Тогда
ШаблонПоля = "ПОДСТРОКА(ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям.ПриемникПолеNN, 0, 1024) = ПОДСТРОКА(ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям.ИсточникПолеNN, 0, 1024)";
Иначе
ШаблонПоля = "ТаблицаНеСопоставленныхОбъектовПриемникаПоПолям.ПриемникПолеNN = ТаблицаНеСопоставленныхОбъектовИсточникаПоПолям.ИсточникПолеNN";
КонецЕсли;
НомерПоля = СписокПолейСопоставления.Индекс(Элемент) + 1;
ТекущееПоле = СтрЗаменить(ШаблонПоля, "NN", Строка(НомерПоля));
ЛитералОперации = ?(ПустаяСтрока(Результат), "", "И");
Результат = Результат + Символы.ПС + ЛитералОперации + " " + ТекущееПоле;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура ЗаполнитьСписокОтмеченнымиЭлементами(СписокИсточник, СписокПриемник)
СписокПриемник.Очистить();
Для Каждого Элемент Из СписокИсточник Цикл
Если Элемент.Пометка Тогда
СписокПриемник.Добавить(Элемент.Значение, Элемент.Представление, Истина);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТаблицуСортировки(СписокЗначенийИсточник)
ТаблицаСортировки.Очистить();
Для Каждого Элемент Из СписокЗначенийИсточник Цикл
ЭтоПервоеПоле = СписокЗначенийИсточник.Индекс(Элемент) = 0;
СтрокаТаблицы = ТаблицаСортировки.Добавить();
СтрокаТаблицы.ИмяПоля = Элемент.Значение;
СтрокаТаблицы.Использование = ЭтоПервоеПоле;
СтрокаТаблицы.НаправлениеСортировки = Истина;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьСписокДополнительнымиПараметрами(СписокПолейТаблицы)
ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип(ИмяТипаОбъектаТаблицыИсточника));
СписокПолейДляУдаления = Новый Массив;
ТипХранилищеЗначения = Новый ОписаниеТипов("ХранилищеЗначения");
Для каждого Элемент Из СписокПолейТаблицы Цикл
Реквизит = ОбъектМетаданных.Реквизиты.Найти(Элемент.Значение);
Если Реквизит = Неопределено
И ОбменДаннымиСервер.ЭтоСтандартныйРеквизит(ОбъектМетаданных.СтандартныеРеквизиты, Элемент.Значение) Тогда
Реквизит = ОбъектМетаданных.СтандартныеРеквизиты[Элемент.Значение];
КонецЕсли;
Если Реквизит = Неопределено Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Для объекта метаданных ""%1"" не определен реквизит с именем ""%2""'"),
ОбъектМетаданных.ПолноеИмя(),
Строка(Элемент.Значение));
КонецЕсли;
Если Реквизит.Тип = ТипХранилищеЗначения Тогда
СписокПолейДляУдаления.Добавить(Элемент);
Продолжить;
КонецЕсли;
Представление = "";
Если ЭтоСтрокаНеограниченнойДлины(Реквизит) Тогда
Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2",
?(ПустаяСтрока(Реквизит.Синоним), Реквизит.Имя, СокрЛП(Реквизит.Синоним)),
ОбменДаннымиСервер.СтрокаНеограниченнойДлины());
Иначе
Представление = СокрЛП(Реквизит.Синоним);
КонецЕсли;
Если ПустаяСтрока(Представление) Тогда
Представление = Реквизит.Имя;
КонецЕсли;
Элемент.Представление = Представление;
КонецЦикла;
Для Каждого УдаляемыйЭлемент Из СписокПолейДляУдаления Цикл
СписокПолейТаблицы.Удалить(УдаляемыйЭлемент);
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьКоличествоПолейСопоставленияВМассиве(Массив)
Если Массив.Количество() > ОбменДаннымиСервер.МаксимальноеКоличествоПолейСопоставленияОбъектов() Тогда
Массив.Удалить(Массив.ВГраница());
ПроверитьКоличествоПолейСопоставленияВМассиве(Массив);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьПолеПоиска(Массив, Значение)
Элемент = СписокПолейТаблицы.НайтиПоЗначению(Значение);
Если Элемент <> Неопределено Тогда
Массив.Добавить(Элемент.Значение);
КонецЕсли;
КонецПроцедуры
Функция ЭтоСтрокаНеограниченнойДлины(Реквизит)
Возврат Реквизит.Тип = ТипСтрокаНеограниченнойДлины();
КонецФункции
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли