mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 21:24:11 +00:00
454 lines
29 KiB
Plaintext
454 lines
29 KiB
Plaintext
#Если Клиент Тогда
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// ПЕРЕМЕННЫЕ МОДУЛЯ
|
||
|
||
Перем мЗапрос Экспорт;
|
||
Перем мРезультатыПоиска Экспорт;
|
||
Перем мМетаданныеОбъекта Экспорт;
|
||
Перем мКорневойТипОбъекта Экспорт;
|
||
Перем мПутьКДаннымПоляНечеткогоСравнения;
|
||
Перем мСтруктураКлючаПоиска;
|
||
Перем мСтруктураПредставлений Экспорт;
|
||
Перем мСтрокаРеквизитов;
|
||
Перем мСписокРеквизитов;
|
||
|
||
Перем мЗависимыеМетаданные;
|
||
|
||
Перем мПостроительЗапросаОтбора;
|
||
Перем мЗатронутыеЭлементыПВХ Экспорт;
|
||
Перем МассивСтруктурУсекаемыхТипов Экспорт;
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
|
||
|
||
// <Описание процедуры>
|
||
//
|
||
// Параметры:
|
||
// <Параметр1> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>;
|
||
// <Параметр2> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>.
|
||
//
|
||
Функция ВыполнитьАвтокорректировку() Экспорт
|
||
|
||
Если ВыполнятьВТранзакции Тогда
|
||
НачатьТранзакцию();
|
||
КонецЕсли;
|
||
ВыполнитьАнализ();
|
||
ВыполнитьОчисткуРегистров();
|
||
ВыполнитьКоррекциюПВХ(мЗатронутыеЭлементыПВХ);
|
||
Если ВыполнятьВТранзакции Тогда
|
||
ЗафиксироватьТранзакцию();
|
||
КонецЕсли;
|
||
|
||
Возврат ВыполнитьАнализ();
|
||
|
||
КонецФункции // ВыполнитьАвтокорректировку()
|
||
|
||
// <Описание процедуры>
|
||
//
|
||
// Параметры:
|
||
// <Параметр1> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>;
|
||
// <Параметр2> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>.
|
||
//
|
||
Функция ВыполнитьАнализ() Экспорт
|
||
|
||
ЗатрагиваемыеЭлементыТекущегоПланаВидовХарактеристик = Новый ТаблицаЗначений;
|
||
МассивСтруктурУсекаемыхТипов = Новый Массив;
|
||
МассивТиповКУдалению = Новый Массив;
|
||
Для Каждого УсекаемыйТип Из УсекаемыеТипы.Типы() Цикл
|
||
МетаданныеТипа = Метаданные.НайтиПоТипу(УсекаемыйТип);
|
||
Если МетаданныеТипа = Неопределено Тогда
|
||
Сообщить("Примитивный тип """ + УсекаемыйТип + """ не будет учтен");
|
||
МассивТиповКУдалению.Добавить(УсекаемыйТип);
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтруктураУсекаемогоТипа = Новый Структура;
|
||
СтруктураУсекаемогоТипа.Вставить("Тип", УсекаемыйТип);
|
||
СтруктураУсекаемогоТипа.Вставить("ТипЗапроса", Метаданные.НайтиПоТипу(УсекаемыйТип).ПолноеИмя());
|
||
МассивСтруктурУсекаемыхТипов.Добавить(СтруктураУсекаемогоТипа);
|
||
КонецЦикла;
|
||
УсекаемыеТипы = Новый ОписаниеТипов(УсекаемыеТипы, , МассивТиповКУдалению);
|
||
|
||
// Регистры сведений
|
||
НайтиПоРавенствуНовыхКлючейЗаписи();
|
||
|
||
// Планы видов характеристик
|
||
ЗаполнитьТаблицуПВХ();
|
||
|
||
Результат = Истина
|
||
И Не ПроблемныеПланыВидовХарактеристик.Количество() > 0
|
||
И Не ПроблемныеРегистры.Количество() > 0;
|
||
Возврат Результат;
|
||
|
||
КонецФункции // ВыполнитьАнализ()
|
||
|
||
// <Описание процедуры>
|
||
//
|
||
// Параметры:
|
||
// <Параметр1> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>;
|
||
// <Параметр2> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>.
|
||
//
|
||
Процедура ВыполнитьОчисткуГруппыРегистра(СтрокаРегистра, СтрокаГруппы) Экспорт
|
||
|
||
Если ВыполнятьВТранзакции Тогда
|
||
НачатьТранзакцию();
|
||
КонецЕсли;
|
||
МенеджерРегистра = РегистрыСведений[СтрокаРегистра.Имя];
|
||
ТаблицаЗаписей = ПолучитьПроблемныеЗаписиГруппыРегистра(СтрокаРегистра, СтрокаГруппы);
|
||
Для Каждого СтрокаЗаписи Из ТаблицаЗаписей Цикл
|
||
#Если Клиент Тогда
|
||
ОбработкаПрерыванияПользователя();
|
||
#КонецЕсли
|
||
НаборЗаписей = ирНеглобальный.ПолучитьНаборЗаписейПоКлючуЛкс("РегистрСведений." + СтрокаРегистра.Имя, СтрокаЗаписи);
|
||
НаборЗаписей.Записать();
|
||
КонецЦикла;
|
||
Если ВыполнятьВТранзакции Тогда
|
||
ЗафиксироватьТранзакцию();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры // ВыполнитьОчисткуГруппыРегистра()
|
||
|
||
// <Описание функции>
|
||
//
|
||
// Параметры:
|
||
// <Параметр1> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>;
|
||
// <Параметр2> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>.
|
||
//
|
||
// Возвращаемое значение:
|
||
// – <Тип.Вид> – <описание значения>
|
||
// <продолжение описания значения>;
|
||
// <Значение2> – <Тип.Вид> – <описание значения>
|
||
// <продолжение описания значения>.
|
||
//
|
||
Функция ПолучитьПроблемныеЗаписиГруппыРегистра(СтрокаРегистра, СтрокаГруппы) Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст = СтрокаРегистра.ЗапросВыборкиСоставаГруппы;
|
||
МетаРегистр = Метаданные.РегистрыСведений[СтрокаРегистра.Имя];
|
||
Для Каждого МетаИзмерение Из МетаРегистр.Измерения Цикл
|
||
Запрос.УстановитьПараметр(МетаИзмерение.Имя, СтрокаГруппы[МетаИзмерение.Имя]);
|
||
КонецЦикла;
|
||
Если МетаРегистр.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
|
||
Запрос.УстановитьПараметр("Период", СтрокаГруппы["Период"]);
|
||
КонецЕсли;
|
||
Если МетаРегистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда
|
||
Запрос.УстановитьПараметр("Регистратор", СтрокаГруппы["Регистратор"]);
|
||
КонецЕсли;
|
||
ТаблицаЗаписей = Запрос.Выполнить().Выгрузить();
|
||
Возврат ТаблицаЗаписей;
|
||
|
||
КонецФункции // ПолучитьПроблемныеЗаписиГруппыРегистра()
|
||
|
||
// <Описание процедуры>
|
||
//
|
||
// Параметры:
|
||
// <Параметр1> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>;
|
||
// <Параметр2> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>.
|
||
//
|
||
Процедура ВыполнитьОчисткуРегистра(СтрокаРегистра) Экспорт
|
||
|
||
Если ВыполнятьВТранзакции Тогда
|
||
НачатьТранзакцию();
|
||
КонецЕсли;
|
||
мЗапрос.Текст = "ВЫБРАТЬ * ИЗ " + СтрокаРегистра.Имя;
|
||
ГруппыТекущегоРегистра = мЗапрос.Выполнить().Выгрузить();
|
||
Индикатор = ЛксПолучитьИндикаторПроцесса(ГруппыТекущегоРегистра.Количество(), "Коррекция регистра " + СтрокаРегистра.Имя);
|
||
Для Каждого СтрокаГруппы Из ГруппыТекущегоРегистра Цикл
|
||
ЛксОбработатьИндикатор(Индикатор);
|
||
ВыполнитьОчисткуГруппыРегистра(СтрокаРегистра, СтрокаГруппы);
|
||
КонецЦикла;
|
||
ЛксОсвободитьИндикаторПроцесса();
|
||
Если ВыполнятьВТранзакции Тогда
|
||
ЗафиксироватьТранзакцию();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры // ВыполнитьОчисткуГруппРегистра()
|
||
|
||
// <Описание процедуры>
|
||
//
|
||
// Параметры:
|
||
// <Параметр1> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>;
|
||
// <Параметр2> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>.
|
||
//
|
||
Процедура ВыполнитьОчисткуРегистров() Экспорт
|
||
|
||
Если ВыполнятьВТранзакции Тогда
|
||
НачатьТранзакцию();
|
||
КонецЕсли;
|
||
Для Каждого СтрокаРегистра Из ПроблемныеРегистры Цикл
|
||
ВыполнитьОчисткуРегистра(СтрокаРегистра);
|
||
КонецЦикла;
|
||
Если ВыполнятьВТранзакции Тогда
|
||
ЗафиксироватьТранзакцию();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры // ВыполнитьОчисткуРегистров()
|
||
|
||
Процедура НайтиПоРавенствуНовыхКлючейЗаписи() Экспорт
|
||
|
||
ПроблемныеРегистры.Очистить();
|
||
ЭлементыТекущейГруппы.Очистить();
|
||
ГруппыТекущегоРегистра.Очистить();
|
||
ГруппыТекущегоРегистра.Колонки.Очистить();
|
||
мТекущаяГруппа = Неопределено;
|
||
|
||
мСтруктураПредставлений = Новый Структура;
|
||
мСтруктураПредставлений.Вставить("КоличествоЭлементовВГруппе", "Количество элементов");
|
||
мСтруктураПредставлений.Вставить("НомерГруппы", "Номер группы");
|
||
мСтруктураПредставлений.Вставить("ВывестиСостав", "Вывести состав");
|
||
мСтруктураПредставлений.Вставить("Период", "Период");
|
||
мСтруктураПредставлений.Вставить("Регистратор", "Регистратор");
|
||
мСтруктураПредставлений.Вставить("ОткрытьЗапись", "Открыть запись");
|
||
мСтруктураПредставлений.Вставить("Правильный", "Правильный");
|
||
мСтруктураПредставлений.Вставить("НомерСтроки", "Номер строки");
|
||
мСтруктураПредставлений.Вставить("Активность", "Активность");
|
||
|
||
мЗапрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
|
||
Индикатор = ЛксПолучитьИндикаторПроцесса(Метаданные.РегистрыСведений.Количество(), "Регистры сведений");
|
||
Для Каждого МетаРегистр Из Метаданные.РегистрыСведений Цикл
|
||
ЛксОбработатьИндикатор(Индикатор);
|
||
ТекстВЫБРАТЬ = "";
|
||
ТекстСГРУППИРОВАТЬ = "";
|
||
ТекстГДЕ2 = "";
|
||
ВозможныПроблемы = Ложь;
|
||
Для Каждого МетаИзмерение Из МетаРегистр.Измерения Цикл
|
||
ИмяПоля = МетаИзмерение.Имя;
|
||
ТекстПоля = "ВЫБОР КОГДА ЛОЖЬ";
|
||
Для Каждого СтруктураУсекаемогоТипа Из МассивСтруктурУсекаемыхТипов Цикл
|
||
Если МетаИзмерение.Тип.СодержитТип(СтруктураУсекаемогоТипа.Тип) Тогда
|
||
ТекстПоля = ТекстПоля + Символы.ПС + "ИЛИ (" + ИмяПоля + " ССЫЛКА " + СтруктураУсекаемогоТипа.ТипЗапроса + ")";
|
||
ВозможныПроблемы = Истина;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ТекстПоля = ТекстПоля + Символы.ПС + "ТОГДА НЕОПРЕДЕЛЕНО";
|
||
ТекстПоля = ТекстПоля + Символы.ПС + "ИНАЧЕ " + ИмяПоля
|
||
+ Символы.ПС + " КОНЕЦ";
|
||
|
||
ТекстВЫБРАТЬ = ТекстВЫБРАТЬ + ", " + ТекстПоля + " КАК " + ИмяПоля;
|
||
ТекстГДЕ2 = ТекстГДЕ2 + " И " + ТекстПоля + " = &" + ИмяПоля;
|
||
ТекстСГРУППИРОВАТЬ = ТекстСГРУППИРОВАТЬ + ", " + ТекстПоля;
|
||
КонецЦикла;
|
||
|
||
Если МетаРегистр.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
|
||
ИмяПоля = "Период";
|
||
ТекстПоля = ИмяПоля;
|
||
ТекстВЫБРАТЬ = ТекстВЫБРАТЬ + ", " + ТекстПоля + " КАК " + ИмяПоля;
|
||
ТекстГДЕ2 = ТекстГДЕ2 + " И " + ТекстПоля + " = &" + ИмяПоля;
|
||
ТекстСГРУППИРОВАТЬ = ТекстСГРУППИРОВАТЬ + ", " + ТекстПоля;
|
||
КонецЕсли;
|
||
|
||
Если МетаРегистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда
|
||
ИмяПоля = "Регистратор";
|
||
ТекстПоля = ИмяПоля;
|
||
ТекстВЫБРАТЬ = ТекстВЫБРАТЬ + ", " + ТекстПоля + " КАК " + ИмяПоля;
|
||
ТекстГДЕ2 = ТекстГДЕ2 + " И " + ТекстПоля + " = &" + ИмяПоля;
|
||
ТекстСГРУППИРОВАТЬ = ТекстСГРУППИРОВАТЬ + ", " + ТекстПоля;
|
||
КонецЕсли;
|
||
|
||
Если Не ВозможныПроблемы Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ТекстСГРУППИРОВАТЬ = Сред(ТекстСГРУППИРОВАТЬ, 2);
|
||
ТекстЗапросаПоиска = "
|
||
|ВЫБРАТЬ
|
||
| КОЛИЧЕСТВО(*) КАК КоличествоЭлементовВГруппе" + ТекстВЫБРАТЬ + "
|
||
|ПОМЕСТИТЬ " + МетаРегистр.Имя + "
|
||
|ИЗ " + МетаРегистр.ПолноеИмя() + " КАК Регистр
|
||
|СГРУППИРОВАТЬ ПО " + ТекстСГРУППИРОВАТЬ + "
|
||
|ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1
|
||
|";
|
||
|
||
мЗапрос.Текст = ТекстЗапросаПоиска;
|
||
мЗапрос.Выполнить();
|
||
|
||
мЗапрос.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК КоличествоГрупп ИЗ " + МетаРегистр.Имя;
|
||
КоличествоГрупп = мЗапрос.Выполнить().Выгрузить()[0].КоличествоГрупп;
|
||
|
||
Если КоличествоГрупп = 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
СтрокаРегистра = ПроблемныеРегистры.Добавить();
|
||
СтрокаРегистра.ЗапросВыборкиСоставаГруппы = "
|
||
|ВЫБРАТЬ *
|
||
|ИЗ " + МетаРегистр.ПолноеИмя() + " КАК Регистр
|
||
|ГДЕ ИСТИНА " + ТекстГДЕ2 + "
|
||
|";
|
||
СтрокаРегистра.Имя = МетаРегистр.Имя;
|
||
СтрокаРегистра.КоличествоГрупп = КоличествоГрупп;
|
||
|
||
КонецЦикла;
|
||
ЛксОсвободитьИндикаторПроцесса();
|
||
|
||
КонецПроцедуры // НайтиПоРавенствуНовыхКлючейЗаписи()
|
||
|
||
// <Описание процедуры>
|
||
//
|
||
// Параметры:
|
||
// <Параметр1> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>;
|
||
// <Параметр2> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>.
|
||
//
|
||
Процедура ЗаполнитьТаблицуПВХ()
|
||
|
||
мЗатронутыеЭлементыПВХ = Новый ТаблицаЗначений;
|
||
мЗатронутыеЭлементыПВХ.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
|
||
мЗатронутыеЭлементыПВХ.Колонки.Добавить("Ссылка");
|
||
|
||
Для Каждого МетаПВХ Из Метаданные.ПланыВидовХарактеристик Цикл
|
||
Выборка = ЛксПолучитьМенеджер(МетаПВХ).Выбрать();
|
||
Пока Выборка.Следующий() Цикл
|
||
ОбъектПВХ = Выборка.ПолучитьОбъект();
|
||
Затрагивается = Ложь;
|
||
Для Каждого СтруктураУсекаемогоТипа Из МассивСтруктурУсекаемыхТипов Цикл
|
||
Если ОбъектПВХ.ТипЗначения.СодержитТип(СтруктураУсекаемогоТипа.Тип) Тогда
|
||
Затрагивается = Истина;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Если Затрагивается Тогда
|
||
СтрокаЭлементаПВХ = мЗатронутыеЭлементыПВХ.Добавить();
|
||
СтрокаЭлементаПВХ.Имя = МетаПВХ.Имя;
|
||
СтрокаЭлементаПВХ.Ссылка = Выборка.Ссылка;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
ИтогоПВХ = мЗатронутыеЭлементыПВХ.Скопировать();
|
||
ИтогоПВХ.Колонки.Добавить("КоличествоЗатрагиваемыхЭлементов");
|
||
ИтогоПВХ.ЗаполнитьЗначения(1, "КоличествоЗатрагиваемыхЭлементов");
|
||
ИтогоПВХ.Свернуть("Имя", "КоличествоЗатрагиваемыхЭлементов");
|
||
ПроблемныеПланыВидовХарактеристик.Загрузить(ИтогоПВХ);
|
||
|
||
КонецПроцедуры // ЗаполнитьТаблицуПВХ()
|
||
|
||
Процедура ВыполнитьКоррекциюПВХ(ТаблицаСсылокПВХ) Экспорт
|
||
|
||
Если ВыполнятьВТранзакции Тогда
|
||
НачатьТранзакцию();
|
||
КонецЕсли;
|
||
ИндикаторПроцесса = ЛксПолучитьИндикаторПроцесса(ТаблицаСсылокПВХ.Количество(), "Коррекция элементов ПВХ");
|
||
Для Каждого СтрокаЭлемента Из ТаблицаСсылокПВХ Цикл
|
||
#Если Клиент Тогда
|
||
ЛксОбработатьИндикатор(ИндикаторПроцесса);
|
||
#КонецЕсли
|
||
ОбъектПВХ = СтрокаЭлемента.Ссылка.ПолучитьОбъект();
|
||
ИсходныйТипЗначения = Новый ОписаниеТипов(ОбъектПВХ.ТипЗначения);
|
||
ДобавляемыеТипы = Новый Массив;
|
||
//
|
||
НовыйТипЗначения = Новый ОписаниеТипов(ИсходныйТипЗначения, ДобавляемыеТипы, УсекаемыеТипы.Типы());
|
||
Если НовыйТипЗначения.Типы().Количество() = 0 Тогда
|
||
Сообщить("Автоматическая модификация типа значения элемента """ + ОбъектПВХ + """ невозможна, т.к. он становится пустым",
|
||
СтатусСообщения.Важное);
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ОбъектПВХ.ТипЗначения = НовыйТипЗначения;
|
||
ОбъектПВХ.ОбменДанными.Загрузка = ОтключатьКонтрольЗаписи;
|
||
Попытка
|
||
ОбъектПВХ.Записать();
|
||
Сообщить("Модифицирован тип значения элемента """ + ОбъектПВХ + """", СтатусСообщения.Информация);
|
||
Сообщить(Символы.Таб + "Старый: " + ИсходныйТипЗначения);
|
||
Сообщить(Символы.Таб + " Новый: " + ОбъектПВХ.ТипЗначения);
|
||
Исключение
|
||
Сообщить("Ошибка при коррекции """ + ОбъектПВХ + """: " + ОписаниеОшибки(), СтатусСообщения.Важное);
|
||
КонецПопытки;
|
||
КонецЦикла;
|
||
ЛксОсвободитьИндикаторПроцесса();
|
||
Если ВыполнятьВТранзакции Тогда
|
||
ЗафиксироватьТранзакцию();
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры // ВыполнитьКоррекциюПВХ()
|
||
|
||
// <Описание функции>
|
||
//
|
||
// Параметры:
|
||
// <Параметр1> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>;
|
||
// <Параметр2> – <Тип.Вид> – <описание параметра>
|
||
// <продолжение описания параметра>.
|
||
//
|
||
// Возвращаемое значение:
|
||
// – <Тип.Вид> – <описание значения>
|
||
// <продолжение описания значения>;
|
||
// <Значение2> – <Тип.Вид> – <описание значения>
|
||
// <продолжение описания значения>.
|
||
//
|
||
Процедура ЗаполнитьПоРазницеМеждуКонфигурациями() Экспорт
|
||
|
||
ВременныйФайл = Новый ФАйл(ПолучитьИмяВременногоФайла("CF"));
|
||
Состояние("Выгружаем основную конфигурацию");
|
||
ЗапуститьСистему("DESIGNER /DumpCfg """ + ВременныйФайл.ПолноеИмя + """", Истина);
|
||
//ВременныйФайл = Новый Файл("Z:\ИнтеграцияПроф.cf"); // для отладки
|
||
Если Не ВременныйФайл.Существует() Тогда
|
||
Сообщить("Не удалось выгрузить файл конфигурации. Возможно был занят конфигуратор.", СтатусСообщения.Внимание);
|
||
Возврат;
|
||
КонецЕсли;
|
||
ВременныйКаталог = ПолучитьИмяВременногоФайла();
|
||
СтрокаСоединенияВременнойБазы = "File=""" + ВременныйКаталог + """;";
|
||
|
||
Состояние("Создаем временную базу");
|
||
// Антибаг платформы 8.2.14 http://partners.v8.1c.ru/forum/thread.jsp?id=952390#952390
|
||
//ЗапуститьСистему("CREATEINFOBASE " + СтрокаСоединенияВременнойБазы + " /UseTemplate " + ВременныйФайл.ПолноеИмя, Истина);
|
||
СтрокаКоманды = """" + КаталогПрограммы() + "1cv8.exe"" " + "CREATEINFOBASE File=""" + ВременныйКаталог + """;";
|
||
|
||
// Антибаг платформы http://partners.v8.1c.ru/forum/thread.jsp?id=1076785#1076785
|
||
СтрокаКоманды = СтрокаКоманды + "/";
|
||
|
||
СтрокаКоманды = СтрокаКоманды + " /UseTemplate """ + ВременныйФайл.ПолноеИмя + """";
|
||
ирКэш.Получить().ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения(СтрокаКоманды);
|
||
|
||
КомСоединитель = Новый COMОбъект("v" + ирКэш.Получить().ИДВерсииПлатформы + ".ComConnector");
|
||
КомСоединение = КомСоединитель.Connect(СтрокаСоединенияВременнойБазы);
|
||
СсылочныеТипыМетаданных = Новый Массив;
|
||
СсылочныеТипыМетаданных.Добавить("Справочники");
|
||
СсылочныеТипыМетаданных.Добавить("Документы");
|
||
СсылочныеТипыМетаданных.Добавить("ПланыВидовХарактеристик");
|
||
СсылочныеТипыМетаданных.Добавить("Перечисления");
|
||
СсылочныеТипыМетаданных.Добавить("ПланыВидовХарактеристик");
|
||
СсылочныеТипыМетаданных.Добавить("ПланыСчетов");
|
||
СсылочныеТипыМетаданных.Добавить("ПланыОбмена");
|
||
СсылочныеТипыМетаданных.Добавить("Задачи");
|
||
СсылочныеТипыМетаданных.Добавить("БизнесПроцессы");
|
||
МассивУдаленныхТипов = Новый Массив();
|
||
НовыеМетаданные = КомСоединение.Метаданные;
|
||
Индикатор = ЛксПолучитьИндикаторПроцесса(СсылочныеТипыМетаданных.Количество());
|
||
Для Каждого ИмяКоллекции Из СсылочныеТипыМетаданных Цикл
|
||
ЛксОбработатьИндикатор(Индикатор);
|
||
КоллекцияТекущая = Метаданные[ИмяКоллекции];
|
||
КоллекцияНовая = НовыеМетаданные[ИмяКоллекции];
|
||
Для Каждого Метаобъект Из КоллекцияТекущая Цикл
|
||
Если КоллекцияНовая.Найти(Метаобъект.Имя) = Неопределено Тогда
|
||
МассивУдаленныхТипов.Добавить(Тип(СтрЗаменить(Метаобъект.ПолноеИмя(), ".", "Ссылка.")));
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
ЛксОсвободитьИндикаторПроцесса();
|
||
КомСоединитель = Неопределено;
|
||
КомСоединение = Неопределено;
|
||
НовыеМетаданные = Неопределено;
|
||
КоллекцияНовая = Неопределено;
|
||
УсекаемыеТипы = Новый ОписаниеТипов(МассивУдаленныхТипов);
|
||
УдалитьФайлы(ВременныйФайл.ПолноеИмя);
|
||
УдалитьФайлы(ВременныйКаталог);
|
||
|
||
КонецПроцедуры // ЗаполнитьПоРазницеМеждуКонфигурациями()
|
||
|
||
мЗапрос = Новый Запрос;
|
||
ЗаписьНаСервере = ирНеглобальный.ПолучитьРежимЗаписиНаСервереПоУмолчаниюЛкс();
|
||
#КонецЕсли
|