В процессе работы с базами 1С часто возникает ситуация, когда в рабочей базе данные были повреждены или изменены ошибочно, но при этом имеется актуальная копия базы, где эти данные верны. Наша задача — не просто заменить документ целиком (что может привести к потере других, уже корректных правок), а «подтянуть» только определенные реквизиты. При этом крайне важно избежать «раздувания» конфигурации и создания дублей справочников. Рассмотрим, как это сделать правильно, используя два основных инструмента: Конвертацию данных 2.0 и универсальную обработку ВыгрузкаЗагрузкаДанныхXML.
Если мы решили использовать Конвертацию данных (КД 2.0), основной проблемой становится автоматическое создание правил для всех связанных объектов. Разберем по шагам, как настроить правила так, чтобы обновить только нужный документ.
1. Настройка ПКО (Правила конвертации объекта)
Для начала создадим ПКО для нашего документа (например, РеализацияТоваровУслуг). Когда система предложит «Синхронизировать свойства автоматически», выберем вариант «Нет». Это позволит нам вручную указать только те поля, которые мы хотим перенести. Если мы нажмем «Да», система создаст ПКС (Правила конвертации свойств) для всех реквизитов, включая ссылочные, и начнет тянуть за собой всю структуру метаданных.
2. Настройка поиска по идентификатору
Поскольку мы работаем с базой и её точной копией, объекты в них имеют одинаковые внутренние идентификаторы (GUID). Проанализируем настройки на вкладке «Настройки поиска» в ПКО. Нам необходимо:
GUID является самым надежным в данном случае.3. Групповое изменение правил
Если правил (ПКС) создано много и нужно для всех разом проставить настройки, воспользуемся встроенным инструментом «Групповая обработка правил синхронизации». Разберем, как это помогает: мы можем выделить все нужные ПКС и массово снять флаг Замещать для тех полей, которые мы трогать не хотим, или наоборот, установить его только для целевых реквизитов.
4. Обработка ссылочных реквизитов
Выясним причину, по которой КД создает «половину конфигурации». Это происходит из-за рекурсивной обработки ссылок. Чтобы этого избежать, для ссылочных полей в ПКС (например, Контрагент или Склад) можно не указывать правило конвертации. Если в ПКС не выбрано ПКО, система просто попытается найти объект в приемнике по GUID. Если объект там уже есть, ссылка «встанет» на место. Если нет — поле останется пустым, но новый справочник создан не будет.
Многие опасаются использовать стандартную обработку ВыгрузкаЗагрузкаДанныхXML, считая, что она создаст дубли. Однако, проанализируем механизм её работы: она работает строго по внутренним идентификаторам. Если базы идентичны (копия и оригинал), GUID объектов совпадают, и дублирования не произойдет — данные просто перезапишутся.
Пошаговый алгоритм работы с обработкой:
Этот способ гораздо быстрее настройки правил в КД, если нам нужно просто восстановить документ целиком «как был» в копии, при условии, что все справочники в обеих базах синхронизированы по GUID.
Если задача требует программной логики (например, обновить реквизит только если он в приемнике равен определенному значению), рассмотрим использование обработчиков событий в КД 2.0.
В ПКО документа в событии ПередЗагрузкой мы можем написать следующий код, чтобы проверить наличие объекта:
// Проверим, существует ли объект в базе
Если ОбъектМодифицирован Тогда
// Здесь можно выполнить дополнительные проверки
// Например, если мы не хотим создавать новый объект:
Если Объект.ЭтоНовый() Тогда
Отказ = Истина;
КонецЕсли;
КонецЕсли;
А в конкретном ПКС в событии ПередЗагрузкой можно управлять замещением значения:
// Загружать значение только в том случае, если текущее поле в приемнике пустое
Если ЗначениеЗаполнено(Объект[ИмяПВЗ]) Тогда
Игнорировать = Истина;
КонецЕсли;
Подводя итог, выберем оптимальную стратегию:
ПКО только для нужного документа, вручную добавляем только необходимые ПКС и обязательно отключаем создание новых объектов в настройках поиска.Помните, что перед любыми операциями по загрузке данных в рабочую базу необходимо сделать резервную копию. Даже самый надежный механизм поиска по GUID может привести к нежелательным результатам, если структура данных в базах успела значительно разойтись.