Конвертация данных 2.* + Планы обмена - метод передачи в сообщении удаления независимых регистров

28.08.17

Интеграция - Перенос данных 1C

Описывается метод передачи в сообщениях информации для удаления независимых регистров в узлах приемниках при использовании планов обменов в связке с конвертацией данных и обработкой "Универсальный обмен данными в формате XML" из поставки "Конвертация данных 2.x".

Механизм "конвертация данных версии 2.x" с использованием обработки "Универсальный обмен данными в формате XML" не предоставляет "из коробки"  возможность передавать в сообщениях информации о непосредственном удалении объектов или записей регистров, сообщения типа "Удаление объетка" и удаления из независимого регистра просто пропускаются. В случае ссылочных объектов, проблем обычно не возникает, так как информация о пометке на удаление чаще всего уже передается в другой узел, до того как объект будет удален. Но когда удаляется независимый регистр, в узел приемник информация об этом никак не попадает.

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

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

1. В правило конвертации объекта нашего регистра я добавил свойство передаваемое в  параметр "ЭтоУдаление" :

И неболшой код проверяющий есть ли входящие данные и такое свойство в них.

 

2. В коде перед вызовом метода "ОбработкаОбмена.ВыполнитьВыгрузку()" я добавил строчку кода:

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

 Без этот я никак не смог решить эту задачу .

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


3. В правила обмена добавляется обработчик "Перед выгрузкой данных", который выбирает из узла регистрации с удалением интересующих нас записей:

МетаРег = Метаданные.РегистрыСведений.НАШ_РЕГИСТР;
Узел =  Параметры.УзелПолучатель;
Выборка = ПланыОбмена.ВыбратьИзменения(Узел,Узел.НомерОтправленного,МетаРег);

УдаляемыеЗаписи = Новый ТаблицаЗначений;
УдаляемыеЗаписи.Колонки.Добавить("Активность");
УдаляемыеЗаписи.Колонки.Добавить("Период",Новый ОписаниеТипов("Дата"));    

Для Каждого Рекв Из МетаРег.Измерения Цикл
    УдаляемыеЗаписи.Колонки.Добавить(Рекв.Имя,Рекв.Тип);
КонецЦикла;
Для Каждого Рекв Из МетаРег.Ресурсы Цикл
    УдаляемыеЗаписи.Колонки.Добавить(Рекв.Имя,Рекв.Тип);
КонецЦикла;
Для Каждого Рекв Из МетаРег.Реквизиты Цикл
    УдаляемыеЗаписи.Колонки.Добавить(Рекв.Имя,Рекв.Тип);
КонецЦикла;

УдаляемаяЗапись = УдаляемыеЗаписи.Добавить();
УдаляемаяЗапись.Активность = Ложь;
Параметры = Новый СТруктура("Удаление",Истина);
Пока Выборка.Следующий() Цикл
    Запись = Выборка.Получить();                
    
    Для Каждого ЭлОтб Из Запись.Отбор Цикл
        Имя = ЭлОтб.Имя;
        УдаляемаяЗапись[Имя] = ЭлОтб.Значение;
    КОнецЦикла;  

    Запись.Прочитать();
    Если Запись.Количество()=0 Тогда // Это удаление
        ВыгрузитьПоПравилу(УдаляемаяЗапись,,Параметры,,"НАШ_РЕГИСТР");
    КОнецЕсли;
КонецЦикла;   

4. В ПКО нашего регистра добавил обработчик "После загрузки"

Если ПараметрыОбъекта <> Undefined Тогда
    ЭтоУдаление = ПараметрыОбъекта.ПОлучить("ЭтоУдаление");
    Если ЭтоУдаление=Истина Тогда
        Отказ = Истина;
        НЗ = РегистрыСведений.ТоварыВАкции.СоздатьМенеджерЗаписи();
        ЗаполнитьЗначенияСвойств(НЗ,Объект);        
        НЗ.Прочитать();        
        Если НЗ.Выбран() Тогда
            НЗ.Удалить();
        КонецЕсли;    
    КонецЕсли;        
КонецЕсли;    

и НАШ_РЕГИСТР успешно начал удалятся в узле приемнике вместе с удалением в узле источнике.

Данный метод после небольшой доработки можно применить не только к независимым регистрам, но и к любым другим объектам конфигурации.

Вступайте в нашу телеграмм-группу Инфостарт

Конвертация данных планы обмена удаление независимые регистры

См. также

Перенос данных 1C Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

61356 руб.

04.08.2015    182855    417    297    

434

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

52967 руб.

25.02.2015    180130    343    281    

406

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27180 руб.

12.06.2017    156495    927    306    

473

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.261.x) и БП 3.0 (3.0.189.x). Правила подходят для версии ПРОФ и КОРП.

38000 руб.

15.12.2021    31674    229    61    

173

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.25.x).

38000 руб.

23.07.2020    64245    303    81    

243

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

61356 руб.

15.04.2019    81069    218    168    

157

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Перенос данных из ЗУП 3 в ЗУП 3 | из ЗУП 3 в КА 2 | из ЗУП 3 в ERP | Оперативно обновляется при выходе новых релизов 1С | Готовые правила конвертации (КД 2) для перехода с "ЗУП 3" на "УП ред. 3" / "КА, ред. 2" / "ERP, ред. 2" |Переносится нормативно-справочная информация и документы с движениями

58422 руб.

11.01.2021    36727    32    55    

34

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Перенос данных из КА 1.1 в КА 2 | из КА 1.1 в УТ 11 | Воспользовались более 367 компаний! | Переносятся все возможные виды документов, начальных остатков и вся справочная информация из "1С:КА 1.1" в "1С:КА 2.х" / "1С:УТ 11" | Разработан в формате КД 2 (правила конвертации данных) | Фильтр по организациям при выгрузке | Выбор разных алгоритмов выгрузки начальных остатков | Можно проверить перенос до покупки!

61356 руб.

04.12.2015    197744    260    354    

413
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Pervuy 66 28.08.17 14:49 Сейчас в теме
Странно конечно. Когда удаляется набор записей РС то в плане обмена эта запись все равно регистрируется. по полям основного отбора. и при выгрузке выгружается пустой набор записей с полями отбора. когда приходит в другую базу то там должен создаваться набор записей по этим полям и записываться. а все мы знаем, что если создать набор записей, установить отборы и записать его. то он затрет все записи в РС по этим отборам. почему у вас такое не происходило трудно сказать. Но в теории должно так работать.
2. rawlik 17 28.08.17 15:12 Сейчас в теме
(1)
Обработка "Универсальный обмен данными в формате XML" пропускает записи удаления и пустые записи регистров, и они не попадают в узел получатель ( в другую базу).
Можно конечно изменить алгоритмы в обработке, но это уже другое решение этой же проблемы.
3. Pervuy 66 28.08.17 15:23 Сейчас в теме
(2)Ясно. Эта обработка на мой взгляд вообще предназначена для одноразового переноса данных, а не для постоянных обменов между базами. Обмены написаны с помощью этой обработки имеют большой недостаток, так как не ходят номера сообщений и нету подтверждения, что отправленные данные все приняты и обмен прошел удачно.
Я имел горький опыт когда программист сделал такой обмен между 2мя базами, даже придумал какой то самописный механизм с номерами сообщений (правда он норм не работа). В итоге он уволился, а обмен так норм и не работал. Пришлось все переделывать. А причина всего этого была в том, что ему было лень разобраться как сделать онлайн обмен с помощью БСП.
Drivingblind; +1 Ответить
4. rawlik 17 28.08.17 15:28 Сейчас в теме
(3) Номера сообщений отправляются и принимаются через другие "костыли" - а за "переписывать всё" клиент совсем не готов платить если всё вдруг работает стабильно и без БСП. Я же не "Робин гуд" от 1С )).
5. Johney20 25.06.18 08:49 Сейчас в теме
Подскажите, вот я пытаюсь реализовать Вашу разработку для обмена между ЗУП-СУМД. У меня проблема с пунктом 2 (скрины приложила). Я уже писала по-разному:

ВыгрузитьПоПравилу(УдаляемаяЗапись,,Параметры,,"РегистрСведений.КадроваяИсторияСотрудников");

ВыгрузитьПоПравилу(УдаляемаяЗапись,,Параметры,,"РегистрыСведений.КадроваяИсторияСотрудников");

ВыгрузитьПоПравилу(УдаляемаяЗапись,,Параметры,,"РегистрСведенийЗапись.КадроваяИсторияСотрудников");


но увы ошибка не исчезает. Что я не так делаю?? Вот полный код этого пункта:

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

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

УдаляемаяЗапись = УдаляемыеЗаписи.Добавить();
УдаляемаяЗапись.Активность = Ложь;
Параметры = Новый Структура("Удаление",Истина);
Пока Выборка.Следующий() Цикл
    Запись = Выборка.Получить();                
    
    Для Каждого ЭлОтб Из Запись.Отбор Цикл
        Имя = ЭлОтб.Имя;
        УдаляемаяЗапись[Имя] = ЭлОтб.Значение;
    КонецЦикла;  

    Запись.Прочитать();
    Если Запись.Количество()=0 Тогда
        ВыгрузитьПоПравилу(УдаляемаяЗапись,,Параметры,,"РегистрСведений.КадроваяИсторияСотрудников");
    КОнецЕсли;
КонецЦикла; 
Показать
Прикрепленные файлы:
6. Johney20 25.06.18 09:25 Сейчас в теме
(5) так же попробовала так:

ВыгрузитьПоПравилу(УдаляемаяЗапись,,Параметры,,"КадроваяИсторияСотрудников");
7. rawlik 17 19.09.18 12:06 Сейчас в теме
(6)
Извините что так долго, не заходил на сайт всё это время.

1. Можете ли вы проверить в XML файле есть ли соответствующие записи ?
2. Реализован в правилах обработчик "После загрузки" ? - Именно он и удаляет эти записи.
8. serpanik 18.01.19 18:41 Сейчас в теме
А что за зверь typesIsStructure? никак не могу найти описание. :( А то ошибка выскакивает, а я не могу понять в чем дело.
10. DIDE 18.11.21 16:32 Сейчас в теме
(8) Не уверен, но предполагаю что это должно быть ЗначениеЗаполнено(ВходящиеДанные)
11. DIDE 22.11.21 11:09 Сейчас в теме
(10)Точнее проверка на тип структуры ТипЗнч(ВходящиеДанные) = Тип("Структура")
9. Akuji 22 14.11.21 20:14 Сейчас в теме
"2. В коде перед вызовом метода "ОбработкаОбмена.ВыполнитьВыгрузку()" я добавил строчку кода:

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

Без этот я никак не смог решить эту задачу ."

Не нашел такой строчки "В коде перед вызовом метода "ОбработкаОбмена.ВыполнитьВыгрузку()""
Это где смотреть?
12. franceman 29.09.23 15:36 Сейчас в теме
Дополню попутной информацией. В моем случае обмен шел по пути база 1 -> база 2 -> база 3.
В базе 1 очищение привязки номенклатуры к цене в регистре сведений.
В базе 2 удаление записи регистра в обработчике ПослеЗагрузки ПКО целевого регистра (цена без привязки к номенклатуре считается ненужной в базе 2). + регистрация к обмену. пустого набора с отборами для последующего удаления в базе 3 (механизм регистрации в статье https://forum.infostart.ru/forum15/topic181905/)

Так как я записи удалял уже на этапе загрузки в базу 2, то п.2 описания в статье не делал, а п.3 поместил в обработчик ПередОбработкой в правило выгрузки данных регистра. В п. 1 в обработчике ПередВыгрузкой, чтобы корректно выгружались "живые" записи следующий код (по умолчанию значение параметра Ложь):
Значение = Ложь;

Если ВходящиеДанные <> Неопределено Тогда
     ВходящиеДанные.Свойство("Удаление", Значение);
КонецЕсли;
13. bxMax 25.01.24 09:08 Сейчас в теме
Спасибо из 2024! Случайно поалась статейка. Как раз в списке отложенных задач у меня числится решение этого ребуса. Точно сэкономил пару часов!
14. Borey 30.09.25 16:41 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация