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

28.08.17

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

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

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

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

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

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

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

 

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Перенос данных 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 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

58000 руб.

04.08.2015    190737    460    307    

460

Перенос данных 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" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    189917    369    292    

426

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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    162274    980    324    

483

Перенос данных 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 | Можно проверить на вашем сервере перед покупкой

58000 руб.

15.04.2019    85475    229    180    

166

SALE! 10%

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

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    35029    261    64    

199

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

Перенос данных из УПП 1.3 в УНФ | из КА 1.1 в УНФ | из УТ 10.3 в УНФ | Перенос разработан в формате КД 2 (правила конвертации объектов) | Выгружаются все возможные виды документов, начальных остатков и вся нормативно-справочная информация | Есть фильтр по организациям при выгрузке данных | Есть несколько алгоритмов выгрузки начальных остатков товаров на выбор | Можно проверить перед покупкой на своем сервере!

58000 руб.

17.10.2019    45162    60    117    

62

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

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

50600 руб.

21.05.2019    59027    81    134    

73

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

85400 руб.

05.10.2022    13962    16    8    

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