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

03.03.23

Интеграция - Обмен между базами 1C

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

SALE! 10%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

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

50722 45650 руб.

04.08.2015    160358    357    268    

349

SALE! 10%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 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    135641    730    291    

391

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 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 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

38500 34650 руб.

15.04.2019    68917    181    139    

111

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

15.12.2021    20666    136    38    

95

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

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

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

50722 45650 руб.

31.10.2014    232012    126    327    

297

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

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

48278 43450 руб.

03.12.2020    34483    83    58    

81

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

23.07.2020    46846    200    64    

162

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

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

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 руб.

10.07.2018    67818    41    123    

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

На счет КД 2.1. По статье не отвечу почему правила не работают. Чтобы понять, как работают на самом деле правила, надо погружаться в отладку, ведь по сути КД 2.1 - это просто обработки выгружающие и загружающие данные.
Оставьте свое сообщение