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

03.03.23

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также.

SALE! 15%

Перенос данных 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    137332    750    292    

399

Перенос данных 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    161895    365    272    

357

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

34650 руб.

15.04.2019    69762    172    143    

113

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

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

28000 руб.

23.07.2020    47902    207    64    

169

Перенос данных 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    184028    571    509    

514

Перенос данных 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 (правила конвертации данных)

45650 руб.

31.10.2014    233558    91    329    

299

Перенос данных 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    61967    47    27    

78

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

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

43450 руб.

03.12.2020    34987    84    59    

82
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. TMV 14 04.03.23 11:10 Сейчас в теме
1. Зачем нужна ТЗ Строки, если она буквально копия ТЗ ТаблицаВыгрузки?
2. Зачем условие на тип документа?
4. tambu 67 06.03.23 13:12 Сейчас в теме
(1)
1.Виноват, прошляпил. Осталось от экспериментов.
2. Для надежности, вдруг этот флаг будет задействован в других документах.
6. TMV 14 07.03.23 07:18 Сейчас в теме
(4)2. так наоборот же, сразу и для других типов документов флаг перекочует.
7. tambu 67 07.03.23 09:59 Сейчас в теме
(6) Там в правилах регистрации есть отбор, выгружаются только определенные доп. сведения. Если этот флаг для других документов понадобится, нужно будет принимать решение - пойдет он по обычной ветке доп. сведений или по ветке статусов. Сейчас задача заполнять статусы именно для документов реализации, остальное пускаем по обычной ветке.
2. TMV 14 04.03.23 11:12 Сейчас в теме
ОФФтоп. Какие функции выполняет у вас Архитектор?
5. tambu 67 06.03.23 13:21 Сейчас в теме
(2) У нас работа построена так, что разработчики могут быть привлечены на любую конфигурацию и на любой проект. Соответственно архитектора - хранители знаний. Их работа - хорошо знать конфигурацию с учетом всех наших проектных изменений и не допускать архитектурных ошибок, которые могут предложить проектные команды.
3. quazare 3706 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 Сейчас в теме
Очень интересная статья.
Я искал как отказаться от выгрузке записи независимого регистра сведений, если запись была удалена, и не смог оторваться от статьи, пока не прочитал до конца
Оставьте свое сообщение