Каталог решений - Перенос движений документа. КД 3.0

Перенос движений документа. КД 3.0

Перенос движений документа. КД 3.0

В наличии

Разбираемся с возможностями переноса движений документа без переноса табличных частей с помощью КД 3.0.

Категория:

Описание

Итак, у клиента возникла задача переноса данных по начислениям из ЗУП в управленческую конфигурацию в некий регистр для дальнейшего использования в отчетах по затратам. Вариант с независимым регистром сведений отпал по следующим причинам: в источнике данные регистрируются динамически каждый день и нам нужно видеть детально все изменения, а также нужно  оперативно загружать только изменения, а не весь объем данных за некий период. Остановились на создании оборотного регистра накопления и некоторого документа заглушки в качестве регистратора.

Для интеграции был выбран механизм конвертации данных 3.0 как самый актуальный, кроме того он используется в типовых обменах и нет причин изобретать велосипед. Как переносить документы с табличными частями и их допроведением после загрузки описано в курсах по кд 3.0, что и было реализовано. То есть в документе заглушке создается табличная часть колонки которой повторяют поля регистра. Пишется примитивная процедура проведения и вопрос решен. Настраиваем типовой механизм на обмен по расписанию и наслаждаемся.

И все бы хорошо, но данных много, база и так довольно тяжелая, а мы ей добавили еще одну немаленькую таблицу (табличная часть документа). Ручной ввод и исправление документов в конечной базе не предполагается. По факту это просто дублирующиеся данные. Нам нужен просто регистр.

Встал вопрос: как передать движения документа сразу минуя табличную часть? Немного порывшись в возможностях механизма конвертации нашел такое решение:

1. На стороне базы источника создаем ПКО (правило конвертации объекта) для всех справочников, участвующих в регистре. Для перечислений создаем ПКПД.

2. В ПКО документа в обработчике "При отправке" пишем:

ДанныеИБ.Движения.РегистрИсточник.Прочитать();
Таб = ДанныеИБ.Движения.РегистрИсточник.Выгрузить();
ДанныеXDTO.Вставить("ДвиженияДокумента", Таб);

3. На стороне конечной базы тоже настраиваем ПКО для справочников.

4. В ПКО документа в обработчике "При конвертации данных XDTO" пишем:

МассивСтрок = Новый Массив;
Если ДанныеXDTO.Свойство("ДвиженияДокумента") И ЗначениеЗаполнено(ДанныеXDTO.ДвиженияДокумента) Тогда
	Для Каждого Строка Из ДанныеXDTO.ДвиженияДокумента Цикл
		СтруктураДанныхСтроки = Новый Структура;
		СтруктураДанныхСтроки.Вставить("Организация", Строка.Организация);
		СтруктураДанныхСтроки.Вставить("Проект", Строка.Проект);
        ...
		СтруктураДанныхСтроки.Вставить("Сумма", Строка.Сумма);
		МассивСтрок.Добавить(СтруктураДанныхСтроки);
	КонецЦикла;	
КонецЕсли;	
Если МассивСтрок.Количество() > 0 Тогда
	ПолученныеДанные.ДополнительныеСвойства.Вставить("ДвиженияДокумента", МассивСтрок);
КонецЕсли;

5. В ПКО документа в обработчике "Перед записью полученных данных" пишем:

Для Каждого Стр Из ПолученныеДанные.ДвиженияДокумента Цикл
	СтрДвиж = ПолученныеДанные.Движения.НашРегистр.Добавить();
	ЗаполнитьЗначенияСвойств(СтрДвиж, Стр);
	СтрДвиж.Период = ПолученныеДанные.Дата;
КонецЦикла;	       
ПолученныеДанные.Движения.НашРегистр.Записывать = Истина;
Если ДанныеИБ <> Неопределено Тогда
	ДанныеИБ.Движения.НашРегистр.Загрузить(ПолученныеДанные.Движения.НашРегистр.Выгрузить());
	ДанныеИБ.Движения.НашРегистр.Записывать = Истина;
КонецЕсли;	

То есть мы передаем набор движений через дополнительную структуру данных. При загрузке считываем ее в "ДополнительныеСвойства" так же как в случае с табличной частью. А потом пишем напрямую в движения нового или найденного документа.

Спасибо за внимание. Конструктивная критика приветствуется)

has been added to your cart:
Оформление заказа