Как выборочно обновить реквизиты документа из копии базы 1С без создания лишних объектов

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Метод 1: Использование конфигурации «Конвертация данных 2.0»

Если мы решили использовать Конвертацию данных (КД 2.0), основной проблемой становится автоматическое создание правил для всех связанных объектов. Разберем по шагам, как настроить правила так, чтобы обновить только нужный документ.

1. Настройка ПКО (Правила конвертации объекта)

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

2. Настройка поиска по идентификатору

Поскольку мы работаем с базой и её точной копией, объекты в них имеют одинаковые внутренние идентификаторы (GUID). Проанализируем настройки на вкладке «Настройки поиска» в ПКО. Нам необходимо:

  1. Установить флаг «Поиск по внутреннему идентификатору».
  2. Снять все остальные флаги поиска (по коду, наименованию и т.д.), так как поиск по GUID является самым надежным в данном случае.
  3. Установить флаг «Не создавать новый объект в приемнике, если он не найден». Это критически важная настройка: если вдруг документа в базе нет, мы не хотим, чтобы он создался «пустым» или некорректным.

3. Групповое изменение правил

Если правил (ПКС) создано много и нужно для всех разом проставить настройки, воспользуемся встроенным инструментом «Групповая обработка правил синхронизации». Разберем, как это помогает: мы можем выделить все нужные ПКС и массово снять флаг Замещать для тех полей, которые мы трогать не хотим, или наоборот, установить его только для целевых реквизитов.

4. Обработка ссылочных реквизитов

Выясним причину, по которой КД создает «половину конфигурации». Это происходит из-за рекурсивной обработки ссылок. Чтобы этого избежать, для ссылочных полей в ПКС (например, Контрагент или Склад) можно не указывать правило конвертации. Если в ПКС не выбрано ПКО, система просто попытается найти объект в приемнике по GUID. Если объект там уже есть, ссылка «встанет» на место. Если нет — поле останется пустым, но новый справочник создан не будет.

Метод 2: Использование обработки «ВыгрузкаЗагрузкаДанныхXML»

Многие опасаются использовать стандартную обработку ВыгрузкаЗагрузкаДанныхXML, считая, что она создаст дубли. Однако, проанализируем механизм её работы: она работает строго по внутренним идентификаторам. Если базы идентичны (копия и оригинал), GUID объектов совпадают, и дублирования не произойдет — данные просто перезапишутся.

Пошаговый алгоритм работы с обработкой:

  1. Запускаем обработку в базе-копии (источнике).
  2. Находим в списке метаданных нужный тип документа.
  3. Настраиваем отбор (например, по конкретной ссылке или периоду), чтобы не выгружать лишнего.
  4. Самое важное: снимаем флаг «Выгружать с объектами по ссылкам» (или «При необходимости»). Это предотвратит рекурсивную выгрузку всех связанных справочников. Будет выгружен только «скелет» документа с идентификаторами его реквизитов.
  5. Выполняем выгрузку в файл.
  6. В целевой базе запускаем эту же обработку на вкладке «Загрузка» и выбираем файл.

Этот способ гораздо быстрее настройки правил в КД, если нам нужно просто восстановить документ целиком «как был» в копии, при условии, что все справочники в обеих базах синхронизированы по GUID.

Тонкая настройка через обработчики событий (для продвинутых задач)

Если задача требует программной логики (например, обновить реквизит только если он в приемнике равен определенному значению), рассмотрим использование обработчиков событий в КД 2.0.

В ПКО документа в событии ПередЗагрузкой мы можем написать следующий код, чтобы проверить наличие объекта:


// Проверим, существует ли объект в базе
Если ОбъектМодифицирован Тогда
    // Здесь можно выполнить дополнительные проверки
    // Например, если мы не хотим создавать новый объект:
    Если Объект.ЭтоНовый() Тогда
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;

А в конкретном ПКС в событии ПередЗагрузкой можно управлять замещением значения:


// Загружать значение только в том случае, если текущее поле в приемнике пустое
Если ЗначениеЗаполнено(Объект[ИмяПВЗ]) Тогда
    Игнорировать = Истина;
КонецЕсли;

Итоги и рекомендации

Подводя итог, выберем оптимальную стратегию:

Помните, что перед любыми операциями по загрузке данных в рабочую базу необходимо сделать резервную копию. Даже самый надежный механизм поиска по GUID может привести к нежелательным результатам, если структура данных в базах успела значительно разойтись.

← На главную