211 lines
12 KiB
Plaintext
211 lines
12 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// Copyright (c) 2021, ООО 1С-Софт
|
||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||
// Текст лицензии доступен по ссылке:
|
||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
||
// Заполняет массив типов, для которых при выгрузке необходимо использовать аннотацию
|
||
// ссылок в файлах выгрузки.
|
||
//
|
||
// Параметры:
|
||
// Типы - Массив из ОбъектМетаданных - объекты метаданных.
|
||
//
|
||
Процедура ПриЗаполненииТиповТребующихАннотациюСсылокПриВыгрузке(Типы) Экспорт
|
||
|
||
Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл
|
||
|
||
Типы.Добавить(ПланОбмена);
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Для служебного использования.
|
||
// Параметры:
|
||
// ТаблицаОбработчиков - см. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных.ТаблицаОбработчиков
|
||
//
|
||
Процедура ПриРегистрацииОбработчиковВыгрузкиДанных(ТаблицаОбработчиков) Экспорт
|
||
|
||
Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл
|
||
|
||
НовыйОбработчик = ТаблицаОбработчиков.Добавить();
|
||
НовыйОбработчик.ОбъектМетаданных = ПланОбмена;
|
||
НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаУзловПлановОбменов;
|
||
НовыйОбработчик.ПередВыгрузкойОбъекта = Истина;
|
||
НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
|
||
|
||
НовыйОбработчик = ТаблицаОбработчиков.Добавить();
|
||
НовыйОбработчик.ОбъектМетаданных = ПланОбмена;
|
||
НовыйОбработчик.Обработчик = ВыгрузкаЗагрузкаУзловПлановОбменов;
|
||
НовыйОбработчик.ПослеВыгрузкиОбъекта = Истина;
|
||
НовыйОбработчик.Версия = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ВерсияОбработчиков1_0_0_1();
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Для служебного использования.
|
||
//
|
||
Процедура ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ) Экспорт
|
||
|
||
НовыеЗначенияРазделителей = Новый Структура;
|
||
НовыеЗначенияРазделителей.Вставить(РаботаВМоделиСервиса.РазделительОсновныхДанных(), 0);
|
||
НовыеЗначенияРазделителей.Вставить(РаботаВМоделиСервиса.РазделительВспомогательныхДанных(), 0);
|
||
|
||
ЗаполнитьЗначенияСвойств(Объект, НовыеЗначенияРазделителей);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Для служебного использования.
|
||
//
|
||
Процедура ПослеВыгрузкиОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты) Экспорт
|
||
|
||
МетаданныеОбъекта = Объект.Метаданные(); // ОбъектМетаданных
|
||
|
||
Если ОбщегоНазначенияБТС.ЭтоПланОбмена(МетаданныеОбъекта) Тогда
|
||
|
||
МенеджерВыгрузкиОбъекта.ТребуетсяПересоздатьСсылкуПриЗагрузке(Объект.Ссылка);
|
||
|
||
Иначе
|
||
|
||
ВызватьИсключение СтрШаблон(
|
||
НСтр("ru = 'Объект метаданных %1 не может быть обработан обработчиком
|
||
|ВыгрузкаЗагрузкаУзловПлановОбменов.ПослеВыгрузкиОбъекта()'", Метаданные.ОсновнойЯзык.КодЯзыка),
|
||
МетаданныеОбъекта.ПолноеИмя());
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
Функция ВыгружатьЗарегистрированныеИзмененияДляУзловПланаОбмена(Контейнер) Экспорт
|
||
|
||
ПараметрыВыгрузки = Контейнер.ПараметрыВыгрузки();
|
||
|
||
ВыгружатьЗарегистрированныеИзмененияДляУзловПланаОбмена = Ложь;
|
||
|
||
Возврат ПараметрыВыгрузки.Свойство("ВыгружатьЗарегистрированныеИзмененияДляУзловПланаОбмена", ВыгружатьЗарегистрированныеИзмененияДляУзловПланаОбмена) И ВыгружатьЗарегистрированныеИзмененияДляУзловПланаОбмена = Истина;
|
||
|
||
КонецФункции
|
||
|
||
Функция ТипыВыгружаемыхПлановОбменаОбъектаМетаданных(Контейнер, ОбъектМетаданных)
|
||
|
||
ТипыВыгружаемыхПлановОбмена = Новый Массив;
|
||
|
||
ВыгружаемыеТипы = Контейнер.ПараметрыВыгрузки().ВыгружаемыеТипы;
|
||
ИсключаемыеТипы = ВыгрузкаЗагрузкаДанныхСлужебныйСобытия.ПолучитьТипыИсключаемыеИзВыгрузкиЗагрузки();
|
||
|
||
Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл
|
||
|
||
Если ВыгружаемыеТипы.Найти(ПланОбмена) <> Неопределено
|
||
И ИсключаемыеТипы.Найти(ПланОбмена) = Неопределено
|
||
И ПланОбмена.Состав.Найти(ОбъектМетаданных) <> Неопределено Тогда
|
||
|
||
ТипыВыгружаемыхПлановОбмена.Добавить(Тип("ПланОбменаСсылка." + ПланОбмена.Имя));
|
||
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат ТипыВыгружаемыхПлановОбмена;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ВыгрузитьИзменения(Контейнер, ОбъектМетаданных, Сериализатор) Экспорт
|
||
|
||
Если НЕ ВыгружатьЗарегистрированныеИзмененияДляУзловПланаОбмена(Контейнер) Тогда
|
||
|
||
Возврат;
|
||
|
||
КонецЕсли;
|
||
|
||
ТипыВыгружаемыхПлановОбмена = ТипыВыгружаемыхПлановОбменаОбъектаМетаданных(Контейнер, ОбъектМетаданных);
|
||
|
||
Если ТипыВыгружаемыхПлановОбмена.Количество() = 0 Тогда
|
||
|
||
Возврат;
|
||
|
||
КонецЕсли;
|
||
|
||
ПотокЗаписи = НачатьЗаписьФайла(Контейнер, ОбъектМетаданных, Сериализатор);
|
||
|
||
Запрос = Новый Запрос(
|
||
"ВЫБРАТЬ
|
||
| *
|
||
|ИЗ
|
||
| #ТаблицаИзменения КАК ТаблицаИзменения
|
||
|ГДЕ
|
||
| ТИПЗНАЧЕНИЯ(ТаблицаИзменения.Узел) В (&ТипыВыгружаемыхПлановОбмена)");
|
||
|
||
Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ТаблицаИзменения", СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".Перерасчет.", ".") + ".Изменения");
|
||
Запрос.УстановитьПараметр("ТипыВыгружаемыхПлановОбмена", ТипыВыгружаемыхПлановОбмена);
|
||
|
||
РезультатЗапроса = Запрос.Выполнить();
|
||
|
||
ЗаписьИзменения = Новый Структура;
|
||
|
||
Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл
|
||
|
||
ЗаписьИзменения.Вставить(Колонка.Имя);
|
||
|
||
КонецЦикла;
|
||
|
||
Выборка = РезультатЗапроса.Выбрать();
|
||
|
||
Пока Выборка.Следующий() Цикл
|
||
|
||
ЗаполнитьЗначенияСвойств(ЗаписьИзменения, Выборка);
|
||
ПотокЗаписи.ЗаписатьОбъектДанныхИнформационнойБазы(ЗаписьИзменения, Новый Массив);
|
||
|
||
КонецЦикла;
|
||
|
||
ЗавершитьЗаписьФайла(Контейнер, ОбъектМетаданных, ПотокЗаписи);
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция НачатьЗаписьФайла(Контейнер, ОбъектМетаданных, Сериализатор)
|
||
|
||
ИмяФайла = Контейнер.СоздатьФайл(
|
||
ВыгрузкаЗагрузкаДанныхСлужебный.InfobaseData(), ОбъектМетаданных.ПолноеИмя());
|
||
|
||
ПотокЗаписи = Обработки.ВыгрузкаЗагрузкаДанныхПотокЗаписиДанныхИнформационнойБазы.Создать();
|
||
ПотокЗаписи.ОткрытьФайл(ИмяФайла, Сериализатор, ВыгрузкаЗагрузкаДанныхСлужебный.InfobaseDataChanges());
|
||
|
||
Возврат ПотокЗаписи;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗавершитьЗаписьФайла(Контейнер, ОбъектМетаданных, ПотокЗаписи)
|
||
|
||
ПотокЗаписи.Закрыть();
|
||
|
||
КоличествоОбъектов = ПотокЗаписи.КоличествоОбъектов();
|
||
|
||
Если КоличествоОбъектов = 0 Тогда
|
||
|
||
Контейнер.ИсключитьФайл(ПотокЗаписи.ИмяФайла());
|
||
Иначе
|
||
|
||
Контейнер.УстановитьКоличествоОбъектов(ПотокЗаписи.ИмяФайла(), КоличествоОбъектов);
|
||
|
||
КонецЕсли;
|
||
|
||
ЗаписьЖурналаРегистрации(
|
||
НСтр("ru = 'ВыгрузкаЗагрузкаДанных.ВыгрузкаИзмененийОбъектаМетаданных'", ОбщегоНазначения.КодОсновногоЯзыка()),
|
||
УровеньЖурналаРегистрации.Информация,
|
||
ОбъектМетаданных,
|
||
,
|
||
СтрШаблон(НСтр("ru = 'Окончание выгрузки изменений объекта метаданных: %1
|
||
|Выгружено объектов: %2'", ОбщегоНазначения.КодОсновногоЯзыка()),
|
||
ОбъектМетаданных.ПолноеИмя(), КоличествоОбъектов));
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти |