Нюансы Конвертации данных 2.1, или как небольшая задача привела нас к восстановлению регистра сведений из нескольких миллионов строк

03.03.23

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

Описаны некоторые нюансы применения процедур ВыгрузитьПоПравилу() и ВыгрузитьРегистр() при написании правил для синхронизации в конфигурациях, основанных на БСП.

Цель данной статьи – оставить «зарубку на память» об использовании функций ВыгрузитьПоПравилу() и ВыгрузитьРегистр(). И уберечь читателей от «граблей», на которые мы наступили.

На днях поступила задача добавить в действующий обмен между ЕРП и Управлением холдингом флаг «документ подписан» для документов реализации. Анализ показал, что в ЕРП флаг хранится в регистре сведений «Дополнительные сведения», а в УХ этот флаг устанавливается в регистре сведений «Статусы документов».

Архитектор оценил работу в 4 часа с запасом. Ведь выглядело всё банально – добавить условие в правила регистрации и создать ПКО для конвертации из дополнительных сведений в регистр «Статусы документов».

Далее разработчик взялся за дело. Первый вариант реализации включал замечательную функцию ВыгрузитьПоПравилу(). Так как источником данных был РС.ДополнительныеСведения, то нам нужно было разделить передачу нашего флага и других доп. сведений, которые мигрировали в РС.ДополнительныеСведения приемника один-в-один. В результате в обработчике «Перед выгрузкой» в старом ПКО, передающем дополнительные сведения был добавлен такой код:

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

На всякий случай в ПКО «ДополнительныеСведенияСтатусыДокументов» также было добавлено условие:

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

Таким образом мы гарантировали себе, что ни при каких условиях наше ПКО не сработает, кроме нужного нам случая.

Этот код замечательно работал, когда разработчик тестировал обмен при помощи обработки «Универсальная выгрузка в формате XML». Однако, стоило добавить правила обмена в настроенную синхронизацию данных, как посыпались ошибки. Как разработчик не бился, заставить работать «ВыгрузитьПоПравилу» для регистров сведений не удалось. Гугл и инфостарт подсказали заменить «ВыгрузитьПоПравилу» на «ВыгрузитьРегистр», что и было проделано. С чем были связаны ошибки осталось не исследованным. Возможно дело в новых редакциях БСП, а может в принципе эта функция не работает с регистрами. Этот вопрос я оставлю открытым, если знаете – напишите в комментариях, для будущих читателей будет полезно.

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

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

СтрокаОтбора = Отбор.Добавить();
СтрокаОтбора.Имя = "Объект";
СтрокаОтбора.Значение = Объект.Отбор.Объект.Значение;
СтрокаОтбора.Использование = Истина;

СтрокаОтбора = Отбор.Добавить();
СтрокаОтбора.Имя = "Свойство";
СтрокаОтбора.Значение = Объект.Отбор.Свойство.Значение;
СтрокаОтбора.Использование = Истина;

Строки = Новый ТаблицаЗначений;
Строки.Колонки.Добавить("Объект");
Строки.Колонки.Добавить("Свойство");
Строки.Колонки.Добавить("Значение");

ТаблицаВыгрузки = Объект.Выгрузить();

Для Каждого СтрокаВыгрузки Из ТаблицаВыгрузки Цикл
	
	Строка = Строки.Добавить();
	ЗаполнитьЗначенияСвойств(Строка, СтрокаВыгрузки);
	
КонецЦикла;

Набор= Новый Структура("Отбор, Строки");
Набор.Отбор = Отбор;
Набор.Строки = Строки;

ВыгрузитьРегистр(Набор,,,,"ДополнительныеСведения"); //этим ПКО выгружаются все доп. сведения, кроме нашего

ВыгрузитьРегистр(Набор,,,,"ДополнительныеСведенияСтатусыДокументов"); //а это правило выгружает доп.сведения в статусы документов, там настроен отказ для всего, кроме нашего флага

Отказ = Истина;

Казалось, что мы все предусмотрели и наряд был передан на тестирование. Тестировщик проверил установку флага для новых документов, для ранее выгруженных документов, повторную установку и снятие флага. Все работало как часы. Мы провели демонстрацию работы для архитектора и тех. поддержки и, с чистой совестью, отдали правила на внедрение в рабочие базы.

Прошло несколько дней и стали поступать жалобы от пользователей, что нужный нам флаг стал пропадать. Пользователи устанавливали его повторно, но после обмена флаг вновь очищался. Заглянув в регистр «Статусы документов» тех. поддержка пришла в ужас и был вызван разработчик – регистр был абсолютно пуст. Все данные, накопленные за несколько лет работы остались только в бэкапах (Да, у нас были бэкапы. Наверное, благодаря им я могу написать эту заметку, а не занимаюсь поиском новой работы).

Заглянув в файл данных обмена, разработчик сразу всё понял:

+ <НаборЗаписейРегистра Нпп="27" Тип="РегистрСведенийНаборЗаписей.ДополнительныеСведения" ИмяПравила="ДополнительныеСведения">
- <НаборЗаписейРегистра Нпп="33" Тип="РегистрСведенийНаборЗаписей.СтатусыДокументов" ИмяПравила="ДополнительныеСведенияСтатусыДокументов">
  <Отбор /> 
  <СтрокиНабораЗаписей /> 
  </НаборЗаписейРегистра>
  </ФайлОбмена>

Получается, что при тестировании мы не прогнали один сценарий – когда в выгруженных данных присутствуют доп. сведения, но нет ни одного «нашего» флага. Злую шутку сыграла особенность работы процедуры ВыгрузитьРегистр – она создает XML узел для регистра сведений с отбором по выгружаемым данным. Однако, если в ПКО сработает отказ от выгрузки, узел все равно будет создан, но отбор будет пустым. Далее, при загрузке, отбираются все записи регистра (отбор то пустой) и благополучно перезаписываются нашим, пустым набором данных.

Как итог, пришлось восстанавливать из бэкапа несколько миллионов записей регистра «Статусы документов», а в ПВД были внесены буквально пара строк для исправления ошибки.

 
 Правильный вариант ПВД с исправлением ошибки

P.S. Коллеги, узнавшие себя, вам большой привет!

P.P.S. Конечно, перед загрузкой в рабочие базы должно было быть проведено полноценное тестирование на копиях баз (а ещё лучше сценарные тесты). Но, как обычно - сроки, загруженность сотрудников, задача нужна ещё вчера...

Конвертация данных 2 Конвертация данных Конвертация данных 2.1 ВыгрузитьПоПравилу ВыгрузитьРегистр ВыгрузитьПоПравилу() ВыгрузитьРегистр()

См. также

SALE! 20%

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

26280 22338 руб.

12.06.2017    141670    799    297    

420

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    166608    333    278    

374

SALE! 10%

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

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

35000 31500 руб.

15.12.2021    24113    169    51    

128

SALE! 10%

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

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

35000 31500 руб.

23.07.2020    51386    228    70    

186

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    72142    181    150    

123

SALE! 10%

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

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56249    59    105    

61

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    171243    303    257    

378

SALE! 15%

Перенос данных 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, почту.

15300 13005 руб.

18.02.2016    186948    590    509    

527
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. TMV 14 04.03.23 11:10 Сейчас в теме
1. Зачем нужна ТЗ Строки, если она буквально копия ТЗ ТаблицаВыгрузки?
2. Зачем условие на тип документа?
4. tambu 70 06.03.23 13:12 Сейчас в теме
(1)
1.Виноват, прошляпил. Осталось от экспериментов.
2. Для надежности, вдруг этот флаг будет задействован в других документах.
6. TMV 14 07.03.23 07:18 Сейчас в теме
(4)2. так наоборот же, сразу и для других типов документов флаг перекочует.
7. tambu 70 07.03.23 09:59 Сейчас в теме
(6) Там в правилах регистрации есть отбор, выгружаются только определенные доп. сведения. Если этот флаг для других документов понадобится, нужно будет принимать решение - пойдет он по обычной ветке доп. сведений или по ветке статусов. Сейчас задача заполнять статусы именно для документов реализации, остальное пускаем по обычной ветке.
2. TMV 14 04.03.23 11:12 Сейчас в теме
ОФФтоп. Какие функции выполняет у вас Архитектор?
5. tambu 70 06.03.23 13:21 Сейчас в теме
(2) У нас работа построена так, что разработчики могут быть привлечены на любую конфигурацию и на любой проект. Соответственно архитектора - хранители знаний. Их работа - хорошо знать конфигурацию с учетом всех наших проектных изменений и не допускать архитектурных ошибок, которые могут предложить проектные команды.
3. quazare 3804 06.03.23 04:42 Сейчас в теме
Короче, по ощущению, запутались в собственных шнурках.…
cheshirshik; +1 1 Ответить
8. cheshirshik 70 09.03.23 12:39 Сейчас в теме
А вы выгрузку на тестовых базах делали или сразу зафигачили на продакт? От сюда наверняка и проблема с восстановлением регистра. Молодцы, что копии базы подняли и все восстановили. От ошибок никто не застрахован. Даже самые крутые архитекторы.

На счет КД 2.1. По статье не отвечу почему правила не работают. Чтобы понять, как работают на самом деле правила, надо погружаться в отладку, ведь по сути КД 2.1 - это просто обработки выгружающие и загружающие данные.
9. nayd 9 30.05.24 17:03 Сейчас в теме
Очень интересная статья.
Я искал как отказаться от выгрузке записи независимого регистра сведений, если запись была удалена, и не смог оторваться от статьи, пока не прочитал до конца
Оставьте свое сообщение