/////////////////////////////////////////////////////////////////////////////////////////////////////// // 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'", ОбщегоНазначения.КодОсновногоЯзыка()), ОбъектМетаданных.ПолноеИмя(), КоличествоОбъектов)); КонецПроцедуры #КонецОбласти