1С Конвертация данных 2 » История » Версия 3
Всеволод Дорофеев, 20.03.2019 06:42
| 1 | 1 | Всеволод Дорофеев | h1. 1С Конвертация данных 2.0 |
|---|---|---|---|
| 2 | 1 | Всеволод Дорофеев | |
| 3 | 1 | Всеволод Дорофеев | h3. Конвертация данных. ПКО ПослеЗагрузкиОбъекта не срабатывает |
| 4 | 1 | Всеволод Дорофеев | |
| 5 | 1 | Всеволод Дорофеев | Обработчики вызываются из правил в конфигурации приемника. Нужно в базу-приемник загрузить правила конвертации объектов из архива содержащего файл CorrespondentExchangeRules.XML(правила конфигурации корреспондента). |
| 6 | 1 | Всеволод Дорофеев | |
| 7 | 1 | Всеволод Дорофеев | Дополнительно (не проверено) |
| 8 | 1 | Всеволод Дорофеев | Проверить какой стоит режим совместимости в правилах. |
| 9 | 1 | Всеволод Дорофеев | 1. если 2.0 и ниже тогда код обработчиков после загрузки в конфигурации в соотв. обработках (см. модуль менеджера плана обмена там прописано название обработок). |
| 10 | 1 | Всеволод Дорофеев | 2. если ничего не указано то код обработчиков после загрузки вызывается из правил, которые находятся в конф. приемнике - правила конфигурации корреспондента. Т.е. загружать надо не только в конфигурацию источник, но и в конф. приемник в правила конвертации корреспондента. |
| 11 | 1 | Всеволод Дорофеев | П.С после загрузки правил не забываем перезапускать 1с. |
| 12 | 2 | Всеволод Дорофеев | |
| 13 | 2 | Всеволод Дорофеев | h3. Передача документа со строками с уже ранее загруженной номенклатурой (без создания новой) |
| 14 | 2 | Всеволод Дорофеев | |
| 15 | 2 | Всеволод Дорофеев | # В ПКС для номенклатуры в обработчике "ПередВыгрузкойСвойства" указываем: |
| 16 | 2 | Всеволод Дорофеев | <pre> |
| 17 | 2 | Всеволод Дорофеев | ВыгрузитьОбъект = ложь; //будет выгружена только ссылка |
| 18 | 2 | Всеволод Дорофеев | </pre> |
| 19 | 2 | Всеволод Дорофеев | # В ПКО в обработчике ПослеЗагрузкиОбъекта проверяем на корректную ссылку |
| 20 | 2 | Всеволод Дорофеев | <pre> |
| 21 | 2 | Всеволод Дорофеев | Если не Отказ Тогда |
| 22 | 2 | Всеволод Дорофеев | //756 |
| 23 | 2 | Всеволод Дорофеев | МассивСтрок = Новый массив; |
| 24 | 2 | Всеволод Дорофеев | Для Каждого СтрокаТЧ из Объект.Товары Цикл |
| 25 | 2 | Всеволод Дорофеев | Если не ЗначениеЗаполнено(СтрокаТЧ.Номенклатура.ВерсияДанных) Тогда // проверка на корректную ссылку! |
| 26 | 2 | Всеволод Дорофеев | МассивСтрок.Добавить(СтрокаТЧ); |
| 27 | 2 | Всеволод Дорофеев | КонецЕсли; |
| 28 | 2 | Всеволод Дорофеев | КонецЦикла; |
| 29 | 2 | Всеволод Дорофеев | |
| 30 | 2 | Всеволод Дорофеев | Для Каждого СтрокаДляУдаления из МассивСтрок Цикл |
| 31 | 2 | Всеволод Дорофеев | Объект.Товары.Удалить(СтрокаДляУдаления); |
| 32 | 2 | Всеволод Дорофеев | КонецЦикла; |
| 33 | 2 | Всеволод Дорофеев | КонецЕсли; |
| 34 | 2 | Всеволод Дорофеев | </pre> |
| 35 | 3 | Всеволод Дорофеев | |
| 36 | 3 | Всеволод Дорофеев | |
| 37 | 3 | Всеволод Дорофеев | h3. v8: Инкрементальный экспорт с ипользованием Конвертации Данных v8 |
| 38 | 3 | Всеволод Дорофеев | |
| 39 | 3 | Всеволод Дорофеев | Описано, как используя конфигурацию "Конвертация Данных" (платформа v8) настроить выгрузку лишь тех данных, которые были изменены со времени последней выгрузки. Автор статьи: Negro | Редакторы: Макаров |
| 40 | 3 | Всеволод Дорофеев | Последняя редакция №7 от 23.05.08 | История |
| 41 | 3 | Всеволод Дорофеев | URL: http://kb.mista.ru/article.php?id=356 |
| 42 | 3 | Всеволод Дорофеев | |
| 43 | 3 | Всеволод Дорофеев | Ключевые слова: конвертация, обмен, данные, выгрузка, экспорт, измененные |
| 44 | 3 | Всеволод Дорофеев | |
| 45 | 3 | Всеволод Дорофеев | Бывают задачи, когда нужно наладить обмен данными между конфигурациями разной структуры. УРБД здесь не поможет. Единственно приемлемый по оперативности вариант - использование конфигурации "Конвертация данных" платформы 8.0. Но, увы, выгрузка данных не учитывает, изменялся ли данный объект с момента последней выгрузки или - нет. Выгружает все данные за жестко назначенный период. Иногда это очень большой массив. Хотелось сделать выгрузку инкрементальной. Оказывается это возможно. Нужно лишь сделать следующее: |
| 46 | 3 | Всеволод Дорофеев | |
| 47 | 3 | Всеволод Дорофеев | 1. Создать в конфигурации План обмена (для рассматриваемого примера - ПланОбмена1). |
| 48 | 3 | Всеволод Дорофеев | 2. В режиме 1С:Предприятия завести в план обмена новый узел (для примера узел с кодом "00001"). |
| 49 | 3 | Всеволод Дорофеев | 3. В правиле выгрузки данных (для примера - для документа Документ1) в качестве способа выгрузки выставить значение "Произвольный алгоритм". |
| 50 | 3 | Всеволод Дорофеев | 4. В поле обработчика события "Перед обработкой" вписать код наподобие следующего: |
| 51 | 3 | Всеволод Дорофеев | |
| 52 | 3 | Всеволод Дорофеев | <pre> |
| 53 | 3 | Всеволод Дорофеев | Узел = ПланыОбмена.ПланОбмена1.НайтиПоКоду("00001"); |
| 54 | 3 | Всеволод Дорофеев | Выборка = ПланыОбмена.ВыбратьИзменения(Узел, 1); |
| 55 | 3 | Всеволод Дорофеев | ВыборкаДанных = Новый Массив; |
| 56 | 3 | Всеволод Дорофеев | Пока Выборка.Следующий() Цикл |
| 57 | 3 | Всеволод Дорофеев | Данные = Выборка.Получить(); |
| 58 | 3 | Всеволод Дорофеев | Если Данные.Метаданные().Имя = "Документ1" Тогда |
| 59 | 3 | Всеволод Дорофеев | ВыборкаДанных.Добавить(Данные.Ссылка); |
| 60 | 3 | Всеволод Дорофеев | ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные.Ссылка); |
| 61 | 3 | Всеволод Дорофеев | КонецЕсли; |
| 62 | 3 | Всеволод Дорофеев | КонецЦикла; |
| 63 | 3 | Всеволод Дорофеев | </pre> |
| 64 | 3 | Всеволод Дорофеев | |
| 65 | 3 | Всеволод Дорофеев | И, собственно, все. На вашей (вернее - моей :) совести остается лишь слепая уверенность в том, что пакет выгруженных данных обязательно дойдет до адресата и без ошибок загрузится в базу. Именно поэтому я спокойненько удаляю сведения о выгружаемом объекте из регистра изменений. Можно конечно сделать пакет подтверждения импорта, но это уже другая история... Т.о. описанное решение является гибридным (конвертация данных + использование планов обмена). |
| 66 | 3 | Всеволод Дорофеев | |
| 67 | 3 | Всеволод Дорофеев | А лучше так: |
| 68 | 3 | Всеволод Дорофеев | |
| 69 | 3 | Всеволод Дорофеев | В конвертации, в обработчике события "Перед выгрузкой данных" : |
| 70 | 3 | Всеволод Дорофеев | |
| 71 | 3 | Всеволод Дорофеев | <pre> |
| 72 | 3 | Всеволод Дорофеев | Узел = ПланыОбмена.ВыгрузкаВПроизводство.НайтиПоКоду("00001"); |
| 73 | 3 | Всеволод Дорофеев | ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Узел, 1); |
| 74 | 3 | Всеволод Дорофеев | Выборка=Новый Массив; |
| 75 | 3 | Всеволод Дорофеев | |
| 76 | 3 | Всеволод Дорофеев | Пока ВыборкаИзменений.Следующий() Цикл |
| 77 | 3 | Всеволод Дорофеев | Данные=ВыборкаИзменений.Получить(); |
| 78 | 3 | Всеволод Дорофеев | Выборка.Добавить(Данные); |
| 79 | 3 | Всеволод Дорофеев | КонецЦикла; |
| 80 | 3 | Всеволод Дорофеев | |
| 81 | 3 | Всеволод Дорофеев | Параметры.Вставить("Выборка",Выборка); |
| 82 | 3 | Всеволод Дорофеев | Параметры.Вставить("Узел",Узел); |
| 83 | 3 | Всеволод Дорофеев | </pre> |
| 84 | 3 | Всеволод Дорофеев | |
| 85 | 3 | Всеволод Дорофеев | |
| 86 | 3 | Всеволод Дорофеев | |
| 87 | 3 | Всеволод Дорофеев | Выборку изменений перевожу в масив, потому что с выборкой почему-то не работает, а с масивом нет проблем. |
| 88 | 3 | Всеволод Дорофеев | |
| 89 | 3 | Всеволод Дорофеев | В поле обработчика события "Перед обработкой": |
| 90 | 3 | Всеволод Дорофеев | |
| 91 | 3 | Всеволод Дорофеев | <pre> |
| 92 | 3 | Всеволод Дорофеев | Выборка=Параметры.Выборка; |
| 93 | 3 | Всеволод Дорофеев | Узел=Параметры.Узел; |
| 94 | 3 | Всеволод Дорофеев | ВыборкаДанных = Новый Массив; |
| 95 | 3 | Всеволод Дорофеев | Для Каждого ТекВыборка из Выборка Цикл |
| 96 | 3 | Всеволод Дорофеев | Данные = ТекВыборка; |
| 97 | 3 | Всеволод Дорофеев | Если Данные.Метаданные().Имя = "Документ1" Тогда |
| 98 | 3 | Всеволод Дорофеев | ВыборкаДанных.Добавить(Данные.Ссылка); |
| 99 | 3 | Всеволод Дорофеев | ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные.Ссылка); |
| 100 | 3 | Всеволод Дорофеев | КонецЕсли; |
| 101 | 3 | Всеволод Дорофеев | КонецЦикла; |
| 102 | 3 | Всеволод Дорофеев | </pre> |