В копии базы до изменений:
- Создаём внешнюю обработку и собираем в табличную часть нужные документы. Пусть в этой ТЧ будет одна колонка "Документ" с типом "ДокументСсылка". Как собрать документы - статья не об этом.
- Добавим кнопку "Выгрузить", напишем обработчик:
-
&НаСервере Процедура ВыгрузитьДокиНаСервере() Данные = Новый ТаблицаЗначений; Данные.Колонки.Добавить("УИД"); Данные.Колонки.Добавить("ИмяОбъекта"); Данные.Колонки.Добавить("Движения"); Для каждого Стр из Объект.Документы Цикл ДокОбъект = Стр.Документ.ПолучитьОбъект(); СтрДанные = Данные.Добавить(); СтрДанные.УИД = Стр.Документ.УникальныйИдентификатор(); СтрДанные.ИмяОбъекта = ДокОбъект.Метаданные().Имя; ДвиженияДанные = Новый Структура(); Для каждого Движ из ДокОбъект.Движения Цикл ИмяРегистра = Движ.Метаданные().Имя; //Если ИмяРегистра = "ОборотыПлановыхОпераций" Тогда //Если нужно выгрузить движения по определенным регистрам Движ.Прочитать(); ДвижТЗ = Движ.Выгрузить(); ДвиженияДанные.Вставить(ИмяРегистра, ЗначениеВСтрокуВнутр(ДвижТЗ)); //КонецЕсли; КонецЦикла; КонецЦикла; СтрДанные.Движения = ДвиженияДанные; СериализацияДанных = ЗначениеВСтрокуВнутр(Данные); Файл = Новый ЗаписьТекста("C:\Выгрузка.txt"); Файл.Записать(СериализацияДанных); Файл.Закрыть(); КонецПроцедуры
- Движения выгрузили. Теперь перейдем в рабочую базу и создадим в нашей обработке новую кнопку "Загрузить", напишем обработчик:
&НаСервере
Процедура ЗагрузитьДокиНаСервере()
Текст = Новый ЧтениеТекста;
Текст.Открыть("C:\Выгрузка.txt");
СериализацияДанных = Текст.Прочитать();
Текст.Закрыть();
Данные = ЗначениеИзСтрокиВнутр(СериализацияДанных);
Для каждого Стр из Данные Цикл
ДокОбъект = Документы[Стр.ИмяОбъекта].ПолучитьСсылку(Стр.УИД).ПолучитьОбъект();
Для каждого Движ из ДокОбъект.Движения Цикл
ИмяРегистра = Движ.Метаданные().Имя;
Если Стр.Движения.Свойство(ИмяРегистра) Тогда
ИмпортированныеДвиженияТЗ = ЗначениеИзСтрокиВнутр(Стр.Движения[ИмяРегистра]);
Движ.Загрузить(ИмпортированныеДвиженияТЗ);
Движ.ОбменДанными.Загрузка = Истина;
//ЗаменитьДоговорВПроводках(Движ, ДокОбъект.ДоговорКонтрагента); //Здесь можем подменить в движениях нужные значения
Движ.Записать();
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
P.S. Если нужно подменить при загрузке движений некоторые значения, то напишем процедуру "ЗаменитьДоговорВПроводках". В моем случае я подменял договор на тот, который указан в документе. При этом процедура сама ищет, где указан договор, к определенным реквизитам не привязываюсь:
Процедура ЗаменитьДоговорВПроводках(Движения, Договор)
МетаданныеНабораДвижений = Движения.Метаданные();
ТипДоговор = Тип("СправочникСсылка.ДоговорыКонтрагентов");
Для каждого СтрДвиж из Движения Цикл
Для каждого Кол из МетаданныеНабораДвижений.Измерения Цикл
ЗначениеПоля = СтрДвиж[Кол.Имя];
Если ЗначениеЗаполнено(ЗначениеПоля) И ТипЗнч(ЗначениеПоля) = ТипДоговор Тогда
СтрДвиж[Кол.Имя] = Договор;
КонецЕсли;
КонецЦикла;
Для каждого Кол из МетаданныеНабораДвижений.Ресурсы Цикл
ЗначениеПоля = СтрДвиж[Кол.Имя];
Если ЗначениеЗаполнено(ЗначениеПоля) И ТипЗнч(ЗначениеПоля) = ТипДоговор Тогда
СтрДвиж[Кол.Имя] = Договор;
КонецЕсли;
КонецЦикла;
Для каждого Кол из МетаданныеНабораДвижений.Реквизиты Цикл
ЗначениеПоля = СтрДвиж[Кол.Имя];
Если ЗначениеЗаполнено(ЗначениеПоля) И ТипЗнч(ЗначениеПоля) = ТипДоговор Тогда
СтрДвиж[Кол.Имя] = Договор;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры