Проект

Общее

Профиль

1С Конвертация данных 2.0

Конвертация данных. ПКО ПослеЗагрузкиОбъекта не срабатывает

Обработчики вызываются из правил в конфигурации приемника. Нужно в базу-приемник загрузить правила конвертации объектов из архива содержащего файл CorrespondentExchangeRules.XML.

Дополнительно (не проверено)
Проверить какой стоит режим совместимости в правилах.
1. если 2.0 и ниже тогда код обработчиков после загрузки в конфигурации в соотв. обработках (см. модуль менеджера плана обмена там прописано название обработок).
2. если ничего не указано то код обработчиков после загрузки вызывается из правил, которые находятся в конф. приемнике - правила конфигурации корреспондента. Т.е. загружать надо не только в конфигурацию источник, но и в конф. приемник в правила конвертации корреспондента.
П.С после загрузки правил не забываем перезапускать 1с.

Передача документа со строками с уже ранее загруженной номенклатурой (без создания новой)

  1. В ПКС для номенклатуры в обработчике "ПередВыгрузкойСвойства" указываем:
    ВыгрузитьОбъект = ложь; //будет выгружена только ссылка
    
  2. В ПКО в обработчике ПослеЗагрузкиОбъекта проверяем на корректную ссылку
    Если не Отказ Тогда
    //756
        МассивСтрок = Новый массив;
        Для Каждого СтрокаТЧ из Объект.Товары Цикл
            Если не ЗначениеЗаполнено(СтрокаТЧ.Номенклатура.ВерсияДанных) Тогда // проверка на корректную ссылку!
                МассивСтрок.Добавить(СтрокаТЧ);
            КонецЕсли;
        КонецЦикла;
    
        Для Каждого СтрокаДляУдаления из МассивСтрок Цикл
            Объект.Товары.Удалить(СтрокаДляУдаления);
        КонецЦикла;
    КонецЕсли;
    

v8: Инкрементальный экспорт с ипользованием Конвертации Данных v8

Описано, как используя конфигурацию "Конвертация Данных" (платформа v8) настроить выгрузку лишь тех данных, которые были изменены со времени последней выгрузки. Автор статьи: Negro | Редакторы: Макаров
Последняя редакция №7 от 23.05.08 | История
URL: http://kb.mista.ru/article.php?id=356

Ключевые слова: конвертация, обмен, данные, выгрузка, экспорт, измененные

Бывают задачи, когда нужно наладить обмен данными между конфигурациями разной структуры. УРБД здесь не поможет. Единственно приемлемый по оперативности вариант - использование конфигурации "Конвертация данных" платформы 8.0. Но, увы, выгрузка данных не учитывает, изменялся ли данный объект с момента последней выгрузки или - нет. Выгружает все данные за жестко назначенный период. Иногда это очень большой массив. Хотелось сделать выгрузку инкрементальной. Оказывается это возможно. Нужно лишь сделать следующее:

1. Создать в конфигурации План обмена (для рассматриваемого примера - ПланОбмена1).
2. В режиме 1С:Предприятия завести в план обмена новый узел (для примера узел с кодом "00001").
3. В правиле выгрузки данных (для примера - для документа Документ1) в качестве способа выгрузки выставить значение "Произвольный алгоритм".
4. В поле обработчика события "Перед обработкой" вписать код наподобие следующего:

Узел = ПланыОбмена.ПланОбмена1.НайтиПоКоду("00001");
Выборка = ПланыОбмена.ВыбратьИзменения(Узел, 1);
ВыборкаДанных = Новый Массив;
Пока Выборка.Следующий() Цикл
    Данные = Выборка.Получить();
    Если Данные.Метаданные().Имя  = "Документ1" Тогда
        ВыборкаДанных.Добавить(Данные.Ссылка);
        ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные.Ссылка);
    КонецЕсли;
КонецЦикла;

И, собственно, все. На вашей (вернее - моей :) совести остается лишь слепая уверенность в том, что пакет выгруженных данных обязательно дойдет до адресата и без ошибок загрузится в базу. Именно поэтому я спокойненько удаляю сведения о выгружаемом объекте из регистра изменений. Можно конечно сделать пакет подтверждения импорта, но это уже другая история... Т.о. описанное решение является гибридным (конвертация данных + использование планов обмена).

А лучше так:

В конвертации, в обработчике события "Перед выгрузкой данных" :

Узел = ПланыОбмена.ВыгрузкаВПроизводство.НайтиПоКоду("00001");
ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Узел, 1);
Выборка=Новый Массив;

Пока ВыборкаИзменений.Следующий() Цикл
    Данные=ВыборкаИзменений.Получить();
    Выборка.Добавить(Данные);
КонецЦикла;    

Параметры.Вставить("Выборка",Выборка);
Параметры.Вставить("Узел",Узел);

Выборку изменений перевожу в масив, потому что с выборкой почему-то не работает, а с масивом нет проблем.

В поле обработчика события "Перед обработкой":

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