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

28.08.17

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

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

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

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

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

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

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

 

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

См. также

SALE! 10%

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

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

55778 50200 руб.

04.08.2015    177233    392    291    

414

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    151609    880    302    

458

SALE! 10%

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

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

55778 50200 руб.

15.04.2019    78265    210    161    

149

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 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" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    177536    324    273    

393

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

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16260 руб.

18.02.2016    194393    633    540    

548

SALE! 10%

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

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    41244    116    74    

110

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам.

55778 50200 руб.

24.04.2015    202512    167    248    

292

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.250.x), ERP 2.5 (2.5.22.x), КА 2.5 (2.5.22.x).

38000 34200 руб.

24.06.2020    67195    90    28    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Pervuy 65 28.08.17 14:49 Сейчас в теме
Странно конечно. Когда удаляется набор записей РС то в плане обмена эта запись все равно регистрируется. по полям основного отбора. и при выгрузке выгружается пустой набор записей с полями отбора. когда приходит в другую базу то там должен создаваться набор записей по этим полям и записываться. а все мы знаем, что если создать набор записей, установить отборы и записать его. то он затрет все записи в РС по этим отборам. почему у вас такое не происходило трудно сказать. Но в теории должно так работать.
2. rawlik 17 28.08.17 15:12 Сейчас в теме
(1)
Обработка "Универсальный обмен данными в формате XML" пропускает записи удаления и пустые записи регистров, и они не попадают в узел получатель ( в другую базу).
Можно конечно изменить алгоритмы в обработке, но это уже другое решение этой же проблемы.
3. Pervuy 65 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! Случайно поалась статейка. Как раз в списке отложенных задач у меня числится решение этого ребуса. Точно сэкономил пару часов!
Для отправки сообщения требуется регистрация/авторизация