Как отключить создание новых объектов при переносе данных из 1С 8 в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Рассмотрим подробно причины возникновения этой проблемы и разберем практические способы доработки внешних обработок и правил конвертации для её полного устранения.

Выясним причины ошибки

Проанализируем механику работы флага «Не создавать новый, если не найден». При выгрузке данных из платформы 8.x конфигурация конвертации формирует XML-файл, в который добавляет атрибут НеСоздаватьЕслиНеНайден="true" для соответствующего узла ссылки:


<Ссылка Нпп="2" НеСоздаватьЕслиНеНайден="true">
    <Свойство Имя="Номер" Тип="Строка">
        <Значение>99999999999999999996</Значение>
    </Свойство>
</Ссылка>

Однако стандартный модуль загрузки, работающий в среде 1С 7.7, изначально содержит упрощенную логику и не всегда корректно реагирует на данный атрибут. В платформе 7.7 невыбранная или неинициализированная ссылка не является агрегатным типом данных. Когда загрузчик пропускает создание элемента, переменная Объект остается пустой. Если далее по тексту программы происходит попытка обратиться к свойствам или методам (например, проверка Объект.ПометкаУдаления или установка реквизитов), 7.7 генерирует ошибку «Значение не представляет агрегатный объект».

Способ 1. Доработка процедур загрузки в 1С 7.7

Посмотрим на решение, предложенное при исправлении обработки загрузки в 1С 7.7. Нам потребуется внести изменения в процедуры чтения и записи объектов. Разберем по шагам, какие именно правки нужно внести:

  1. Блокировка создания и замещения в процедуре загрузки справочника. В процедуре ЗагрузитьОбъектСправочникаV8 для нужного вида справочника (например, БанковскиеСчета) принудительно устанавливаем флаги отмены создания и обновления:
    
    Если Вид = "БанковскиеСчета" Тогда
        НовыеНеСоздавать = 1;
        НеЗамещать = 1;
    КонецЕсли;
    
  2. Проверка перед записью объекта. В процедуре ЗаписатьОбъект добавляем условие, предотвращающее запись непроведенных или невыбранных элементов целевого справочника:
    
    Если Вид = "БанковскиеСчета" Тогда
        // Заглушка: пропускаем запись элемента
        Возврат;
    КонецЕсли;
    
  3. Защита от сбоев при снятии/установке пометки удаления. Если в обработке выполняется удаление или проверка статуса пометки, обращение к объекту обязано оборачиваться проверкой Выбран() = 1 или блоком обработки исключений:
    
    Попытка
        Если Объект.Выбран() = 1 Тогда
            // Безопасная работа с атрибутами
            Пометка = Объект.ПометкаУдаления;
        КонецЕсли;
    Исключение
        // Исключаем аварийное завершение работы при пустом объекте
    КонецПопытки;
    

Способ 2. Программная проверка существования объекта в ПКС

Если нет возможности редактировать внешнюю обработку загрузки на стороне 7.7, проблему можно решить на стороне базы-источника или в правилах конвертации свойств (ПКС).

Рассмотрим подход, при котором поиск объекта выполняется средствами встроенного языка. В правилах конвертации для реквизита вместо стандартного флага создания настраивается алгоритм поиска. Если элемент не найден по коду или ИНН/КПП в базе-приемнике, значение реквизита просто сбрасывается в пустую ссылку. Таким образом, в XML не передается команда на создание нового объекта.

Способ 3. Двухэтапный перенос данных

Для сложных информационных баз с бешеными денежными оборотами и высокой ответственностью за целостность данных рекомендуется использовать двухэтапную схему:**

  1. Первый этап: Выполняется выгрузка и синхронизация исключительно справочников. Все отсутствующие элементы сопоставляются или вводятся вручную ответственными пользователями в базе 7.7.
  2. Второй этап: Переносятся только документы. В правилах конвертации свойств выгрузка подчиненных справочников отключается, а поисковые правила настраиваются строго без права создания новых элементов.

Применение описанных доработок позволяет полностью исключить дублирование справочников и избавиться от критических ошибок при загрузке данных из 1С 8 в платформу 7.7.

← На главную