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

03.03.23

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

25080 руб.

12.06.2017    138319    764    292    

405

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

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

45650 руб.

04.08.2015    162991    371    273    

360

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

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

28000 руб.

15.12.2021    21912    144    40    

104

Перенос данных 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 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

45650 руб.

15.04.2019    70483    174    146    

117

Перенос данных 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.227.x), ERP 2.5 (2.5.16.x), КА 2.5 (2.5.16.x) .

28000 руб.

24.06.2020    62449    51    27    

81

SALE! %

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

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

45650 27000 руб.

24.04.2015    192605    143    241    

274

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

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

39500 руб.

25.02.2015    169822    294    253    

374

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

14580 руб.

18.02.2016    184666    573    509    

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

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